توزع تعريفات نهج Azure تأثيرIfNotExists

على auditIfNotExistsغرار ، ينفذ تعريف النهج deployIfNotExists نشر قالب عند استيفاء الشرط. تتطلب تعيينات النهج ذات التأثير المعين على DeployIfNotExists هوية مدارة لإجراء المعالجة.

إشعار

القوالب المتداخلة مدعومة مع deployIfNotExists، ولكن القوالب المرتبطة غير مدعومة حاليا.

تقييم DeployIfNotExists

deployIfNotExists يعمل بعد تأخير قابل للتكوين عندما يتعامل موفر الموارد مع إنشاء أو تحديث اشتراك أو طلب مورد وإرجاع رمز حالة النجاح. يحدث نشر القالب إذا لم تكن هناك موارد ذات صلة أو إذا لم يتم تقييم الموارد المعرفة بواسطة existenceCondition إلى true. تعتمد مدة التوزيع على تعقيد الموارد المضمنة في القالب.

أثناء دورة التقييم، تميز تعريفات النهج ذات تأثير DeployIfNotExists التي تطابق الموارد على أنها غير متوافقة، ولكن لا يتم اتخاذ أي إجراء على هذا المورد. يمكن إصلاح الموارد غير المتوافقة الموجودة بمهمة المعالجة.

DeployIfNotExists properties

تحتوي details خاصية تأثير DeployIfNotExists على كافة الخصائص الفرعية التي تحدد الموارد ذات الصلة المراد مطابقتها ونشر القالب المراد تنفيذه.

  • type (مطلوب)
    • تحدد نوع المورد ذي الصلة المراد مطابقته.
    • إذا كان type نوع مورد أسفل if مورد الشرط، يستعلم النهج عن موارد هذا type ضمن نطاق المورد الذي تم تقييمه. وإلا، فإن استعلامات النهج داخل نفس مجموعة الموارد أو الاشتراك مثل المورد الذي تم تقييمه اعتمادا على existenceScope.
  • name (اختياري)
    • يحدد الاسم الدقيق للمورد المراد مطابقته ويتسبب في إحضار النهج لمورد معين واحد بدلًا من كافة الموارد من النوع المحدد.
    • عندما تكون قيم الشرط ل if.field.type ومطابقة then.details.type ، تصبح name مطلوبة ويجب أن تكون [field('name')]، أو [field('fullName')] لمورد تابع.

إشعار

typename ويمكن دمج الشرائح لاسترداد الموارد المتداخلة بشكل عام.

لاسترداد مورد معين، يمكنك استخدام "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" و "name": "parentResourceName/nestedResourceName".

