Skip to content

Commit b6c90d1

Browse files
authored
Add languageVersion 2.0 fields to AZR-000212 (Azure#2661)
* Add languageVersion fields to AZR-000212 fixes Azure#2660 * update changelog * Add tests
1 parent 9cd9b31 commit b6c90d1

File tree

4 files changed

+59
-7
lines changed

4 files changed

+59
-7
lines changed

docs/CHANGELOG-v1.md

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ See [upgrade notes][1] for helpful information when upgrading from previous vers
3232

3333
## Unreleased
3434

35+
- Updated rules:
36+
- Template file
37+
- Update `AZR-000212` to not fail with `languageVersion` 2.0 Templates
38+
3539
## v1.33.0-B0088 (pre-release)
3640

3741
What's changed since pre-release v1.33.0-B0053:

src/PSRule.Rules.Azure/rules/Azure.Template.Rule.ps1

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
Rule 'Azure.Template.TemplateFile' -Ref 'AZR-000212' -Type '.json' -If { (IsTemplateFile) } -Tag @{ release = 'GA'; ruleSet = '2020_06'; 'Azure.WAF/pillar' = 'Operational Excellence'; } {
1212
$jsonObject = $PSRule.GetContentFirstOrDefault($TargetObject);
1313
$Assert.HasFields($jsonObject, @('$schema', 'contentVersion', 'resources'));
14-
$jsonObject.PSObject.Properties | Within 'Name' '$schema', 'contentVersion', 'metadata', 'parameters', 'functions', 'variables', 'resources', 'outputs';
14+
$jsonObject.PSObject.Properties | Within 'Name' '$schema', 'languageVersion', 'contentVersion', 'definitions', 'metadata', 'parameters', 'functions', 'variables', 'resources', 'outputs';
1515
}
1616

1717
# Synopsis: Use a more recent version of the Azure template schema.

tests/PSRule.Rules.Azure.Tests/Azure.Template.Tests.ps1

+8-6
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Describe 'Azure.Template' -Tag 'Template' {
4848
# Pass
4949
$ruleResult = @($filteredResult | Where-Object { $_.Outcome -eq 'Pass' });
5050
$ruleResult | Should -Not -BeNullOrEmpty;
51-
$ruleResult.Length | Should -Be 4;
51+
$ruleResult.Length | Should -Be 5;
5252
($ruleResult | Where-Object { $_.TargetName -like "*Resources.Template.json" }).TargetName | Should -BeLike "*Resources.Template.json";
5353
($ruleResult | Where-Object { $_.TargetName -like "*Resources.Template4.json" }).TargetName | Should -BeLike "*Resources.Template4.json";
5454
}
@@ -67,8 +67,8 @@ Describe 'Azure.Template' -Tag 'Template' {
6767
# Pass
6868
$ruleResult = @($filteredResult | Where-Object { $_.Outcome -eq 'Pass' });
6969
$ruleResult | Should -Not -BeNullOrEmpty;
70-
$ruleResult.Length | Should -Be 4;
71-
$ruleResult.TargetName.Replace('\', '/').Split('/')[-1] | Should -BeIn 'Resources.Template2.json', 'Resources.Template4.json', 'Resources.Template.Bicep1.json', 'Resources.Template.Bicep2.json';
70+
$ruleResult.Length | Should -Be 5;
71+
$ruleResult.TargetName.Replace('\', '/').Split('/')[-1] | Should -BeIn 'Resources.Template2.json', 'Resources.Template4.json', 'Resources.Template.Bicep1.json', 'Resources.Template.Bicep2.json', 'Resources.Template.V2.json';
7272
}
7373

7474
It 'Azure.Template.TemplateScheme' {
@@ -85,11 +85,12 @@ Describe 'Azure.Template' -Tag 'Template' {
8585
# Pass
8686
$ruleResult = @($filteredResult | Where-Object { $_.Outcome -eq 'Pass' });
8787
$ruleResult | Should -Not -BeNullOrEmpty;
88-
$ruleResult.Length | Should -Be 5;
88+
$ruleResult.Length | Should -Be 6;
8989
$ruleResult.TargetName.Replace('\', '/').Split('/')[-1] | Should -BeIn @(
9090
'Resources.Template.Bicep1.json'
9191
'Resources.Template.Bicep2.json'
9292
'Resources.Template.json'
93+
'Resources.Template.V2.json'
9394
'Resources.Template3.json'
9495
'Resources.Template4.json'
9596
);
@@ -123,10 +124,11 @@ Describe 'Azure.Template' -Tag 'Template' {
123124
# Pass
124125
$ruleResult = @($filteredResult | Where-Object { $_.Outcome -eq 'Pass' });
125126
$ruleResult | Should -Not -BeNullOrEmpty;
126-
$ruleResult.Length | Should -Be 4;
127+
$ruleResult.Length | Should -Be 5;
127128
$ruleResult.TargetName.Replace('\', '/').Split('/')[-1] | Should -BeIn @(
128129
'Resources.Template.Bicep1.json'
129130
'Resources.Template.Bicep2.json'
131+
'Resources.Template.V2.json'
130132
'Resources.Template3.json'
131133
'Resources.Template4.json'
132134
);
@@ -688,7 +690,7 @@ Describe 'Azure.Template' -Tag 'Template' {
688690
$ruleResult = @($filteredResult | Where-Object { $_.Outcome -eq 'Fail' } | Sort-Object -Property { $_.TargetName.Replace('\', '/').Split('/')[-1] });
689691
$ruleResult | Should -Not -BeNullOrEmpty;
690692
$ruleResult.Length | Should -Be 3;
691-
693+
692694
$ruleResult.TargetName.Replace('\', '/').Split('/')[-1] | Should -BeIn @(
693695
'Resources.Template2.json'
694696
'Resources.Template3.json'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{
2+
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
3+
"languageVersion": "2.0",
4+
"contentVersion": "1.0.0.0",
5+
"metadata": {
6+
"_generator": {
7+
"name": "bicep",
8+
"version": "0.24.24.22086",
9+
"templateHash": "10842470273706361200"
10+
}
11+
},
12+
"parameters": {
13+
"location": {
14+
"type": "string",
15+
"defaultValue": "[resourceGroup().location]",
16+
"metadata": {
17+
"description": "The location resources will be deployed."
18+
}
19+
},
20+
"testNullable": {
21+
"type": "string",
22+
"nullable": true,
23+
"metadata": {
24+
"description": "Nullable string parameter."
25+
}
26+
}
27+
},
28+
"resources": {
29+
"testResource": {
30+
"type": "Microsoft.Storage/storageAccounts",
31+
"apiVersion": "2023-01-01",
32+
"name": "testStorageAccount",
33+
"location": "[parameters('location')]",
34+
"kind": "StorageV2",
35+
"sku": {
36+
"name": "Standard_LRS"
37+
}
38+
}
39+
},
40+
"outputs": {
41+
"testOutput": {
42+
"type": "string",
43+
"value": "[coalesce(parameters('testNullable'), 'Empty')]"
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)