Как передать object в переопределенные параметры для развертывания ARM из конвейера yaml

#azure-devops #azure-pipelines #azure-pipelines-yaml

#azure-devops #azure-конвейеры #azure-pipelines-yaml

Вопрос:

У меня есть конвейер yaml, который выполняет встроенный скрипт и должен передать выходной объект из этого скрипта в шаблон ARM, но я не могу найти никаких примеров, вокруг которых передается объект, только отдельные строки.

Сценарий yaml:

 - task: AzurePowerShell@4
    displayName: 'Get CosmosDB Consistency'
    inputs:
      azureSubscription: 'ado-test'
      scriptType: 'inlineScript'
      azurePowerShellVersion: LatestVersion
      inline: | 
        Install-Module -Name Az.CosmosDB -RequiredVersion 0.1.6 -AllowClobber -Force
        Import-Module Az.CosmosDB
        $cosmosConsistency = (Get-AzCosmosDBAccount -ResourceGroupName $(domain)-${{ parameters.environment }} -Name $(domain)-${{ parameters.environment }}).ConsistencyPolicy
        Write-Host "##vso[task.setvariable variable=cosmosConsistency;isOutput=true]$cosmosConsistency"
      name: 'cosmosConsistency'
 

Выходной объект выглядит следующим образом: {"DefaultConsistencyLevel":"Session","MaxStalenessPrefix":100,"MaxIntervalInSeconds":5}

Развертывание ARM с переопределением параметров:

 - task: AzureResourceGroupDeployment@2
    displayName: 'Deploy: Main resources'
    inputs:
      azureSubscription: 'ado-test'
      resourceGroupName: '$(domain)-${{ lower(parameters.environment) }}'
      location: 'West Europe'
      csmFile: '$(Build.SourcesDirectory)/src/resources.json'
      csmParametersFile: '$(Build.SourcesDirectory)/src/resources.parameters.json'
      overrideParameters: '-cosmosConsistency $(cosmosConsistency))'
 

Определение параметров в шаблоне ARM:

 cosmosConsistency": {
      "type": "object",
      "metadata": {
        "description": "The Cosmos DB consistency parameters object"
      }
    },
 

Ошибка, которую я получаю, заключается в том, что параметр является строкой, но ожидался объект, поэтому либо что-то не так с моим определением overrideParameters, либо с определением параметра в шаблоне ARM.

Может кто-нибудь помочь с правильным синтаксисом?

Если я передаю все 3 значения отдельно как 3 разных строковых параметра, это работает, но беспорядочно, и вместо этого я передаю весь объект целиком.

Комментарии:

1. Не получить последнюю информацию. Просто хочу проверить, полезен ли для вас приведенный ниже ответ? Если да, вы можете принять ответ, который также может быть полезен для других, у кого такая же проблема с вами, и мы могли бы заархивировать эту тему. Кроме того, не стесняйтесь оставлять комментарии ниже, если у вас все еще есть какие-либо вопросы по этому поводу:-)

Ответ №1:

Для переопределения параметров типа объекта используйте строковые объекты JSON. Например, -options [«option1»] -map {«key1″:»value1» }.

Если между «key1» и «value1» есть пробел, например «key»: «value1», это выдаст сообщение об ошибке «сопоставление значений не разрешено в этом контексте». Таким образом, правильный синтаксис будет {«key1″:»value1»}

https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-resource-group-deployment?view=azure-devops