Runbook Workflow中的ARM模板复杂参数

时间:2017-07-31 23:21:43

标签: azure automation azure-resource-manager runbook

对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

2 个答案:

答案 0 :(得分:1)

嵌套对象对我也不起作用,但是将它们作为与json function结合在一起的json字符串传递确实对我有用

部署脚本

$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]"
        }
    }
}

答案 1 :(得分:0)

尝试使用https://www.npmjs.com/package/angular2-cool-storage。对我来说,它是唯一适用于复杂嵌套参数对象的东西。 另请注意如何构建aseApAppSettings参数。

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

PS。 ...代表占位符