代码之家  ›  专栏  ›  技术社区  ›  TimmyV

来自bash脚本的arm.template。字符串未终止。需要分隔符:

  •  0
  • TimmyV  · 技术社区  · 6 年前

    我正在编写一个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-out-names/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 在脚本中,我得到这个错误:

    “错误”:。{ “code”:“无效请求内容”, “message”:“请求内容无效,无法反序列化:”“未终止的字符串。”需要分隔符:\”。路径“”, 第1行,位置21。'.“}

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

    我想这与linux存储变量的方式有关,而且api正在请求json(或者其他什么东西)。

    乐意接受任何帮助。

    1 回复  |  直到 6 年前
        1
  •  1
  •   oliv    6 年前

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

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

    如果您应该正确引用变量:

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

    像这样使用:

    armclient put "$resolved_armapi" "$putparm"