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