json - 来自 bash 脚本的 ARM.Template。未终止的字符串。预期的分隔符 :

标签 json linux bash shell

我正在编写一个 bash 脚本,用于使用“armclient”将证书从 linux 服务器上传到 azure keyvault

我遵循这个关于如何使用 armclient 的指南: https://blogs.msdn.microsoft.com/appserviceteam/2016/05/24/deploying-azure-web-app-certificate-through-key-vault/

我要执行的命令是这样的:

ARMClient.exe PUT /subscriptions/<Subscription Id>/resourceGroups/<Server Farm Resource Group>/providers/Microsoft.Web/certificates/<User Friendly Resource Name>?api-version=2016-03-01 "{'Location':'<Web App Location>','Properties':{'KeyVaultId':'<Key Vault Resource Id>', 'KeyVaultSecretName':'<Secret Name>', 'serverFarmId':'<Server Farm (App Service Plan) resource Id>'}}"

我创建了一个字符串来填充所有必需的字段:

putparm=$resolved_armapi" \"{'Location':'$resolved_locationid','Properties':{'KeyVaultId':'$resolved_keyvaultid','KeyVaultSecretName':'$certname','serverFarmId':'$resolved_farmid'}}"\"

当我回显变量 putparm 的输出时,结果看起来符合预期(X-ed 出名称/ID):

/subscriptions/f073334f-240f-4261-9db5-XXXXXXXXXXXXX/resourceGroups/XXXXXXXX/providers/Microsoft.Web/certificates/XXXX-XXXXX-XXXXX?api-version=2016-03-01 "{'Location':'Central US','Properties':{'KeyVaultId':'/subscriptions/f073334f-240f-4261-9db5-XXXXXXXXXXXXX/resourceGroups/XXXXXXXX/providers/Microsoft.KeyVault/vaults/XXXXXXXX','KeyVaultSecretName':'XXXX-XXXXX-XXXXX','serverFarmId':'/subscriptions/f073334f-240f-4261-9db5-XXXXXXXXXXXXX/resourceGroups/XXXXXXXX/providers/Microsoft.Web/serverfarms/ServicePlan59154b1c-XXXX'}}"

当我在脚本中运行 armclient put $putparm 时出现此错误:

"error": { "code": "InvalidRequestContent", "message": "The request content was invalid and could not be deserialized: 'Unterminated string. Expected delimiter: \". Path '', line 1, position 21.'." }

但是当我获取 $putparm 变量的输出并在服务器上“手动”运行命令时,它起作用了。

我猜这与 linux 存储变量的方式有关,而且 API 正在请求 JSON(或其他......)

很高兴得到任何帮助。

最佳答案

您定义变量 putparam 的方式是错误的。

它可能被解释为文字字符串而不是对象。请注意,一个简单的字符串,如 "hello",是一个有效的 JSON 数据,但它可能不是您的服务器所期望的。

如果你应该正确引用你的变量:

putparm="{\"Location\":\"$resolved_locationid\",\"Properties\":{\"KeyVaultId\":\"$resolved_keyvaultid\",\"KeyVaultSecretName\":\"$certname\",\"serverFarmId\":\"$resolved_farmid\"}}"

并像这样使用它:

armclient put "$resolved_armapi" "$putparm"

关于json - 来自 bash 脚本的 ARM.Template。未终止的字符串。预期的分隔符 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50605065/

相关文章:

javascript - 修改对象文字数据并将其包装在数组中

css - 在 ASP.NET MVC 的 View 中显示格式化的 JSON

linux - 如何永久禁用 stty 的 XON/XOFF 设​​置?

c++ - 使用 QtCreator 部署自定义构建的项目

bash - 符号链接(symbolic link)循环中的意外 bash 自动完成行为

bash - CentOS 时间跳跃数秒——有时

c++ - 使用 boost::asio 读取 JSON 流,获取完整字符串?

angularjs - 使用 Angular 将数据发布到 Moodle API

linux - 使用 Dockerfile 重新加载 .bashrc

linux - 如果编译器选项与以前使用的选项不同,则使目标过时