@@ -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+ }
0 commit comments