المخرجات في قوالب ARM

توضح هذه المقالة كيفية تحديد قيم المخرجات في قالب Azure Resource Manager (قالب ARM). يمكنك استخدام المخرجات عندما تحتاج إلى إرجاع القيم من الموارد الموزعة.

يجب أن يتناسب تنسيق كل قيمة مخرجة مع أحد أنواع البيانات.

تلميح

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

تقتصر على 64 إخراجا في قالب. لمزيد من المعلومات، راجع حدود القالب.

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

يوضح المثال التالي كيفية إرجاع خاصية من مورد تم توزيعه.

أضف القسم outputs إلى القالب. تحصل قيمة الإخراج على اسم المجال المؤهل بالكامل لعنوان IP عام.

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

إذا كنت بحاجة إلى إخراج خاصية تحتوي على واصلة في الاسم، فاستخدم الأقواس حول الاسم بدلاً من تدوين النقطة. على سبيل المثال، ['property-name'] بدلاً من .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']]"
    }
  }
}

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

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

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

للحصول على مثال بسيط للإخراج الشرطي، راجع قالب الإخراج الشرطي.

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

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

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

لمزيد من المعلومات، راجع تكرار الإخراج في قوالب ARM .

القالب المرتبط⁧

يمكنك نشر القوالب ذات الصلة باستخدام القوالب المرتبطة. لاسترداد قيمة الإخراج من قالب مرتبط، استخدم وظيفة reference في القالب الأصلي. الصيغة في القالب الأصلي هي:

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

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

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

إذا كان اسم الخاصية يحتوي على واصلة، فاستخدم الأقواس حول الاسم بدلًا من تدوين النقطة.

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

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

يقوم قالب عنوان IP العام بإنشاء عنوان IP عام وإخراج معرف المورد. يرتبط نموذج موازن التحميل بالقالب السابق. يستخدم معرف المورد في الإخراج عند إنشاء موازن التحميل.

نموذج تجريبي

النموذج التالي لا يوزع أي موارد. يعرض بعض طرق إرجاع المخرجات من أنواع مختلفة.

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

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

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

للحصول على قيم الإخراج من محفوظات التوزيع، يمكنك استخدام البرنامج النصي.

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

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

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

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