Skip to content

Commit 9e8aefc

Browse files
Sync eng/common directory with azure-sdk-tools for PR 8422 (#36039)
* Merge subscription configuration file values with the supplied subscription config * Bring forward working parts * Collapse into a single task * SubConfig-Helpers.ps1 changes * Update remove-test-resources.yml --------- Co-authored-by: Daniel Jurek <[email protected]>
1 parent 6f7f108 commit 9e8aefc

File tree

5 files changed

+74
-85
lines changed

5 files changed

+74
-85
lines changed

eng/common/TestResources/SubConfig-Helpers.ps1

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ function ShouldMarkValueAsSecret([string]$serviceName, [string]$key, [string]$va
103103

104104
function SetSubscriptionConfiguration([object]$subscriptionConfiguration)
105105
{
106-
foreach($pair in $subscriptionConfiguration.GetEnumerator()) {
106+
foreach ($pair in $subscriptionConfiguration.GetEnumerator()) {
107107
if ($pair.Value -is [Hashtable]) {
108108
foreach($nestedPair in $pair.Value.GetEnumerator()) {
109109
# Mark values as secret so we don't print json blobs containing secrets in the logs.
@@ -126,36 +126,32 @@ function SetSubscriptionConfiguration([object]$subscriptionConfiguration)
126126
}
127127
}
128128

129-
Write-Host ($subscriptionConfiguration | ConvertTo-Json)
130-
$serialized = $subscriptionConfiguration | ConvertTo-Json -Compress
131-
Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized"
129+
return $subscriptionConfiguration
132130
}
133131

134132
function UpdateSubscriptionConfiguration([object]$subscriptionConfigurationBase, [object]$subscriptionConfiguration)
135133
{
136-
foreach ($pair in $subscriptionConfiguration.GetEnumerator()) {
137-
if ($pair.Value -is [Hashtable]) {
138-
if (!$subscriptionConfigurationBase.ContainsKey($pair.Name)) {
139-
$subscriptionConfigurationBase[$pair.Name] = @{}
140-
}
141-
foreach($nestedPair in $pair.Value.GetEnumerator()) {
142-
# Mark values as secret so we don't print json blobs containing secrets in the logs.
143-
# Prepend underscore to the variable name, so we can still access the variable names via environment
144-
# variables if they get set subsequently.
145-
if (ShouldMarkValueAsSecret "AZURE_" $nestedPair.Name $nestedPair.Value) {
146-
Write-Host "##vso[task.setvariable variable=_$($nestedPair.Name);issecret=true;]$($nestedPair.Value)"
147-
}
148-
$subscriptionConfigurationBase[$pair.Name][$nestedPair.Name] = $nestedPair.Value
149-
}
150-
} else {
151-
if (ShouldMarkValueAsSecret "AZURE_" $pair.Name $pair.Value) {
152-
Write-Host "##vso[task.setvariable variable=_$($pair.Name);issecret=true;]$($pair.Value)"
134+
foreach ($pair in $subscriptionConfiguration.GetEnumerator()) {
135+
if ($pair.Value -is [Hashtable]) {
136+
if (!$subscriptionConfigurationBase.ContainsKey($pair.Name)) {
137+
$subscriptionConfigurationBase[$pair.Name] = @{}
138+
}
139+
foreach($nestedPair in $pair.Value.GetEnumerator()) {
140+
# Mark values as secret so we don't print json blobs containing secrets in the logs.
141+
# Prepend underscore to the variable name, so we can still access the variable names via environment
142+
# variables if they get set subsequently.
143+
if (ShouldMarkValueAsSecret "AZURE_" $nestedPair.Name $nestedPair.Value) {
144+
Write-Host "##vso[task.setvariable variable=_$($nestedPair.Name);issecret=true;]$($nestedPair.Value)"
153145
}
154-
$subscriptionConfigurationBase[$pair.Name] = $pair.Value
146+
$subscriptionConfigurationBase[$pair.Name][$nestedPair.Name] = $nestedPair.Value
155147
}
148+
} else {
149+
if (ShouldMarkValueAsSecret "AZURE_" $pair.Name $pair.Value) {
150+
Write-Host "##vso[task.setvariable variable=_$($pair.Name);issecret=true;]$($pair.Value)"
151+
}
152+
$subscriptionConfigurationBase[$pair.Name] = $pair.Value
156153
}
154+
}
157155

158-
$serialized = $subscriptionConfigurationBase | ConvertTo-Json -Compress
159-
Write-Host ($subscriptionConfigurationBase | ConvertTo-Json)
160-
Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized"
156+
return $subscriptionConfigurationBase
161157
}

eng/common/TestResources/build-test-resource-config.yml

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,52 @@ parameters:
99
- name: EnvVars
1010
type: object
1111
default: null
12+
- name: SubscriptionConfigurationFilePaths
13+
type: object
14+
default: null
1215

1316
steps:
14-
- ${{ if parameters.SubscriptionConfiguration }}:
15-
- pwsh: |
16-
$config = @'
17-
${{ parameters.SubscriptionConfiguration }}
18-
'@ | ConvertFrom-Json -AsHashtable
19-
20-
. ./eng/common/TestResources/SubConfig-Helpers.ps1
21-
SetSubscriptionConfiguration $config
22-
displayName: Initialize SubscriptionConfiguration variable
23-
${{ if parameters.EnvVars }}:
24-
env: ${{ parameters.EnvVars }}
25-
26-
- ${{ if parameters.SubscriptionConfigurations }}:
27-
- pwsh: |
28-
Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]{}"
29-
displayName: Initialize SubscriptionConfiguration variable for merging
30-
condition: eq(variables['SubscriptionConfiguration'], '')
31-
32-
- ${{ each config in parameters.SubscriptionConfigurations }}:
33-
- pwsh: |
34-
$configBase = @'
35-
$(SubscriptionConfiguration)
36-
'@ | ConvertFrom-Json -AsHashtable
37-
$config = @'
38-
${{ config }}
39-
'@ | ConvertFrom-Json -AsHashtable
40-
41-
. ./eng/common/TestResources/SubConfig-Helpers.ps1
42-
UpdateSubscriptionConfiguration $configBase $config
43-
44-
displayName: Merge Test Resource Configurations
45-
${{ if parameters.EnvVars }}:
46-
env: ${{ parameters.EnvVars }}
17+
- pwsh: |
18+
. ./eng/common/TestResources/SubConfig-Helpers.ps1
19+
20+
$finalConfig = @{}
21+
$baseSubConfigRaw = @'
22+
${{ parameters.SubscriptionConfiguration }}
23+
'@.Trim()
24+
if ($baseSubConfigRaw) {
25+
$baseSubConfig = $baseSubConfigRaw | ConvertFrom-Json -AsHashtable
26+
27+
Write-Host "Setting base sub config"
28+
$finalConfig = SetSubscriptionConfiguration $baseSubConfig
29+
}
30+
31+
$subConfigJsonsRaw = @'
32+
${{ convertToJson(parameters.SubscriptionConfigurations) }}
33+
'@.Trim() -replace '"{', '{' -replace '}"', '}'
34+
35+
if ($subConfigJsonsRaw) {
36+
$subConfigs = $subConfigJsonsRaw | ConvertFrom-Json -AsHashtable
37+
38+
foreach ($subConfig in $subConfigs) {
39+
Write-Host "Merging sub config from list"
40+
$finalConfig = UpdateSubscriptionConfiguration $finalConfig $subConfig
41+
}
42+
}
43+
44+
$subConfigFilesRaw = @'
45+
${{ convertToJson(parameters.SubscriptionConfigurationFilePaths) }}
46+
'@.Trim()
47+
48+
if ($subConfigFilesRaw) {
49+
$subConfigFiles = $subConfigFilesRaw | ConvertFrom-Json -AsHashtable
50+
foreach ($file in $subConfigFiles) {
51+
Write-Host "Merging sub config from file: $file"
52+
$subConfig = Get-Content $file | ConvertFrom-Json -AsHashtable
53+
$finalConfig = UpdateSubscriptionConfiguration $finalConfig $subConfig
54+
}
55+
}
56+
57+
Write-Host ($finalConfig | ConvertTo-Json)
58+
$serialized = $finalConfig | ConvertTo-Json -Compress
59+
Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized"
60+
displayName: Merge subscription configurations

eng/common/TestResources/deploy-test-resources.yml

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ parameters:
88
ServiceConnection: not-specified
99
ResourceType: test
1010
UseFederatedAuth: false
11-
SubscriptionConfigurationFilePath: ''
12-
1311

1412
# SubscriptionConfiguration will be splatted into the parameters of the test
1513
# resources script. It should be JSON in the form:
@@ -56,18 +54,9 @@ steps:
5654
ScriptType: InlineScript
5755
Inline: |
5856
eng/common/scripts/Import-AzModules.ps1
59-
60-
if ('${{ parameters.SubscriptionConfigurationFilePath }}' -ne '') {
61-
$subscriptionConfiguration = `
62-
Get-Content '${{ parameters.SubscriptionConfigurationFilePath }}' `
63-
| ConvertFrom-Json -AsHashtable;
64-
} else {
65-
# Multiline string termination ('@) needs to be at the beginning
66-
# of the line
67-
$subscriptionConfiguration = @'
68-
${{ parameters.SubscriptionConfiguration }}
57+
$subscriptionConfiguration = @'
58+
${{ parameters.SubscriptionConfiguration }}
6959
'@ | ConvertFrom-Json -AsHashtable;
70-
}
7160
7261
# The subscriptionConfiguration may have ArmTemplateParameters defined, so
7362
# pass those in via the ArmTemplateParameters flag, and handle any
@@ -86,7 +75,6 @@ steps:
8675
- ${{ else }}:
8776
- pwsh: |
8877
eng/common/scripts/Import-AzModules.ps1
89-
9078
$subscriptionConfiguration = @'
9179
${{ parameters.SubscriptionConfiguration }}
9280
'@ | ConvertFrom-Json -AsHashtable;

eng/common/TestResources/remove-test-resources.yml

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ parameters:
88
ResourceType: test
99
EnvVars: {}
1010
UseFederatedAuth: false
11-
SubscriptionConfigurationFilePath: ''
1211

1312
# SubscriptionConfiguration will be splat into the parameters of the test
1413
# resources script. It should be JSON in the form:
@@ -39,20 +38,10 @@ steps:
3938
Inline: |
4039
eng/common/scripts/Import-AzModules.ps1
4140
42-
43-
if ('${{ parameters.SubscriptionConfigurationFilePath }}' -ne '') {
44-
$subscriptionConfiguration = `
45-
Get-Content '${{ parameters.SubscriptionConfigurationFilePath }}' `
46-
| ConvertFrom-Json -AsHashtable;
47-
} else {
48-
# Multiline string termination ("@) needs to be at the beginning
49-
# of the line
50-
$subscriptionConfiguration = @"
51-
${{ parameters.SubscriptionConfiguration }}
41+
$subscriptionConfiguration = @"
42+
${{ parameters.SubscriptionConfiguration }}
5243
"@ | ConvertFrom-Json -AsHashtable;
5344
54-
}
55-
5645
eng/common/TestResources/Remove-TestResources.ps1 `
5746
@subscriptionConfiguration `
5847
-ResourceType '${{ parameters.ResourceType }}' `

eng/common/TestResources/sub-config/AzurePublicMsft.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
"SubscriptionId": "2cd617ea-1866-46b1-90e3-fffb087ebf9b",
33
"TenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
44
"TestApplicationId": "f850650c-1fcf-4489-b46f-71af2e30d360",
5+
"TestApplicationSecret": "",
56
"TestApplicationOid": "30511c9d-ba1a-4c7b-b422-5b543da11b3f",
67
"ProvisionerApplicationId": "f850650c-1fcf-4489-b46f-71af2e30d360",
8+
"ProvisionerApplicationSecret": "",
79
"ProvisionerApplicationOid": "30511c9d-ba1a-4c7b-b422-5b543da11b3f",
810
"Environment": "AzureCloud",
911
"AzureSubscription": "Azure SDK Test Resources"

0 commit comments

Comments
 (0)