Skip to content

Commit 33be259

Browse files
azure-sdkbenbp
andauthored
Sync eng/common directory with azure-sdk-tools for PR 8760 (#36732)
* Do not mark values as secret that are from git-hosted sub config files * Simplify sub config build yaml --------- Co-authored-by: Ben Broderick Phillips <[email protected]>
1 parent 210ab0b commit 33be259

File tree

2 files changed

+72
-41
lines changed

2 files changed

+72
-41
lines changed

eng/common/TestResources/SubConfig-Helpers.ps1

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ function ShouldMarkValueAsSecret([string]$serviceName, [string]$key, [string]$va
8282
"TenantId",
8383
"TestApplicationId",
8484
"TestApplicationOid",
85-
"ProvisionerApplicationId"
85+
"ProvisionerApplicationId",
86+
"ProvisionerApplicationOid"
8687
)
8788

8889
$serviceDirectoryPrefix = BuildServiceDirectoryPrefix $serviceName
@@ -129,7 +130,7 @@ function SetSubscriptionConfiguration([object]$subscriptionConfiguration)
129130
return $subscriptionConfiguration
130131
}
131132

132-
function UpdateSubscriptionConfiguration([object]$subscriptionConfigurationBase, [object]$subscriptionConfiguration)
133+
function UpdateSubscriptionConfiguration([object]$subscriptionConfigurationBase, [object]$subscriptionConfiguration, [array]$allowedValues)
133134
{
134135
foreach ($pair in $subscriptionConfiguration.GetEnumerator()) {
135136
if ($pair.Value -is [Hashtable]) {
@@ -140,13 +141,13 @@ function UpdateSubscriptionConfiguration([object]$subscriptionConfigurationBase,
140141
# Mark values as secret so we don't print json blobs containing secrets in the logs.
141142
# Prepend underscore to the variable name, so we can still access the variable names via environment
142143
# variables if they get set subsequently.
143-
if (ShouldMarkValueAsSecret "AZURE_" $nestedPair.Name $nestedPair.Value) {
144+
if (ShouldMarkValueAsSecret "AZURE_" $nestedPair.Name $nestedPair.Value $allowedValues) {
144145
Write-Host "##vso[task.setvariable variable=_$($nestedPair.Name);issecret=true;]$($nestedPair.Value)"
145146
}
146147
$subscriptionConfigurationBase[$pair.Name][$nestedPair.Name] = $nestedPair.Value
147148
}
148149
} else {
149-
if (ShouldMarkValueAsSecret "AZURE_" $pair.Name $pair.Value) {
150+
if (ShouldMarkValueAsSecret "AZURE_" $pair.Name $pair.Value $allowedValues) {
150151
Write-Host "##vso[task.setvariable variable=_$($pair.Name);issecret=true;]$($pair.Value)"
151152
}
152153
$subscriptionConfigurationBase[$pair.Name] = $pair.Value
@@ -155,3 +156,66 @@ function UpdateSubscriptionConfiguration([object]$subscriptionConfigurationBase,
155156

156157
return $subscriptionConfigurationBase
157158
}
159+
160+
# Helper function for processing sub config files from a pipeline file list yaml parameter
161+
function UpdateSubscriptionConfigurationWithFiles([object]$baseSubConfig, [string]$fileListJson) {
162+
if (!$fileListJson) {
163+
return $baseSubConfig
164+
}
165+
166+
$finalConfig = $baseSubConfig
167+
168+
$subConfigFiles = $fileListJson | ConvertFrom-Json -AsHashtable
169+
foreach ($file in $subConfigFiles) {
170+
# In some cases, $file could be an empty string. Get-Content will fail
171+
# if $file is an empty string, so skip those cases.
172+
if (!$file) {
173+
continue
174+
}
175+
176+
Write-Host "Merging sub config from file: $file"
177+
$subConfig = Get-Content $file | ConvertFrom-Json -AsHashtable
178+
$allowedValues = @()
179+
# Since the keys are all coming from a file in github, we know every key should not be marked
180+
# as a secret. Set up these exclusions here to make pipeline log debugging easier.
181+
foreach ($pair in $subConfig.GetEnumerator()) {
182+
if ($pair.Value -is [Hashtable]) {
183+
foreach($nestedPair in $pair.Value.GetEnumerator()) {
184+
$allowedValues += $nestedPair.Name
185+
}
186+
} else {
187+
$allowedValues += $pair.Name
188+
}
189+
}
190+
$finalConfig = UpdateSubscriptionConfiguration $finalConfig $subConfig $allowedValues
191+
}
192+
193+
return $finalConfig
194+
}
195+
196+
# Helper function for processing stringified json sub configs from pipeline parameter data
197+
function BuildAndSetSubscriptionConfig([string]$baseSubConfigJson, [string]$additionalSubConfigsJson, [string]$subConfigFilesJson) {
198+
$finalConfig = @{}
199+
if ($baseSubConfigJson) {
200+
$baseSubConfig = $baseSubConfigJson | ConvertFrom-Json -AsHashtable
201+
202+
Write-Host "Setting base sub config"
203+
$finalConfig = SetSubscriptionConfiguration $baseSubConfig
204+
}
205+
206+
if ($additionalSubConfigsJson) {
207+
$subConfigs = $additionalSubConfigsJson | ConvertFrom-Json -AsHashtable
208+
209+
foreach ($subConfig in $subConfigs) {
210+
Write-Host "Merging sub config from list"
211+
$finalConfig = UpdateSubscriptionConfiguration $finalConfig $subConfig
212+
}
213+
}
214+
215+
Write-Host "Merging sub config from files"
216+
$finalConfig = UpdateSubscriptionConfigurationWithFiles $finalConfig $subConfigFilesJson
217+
218+
Write-Host ($finalConfig | ConvertTo-Json)
219+
$serialized = $finalConfig | ConvertTo-Json -Compress
220+
Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized"
221+
}

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

Lines changed: 4 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -37,50 +37,17 @@ steps:
3737
- pwsh: |
3838
. ./eng/common/TestResources/SubConfig-Helpers.ps1
3939
40-
$finalConfig = @{}
41-
$baseSubConfigRaw = @'
40+
$baseSubConfigJson = @'
4241
${{ parameters.SubscriptionConfiguration }}
4342
'@.Trim()
44-
if ($baseSubConfigRaw) {
45-
$baseSubConfig = $baseSubConfigRaw | ConvertFrom-Json -AsHashtable
4643
47-
Write-Host "Setting base sub config"
48-
$finalConfig = SetSubscriptionConfiguration $baseSubConfig
49-
}
50-
51-
$subConfigJsonsRaw = @'
44+
$additionalSubConfigsJson = @'
5245
${{ convertToJson(parameters.SubscriptionConfigurations) }}
5346
'@.Trim() -replace '"{', '{' -replace '}"', '}'
5447
55-
if ($subConfigJsonsRaw) {
56-
$subConfigs = $subConfigJsonsRaw | ConvertFrom-Json -AsHashtable
57-
58-
foreach ($subConfig in $subConfigs) {
59-
Write-Host "Merging sub config from list"
60-
$finalConfig = UpdateSubscriptionConfiguration $finalConfig $subConfig
61-
}
62-
}
63-
64-
$subConfigFilesRaw = @'
48+
$subConfigFilesJson = @'
6549
${{ convertToJson(parameters.SubscriptionConfigurationFilePaths) }}
6650
'@.Trim()
6751
68-
if ($subConfigFilesRaw) {
69-
$subConfigFiles = $subConfigFilesRaw | ConvertFrom-Json -AsHashtable
70-
foreach ($file in $subConfigFiles) {
71-
# In some cases, $file could be an empty string. Get-Content will fail
72-
# if $file is an empty string, so skip those cases.
73-
if (!$file) {
74-
continue
75-
}
76-
77-
Write-Host "Merging sub config from file: $file"
78-
$subConfig = Get-Content $file | ConvertFrom-Json -AsHashtable
79-
$finalConfig = UpdateSubscriptionConfiguration $finalConfig $subConfig
80-
}
81-
}
82-
83-
Write-Host ($finalConfig | ConvertTo-Json)
84-
$serialized = $finalConfig | ConvertTo-Json -Compress
85-
Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized"
52+
BuildAndSetSubscriptionConfig $baseSubConfigJson $additionalSubConfigsJson $subConfigFilesJson
8653
displayName: Merge subscription configurations

0 commit comments

Comments
 (0)