我正在编写一个 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/