Skip to content

Commit b326faa

Browse files
authored
Only add an explicit dependency on an existing resource when the deployments engine will use the GET response (#15693)
Resolves #13674 Resolves #15686 This PR reapplies the change from #15447 now that the bug in indexing expression traversal is fixed. ###### Microsoft Reviewers: [Open in CodeFlow](https://microsoft.github.io/open-pr/?codeflow=https://github.com/Azure/bicep/pull/15693)
1 parent e29cbf1 commit b326faa

File tree

34 files changed

+217
-260
lines changed

34 files changed

+217
-260
lines changed

src/Bicep.Core.IntegrationTests/Emit/DependencyInferenceTests.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ public void Implicit_dependencies_on_existing_resource_identifying_properties_ar
240240
""");
241241

242242
result.ExcludingLinterDiagnostics().Should().NotHaveAnyDiagnostics();
243-
result.Template.Should().HaveJsonAtPath("$.resources.newSa.dependsOn", """["existingSa"]""");
243+
result.Template.Should().HaveJsonAtPath("$.resources.newSa.dependsOn", """["deployedSa"]""");
244244
result.Template.Should().HaveJsonAtPath("$.resources.existingSa.dependsOn", """["deployedSa"]""");
245245
}
246246

@@ -279,7 +279,7 @@ public void Implicit_dependencies_on_existing_resource_collection_identifying_pr
279279
""");
280280

281281
result.ExcludingLinterDiagnostics().Should().NotHaveAnyDiagnostics();
282-
result.Template.Should().HaveJsonAtPath("$.resources.newSa.dependsOn", """["[format('existingSa[{0}]', 0)]"]""");
282+
result.Template.Should().HaveJsonAtPath("$.resources.newSa.dependsOn", """["deployedSa"]""");
283283
result.Template.Should().HaveJsonAtPath("$.resources.existingSa.dependsOn", """["deployedSa"]""");
284284
}
285285

@@ -316,7 +316,7 @@ public void Existing_resource_function_calls_are_expressed_as_direct_dependencie
316316
""");
317317

318318
result.ExcludingLinterDiagnostics().Should().NotHaveAnyDiagnostics();
319-
result.Template.Should().HaveJsonAtPath("$.resources.newSa.dependsOn", """["existingSa"]""");
319+
result.Template.Should().HaveJsonAtPath("$.resources.newSa.dependsOn", """["deployedSa"]""");
320320
result.Template.Should().HaveJsonAtPath("$.resources.existingSa.dependsOn", """["deployedSa"]""");
321321
}
322322

@@ -353,7 +353,7 @@ public void Existing_resource_collection_function_calls_are_expressed_as_direct_
353353
""");
354354

355355
result.ExcludingLinterDiagnostics().Should().NotHaveAnyDiagnostics();
356-
result.Template.Should().HaveJsonAtPath("$.resources.newSa.dependsOn", """["[format('existingSa[{0}]', 0)]"]""");
356+
result.Template.Should().HaveJsonAtPath("$.resources.newSa.dependsOn", """["deployedSa"]""");
357357
result.Template.Should().HaveJsonAtPath("$.resources.existingSa.dependsOn", """["deployedSa"]""");
358358
}
359359

