问题描述
我正在尝试部署此ARM模板
/* example_template.json */
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#","contentVersion": "1.0.0.0","parameters": {
"var": {
"type": "string","defaultValue": "
echo ${VARIABLE}
","Metadata": {
"description": "some description"
}
}
},"resources": [],"outputs": {
"ouput": {
"type": "string","value": "[string(parameters('var'))]"
}
}
}
成功输出我想要的东西
"outputs": {
"ouput": {
"type": "String","value": "\n echo ${VARIABLE}\n "
}
}
问题是,如果我试图在bash脚本中使用它,$VARIABLE
中可能有一个空格,因此我需要输出为
"outputs": {
"ouput": {
"type": "String","value": "\n echo \"${USER}\"\n "
}
}
防止参数分裂。
因此,我尝试编辑模板以包括引号
/* example_template.json */
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#","defaultValue": "
echo \"${VARIABLE}\"
","value": "[string(parameters('var'))]"
}
}
}
> az deployment group validate -f example_template.json -g resource-group-name
Failed to parse 'example_template.json',please check whether it is a valid JSON format
这似乎仅在多行字符串中发生-如果我将整个defaultValue
放在一行上,即
"defaultValue": "echo \"${VARIABLE}\""
再次成功。
我需要使用多行字符串,因为此变量用于较长的部署脚本,因此无法放在一行上。
我认为这是一个错误,因为解析器仅使多行字符串失败,但不确定在哪里报告!
有人知道对此有什么可能的解决方案吗?
谢谢, 阿基尔
解决方法
实际上,像您一样手动进行多行操作没有任何意义。
如您所见,此"var"
参数的类型是"string"
,因此它应该是{{1}中的 string },因此得到错误消息的原因。使用"defaultValue"
之类的PowerShell命令时,即使可以正常工作,但结果是相同的。
您要“使用多行字符串,因为此变量用于较长的部署脚本”,因此可以尝试将defaultValue设置为字符串:
"New-AzDeployment"
输出应为:
"parameters": {
"var": {
"type": "string","defaultValue": "VARIABLE={value1}\n echo \"${VARIABLE}\"","metadata": {
"description": "some description"
}
}
},
实际上az命令基于python,Power Shell命令基于c#,这使它们对json的解析方式不同。
关于Azure CLI如何解析json ,它将开始使用VARIABLE={value1}
echo "${VARIABLE}"
读取defaultValue
字符串,而在同一行中找不到相反的"
,然后错误发生。
关于Power Shell如何解析json ,它将开始使用"
读取defaultValue
字符串,并读取该:
中包含的全部内容。