From dd7d2ba52a53d4488be5a09712fa139a8f1946bb Mon Sep 17 00:00:00 2001 From: Ben Broderick Phillips Date: Mon, 19 Apr 2021 15:55:05 -0400 Subject: [PATCH] Add template to merge multiple subscription configurations (#1560) * Add template to merge multiple subscription configurations * Update eng/common/TestResources/build-test-resource-config.yml Co-authored-by: Wes Haggard Co-authored-by: Wes Haggard --- .../build-test-resource-config.yml | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 eng/common/TestResources/build-test-resource-config.yml diff --git a/eng/common/TestResources/build-test-resource-config.yml b/eng/common/TestResources/build-test-resource-config.yml new file mode 100644 index 00000000000..98cdd96f5ad --- /dev/null +++ b/eng/common/TestResources/build-test-resource-config.yml @@ -0,0 +1,65 @@ +parameters: + - name: SubscriptionConfiguration + type: string + default: $(sub-config-azure-cloud-test-resources) + - name: SubscriptionConfigurations + type: object + default: null + +steps: + - ${{ if parameters.SubscriptionConfiguration }}: + - pwsh: | + $config = @' + ${{ parameters.SubscriptionConfiguration }} + '@ | ConvertFrom-Json -AsHashtable + + foreach($pair in $config.GetEnumerator()) { + if ($pair.Value -is [Hashtable]) { + foreach($nestedPair in $pair.Value.GetEnumerator()) { + Write-Host "##vso[task.setvariable variable=$($nestedPair.Name);issecret=true;]$($nestedPair.Value)" + } + } else { + Write-Host "##vso[task.setvariable variable=$($pair.Name);issecret=true;]$($pair.Value)" + } + } + + Write-Host ($config | ConvertTo-Json) + $serialized = $config | ConvertTo-Json -Compress + Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized" + displayName: Initialize SubscriptionConfiguration variable + + - ${{ if parameters.SubscriptionConfigurations }}: + - pwsh: | + Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]{}" + displayName: Initialize SubscriptionConfiguration variable for merging + condition: eq(variables['SubscriptionConfiguration'], '') + + - ${{ each config in parameters.SubscriptionConfigurations }}: + - pwsh: | + $config = @' + $(SubscriptionConfiguration) + '@ | ConvertFrom-Json -AsHashtable + $addToConfig = @' + ${{ config }} + '@ | ConvertFrom-Json -AsHashtable + + foreach ($pair in $addToConfig.GetEnumerator()) { + if ($pair.Value -is [Hashtable]) { + if (!$config.ContainsKey($pair.Name)) { + $config[$pair.Name] = @{} + } + foreach($nestedPair in $pair.Value.GetEnumerator()) { + Write-Host "##vso[task.setvariable variable=$($nestedPair.Name);issecret=true;]$($nestedPair.Value)" + $config[$pair.Name][$nestedPair.Name] = $nestedPair.Value + } + } else { + Write-Host "##vso[task.setvariable variable=$($pair.Name);issecret=true;]$($pair.Value)" + $config[$pair.Name] = $pair.Value + } + } + + $serialized = $config | ConvertTo-Json -Compress + Write-Host ($config | ConvertTo-Json) + Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized" + + displayName: Merge Test Resource Configurations