Azure 模板中的编码 URL

Azure 模板中的编码 URL

我正在尝试创建一个 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

相关内容