URL codificada en la plantilla de Azure

1

Estoy tratando de crear una plantilla ARM y me encuentro con un problema al intentar proporcionar un templateLink en mi plantilla principal.

En la plantilla principal, estoy tratando de hacer referencia a una lista de otros archivos de plantilla que se utilizarán. Estoy haciendo esto agregando el siguiente objeto 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"
    }
  }
}

Y tengo baseURL es la ruta a una instalación de gitlab definida como

    "baseURL": "https://<URL>/api/v4/projects/2/repository/files/shared_services%2F",

Para que la API de GitLab funcione, necesita que la parte de la URL después de los archivos sea una URL codificada que haga referencia a la ruta del archivo dentro del repositorio de git. Entonces, en lugar de tener / y. en la URL necesita% 2E y% 2F para esa sección. Entonces, en mi caso, estoy tratando de acceder a la siguiente URL

https://whatever.com/api/v4/projects/2/repository/files/shared_services%2Fsettings%2Ejson/raw

Sin embargo, cuando ejecuto la plantilla utilizando la herramienta CLI azul con el siguiente comando,

az group deployment validate --debug -g example --template-file parent.json --parameters "@./parameters.json"

Obtuve el siguiente error

No se puede descargar contenido de implementación desde ' https://whatever.com/api/v4/projects/2/repository/files/shared_services%2Fsettings.json/raw

Parece que no importa lo que intente, la configuración% 2Ejson sigue convirtiéndose en settings.json. Sin embargo, el carácter codificado% 2F llegó a través de ok. Por lo tanto, no estaba seguro de si había algo que pudiera hacer para mantener% 2E sin que la herramienta CLI azul lo convirtiera en a.

Shayan
fuente

Respuestas:

1

Según mi conocimiento, la plantilla de Azure no admite el URI encore en la plantilla.

Según su escenario, puede elegir la siguiente manera.

1.Guarde su plantilla de enlace como una URL pública, puede guardarla en GitHub o en una cuenta pública de Azure Storage.

2. Aunque la plantilla vinculada debe estar disponible externamente, no es necesario que esté generalmente disponible al público. Puede agregar su plantilla a una cuenta de almacenamiento privado que sea accesible solo para el propietario de la cuenta de almacenamiento. Luego, crea un token de firma de acceso compartido (SAS) para habilitar el acceso durante la implementación. Agrega ese token SAS al URI para la plantilla vinculada.

El siguiente ejemplo muestra una plantilla principal que se vincula a otra plantilla. Se accede a la plantilla vinculada con un token SAS que se pasa como parámetro.

"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"
          }
        }
    }
],

Más información sobre esto, consulte este enlace .

Shui shengbao
fuente
Gracias, estaba buscando esta solución primero. Pero, idealmente, queríamos mantener nuestras plantillas en un repositorio git para que todos los cambios estuvieran controlados por la versión y no necesitáramos llevarlos a otro lugar para la implementación. Y solo para hacer las cosas más difíciles, no podemos mantener los archivos en un repositorio público, lo que habría resuelto el problema de intentar acceder a los archivos. Pero si no es posible obtener una URL codificada en la plantilla, tendré que mirar la sugerencia de la cuenta de almacenamiento. Gracias
Shayan
Puede escribir un script para cargar su plantilla en la cuenta de almacenamiento. Entonces podría usar azure cli para generar el token SAS.
Shui shengbao