我正在尝试创建一个 ARM 模板,并且在尝试在父模板中提供 templateLink 时遇到了问题。
在父模板中,我尝试引用将要使用的其他模板文件列表。我通过添加以下 JSON 对象来实现此目的
{
"apiVersion": "2016-09-01",
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[concat(variables('baseURL'), 'settings%2Ejson/raw', variables('queryString'))]",
"contentVersion": "1.0.0.0"
}
}
}
我有 baseURL 是 gitlab 安装的路径,定义为
"baseURL": "https://<URL>/api/v4/projects/2/repository/files/shared_services%2F",
为了使 GitLab API 正常工作,它需要 URL 中 files 后面的部分是编码的 URL,引用 git 存储库内文件的路径。因此,URL 中不需要 / 和 .,而是需要 %2E 和 %2F。因此,在我的情况下,我尝试访问以下 URL
https://whatever.com/api/v4/projects/2/repository/files/shared_services%2Fsettings%2Ejson/raw
但是,当我使用以下命令通过 Azure CLI 工具运行模板时,
az group deployment validate --debug -g example --template-file parent.json --parameters "@./parameters.json"
我收到以下错误
无法从“https://whatever.com/api/v4/projects/2/repository/files/shared_services%2Fsettings.json/raw
似乎无论我怎么尝试,settings%2Ejson 都会变成 settings.json。但是,%2F 编码字符却能顺利通过。因此,我不确定是否可以做些什么来保留 %2E,而无需使用 azure CLI 工具将其转换为 。
答案1
据我所知,Azure 模板不支持模板中的 encore URI。
根据您的场景,您可以选择以下方式。
1.将您的链接模板保存为公共 URL,您可以将其保存在 GitHub 或公共 Azure 存储帐户上。
2.虽然链接模板必须对外可用,但它不需要向公众开放。您可以将模板添加到只有存储帐户所有者可以访问的私有存储帐户。然后,您可以创建共享访问签名 (SAS) 令牌以在部署期间启用访问。您可以将该 SAS 令牌添加到链接模板的 URI。
以下示例显示了链接到另一个模板的父模板。使用作为参数传入的 SAS 令牌访问链接的模板。
"parameters": {
"sasToken": { "type": "securestring" }
},
"resources": [
{
"apiVersion": "2017-05-10",
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "incremental",
"templateLink": {
"uri": "[concat('https://storagecontosotemplates.blob.core.windows.net/templates/helloworld.json', parameters('sasToken'))]",
"contentVersion": "1.0.0.0"
}
}
}
],
有关此内容的更多信息,请参阅关联。
答案2
ARM 模板确实有一个编码 URI 函数,但它的名字不太有用uri组件。
根据您的示例,您可以像这样使用它:
"variables": {
"baseURL": "https://<URL>/api/v4/projects/2/repository/files/shared_services",
"rawPath": "/settings.json/raw",
"querystring": "?foo=bar"
},
"resources": [
{
"apiVersion": "2016-09-01",
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[concat(variables('baseURL'), uriComponent(variables('rawPath')), variables('queryString'))]",
"contentVersion": "1.0.0.0"
}
}
}
],
结果是:
https://<URL>/api/v4/projects/2/repository/files/shared_services%2Fsettings.json%2Fraw?foo=bar