@@ -394,7 +394,7 @@ public void Using_an_existing_resource_as_an_explicit_parent_does_not_generate_a
394394
""");
395395

396396
result.ExcludingLinterDiagnostics().Should().NotHaveAnyDiagnostics();
397-
result.Template.Should().HaveJsonAtPath("$.resources.sa.dependsOn", """["subnet"]""");
397+
result.Template.Should().NotHaveValueAtPath("$.resources.sa.dependsOn");
398398
}
399399

400400
[DataTestMethod]
@@ -436,7 +436,7 @@ public void Non_looped_resource_depending_on_looped_existing_resource_should_dep
436436

437437
if (useSymbolicNameCodegen)
438438
{
439-
result.Template.Should().HaveJsonAtPath("$.resources.vault.dependsOn", """["subnets"]""");
439+
result.Template.Should().HaveJsonAtPath("$.resources.vault.dependsOn", """["vnets"]""");
440440
}
441441
else
442442
{
@@ -485,7 +485,7 @@ public void Looped_resource_depending_on_looped_existing_resource_should_depend_
485485
{
486486
result.Template.Should().HaveJsonAtPath(
487487
"$.resources.vault.dependsOn",
488-
"""["[format('subnets[{0}]', sub(range(10, 10)[copyIndex()], 10))]"]""");
488+
"""["[format('vnets[{0}]', mod(range(0, 10)[sub(range(10, 10)[copyIndex()], 10)], 2))]"]""");
489489
}
490490
else
491491
{
@@ -538,7 +538,7 @@ public void Looped_resource_depending_on_looped_variable_should_depend_on_transi
538538
{
539539
result.Template.Should().HaveJsonAtPath(
540540
"$.resources.vault.dependsOn",
541-
"""["[format('subnets[{0}]', sub(range(20, 10)[sub(range(10, 10)[copyIndex()], 10)], 20))]"]""");
541+
"""["[format('vnets[{0}]', mod(range(0, 10)[sub(range(20, 10)[sub(range(10, 10)[copyIndex()], 10)], 20)], 2))]"]""");
542542
}
543543
else
544544
{
@@ -587,7 +587,7 @@ public void CopyIndex_only_appears_in_compiled_expression_if_all_links_in_chain_
587587

588588
if (useSymbolicNameCodegen)
589589
{
590-
result.Template.Should().HaveJsonAtPath("$.resources.vault.dependsOn", """["[format('subnets[{0}]', sub(range(10, 10)[copyIndex()], 10))]"]""");
590+
result.Template.Should().HaveJsonAtPath("$.resources.vault.dependsOn", """["[format('vnets[{0}]', 0)]"]""");
591591
}
592592
else
593593
{
@@ -636,7 +636,7 @@ public void CopyIndex_only_appears_in_compiled_expression_if_all_links_in_chain_
636636

637637
if (useSymbolicNameCodegen)
638638
{
639-
result.Template.Should().HaveJsonAtPath("$.resources.vault.dependsOn", """["[format('subnets[{0}]', 0)]"]""");
639+
result.Template.Should().HaveJsonAtPath("$.resources.vault.dependsOn", """["[format('vnets[{0}]', mod(range(0, 10)[0], 2))]"]""");
640640
}
641641
else
642642
{
@@ -699,6 +699,6 @@ public void Using_an_existing_resource_as_a_scope_does_not_generate_an_explicit_
699699
("empty.bicep", string.Empty));
700700

701701
result.ExcludingLinterDiagnostics().Should().NotHaveAnyDiagnostics();
702-
result.Template.Should().HaveJsonAtPath("$.resources.empty.dependsOn", """["rg"]""");
702+
result.Template.Should().NotHaveValueAtPath("$.resources.empty.dependsOn");
703703
}
704704
}

src/Bicep.Core.IntegrationTests/ScenarioTests.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5066,7 +5066,7 @@ public void Test_Issue10343()
50665066
"));
50675067

50685068
var evaluated = TemplateEvaluator.Evaluate(result.Template).ToJToken();
5069-
evaluated.Should().HaveValueAtPath("resources.foo3.dependsOn", new JArray("foo2"));
5069+
evaluated.Should().HaveValueAtPath("resources.foo3.dependsOn", new JArray("foo1"));
50705070
}
50715071

50725072
// https://github.com/Azure/bicep/issues/11292
@@ -6316,7 +6316,7 @@ public void Test_Issue13596(bool enableSymbolicNameCodegen)
63166316

63176317
if (enableSymbolicNameCodegen)
63186318
{
6319-
result.Template.Should().HaveJsonAtPath("$.resources.secret.dependsOn", """["sa"]""");
6319+
result.Template.Should().HaveJsonAtPath("$.resources.secret.dependsOn", """["mod"]""");
63206320
}
63216321
else
63226322
{
@@ -6478,7 +6478,7 @@ extension microsoftGraph
64786478
}
64796479

64806480
[TestMethod]
6481-
public void Test_Issue15686_repro()
6481+
public void Test_Issue15686()
64826482
{
64836483
var result = CompilationHelper.Compile("""
64846484
param eventSubscriptionName string
@@ -6525,7 +6525,6 @@ param functionName string
65256525
result.Template.Should().NotBeNull();
65266526
result.Template.Should().HaveJsonAtPath("$.resources.eventSubscription.dependsOn", """
65276527
[
6528-
"eventGridTopic",
65296528
"functionApp"
65306529
]
65316530
""");

