带引号的ARM部署多行字符串

问题描述

我正在尝试部署此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'))]"
        }
    }
}

哪个给我一个validatecreate错误

> 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字符串,并读取该:中包含的全部内容。

Deploy ARM template with Power Shell.