2017-09-27 1 views
1

Sagen Sie bitte die folgenden Dateien haben, werden diese in dem in einem Visual Studio gemacht, indem eine neue Azure Ressourcengruppe Bereitstellung auswählen und dann eine verschachtelte Vorlage Hinzufügen zweimalWie verwendet man ein uri und übergebene Parameter für eine verknüpfte Vorlage?

azuredeploy.json

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
    "_artifactsLocation": { 
     "type": "string" 
    }, 
    "_artifactsLocationSasToken": { 
     "type": "securestring" 
    } 
    }, 
    "variables": { 
    "linkedTemplateTemplateFolder": "nestedtemplates", 
    "linkedTemplateTemplateFileName": "linkedTemplate.json", 
    "linkedTemplateTemplateParametersFileName": "linkedTemplate.parameters.json" 
    }, 
    "resources": [ 
    { 
     "name": "linkedTemplate", 
     "type": "Microsoft.Resources/deployments", 
     "apiVersion": "2016-09-01", 
     "dependsOn": [], 
     "properties": { 
     "mode": "Incremental", 
     "templateLink": { 
      "uri": 
      "[concat(parameters('_artifactsLocation'), '/', variables('linkedTemplateTemplateFolder'), '/', variables('linkedTemplateTemplateFileName'), parameters('_artifactsLocationSasToken'))]", 
      "contentVersion": "1.0.0.0" 
     }, 
     "parametersLink": { 
      "uri": 
      "[concat(parameters('_artifactsLocation'), '/', variables('linkedTemplateTemplateFolder'), '/', variables('linkedTemplateTemplateParametersFileName'), parameters('_artifactsLocationSasToken'))]", 
      "contentVersion": "1.0.0.0" 
     }, 
     "parameters": { 
      "_artifactsLocation": { "value": "[parameters('_artifactsLocation')]" }, 
      "_artifactsLocationSasToken": { "value": "[parameters('_artifactsLocationSasToken')]" } 
     } 
     } 
    } 
    ], 
    "outputs": { 
    "result": { 
     "type": "object", 
     "value": "[reference('linkedTemplate').outputs.result.value]" 
    } 
    } 
} 

azuredeploy.parameters.json

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
    } 
} 

nestedtemplates \ linkedTemplate.json

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
    "Foo": { 
     "type": "string" 
    }, 
    "_artifactsLocation": { 
     "type": "string" 
    }, 
    "_artifactsLocationSasToken": { 
     "type": "securestring" 
    } 
    }, 
    "variables": { 
    "thirdTeirTemplateFolder": "nestedtemplates", 
    "thirdTeirTemplateFileName": "thirdTeir.json", 
    "thirdTeirTemplateParametersFileName": "thirdTeir.parameters.json" 
    }, 
    "resources": [ 
    { 
     "name": "thirdTeir", 
     "type": "Microsoft.Resources/deployments", 
     "apiVersion": "2016-09-01", 
     "dependsOn": [], 
     "properties": { 
     "mode": "Incremental", 
     "templateLink": { 
      "uri": "[concat(parameters('_artifactsLocation'), '/', variables('thirdTeirTemplateFolder'), '/', variables('thirdTeirTemplateFileName'), parameters('_artifactsLocationSasToken'))]", 
      "contentVersion": "1.0.0.0" 
     }, 
     "parameters": { 
      "Foo": {"value": "[parameters('Foo')]"} 
     } 
     } 
    } 
    ], 
    "outputs": { 
    "result": { 
     "type": "string", 
     "value": "[reference('thirdTeir').outputs.result]" 
    } 
    } 
} 

nestedtemplates \ linkedTemplate.parameters.json

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
    "Foo": { 
     "value": "Foo!" 
    } 
    } 
} 

nestedtemplates \ thirdTeir.json

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
    "Foo": { 
     "type": "string" 
    } 
    }, 
    "variables": {}, 
    "resources": [], 
    "outputs": { 
    "result": { 
     "type": "string", 
     "value": "[parameters('Foo')]" 
    } 
    } 
} 

Dies wird natürlich mit dem Fehler fehlschlagen

Error: Code=InvalidDeployment; Message=The deployment 'linkedTemplate' cannot have both the ParameterLink and Parameter property set. Please use one or the other. Please see https://aka.ms/arm-deploy for usage details.

und das macht durchaus Sinn, weil the documentation states Sie können nicht gleichzeitig parametersLink und parameters verwenden.

Welche Problemumgehung sollte ich in dieser Situation tun, wie bekomme ich _artifactsLocation und _artifactsLocationSasToken in der mittleren Ebene der Vorlagen übergeben, während immer noch eine separate Datei zu halten Konfigurationswerte, die übergeben werden?

Nur für den Fall, dass ich eine XY-Frage stelle, ist das wirkliche Problem, das ich zu lösen versuche, wenn es eine Möglichkeit gibt, direkt in einer JSON-Datei zu lesen, die einige über URI übermittelte Konfigurationsdaten enthält und auf deren Inhalt zugreift? Das ist etwas, was ich tun muss.

+0

Link zu einer Kopie der Frage auf den [social.msdn.microsoft.com Foren] (https://social.msdn.microsoft.com/Forums/en-US/518943d1-2d06-4393-b3b9-f6ea5144717c/how-to-use-a-uri-und-übergeben-in-Parameter-from-inside-a-arm-Vorlage? Forum = azurescripting) –

Antwort

1

Ich denke, das eigentliche Problem Sie versuchen zu umgehen, ist vorbei, beide Parameter und verknüpfte Parameter zu einer verschachtelten Bereitstellung ... ich von ein paar Optionen denken kann, sind keine sehr elegant:

  1. haben Ihre Bereitstellung Skript las die verknüpften jSON-Datei params und alle params in der verschachtelten Bereitstellung verwendet
  2. haben Ihre Bereitstellung Skript Ihre param-Dateien mit dem Standort und sasToken schreiben, bevor sie
  3. schreibt den Standort und sasToken in einem Deployment-Ausgang, Inszenierung und referenziere sie von der Ausgabe und nicht als Parameter
  4. Schreiben Sie den Speicherort und sasToken in keyvault und fügen Sie den Parameterverweis auf keyvault in Ihre verknüpfte Parameterdatei ein - das ist schwierig, da Sie die Tresorreferenz vor der Bereitstellung kennen müssen (wenn Sie Ihre param-Datei erstellen).

3 ist wahrscheinlich der am wenigsten hacky und könnte komplett innerhalb der Vorlage (n) gemacht werden, aber könnte Ihren sasToken nicht länger geheim halten. (Ich denke, nicht sicher, ob Sie es secureString durchlassen können oder nicht).

Das hilft?

Verwandte Themen