我想从文本和其他变量(例如:
)连接我的Azure密钥库资源ID /subscriptions/$(SubscriptionId)/resourceGroups/$(VaultRg)/providers/Microsoft.KeyVault/vaults/$(keyVaultName)
并将其放入kvid
之类的新变量中。
但是,当我这样做时,我得到:
'SyntaxError:JSON中位置17处的意外令牌d',请确保它 遵循JavaScript对象符号(JSON)
这可能吗?有什么想法我可能做错了什么吗?
答案 0 :(得分:0)
似乎您只是将占位符放入ARM模板。那是行不通的。没有任何隐藏机制可以在任意文件中以可变值静默替换占位符。您必须明确采取某种行动(通常是从市场上获得一项任务)来填写值。
但是,实现所需目标的正确方法是将这些变量作为parameters传递到ARM模板,并使用标准的ARM模板参数语法来引用它们。
例如: 在ARM模板中定义一个参数:
"parameters": {
"keyVaultName": {
"type": "string",
"defaultValue": "DefaultKV"
}
}
然后引用参数:
[concat('/subscriptions/', parameters('SubscriptionId'), '/resourceGroups/', parameters('VaultRg'), '/providers/Microsoft.KeyVault/vaults/', parameters(keyVaultName))]
然后,当您使用Resource Group Deployment任务时,请使用您选择的值覆盖这些参数。
覆盖模板参数
(可选)要在网格中查看模板参数,请单击“替代参数”文本框旁边的“…”。此功能要求在源上启用CORS规则。如果模板位于Azure存储Blob中,请参考此以启用CORS。或在文本框中键入要覆盖的模板参数。例, –storageName fabrikam –adminUsername $(vmusername)-adminPassword $(密码)–azureKeyVaultName $(fabrikamFibre)。如果您使用的参数值包含多个单词,即使您使用变量传递它们,也请用引号引起来。例如,-name“参数值” -name2“ $(变量)” 要覆盖对象类型参数,请使用字符串化的JSON对象。例如,-options [“ option1”] -map {“ key1”:“ value1”}。