Runbook Workflow中的ARM模板复杂参数

问题描述 投票:-1回答:2

有关于ARM模板部署的问题,特别是使用New-AzureRmResourceGroupDeployment cmdlet从Runbook Powershell工作流调用该部署。我正在尝试使用动态复制循环这样做我在模板中使用以下格式化参数:

"aseApAppSettings": {
    "type": "object",
    "defaultValue": {
        "apps": [
            {
                "name": "app-api-ecom",
                "kind": "api"
            },
            {
                "name": "app-ecom",
                "kind": "web"
            }
        ]
    }
},

然后我根据它创建资源:

    {
        "type": "Microsoft.Web/sites",
        "kind": "[parameters('aseApAppSettings').apps[copyIndex()].kind]",
        "name": "[concat(parameters('aseApName'),'sv-',parameters('aseApAppSettings').apps[copyIndex()].name)]",
        "apiVersion": "2016-08-01",
        "location": "East US 2",
        "scale": null,
        "properties": {...
        },
        "copy": {
            "name": "svLoop",
            "count": "[length(parameters('aseApAppSettings').apps)]"
        },
        "dependsOn": []
    },

通过模板部署部署模板时,一切正常

我需要从Powershell Workflow Runbook调用此部署,并且很难定义参数

我试过把它设为

{"apps":[{"name":"falcon-api-ecom","kind":"api"},{"name":"falcon-ecom","kind":"web"}]}

在测试期间但它失败并显示消息“无法找到参数”

所以我尝试过使用ConvertFrom-Json

但是它将它发送到我的模板

"CliXml": "<Objs Version=\"1.1.0.1\" 

                          xmlns=\"http://schemas.microsoft.com/powers...

请帮忙,

谢谢

Runbook的样本

workflow Build-Ase {
    param
    (
        #Environment Parameters
        [Parameter(Mandatory = $true)]
        [object]
        $aseApAppSettings
    )

    $params = @{
        "aseApAppSettings"       = $aseApAppSettings;
    }
    $job = New-AzureRmResourceGroupDeployment -ResourceGroupName $vnetRGName -TemplateUri $templateParameterUri -TemplateParameterObject $params
    Write-Output $job
azure automation azure-resource-manager runbook
2个回答
1
投票

嵌套对象对我来说也不起作用,但是将它们作为json字符串与json function一起传入确实对我有用

部署脚本

$addionalParameters = New-Object -TypeName Hashtable

$addionalParameter1 = "{ ""prop1"": [ { ""name"": ""a"", ""value"": ""1"" }, { ""name"": ""b"", ""value"": ""2"" } ], ""prop2"": { ""name"": ""c"", ""value"": ""3"" } }"
$addionalParameters["myComplexNestedOnjectAsJsonString"] = $addionalParameter1

$deploymentOutput = New-AzResourceGroupDeployment   -ResourceGroupName $resourceGroupName -Name $deploymentName -TemplateFile $templateFilePath `
                                                    -TemplateParameterFile $parametersFilePath @addionalParameters

模板

{
    "parameters": {
        "myComplexNestedObjectAsJsonString": {
            "type": "string"
        }
    },
    "variables": {
        "myComplexNestedObject" : "[json(parameters('myComplexNestedObjectAsJsonString'))]"
    },
    "resources": [],
    "outputs": {
        "prop1A": {
            "type": "string",
            "value": "[variables('myComplexNestedObject').prop1[0].value]"
        },
        "prop2": {
            "type": "string",
            "value": "[variables('myComplexNestedObject').prop2.value]"
        }
    }
}

0
投票

尝试使用splatting。对我来说,它是唯一适用于复杂嵌套参数对象的东西。另请注意如何构造aseApAppSettings参数。

$params = @{
    $aseApAppSettings = @{ @( {name=...;kind=...},{...},...,{...} ) }
}
New-AzureRmResourceGroupDeployment -ResourceGroupName $vnetRGName -TemplateUri $templateParameterUri @params

PS。 ...代表占位符

© www.soinside.com 2019 - 2024. All rights reserved.