لاسترداد مجموعة من الموارد المتداخلة، يمكن توفير حرف ? بدل بدلا من مقطع اسم العائلة. على سبيل المثال، "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" و "name": "parentResourceName/?". يمكن دمج هذا مع وظائف الحقل للوصول إلى الموارد المتعلقة بالمورد الذي تم تقييمه، مثل "name": "[concat(field('name'), '/?')]"."

  • resourceGroupName (اختياري)

    • تسمح بمطابقة المورد ذي الصلة أن يأتي من مجموعة موارد مختلفة.
    • لا ينطبق إذا كان type موردا سيكون تحت if مورد الشرط.
    • الافتراضي هو if مجموعة موارد مورد الشرط.
    • إذا تم تنفيذ توزيع قالب، فسيتم توزيعه في مجموعة الموارد لهذه القيمة.
  • existenceScope (اختياري)

    • القيم المسموح بها هي Subscription وResourceGroup.
    • تعيين نطاق مكان إحضار المورد ذي الصلة للمطابقة منه.
    • لا ينطبق إذا كان type موردا سيكون تحت if مورد الشرط.
    • بالنسبة إلى ResourceGroup، سيقتصر على مجموعة الموارد في resourceGroupName إذا تم تحديدها. إذا resourceGroupName لم يتم تحديد، فسيقتصر على if مجموعة موارد مورد الشرط، وهو السلوك الافتراضي.
    • بالنسبة إلى Subscription، ستستعلم عن الاشتراك بأكمله للمورد ذي الصلة. يجب تعيين نطاق التعيين على الاشتراك أو أعلى للحصول على التقييم المناسب.
    • الإعداد الافتراضي هو ResourceGroup.
  • evaluationDelay (اختياري)

    • يحدد متى يجب تقييم وجود الموارد ذات الصلة. لا يتم استخدام التأخير إلا للتقييمات الناتجة عن إنشاء طلب مورد أو تحديثه.
    • القيم المسموح بها هي AfterProvisioning أو AfterProvisioningSuccess أو AfterProvisioningFailureأو مدة ISO 8601 بين 0 و360 دقيقة.
    • تقوم قيم AfterProvisioning بفحص نتيجة التوفير للمورد الذي تم تقييمه في شرط قاعدة النهجif. AfterProvisioning يعمل بعد اكتمال التوفير، بغض النظر عن النتيجة. يتم التعامل مع التزويد الذي يستغرق أكثر من ست ساعات على أنه فشل عند تحديد تأخيرات التقييم بعد التوفير.
    • الإعداد الافتراضي هو PT10M (10 دقائق).
    • قد يؤدي تحديد تأخير تقييم طويل إلى عدم تحديث حالة التوافق المسجلة للمورد حتى مشغل التقييم التالي.
  • existenceCondition (اختياري)

    • إذا لم يتم تحديده، فإن أي مورد type ذي صلة يفي بالتأثير ولا يقوم بتشغيل النشر.
    • يستخدم نفس لغة قاعدة النهج للشرط if ، ولكن يتم تقييمه مقابل كل مورد ذي صلة على حدة.
    • إن تم تقييم أي مورد مرتبط مطابق باعتباره صحيح، يتم استيفاء التأثير ولا يقوم بتشغيل التوزيع.
    • يمكن استخدام [field()] للتحقق من التكافؤ مع القيم في if الشرط.
    • على سبيل المثال، يمكن استخدام للتحقق من أن المورد الأصل (في if الشرط) موجود في نفس موقع المورد مثل المورد المطابق ذي الصلة.
  • roleDefinitionIds (مطلوب)

    • يجب أن تتضمن هذه الخاصية صفيفًا من السلاسل التي تطابق معرف دور التحكم في الوصول المستند إلى الدور الذي يمكن الوصول إليه بواسطة الاشتراك. لمزيد من المعلومات، راجع المعالجة - تكوين تعريف النهج.
  • deploymentScope (اختياري)

    • القيم المسموح بها هي Subscription وResourceGroup.
    • تعيين نوع التوزيع الذي سيتم تشغيله. يشير الاشتراك إلى توزيع على مستوى الاشتراك وتشير ResourceGroup إلى توزيع إلى مجموعة موارد.
    • يجب تحديد خاصية location في Deployment عند استخدام عمليات التوزيع على مستوى الاشتراك.
    • الإعداد الافتراضي هو ResourceGroup.
  • deployment (مطلوب)

    • يجب أن تتضمن هذه الخاصية توزيع القالب الكامل حيث سيتم تمريره إلى Microsoft.Resources/deployments PUT API. لمزيد من المعلومات، راجع توزيع واجهة برمجة تطبيقات REST.
    • يجب أن يستخدم Microsoft.Resources/deployments المتداخل داخل القالب أسماء فريدة لتجنب الخلاف بين تقييمات النهج المتعددة. يمكن استخدام اسم التوزيع الأصل كجزء من اسم التوزيع المتداخل عبر [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    إشعار

    يتم تقييم جميع الدالات داخل الخاصية deployment كمكونات للقالب، وليس النهج. الاستثناء هو الخاصية parameters التي تمرر القيم من النهج إلى القالب. value يتم استخدام في هذا القسم ضمن اسم معلمة قالب لتنفيذ تمرير هذه القيمة (راجع fullDbName في المثال DeployIfNotExists).

مثال DeployIfNotExists

مثال: يقيم قواعد بيانات SQL Server لتحديد ما إذا كان transparentDataEncryption ممكنا أم لا. إن لم يتم تمكينها، فحينها سيتم تنفيذ عملية التوزيع للتمكين.

"if": {
  "field": "type",
  "equals": "Microsoft.Sql/servers/databases"
},
"then": {
  "effect": "deployIfNotExists",
  "details": {
    "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
    "name": "current",
    "evaluationDelay": "AfterProvisioning",
    "roleDefinitionIds": [
      "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
      "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ],
    "existenceCondition": {
      "field": "Microsoft.Sql/transparentDataEncryption.status",
      "equals": "Enabled"
    },
    "deployment": {
      "properties": {
        "mode": "incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "fullDbName": {
              "type": "string"
            }
          },
          "resources": [
            {
              "name": "[concat(parameters('fullDbName'), '/current')]",
              "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
              "apiVersion": "2014-04-01",
              "properties": {
                "status": "Enabled"
              }
            }
          ]
        },
        "parameters": {
          "fullDbName": {
            "value": "[field('fullName')]"
          }
        }
      }
    }
  }
}

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