gpt4 book ai didi

azure - ARM 部署带有转义引号的多行字符串

转载 作者:行者123 更新时间:2023-12-05 07:00:53 25 4
gpt4 key购买 nike

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

防止参数 split 。

所以,我尝试编辑我的模板以包含引号

/* 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'))]"
}
}
}

这给了我一个验证创建错误:

> 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",所以它应该是一个 "defaultValue" 中的字符串,这就是您收到错误消息的原因。即使使用 "New-AzDeployment" 这样的 PowerShell 命令时它也没有错误,但结果是相同的。

由于您想要“使用多行字符串,因为此变量用于较长的部署脚本”,您可以尝试这样做以使 defaultValue 成为字符串:

"parameters": {
"var": {
"type": "string",
"defaultValue": "VARIABLE={value1}\n echo \"${VARIABLE}\"",
"metadata": {
"description": "some description"
}
}
},

输出应该是:

VARIABLE={value1}
echo "${VARIABLE}"
<小时/>

实际上az命令是基于python的,Power Shell命令是基于c#的,这使得它们解析json的方式不同。

关于Azure CLI如何解析json,它开始读取带有"defaultValue字符串,并且找不到相反的" 位于同一行,则会出现错误。

关于Power Shell如何解析json,它开始读取带有:defaultValue字符串,并读取该中包含的全部内容:

Deploy ARM template with Power Shell.

关于azure - ARM 部署带有转义引号的多行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64013174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com