التوزيع الشرطي في قوالب ARM

في بعض الأحيان تحتاج إلى توزيع مورد اختياريّاً في قالب Azure Resource Manager (قالب ARM). استخدم الكلمة العنصر condition لتحديد ما إذا كان سيتم توزيع المورد. تحل قيمة الشرط إلى صحيح أو خطأ. عندما تكون القيمة صحيحة، يتم إنشاء المورد. عندما تكون القيمة خطأ، لا يتم إنشاء المورد. يمكن تطبيق القيمة فقط على المورد بأكمله.

ملاحظة

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

تلميح

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

نشر الشرط

يمكنك تمرير قيمة معلمة تشير إلى ما إذا كان قد تم نشر المورد أم لا. المثال التالي ينشر بشكل مشروط منطقة DNS.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "deployZone": {
      "type": "bool"
    }
  },
  "functions": [],
  "resources": [
    {
      "condition": "[parameters('deployZone')]",
      "type": "Microsoft.Network/dnsZones",
      "apiVersion": "2018-05-01",
      "name": "myZone",
      "location": "global"
    }
  ]
}

للحصول على مثال أكثر تعقيداً، راجع الخادم المنطقي Azure SQL.

مورد جديد أو موجود

يمكنك استخدام التوزيع الشرطي لإنشاء مورد جديد أو استخدام مورد موجود. يوضح المثال التالي كيفية نشر حساب تخزين جديد أو استخدام حساب تخزين موجود.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "newOrExisting": {
      "type": "string",
      "defaultValue": "new",
      "allowedValues": [
        "new",
        "existing"
      ]
    }
  },
  "resources": [
    {
      "condition": "[equals(parameters('newOrExisting'), 'new')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    },
    {
      "condition": "[equals(parameters('newOrExisting'), 'existing')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]"
    }
  ],
  "outputs": {
    "storageAccountId": {
      "type": "string",
      "value": "[if(equals(parameters('newOrExisting'), 'new'), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]"
    }
  }
}

عندما يتم تعيين المعلمة newOrExisting على جديد، يتم تقييم الشرط على "صواب". تم نشر حساب التخزين. وإلا يتم استخدام حساب التخزين الحالي.

للحصول على قالب مثال كامل يستخدم العنصر condition، راجع VM باستخدام شبكة ظاهرية جديدة أو موجودة، والتخزين، وعنوان IP العام.

وظائف وقت التشغيل

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

استخدم التعبير وظيفة If للتأكد من أن الوظيفة يتم تقييمها فقط للشروط عند نشر المورد. راجع الوظيفة if لقالب نموذج يستخدم if وreference مع مورد نشر مشروط.

تقوم بتعيين مورد كمعتمد على مورد شرطي تماماً كما تفعل بأي مورد آخر. عندما لا يتم نشر مورد شرطي، يقوم Azure Resource Manager بإزالتها تلقائيّاً من التبعيات المطلوبة.

الوضع الكامل

إن نشرت قالباً بالوضع الكامل لم يتم نشر مورد لأن condition تم تقييمه على أنه خطأ، فإن النتيجة تعتمد على إصدار REST API الذي تستخدمه لتوزيع القالب. إذا كنت تستخدم إصداراً أقدم من 2019-05-10، فلن يتم حذف المورد. في 2019-05-10 أو ما بعده، يتم حذف المورد. تحذف أحدث إصدارات Azure PowerShell وAzure CLI المورد عند الشرط الخطأ.

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