Uitvoer in ARM-sjablonen

In dit artikel wordt beschreven hoe u uitvoerwaarden definieert in uw Azure Resource Manager-sjabloon (ARM-sjabloon). U gebruikt uitvoer wanneer u waarden van de geïmplementeerde resources moet retourneren.

De indeling van elke uitvoerwaarde moet worden omgezet in een van de gegevenstypen.

Tip

We raden Bicep aan omdat het dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie de uitvoer voor meer informatie.

U bent beperkt tot 64 uitvoer in een sjabloon. Zie Sjabloonlimieten voor meer informatie.

Uitvoerwaarden definiëren

In het volgende voorbeeld ziet u hoe u een eigenschap van een geïmplementeerde resource kunt retourneren.

Voeg de outputs sectie toe aan de sjabloon. De uitvoerwaarde haalt de volledig gekwalificeerde domeinnaam op voor een openbaar IP-adres.

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

Als u een eigenschap met een afbreekstreepje in de naam wilt uitvoeren, gebruikt u vierkante haken rond de naam in plaats van punt notatie. Gebruik bijvoorbeeld ['property-name'] in plaats van .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']]"
    }
  }
}

Voorwaardelijke uitvoer

U kunt het condition element gebruiken om voorwaardelijk een waarde te retourneren. Normaal gesproken gebruikt u een voorwaardelijke uitvoer wanneer u een resource voorwaardelijk hebt geïmplementeerd . In het volgende voorbeeld ziet u hoe u de resource-id voorwaardelijk retourneert voor een openbaar IP-adres op basis van of er een nieuwe is geïmplementeerd:

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

Zie de sjabloon voor voorwaardelijke uitvoer voor een eenvoudig voorbeeld van voorwaardelijke uitvoer.

Dynamisch aantal uitvoer

In sommige scenario's weet u niet hoeveel exemplaren van een waarde u moet retourneren bij het maken van de sjabloon. U kunt een variabel aantal waarden retourneren met behulp van iteratieve uitvoer. Voeg het copy element toe om een uitvoer te herhalen.

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

Zie De uitvoeriteratie in ARM-sjablonen voor meer informatie.

Gekoppelde sjablonen

U kunt gerelateerde sjablonen implementeren met behulp van gekoppelde sjablonen. Als u de uitvoerwaarde van een gekoppelde sjabloon wilt ophalen, gebruikt u de referentiefunctie in de bovenliggende sjabloon. De syntaxis in de bovenliggende sjabloon is:

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

In het volgende voorbeeld ziet u hoe u het IP-adres op een load balancer instelt door een waarde op te halen uit een gekoppelde sjabloon.

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

Als de eigenschapsnaam een afbreekstreepje heeft, gebruikt u vierkante haken rond de naam in plaats van punt notatie.

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

U kunt de reference functie niet gebruiken in de uitvoersectie van een geneste sjabloon. Als u de waarden voor een geïmplementeerde resource in een geneste sjabloon wilt retourneren, converteert u de geneste sjabloon naar een gekoppelde sjabloon.

De sjabloon Openbaar IP-adres maakt een openbaar IP-adres en voert de resource-id uit. De load balancer-sjabloon is gekoppeld aan de voorgaande sjabloon. Bij het maken van de load balancer wordt de resource-id in de uitvoer gebruikt.

Voorbeeldsjabloon

Met de volgende sjabloon worden geen resources geïmplementeerd. Hier ziet u enkele manieren om uitvoer van verschillende typen te retourneren.

{
  "$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()]"
    }
  }
}

Uitvoerwaarden ophalen

Wanneer de implementatie slaagt, worden de uitvoerwaarden automatisch geretourneerd in de resultaten van de implementatie.

Als u uitvoerwaarden wilt ophalen uit de implementatiegeschiedenis, kunt u het script gebruiken.

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

Objectsortering in uitvoer

In JSON is een object een niet-geordende verzameling van nul of meer sleutel-waardeparen. De volgorde kan verschillen, afhankelijk van de implementaties. De functie Bicep items() sorteert bijvoorbeeld de objecten in alfabetische volgorde. Op andere plaatsen kan de oorspronkelijke volgorde behouden blijven. Vanwege dit niet-determinisme vermijdt u veronderstellingen over de volgorde van objectsleutels bij het schrijven van code, die communiceert met implementatieparameters en uitvoer.

Volgende stappen