src/Bicep.Core.Samples/Files/baselines/Modules_CRLF/main.symbolicnames.json

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"_generator": {
77
"name": "bicep",
88
"version": "dev",
9-
"templateHash": "12632249060210513106"
9+
"templateHash": "14846102413726496336"
1010
}
1111
},
1212
"parameters": {
@@ -1851,10 +1851,7 @@
18511851
}
18521852
}
18531853
}
1854-
},
1855-
"dependsOn": [
1856-
"kv"
1857-
]
1854+
}
18581855
},
18591856
"secureModule2": {
18601857
"type": "Microsoft.Resources/deployments",
@@ -1912,10 +1909,7 @@
19121909
}
19131910
}
19141911
}
1915-
},
1916-
"dependsOn": [
1917-
"scopedKv"
1918-
]
1912+
}
19191913
},
19201914
"secureModuleLooped": {
19211915
"copy": {
@@ -1977,11 +1971,7 @@
19771971
}
19781972
}
19791973
}
1980-
},
1981-
"dependsOn": [
1982-
"[format('loopedKv[{0}]', copyIndex())]",
1983-
"[format('loopedKv[{0}]', copyIndex())]"
1984-
]
1974+
}
19851975
},
19861976
"secureModuleCondition": {
19871977
"type": "Microsoft.Resources/deployments",
@@ -2024,10 +2014,7 @@
20242014
}
20252015
}
20262016
}
2027-
},
2028-
"dependsOn": [
2029-
"kv"
2030-
]
2017+
}
20312018
},
20322019
"withSpace": {
20332020
"type": "Microsoft.Resources/deployments",

src/Bicep.Core.Samples/Files/baselines/NestedResources_LF/main.symbolicnames.json

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"_generator": {
77
"name": "bicep",
88
"version": "dev",
9-
"templateHash": "9375757315581642416"
9+
"templateHash": "15846782372928243436"
1010
}
1111
},
1212
"parameters": {
@@ -82,10 +82,7 @@
8282
"existing": true,
8383
"type": "My.Rp/parentType/childType",
8484
"apiVersion": "2020-12-01",
85-
"name": "[format('{0}/{1}', 'existingParent', 'existingChild')]",
86-
"dependsOn": [
87-
"existingParent"
88-
]
85+
"name": "[format('{0}/{1}', 'existingParent', 'existingChild')]"
8986
},
9087
"conditionParent::conditionChild::conditionGrandchild": {
9188
"condition": "[and(and(parameters('createParent'), parameters('createChild')), parameters('createGrandchild'))]",
@@ -162,4 +159,4 @@
162159
"value": "loopChild"
163160
}
164161
}
165-
}
162+
}

