1parameters: 2 - name: SubscriptionConfiguration 3 type: string 4 default: $(sub-config-azure-cloud-test-resources) 5 - name: SubscriptionConfigurations 6 type: object 7 default: null 8 9steps: 10 - ${{ if parameters.SubscriptionConfiguration }}: 11 - pwsh: | 12 $config = @' 13 ${{ parameters.SubscriptionConfiguration }} 14 '@ | ConvertFrom-Json -AsHashtable 15 16 foreach($pair in $config.GetEnumerator()) { 17 if ($pair.Value -is [Hashtable]) { 18 foreach($nestedPair in $pair.Value.GetEnumerator()) { 19 # Mark values as secret so we don't print json blobs containing secrets in the logs. 20 # Prepend underscore to the variable name, so we can still access the variable names via environment 21 # variables if they get set subsequently. 22 Write-Host "##vso[task.setvariable variable=_$($nestedPair.Name);issecret=true;]$($nestedPair.Value)" 23 } 24 } else { 25 Write-Host "##vso[task.setvariable variable=_$($pair.Name);issecret=true;]$($pair.Value)" 26 } 27 } 28 29 Write-Host ($config | ConvertTo-Json) 30 $serialized = $config | ConvertTo-Json -Compress 31 Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized" 32 displayName: Initialize SubscriptionConfiguration variable 33 34 - ${{ if parameters.SubscriptionConfigurations }}: 35 - pwsh: | 36 Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]{}" 37 displayName: Initialize SubscriptionConfiguration variable for merging 38 condition: eq(variables['SubscriptionConfiguration'], '') 39 40 - ${{ each config in parameters.SubscriptionConfigurations }}: 41 - pwsh: | 42 $config = @' 43 $(SubscriptionConfiguration) 44 '@ | ConvertFrom-Json -AsHashtable 45 $addToConfig = @' 46 ${{ config }} 47 '@ | ConvertFrom-Json -AsHashtable 48 49 foreach ($pair in $addToConfig.GetEnumerator()) { 50 if ($pair.Value -is [Hashtable]) { 51 if (!$config.ContainsKey($pair.Name)) { 52 $config[$pair.Name] = @{} 53 } 54 foreach($nestedPair in $pair.Value.GetEnumerator()) { 55 # Mark values as secret so we don't print json blobs containing secrets in the logs. 56 # Prepend underscore to the variable name, so we can still access the variable names via environment 57 # variables if they get set subsequently. 58 Write-Host "##vso[task.setvariable variable=_$($nestedPair.Name);issecret=true;]$($nestedPair.Value)" 59 $config[$pair.Name][$nestedPair.Name] = $nestedPair.Value 60 } 61 } else { 62 Write-Host "##vso[task.setvariable variable=_$($pair.Name);issecret=true;]$($pair.Value)" 63 $config[$pair.Name] = $pair.Value 64 } 65 } 66 67 $serialized = $config | ConvertTo-Json -Compress 68 Write-Host ($config | ConvertTo-Json) 69 Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized" 70 71 displayName: Merge Test Resource Configurations 72