首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure DevOps AzureResourceManagerTem高原部署@3任务overrideParameters数组

Azure DevOps AzureResourceManagerTem高原部署@3任务overrideParameters数组
EN

Stack Overflow用户
提问于 2022-11-01 07:10:59
回答 2查看 84关注 0票数 1

这应该很简单:)

有人能帮助使用AzureResourceManagerTemplateDeployment@3任务所需的语法来在overrideParameters中分配一个值,其中ARM模板参数文件需要数组吗?

示例:

ARM模板参数文件,需要一个数组:

代码语言:javascript
复制
"my-ssis-ir_publicIPs": {
            "type": "array",
            "defaultValue": [
                "/subscriptions/XXXXX/resourceGroups/my-rg/providers/Microsoft.Network/publicIPAddresses/my-01-ssisir-pip",
                "/subscriptions/XXXXX/resourceGroups/my-rg/providers/Microsoft.Network/publicIPAddresses/my-02-ssisir-pip"
            ]
        },

AzureResourceManagerTemplateDeployment@3代码任务-显示试图使用overrideParameters为my ir_publicIP提供重写值的尝试,其硬编码值表示两个公共ips作为数组:

代码语言:javascript
复制
- task: AzureResourceManagerTemplateDeployment@3
  displayName: 'ARM Template deployment: Resource Group scope'
  inputs:
    azureResourceManagerConnection: ${{ parameters.azureResourceManagerConnection }}
    subscriptionId: ${{ parameters.subscriptionId }}
    resourceGroupName: ${{ parameters.resourceGroupName }}
    location: '${{ parameters.location }}'
    csmFile: '$(Build.SourcesDirectory)/${{parameters.squadName}}/$(Build.Repository.Name)/${{parameters.buildId}}/ARMTemplateForFactory.json'
    csmParametersFile: '$(Build.SourcesDirectory)/${{parameters.squadName}}/$(Build.Repository.Name)/${{parameters.buildId}}/ARMTemplateParametersForFactory.json'
    overrideParameters:
          -my-ssis-ir_publicIPs ['/subscriptions/XXXXX/resourceGroups/my-rg/providers/Microsoft.Network/publicIPAddresses/my-01-ssisir-pip','/subscriptions/XXXXX/resourceGroups/my-rg/providers/Microsoft.Network/publicIPAddresses/my-02-ssisir-pip']

我的大部分努力都会导致错误,指示字符串正在传递给参数,其中需要Array。

我尝试过许多选项,例如在yml文件中设置参数。

代码语言:javascript
复制
parameters:
 - name: my-ssis-ir_publicIPs
   type: object
   default:
    - '/subscriptions/XXXXX/resourceGroups/my-rg/providers/Microsoft.Network/publicIPAddresses/my-01-ssisir-pip'
    - '/subscriptions/XXXXX/resourceGroups/my-rg/providers/Microsoft.Network/publicIPAddresses/my-02-ssisir-pip'

然后尝试为参数赋值:

代码语言:javascript
复制
overrideParameters:
              -my-ssis-ir_publicIPs ${{ convertToJson(parameters.my-ssis-ir_publicIPs) }}

显然,我需要使用传递到yaml文件中的参数,但我首先尝试通过在应用覆盖时学习语法来使其工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-01 07:42:06

它的工作方式是,您有arm模板JSON和arm模板参数JSON。

因此,您有一个参数给overrideParameters,它将传递给arm模板参数。

让我们举个例子,这里有managementgroup.json

代码语言:javascript
复制
{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "NameId": {
      "type": "string"
    },
    "DisplayName": {
      "type": "string"
    },
    "ParentId": {
      "type": "string"
    },
    "Location": {
      "type": "string"
    }
  },
  "resources": [
    {
      "name": "[parameters('NameId')]",
      "type": "Microsoft.Management/managementGroups",
      "apiVersion": "2021-04-01",
      "scope": "/",
      "location": "[parameters('Location')]",
      "properties": {
        "details": {
          "parent": {
            "id": "[tenantResourceId('Microsoft.Management/managementGroups', parameters('ParentId'))]"
          }
        },
        "displayName": "[parameters('DisplayName')]"
      }
    }
  ],
  "outputs": {
    "output": {
      "type": "string",
      "value": "[parameters('NameId')]"
    }
  }
}

这里我们有一个managementgroup.parameters.json,它包含3个参数:

代码语言:javascript
复制
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "NameId": {
      "value": {}
    },
    "DisplayName": {
      "value": {}
    },
    "ParentId": {
      "value": {}
    },
    "Location": {
      "value": "westeurope"
    }
  }
}

现在,如您所见,我们将参数传递给AzureResourceManagerTemplateDeployment:

代码语言:javascript
复制
  - task: AzureResourceManagerTemplateDeployment@3
    displayName: "Creating/Updating ${{ parameters.DisplayName }}"
    inputs:
      deploymentScope: "Management Group"
      azureResourceManagerConnection: ${{ parameters.ServiceConnection }}
      location: "West Europe"
      csmFile: "${{ parameters.ArmBasePath }}/managementgroup.json"
      csmParametersFile: "${{ parameters.ArmBasePath }}/managementgroup.parameters.json"
      overrideParameters: "-NameId ${{ parameters.NameId }} -DisplayName ${{ parameters.DisplayName }} -ParentId ${{ parameters.ParentId }}"
      deploymentMode: "Incremental"
      deploymentOutputs: armOutputs

在本例中,我从yaml传递参数。

代码语言:javascript
复制
parameters:
  - name: ParentId
    type: string
  - name: NameId
    type: string
  - name: DisplayName
    type: string
  - name: ServiceConnection
    type: string
  - name: ArmBasePath
    type: string

现在,如果您需要多次运行此模板,例如,2次调用--一次用于网络1,第二次调用网络2--则只需创建一个模板,并尽可能多次调用它。我使用此示例创建多个管理组。我提供了这个例子,您可以修改它以适应您的问题。

票数 0
EN

Stack Overflow用户

发布于 2022-11-02 08:25:16

对我起作用的语法是将两个IP作为单独的参数传递,如下所示:

代码语言:javascript
复制
-my-ssis-ir_publicIPs ["${{parameters.ssisir_publicIp1}}","${{parameters.ssisir_publicIp2}}"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74272600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档