Utdata i ARM-mallar

Den här artikeln beskriver hur du definierar utdatavärden i din Azure Resource Manager mall (ARM-mall). Du använder utdata när du behöver returnera värden från de distribuerade resurserna.

Formatet för varje utdatavärde måste matchas mot en av datatyperna.

Definiera utdatavärden

I följande exempel visas hur du returnerar en egenskap från en distribuerad resurs.

Lägg till outputs avsnittet i mallen. Utdatavärdet hämtar det fullständigt kvalificerade domännamnet för en offentlig IP-adress.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
  },
}

Om du behöver mata ut en egenskap som har ett bindestreck i namnet använder du hakparenteser runt namnet i stället för punktnotation. Använd till exempel i ['property-name'] stället för .property-name .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "user": {
      "user-name": "Test Person"
    }
  },
  "resources": [
  ],
  "outputs": {
    "nameResult": {
      "type": "string",
      "value": "[variables('user')['user-name']]"
    }
  }
}

Villkorliga utdata

Du kan använda elementet condition för att villkorligt returnera ett värde. Normalt använder du villkorsstyrda utdata när du har villkorligt distribuerat en resurs. I följande exempel visas hur du villkorligt returnerar resurs-ID:t för en offentlig IP-adress baserat på om en ny har distribuerats:

"outputs": {
  "resourceID": {
    "condition": "[equals(parameters('publicIpNewOrExisting'), 'new')]",
    "type": "string",
    "value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
  }
}

Ett enkelt exempel på villkorliga utdata finns i mallen för villkorsstyrda utdata.

Dynamiskt antal utdata

I vissa fall vet du inte hur många instanser av ett värde som du måste returnera när du skapar mallen. Du kan returnera ett variabelt antal värden med hjälp av iterativa utdata. Lägg till copy elementet för att iterera utdata.

"outputs": {
  "storageEndpoints": {
    "type": "array",
    "copy": {
      "count": "[parameters('storageCount')]",
      "input": "[reference(concat(copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
    }
  }
}

Mer information finns i Utdata-iteration i ARM-mallar.

Länkade mallar

Du kan distribuera relaterade mallar med hjälp av länkade mallar. Om du vill hämta utdatavärdet från en länkad mall använder du referensfunktionen i den överordnade mallen. Syntaxen i den överordnade mallen är:

"[reference('<deploymentName>').outputs.<propertyName>.value]"

I följande exempel visas hur du anger IP-adressen för en lastbalanserare genom att hämta ett värde från en länkad mall.

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs.resourceID.value]"
}

Om egenskapsnamnet har ett bindestreck använder du hakparenteser runt namnet i stället för punktnotation.

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs['resource-ID'].value]"
}

Du kan inte använda funktionen reference i avsnittet utdata i en kapslad mall. Om du vill returnera värdena för en distribuerad resurs i en kapslad mall konverterar du den kapslade mallen till en länkad mall.

Mallen Offentlig IP-adress skapar en offentlig IP-adress och matar ut resurs-ID:t. Lastbalanseringsmallen länkar till föregående mall. Den använder resurs-ID:t i utdata när lastbalanseraren skapas.

Exempelmall

Följande mall distribuerar inga resurser. Den visar några sätt att returnera utdata av olika typer.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "stringOutput": {
      "type": "string",
      "value": "[deployment().name]"
    },
    "integerOutput": {
      "type": "int",
      "value": "[length(environment().authentication.audiences)]"
    },
    "booleanOutput": {
      "type": "bool",
      "value": "[contains(deployment().name, 'demo')]"
    },
    "arrayOutput": {
      "type": "array",
      "value": "[environment().authentication.audiences]"
    },
    "objectOutput": {
      "type": "object",
      "value": "[subscription()]"
    }
  }
}

Hämta utdatavärden

När distributionen lyckas returneras utdatavärdena automatiskt i resultatet av distributionen.

Du kan använda skript för att hämta utdatavärden från distributionshistoriken.

(Get-AzResourceGroupDeployment `
  -ResourceGroupName <resource-group-name> `
  -Name <deployment-name>).Outputs.resourceID.value

Nästa steg