src/Bicep.Core.Samples/Files/baselines/Resources_CRLF/main.symbolicnames.json

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"_generator": {
77
"name": "bicep",
88
"version": "dev",
9-
"templateHash": "12953345672979673276"
9+
"templateHash": "5924434758202725836"
1010
}
1111
},
1212
"parameters": {
@@ -407,7 +407,7 @@
407407
"scope": "[extensionResourceId(extensionResourceId(format('Microsoft.Compute/virtualMachines/{0}', 'vmName'), 'My.Rp/extensionResource', 'extension'), 'Mock.Rp/existingExtensionResource', 'existing1')]",
408408
"name": "existing2",
409409
"dependsOn": [
410-
"existing1"
410+
"extension1"
411411
]
412412
},
413413
"extension3": {
@@ -416,7 +416,7 @@
416416
"scope": "[extensionResourceId(extensionResourceId(format('Microsoft.Compute/virtualMachines/{0}', 'vmName'), 'My.Rp/extensionResource', 'extension'), 'Mock.Rp/existingExtensionResource', 'existing1')]",
417417
"name": "extension3",
418418
"dependsOn": [
419-
"existing1"
419+
"extension1"
420420
]
421421
},
422422
"storageResources": {
@@ -665,10 +665,7 @@
665665
"p3_child1": {
666666
"type": "Microsoft.Rp1/resource1/child1",
667667
"apiVersion": "2020-06-01",
668-
"name": "[format('{0}/{1}', 'res1', 'child1')]",
669-
"dependsOn": [
670-
"p3_res1"
671-
]
668+
"name": "[format('{0}/{1}', 'res1', 'child1')]"
672669
},
673670
"p4_res1": {
674671
"existing": true,
@@ -682,10 +679,7 @@
682679
"type": "Microsoft.Rp1/resource1/child1",
683680
"apiVersion": "2020-06-01",
684681
"scope": "/",
685-
"name": "[format('{0}/{1}', 'res1', 'child1')]",
686-
"dependsOn": [
687-
"p4_res1"
688-
]
682+
"name": "[format('{0}/{1}', 'res1', 'child1')]"
689683
},
690684
"sqlServer": {
691685
"type": "Microsoft.Sql/servers",

src/Bicep.Core.Samples/Files/user_submitted/101/api-management-modular/NameValues.symbolicnames.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"_generator": {
77
"name": "bicep",
88
"version": "dev",
9-
"templateHash": "11528852364160566097"
9+
"templateHash": "14248540637091011874"
1010
}
1111
},
1212
"parameters": {
@@ -56,10 +56,7 @@
5656
"secret": "[variables('apimNameValueSet')[copyIndex()].isSecret]",
5757
"value": "[variables('apimNameValueSet')[copyIndex()].value]",
5858
"tags": "[variables('apimNameValueSet')[copyIndex()].tags]"
59-
},
60-
"dependsOn": [
61-
"parentAPIM"
62-
]
59+
}
6360
}
6461
},
6562
"outputs": {

src/Bicep.Core.Samples/Files/user_submitted/101/api-management-modular/groups.symbolicnames.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"_generator": {
77
"name": "bicep",
88
"version": "dev",
9-
"templateHash": "403029788224868668"
9+
"templateHash": "6816770503491912011"
1010
}
1111
},
1212
"parameters": {
@@ -47,10 +47,7 @@
4747
"properties": {
4848
"displayName": "[variables('groupsSet')[copyIndex()].groupDisplayName]",
4949
"description": "[variables('groupsSet')[copyIndex()].groupDescription]"
50-
},
51-
"dependsOn": [
52-
"parentAPIM"
53-
]
50+
}
5451
}
5552
},
5653
"outputs": {

src/Bicep.Core.Samples/Files/user_submitted/101/api-management-modular/main.symbolicnames.json

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"_generator": {
77
"name": "bicep",
88
"version": "dev",
9-
"templateHash": "13726378283629199613"
9+
"templateHash": "2208926443863165998"
1010
}
1111
},
1212
"parameters": {
@@ -163,7 +163,7 @@
163163
"_generator": {
164164
"name": "bicep",
165165
"version": "dev",
166-
"templateHash": "403029788224868668"
166+
"templateHash": "6816770503491912011"
167167
}
168168
},
169169
"parameters": {
@@ -204,10 +204,7 @@
204204
"properties": {
205205
"displayName": "[variables('groupsSet')[copyIndex()].groupDisplayName]",
206206
"description": "[variables('groupsSet')[copyIndex()].groupDescription]"
207-
},
208-
"dependsOn": [
209-
"parentAPIM"
210-
]
207+
}
211208
}
212209
},
213210
"outputs": {
@@ -251,7 +248,7 @@
251248
"_generator": {
252249
"name": "bicep",
253250
"version": "dev",
254-
"templateHash": "8034218730798252475"
251+
"templateHash": "16793550498477002119"
255252
}
256253
},
257254
"parameters": {
@@ -301,10 +298,7 @@
301298
"email": "[variables('usersSet')[copyIndex()].email]",
302299
"state": "[variables('usersSet')[copyIndex()].state]",
303300
"note": "[variables('usersSet')[copyIndex()].notes]"
304-
},
305-
"dependsOn": [
306-
"parentAPIM"
307-
]
301+
}
308302
}
309303
}
310304
}
@@ -336,7 +330,7 @@
336330
"_generator": {
337331
"name": "bicep",
338332
"version": "dev",
339-
"templateHash": "11528852364160566097"
333+
"templateHash": "14248540637091011874"
340334
}
341335
},
342336
"parameters": {
@@ -386,10 +380,7 @@
386380
"secret": "[variables('apimNameValueSet')[copyIndex()].isSecret]",
387381
"value": "[variables('apimNameValueSet')[copyIndex()].value]",
388382
"tags": "[variables('apimNameValueSet')[copyIndex()].tags]"
389-
},
390-
"dependsOn": [
391-
"parentAPIM"
392-
]
383+
}
393384
}
394385
},
395386
"outputs": {

0 commit comments

Comments
 (0)