我感兴趣的是读取不同资源组中另一个部署的输出参数。 我的ARM模板类似于:
每个都部署在 不同的 资源组中,因为它们具有不同的生命周期。但是,当我部署app.json时,我想提取最新平台和存储部署的输出,并使用它们来配置应用程序。
链接模板不是解决方案,因为链接模板最终部署在与应用程序相同的资源组中,这违背了在资源组中隔离资源的目的。
有什么办法可以从不同的资源组中读取部署的输出参数?如果没有,Azure是否计划支持它?
我知道有一种方法可以通过id获取资源,使用resourceId函数,并查看它们的属性,但我试图避免这样做而不进入资源引用spagetti。
答案 0 :(得分:4)
您是如何进行部署的?在PowerShell中,您可以执行以下操作:
(Get-AzureResourceGroupDeployment NameOfResourceGroup).Outputs.NameOfOuputProperty.Value
这将为您提供最新部署的输出。您还可以将整个部署对象抛出到var中并以此方式使用。
$d = Get-AzureResourceGroupDeployment NameOfResourceGroup
如果您需要许多输出属性,哪个会更快。
那有帮助吗?
语法基本相同:
(Get-AzureRmResourceGroupDeployment -ResourceGroupName NameOfResourceGroup -Name NameOfDeployment).Outputs.NameOfOutputProperty.value
如果您有多个部署,则可以使用:
Get-AzureRmResourceGroupDeployment -ResourceGroupName NameOfResourceGroup
全部查看,看看名字是什么......
答案 1 :(得分:0)
我知道这是一个老问题,但是对于其他随之而来的人,截至18年3月12日,您绝对可以这样做。
您需要确保您的输出按照Microsoft documentation for output variables的格式进行格式化,该格式大致具有这种格式
"outputs": {
"resourceID": {
"type": "string",
"value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
}
}
然后,您可以使用resource reference(格式为
)引用部署,从而在模板中使用这些输出reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])
请注意,您需要提供api版本,因为部署所使用的api版本可能与父模板使用的api版本不同。
您的参考将类似于以下内容
{
"comments": "This would have an output named myOutput you want to use",
"apiVersion": "2017-05-10",
"type": "Microsoft.Resources/deployments",
"name": "my-deployment",
"resourceGroup": "...",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "...",
"contentVersion": "1.0.0.0"
},
"parameters": { }
},
{
"comments": "This makes use of myOutput from my-deployment",
"apiVersion": "2017-05-10",
"type": "Microsoft.Resources/deployments",
"name": "my-dependent-deployment",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "...",
"contentVersion": "1.0.0.0"
},
"parameters": {
"myValueFromAnotherDeployment": { "value": "[reference('my-deployment', '2017-05-10').outputs.myOutput.value]" }
}
}
}
请注意该值的稍显笨拙的“重新打包”,在该情况下,我们使用myOutput.value
作为从属部署的输入,并将其放入键为"value": "...."
的对象中。这是因为ARM参数必须具有“值”属性才能生效。
如果尝试直接使用输出,将会得到无效的模板错误(因为output
变量具有'type'并且这不是parameter
中的允许键)。因此,您需要获取value
属性,然后将其放回下游模板的value
中。
答案 2 :(得分:0)
您是否正在使用Azure DevOps发布管道?您只需将输出设置为变量即可,以便可以在相同或不同阶段重复使用它们。
我们在项目中使用这些扩展名