Uitvoer in Bicep
In dit artikel wordt beschreven hoe u uitvoerwaarden definieert in een Bicep-bestand. U gebruikt uitvoer wanneer u waarden van de geïmplementeerde resources moet retourneren. U bent beperkt tot 64 uitvoer in een Bicep-bestand. Zie Sjabloonlimieten voor meer informatie.
Uitvoerwaarden definiëren
De syntaxis voor het definiëren van een uitvoerwaarde is:
output <name> <data-type or type-expression> = <value>
Een uitvoer kan dezelfde naam hebben als een parameter, variabele, module of resource. Elke uitvoerwaarde moet worden omgezet in een van de gegevenstypen of door de gebruiker gedefinieerde expressie voor gegevenstypen.
In het volgende voorbeeld ziet u hoe u een eigenschap van een geïmplementeerde resource kunt retourneren. In het voorbeeld publicIP
is dit de symbolische naam voor een openbaar IP-adres dat is geïmplementeerd in het Bicep-bestand. De uitvoerwaarde haalt de volledig gekwalificeerde domeinnaam op voor het openbare IP-adres.
output hostname string = publicIP.properties.dnsSettings.fqdn
In het volgende voorbeeld ziet u hoe u uitvoer van verschillende typen retourneert.
output stringOutput string = deployment().name
output integerOutput int = length(environment().authentication.audiences)
output booleanOutput bool = contains(deployment().name, 'demo')
output arrayOutput array = environment().authentication.audiences
output objectOutput object = subscription()
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
.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
In het volgende voorbeeld ziet u hoe u een typeexpressie gebruikt:
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
Zie Door de gebruiker gedefinieerde gegevenstypen voor meer informatie.
Voorwaardelijke uitvoer
Wanneer de te retourneren waarde afhankelijk is van een voorwaarde in de implementatie, gebruikt u de ?
operator.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
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.
Als u een voorwaardelijke uitvoer in Bicep wilt opgeven, gebruikt u de ?
operator. In het volgende voorbeeld wordt een eindpunt-URL of een lege tekenreeks geretourneerd, afhankelijk van een voorwaarde.
param deployStorage bool = true
param storageName string
param location string = resourceGroup().location
resource myStorageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = if (deployStorage) {
name: storageName
location: location
kind: 'StorageV2'
sku:{
name:'Standard_LRS'
tier: 'Standard'
}
properties: {
accessTier: 'Hot'
}
}
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
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 de for
expressie.
output <name> <data-type> = [for <item> in <collection>: {
...
}]
In het volgende voorbeeld wordt een matrix herhaald.
param nsgLocation string = resourceGroup().location
param orgNames array = [
'Contoso'
'Fabrikam'
'Coho'
]
resource nsg 'Microsoft.Network/networkSecurityGroups@2020-06-01' = [for name in orgNames: {
name: 'nsg-${name}'
location: nsgLocation
}]
output deployedNSGs array = [for (name, i) in orgNames: {
orgName: name
nsgName: nsg[i].name
resourceId: nsg[i].id
}]
Zie Iteratieve lussen in Bicep voor meer informatie over lussen.
Uitvoer van modules
Gebruik de volgende syntaxis om een uitvoerwaarde op te halen uit een module:
<module-name>.outputs.<property-name>
In het volgende voorbeeld ziet u hoe u het IP-adres op een load balancer instelt door een waarde op te halen uit een module.
module publicIP 'modules/public-ip-address.bicep' = {
name: 'public-ip-address-module'
}
resource loadBalancer 'Microsoft.Network/loadBalancers@2020-11-01' = {
name: loadBalancerName
location: location
properties: {
frontendIPConfigurations: [
{
name: 'name'
properties: {
publicIPAddress: {
id: publicIP.outputs.resourceId
}
}
}
]
// ...
}
}
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 Azure CLI- of Azure PowerShell-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
- Zie De structuur en syntaxis van Bicep voor meer informatie over de beschikbare eigenschappen voor uitvoer.