الإخراج في Bicep

توضح هذه المقالة كيفية تعريف قيم الإخراج في ملف Bicep. يمكنك استخدام المخرجات عندما تحتاج إلى إرجاع القيم من الموارد الموزعة. تقتصر على 64 إخراجا في ملف Bicep. لمزيد من المعلومات، راجع حدود القالب.

تحديد قيم المخرجات

بناء الجملة لتعريف قيمة إخراج هو:

output <name> <data-type or type-expression> = <value>

لا يمكن أن يكون للإخراج نفس اسم المعلمة، أو المتغير، أو الوحدة النمطية، أو المورد. يجب حل كل قيمة إخراج إلى أحد أنواع البيانات، أو تعبير نوع البيانات المعرفة من قبل المستخدم.

يوضح المثال التالي كيفية إرجاع خاصية من مورد تم توزيعه. في المثال، publicIP هو الاسم الرمزي لعنوان IP العام الذي تم نشره في ملف Bicep. تحصل قيمة الإخراج على اسم المجال المؤهل بالكامل لعنوان IP العام.

output hostname string = publicIP.properties.dnsSettings.fqdn

يوضح المثال التالي كيفية إرجاع المخرجات من أنواع مختلفة.

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()

إذا كنت بحاجة إلى إخراج خاصية تحتوي على واصلة في الاسم، فاستخدم الأقواس حول الاسم بدلاً من تدوين النقطة. على سبيل المثال، ['property-name'] بدلاً من .property-name.

var user = {
  'user-name': 'Test Person'
}

output stringOutput string = user['user-name']

يوضح المثال التالي كيفية استخدام تعبير النوع:

param foo 'a' | 'b' = 'a'

output out 'a' | 'b' = foo

لمزيد من المعلومات، راجع أنواع البيانات المعرفة من قبل المستخدم.

المخرجات الشرطية

عندما تعتمد القيمة المراد إرجاعها على شرط في النشر، استخدم ? عامل التشغيل .

output <name> <data-type> = <condition> ? <true-value> : <false-value>

بشكل عام، يمكنك استخدام إخراج شرطي عند نشر مورد بشكل مشروط. يوضح المثال التالي كيفية إرجاع معرف المورد بشكل مشروط لعنوان IP عام استنادًا إلى ما إذا كان قد تم توزيع معرف جديد أم لا.

لتحديد الإخراج الشرطي في Bicep،، استخدم عامل التشغيل ?. يُرجع المثال التالي إما عنوان URL لنقطة النهاية أو سلسلة فارغة بناءً على شرط.

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 : ''

عدد المخرجات الديناميكية

في بعض السيناريوهات، لا تعرف عدد مثيلات القيمة التي تريد إرجاعها عند إنشاء القالب. يمكنك إرجاع عدد متغير من القيم باستخدام التعبير for.

output <name> <data-type> = [for <item> in <collection>: {
  ...
}]

المثال التالي يتكرر عبر مصفوفة.

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

للمزيد من المعلومات، راجع تكرار حلقي في Bicep.

مخرجات من الوحدات النمطية

للحصول على قيمة مخرجات من وحدة نمطية، استخدم الصيغة التالية:

<module-name>.outputs.<property-name>

يوضح المثال التالي كيفية تعيين عنوان IP على موازن التحميل عن طريق استرداد قيمة من وحدة نمطية.

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
          }
        }
      }
    ]
    // ...
  }
}

الحصول على قيم الإخراج

عندما ينجح التوزيع، يتم إرجاع قيم المخرجات تلقائيّاً في نتائج التوزيع.

للحصول على قيم المخرجات من محفوظات النشر، يمكنك استخدام Azure CLI أو Azure PowerShell النصي.

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

فرز العناصر في المخرجات

في JSON، العنصر هو مجموعة غير مرتبة من أزواج صفرية أو أكبر من المفاتيح/القيم. يمكن أن يكون الترتيب مختلفًا اعتمادًا على عمليات التنفيذ. على سبيل المثال، تقوم دالة Bicep items() بفرز العناصر بالترتيب الأبجدي. في أماكن أخرى، يمكن الاحتفاظ بالترتيب الأصلي. وبسبب هذا عدم الحتمية، تجنب وضع أي افتراضات حول ترتيب مفاتيح الكائنات عند كتابة التعليمات البرمجية، والتي تتفاعل مع معلمات التوزيع والمخرجات.

الخطوات التالية