From 05d956592f0cb7dbfdd87bbef7cfad680b465eb1 Mon Sep 17 00:00:00 2001 From: Daniel Jurek Date: Fri, 14 Jun 2024 11:06:45 -0700 Subject: [PATCH] Bring forward working parts --- .../TestResources/SubConfig-Helpers.ps1 | 42 ++++++++++--------- .../build-test-resource-config.yml | 42 +++++++++++++------ 2 files changed, 53 insertions(+), 31 deletions(-) diff --git a/eng/common/TestResources/SubConfig-Helpers.ps1 b/eng/common/TestResources/SubConfig-Helpers.ps1 index 9b69c516bd02..8495033d2a97 100644 --- a/eng/common/TestResources/SubConfig-Helpers.ps1 +++ b/eng/common/TestResources/SubConfig-Helpers.ps1 @@ -131,31 +131,35 @@ function SetSubscriptionConfiguration([object]$subscriptionConfiguration) Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized" } -function UpdateSubscriptionConfiguration([object]$subscriptionConfigurationBase, [object]$subscriptionConfiguration) +function UpdateSubscriptionConfiguration([object]$subscriptionConfigurationBase, [object]$subscriptionConfiguration, $devOpsOutput = $true) { - foreach ($pair in $subscriptionConfiguration.GetEnumerator()) { - if ($pair.Value -is [Hashtable]) { - if (!$subscriptionConfigurationBase.ContainsKey($pair.Name)) { - $subscriptionConfigurationBase[$pair.Name] = @{} - } - foreach($nestedPair in $pair.Value.GetEnumerator()) { - # Mark values as secret so we don't print json blobs containing secrets in the logs. - # Prepend underscore to the variable name, so we can still access the variable names via environment - # variables if they get set subsequently. - if (ShouldMarkValueAsSecret "AZURE_" $nestedPair.Name $nestedPair.Value) { - Write-Host "##vso[task.setvariable variable=_$($nestedPair.Name);issecret=true;]$($nestedPair.Value)" - } - $subscriptionConfigurationBase[$pair.Name][$nestedPair.Name] = $nestedPair.Value - } - } else { - if (ShouldMarkValueAsSecret "AZURE_" $pair.Name $pair.Value) { - Write-Host "##vso[task.setvariable variable=_$($pair.Name);issecret=true;]$($pair.Value)" + foreach ($pair in $subscriptionConfiguration.GetEnumerator()) { + if ($pair.Value -is [Hashtable]) { + if (!$subscriptionConfigurationBase.ContainsKey($pair.Name)) { + $subscriptionConfigurationBase[$pair.Name] = @{} + } + foreach($nestedPair in $pair.Value.GetEnumerator()) { + # Mark values as secret so we don't print json blobs containing secrets in the logs. + # Prepend underscore to the variable name, so we can still access the variable names via environment + # variables if they get set subsequently. + if (ShouldMarkValueAsSecret "AZURE_" $nestedPair.Name $nestedPair.Value) { + Write-Host "##vso[task.setvariable variable=_$($nestedPair.Name);issecret=true;]$($nestedPair.Value)" } - $subscriptionConfigurationBase[$pair.Name] = $pair.Value + $subscriptionConfigurationBase[$pair.Name][$nestedPair.Name] = $nestedPair.Value + } + } else { + if (ShouldMarkValueAsSecret "AZURE_" $pair.Name $pair.Value) { + Write-Host "##vso[task.setvariable variable=_$($pair.Name);issecret=true;]$($pair.Value)" } + $subscriptionConfigurationBase[$pair.Name] = $pair.Value } + } + if ($devOpsOutput) { $serialized = $subscriptionConfigurationBase | ConvertTo-Json -Compress Write-Host ($subscriptionConfigurationBase | ConvertTo-Json) Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized" + } + + return $subscriptionConfigurationBase } diff --git a/eng/common/TestResources/build-test-resource-config.yml b/eng/common/TestResources/build-test-resource-config.yml index f8b47ea1a69f..e0336effd9f2 100644 --- a/eng/common/TestResources/build-test-resource-config.yml +++ b/eng/common/TestResources/build-test-resource-config.yml @@ -9,9 +9,9 @@ parameters: - name: EnvVars type: object default: null - - name: SubscriptionConfigurationFilePath - type: string - default: '' + - name: SubscriptionConfigurationFilePaths + type: object + default: null steps: - ${{ if parameters.SubscriptionConfiguration }}: @@ -22,6 +22,10 @@ steps: . ./eng/common/TestResources/SubConfig-Helpers.ps1 SetSubscriptionConfiguration $config + + Write-Host ($finalConfig | ConvertTo-Json) + $serialized = $finalConfig | ConvertTo-Json -Compress + Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized" displayName: Initialize SubscriptionConfiguration variable ${{ if parameters.EnvVars }}: env: ${{ parameters.EnvVars }} @@ -48,15 +52,29 @@ steps: ${{ if parameters.EnvVars }}: env: ${{ parameters.EnvVars }} - - ${{ if ne(parameters.SubscriptionConfigurationFilePath, '') }}: + - ${{ if parameters.SubscriptionConfigurationFilePaths }}: - pwsh: | - $configBase = @' - $(SubscriptionConfiguration) - '@ | ConvertFrom-Json -AsHashtable - $config = Get-Content '${{ parameters.SubscriptionConfigurationFilePath }}' ` - | ConvertFrom-Json -AsHashtable . ./eng/common/TestResources/SubConfig-Helpers.ps1 - UpdateSubscriptionConfiguration $configBase $config - displayName: Merge in Subscription Configuration File Path + $configBase = @{} + if ('$(SubscriptionConfiguration)'.Trim() -ne '') { + # Tabbing of this sort is required for the here-string to work + $configBase = @' + $(SubscriptionConfiguration) + '@ | ConvertFrom-Json -AsHashtable + } + + $configFiles = @' + ${{ convertToJson(parameters.SubscriptionConfigurationFilePaths) }} + '@ | ConvertFrom-Json -AsHashtable + + foreach ($file in $configFiles) { + $config = Get-Content $file | ConvertFrom-Json -AsHashtable + $configBase = UpdateSubscriptionConfiguration $configBase $config -devOpsOutput $false + } + + $serialized = $configBase | ConvertTo-Json -Compress + Write-Host ($configBase | ConvertTo-Json) + Write-Host "##vso[task.setvariable variable=SubscriptionConfiguration;]$serialized" + displayName: Merge in Subscription Configuration File Paths ${{ if parameters.EnvVars }}: - env: ${{ parameters.EnvVars }} + env: ${{ parameters.EnvVars }} \ No newline at end of file