Azure kaynaklarında dizi özellikleri için yazma ilkeleri

Azure Resource Manager özellikler genellikle dizeler ve Boole değerleri olarak tanımlanır. Bire çok ilişkisi olduğunda, karmaşık özellikler bunun yerine diziler olarak tanımlanır. Azure Ilkesinde diziler birkaç farklı şekilde kullanılır:

  • Birden çok seçenek sağlamak için bir tanım parametresinintürü
  • Ya da notın koşullarını kullanan bir ilke kuralının bir parçası
  • Bir koşula uyan dizi üyesinin sayısını sayan bir ilke kuralının parçası
  • Var olan bir diziyi güncelleştirmek için ekleme ve değiştirme efektlerinde

Bu makalede Azure Ilkesi tarafından kullanılan her kullanım ele alınmaktadır ve birkaç örnek tanım sunulmaktadır.

Parametre dizileri

Parametre dizisi tanımlama

Bir parametreyi dizi olarak tanımlamak, birden fazla değer gerektiğinde ilke esnekliği sağlar. Bu ilke tanımı, Allowedlocations parametresi için tek bir konuma izin verir ve varsayılan olarak eastus2:

"parameters": {
    "allowedLocations": {
        "type": "string",
        "metadata": {
            "description": "The list of allowed locations for resources.",
            "displayName": "Allowed locations",
            "strongType": "location"
        },
        "defaultValue": "eastus2"
    }
}

Tür dize olduğu için, ilke atanırken yalnızca bir değer ayarlanabilir. Bu ilke atanırsa, kapsamdaki kaynaklara yalnızca tek bir Azure bölgesi içinde izin verilir. Çoğu ilke tanımlarının, eastus2, eastus ve westus2 gibi onaylanan seçenekler listesi için izin verilmesi gerekir.

Birden çok seçeneğe izin vermek üzere ilke tanımı oluşturmak için dizi türünü kullanın. Aynı ilke aşağıdaki gibi yeniden yazılabilir:

"parameters": {
    "allowedLocations": {
        "type": "array",
        "metadata": {
            "description": "The list of allowed locations for resources.",
            "displayName": "Allowed locations",
            "strongType": "location"
        },
        "defaultValue": "eastus2",
        "allowedValues": [
            "eastus2",
            "eastus",
            "westus2"
        ]

    }
}

Not

Bir ilke tanımı kaydedildikten sonra, bir parametresindeki tür özelliği değiştirilemez.

Bu yeni parametre tanımı, ilke ataması sırasında birden fazla değer alır. Dizi özelliği tarafından tanımlanan, atama sırasında kullanılabilir olan değerler önceden tanımlanmış seçenek listesiyle daha da sınırlıdır. AllowedValues kullanımı isteğe bağlıdır.

Atama sırasında değerleri bir parametre dizisine geçirme

İlke Azure portal aracılığıyla atanırken, dizi türünde bir parametre tek bir metin kutusu olarak görüntülenir. İpucu "kullanım" diyor. değerlerini ayırmak için. (örneğin, Londra; New York) ". Eastus2, eastus ve westus2 izin verilen konum değerlerini parametreye geçirmek için aşağıdaki dizeyi kullanın:

eastus2;eastus;westus2

Azure clı, Azure PowerShell veya REST API kullanılırken parametre değerinin biçimi farklıdır. Değerler, parametrenin adını da içeren bir JSON dizesi aracılığıyla geçirilir.

{
    "allowedLocations": {
        "value": [
            "eastus2",
            "eastus",
            "westus2"
        ]
    }
}

Bu dizeyi her SDK ile kullanmak için aşağıdaki komutları kullanın:

  • Azure CLı: komut az Policy atama Create parametresini parametre params
  • Azure PowerShell: Cmdlet New-AzPolicyAssignment with parameter PolicyParameter
  • REST API: PUT oluşturma işleminde, Properties. Parameters özelliğinin değeri olarak istek gövdesinin bir parçası olarak

Koşullarda dizileri kullanma

Ve Notın

inVe notIn Koşulları yalnızca dizi değerleriyle çalışır. Bir dizideki değerin varlığını kontrol ederler. Dizi, sabit bir JSON dizisi ya da bir dizi parametresine başvuru olabilir. Örnek:

{
      "field": "tags.environment",
      "in": [ "dev", "test" ]
}
{
      "field": "location",
      "notIn": "[parameters('allowedLocations')]"
}

Değer sayısı

Değer sayısı ifadesi bir koşula göre kaç dizi üyesinin olduğunu sayar. Her yinelemede farklı değerler kullanarak aynı koşulu birden çok kez değerlendirmek için bir yol sağlar. Örneğin, aşağıdaki koşul, kaynak adının bir desen dizisinden herhangi bir desenle eşleşip eşleşmediğini denetler:

{
    "count": {
        "value": [ "test*", "dev*", "prod*" ],
        "name": "pattern",
        "where": {
            "field": "name",
            "like": "[current('pattern')]"
        }
    },
    "greater": 0
}

İfadeyi değerlendirmek için Azure Ilkesi, where her üye için bir kez koşulu üç kez değerlendirir, [ "test*", "dev*", "prod*" ] kaç kez değerlendirildiğini Sayın true . Her yinelemede, geçerli dizi üyesinin değeri pattern tarafından tanımlanan dizin adıyla eşleştirilmiş count.name . Bu değere daha sonra, where özel bir şablon işlevi çağırarak koşulun içinde başvurulabilir: current('pattern') .

Yineleme current('pattern') döndürülen değer
1 "test*"
2 "dev*"
3 "prod*"

Koşul yalnızca, sonuçlanmış count 0 ' dan büyük olduğunda geçerlidir.

Koşulu daha genel hale getirmek için, sabit bir dizi yerine parametre başvurusunu kullanın:

{
    "count": {
        "value": "[parameters('patterns')]",
        "name": "pattern",
        "where": {
            "field": "name",
            "like": "[current('pattern')]"
        }
    },
    "greater": 0
}

Değer sayısı ifadesi herhangi bir diğer sayı ifadesi altında olmadığında, count.name isteğe bağlıdır ve current() işlev herhangi bir bağımsız değişken olmadan kullanılabilir:

{
    "count": {
        "value": "[parameters('patterns')]",
        "where": {
            "field": "name",
            "like": "[current()]"
        }
    },
    "greater": 0
}

Değer sayısı Ayrıca karmaşık nesne dizilerini destekler, daha karmaşık koşullara izin verir. Örneğin, aşağıdaki koşul her bir ad deseninin istenen etiket değerini tanımlar ve kaynak adının düzeniyle eşleşip eşleşmediğini denetler, ancak gerekli etiket değerine sahip olup olmadığını denetler:

{
    "count": {
        "value": [
            { "pattern": "test*", "envTag": "dev" },
            { "pattern": "dev*", "envTag": "dev" },
            { "pattern": "prod*", "envTag": "prod" },
        ],
        "name": "namePatternRequiredTag",
        "where": {
            "allOf": [
                {
                    "field": "name",
                    "like": "[current('namePatternRequiredTag').pattern]"
                },
                {
                    "field": "tags.env",
                    "notEquals": "[current('namePatternRequiredTag').envTag]"
                }
            ]
        }
    },
    "greater": 0
}

Faydalı örnekler için bkz. değer sayısı örnekleri.

Başvuru dizisi kaynak özellikleri

Birçok kullanım çalışması, değerlendirilen kaynaktaki dizi özellikleriyle çalışmayı gerektirir. Bazı senaryolar bir dizinin tamamına başvurulmayı gerektirir (örneğin, uzunluğunun denetlenmesi). Diğerleri her bir dizi üyesine bir koşul uygulanmasını gerektirir (örneğin, tüm güvenlik duvarı kuralının internet 'ten erişimi engellemediğinden emin olun). Azure Ilkesinin kaynak özelliklerine başvurabileceği farklı yolları ve bu başvuruların dizi özelliklerine başvurduklarında nasıl davranacağını anlamak, bu senaryoları kapsayan koşullar yazmak için kullanılan anahtardır.

Kaynak özelliklerine başvurma

Kaynak özelliklerine diğer adlar kullanılarak Azure ilkesi tarafından başvurulabilir. Azure Policy içindeki bir kaynak özelliğinin değerlerine başvurmak için iki yol vardır:

  • Tüm seçili kaynak özelliklerinin bir koşula uyup uymadığını denetlemek için alan koşulunu kullanın. Örnek:

    {
      "field" : "Microsoft.Test/resourceType/property",
      "equals": "value"
    }
    
  • field()Bir özelliğin değerine erişmek için işlevini kullanın. Örnek:

    {
      "value": "[take(field('Microsoft.Test/resourceType/property'), 7)]",
      "equals": "prefix_"
    }
    

Alan koşulunun örtük bir "tümü" davranışı vardır. Diğer ad bir değer koleksiyonunu temsil ediyorsa, tüm bireysel değerlerin koşulu karşılayıp karşılamadığını denetler. field()İşlevi diğer şablon işlevleri tarafından işlenebilen, diğer adıyla temsil edilen değerleri döndürür.

Başvuru dizisi alanları

Dizi kaynağı özellikleri iki farklı ad türü tarafından temsil edilir. Kendisine eklenmiş bir ' normal ' diğer ad ve dizi diğer adı [*] :

  • Microsoft.Test/resourceType/stringArray
  • Microsoft.Test/resourceType/stringArray[*]

Diziye başvurma

İlk diğer ad, istek içeriğinden özelliğin değerini tek bir değer temsil eder stringArray . Bu özelliğin değeri bir dizi olduğundan, ilke koşullarında yararlı değildir. Örnek:

{
  "field": "Microsoft.Test/resourceType/stringArray",
  "equals": "..."
}

Bu koşul, tüm stringArray diziyi tek bir dize değerine karşılaştırır. Çoğu koşul, equals yalnızca dize değerlerini kabul eder, bu nedenle bir diziyi bir dizeye karşılaştırırken çok daha fazla kullanılmaz. Dizi özelliğine başvuran ana senaryo, var olup olmadığı denetlenirken yararlı olur:

{
  "field": "Microsoft.Test/resourceType/stringArray",
  "exists": "true"
}

İşlevi ile field() döndürülen değer, istek içeriğindeki dizidir, daha sonra dizi bağımsız değişkenlerini kabul eden desteklenen şablon işlevleri ile birlikte kullanılabilir. Örneğin, aşağıdaki koşul uzunluğunun 0 ' dan büyük olup olmadığını denetler stringArray :

{
  "value": "[length(field('Microsoft.Test/resourceType/stringArray'))]",
  "greater": 0
}

Dizi üyeleri koleksiyonuna başvurma

Söz dizimini kullanan diğer adlar, Array özelliğinin [*] kendisini seçmekten farklı olan bir Array özelliğinden seçilen özellik değerlerinin bir koleksiyonunu temsil eder. Durumunda Microsoft.Test/resourceType/stringArray[*] , tüm üyelerini içeren bir koleksiyon döndürür stringArray . Daha önce belirtildiği gibi, bir field koşul tüm seçili kaynak özelliklerinin koşulu karşıladığını denetlediğinde, bu nedenle aşağıdaki koşul yalnızca Tüm üyeleri stringArray ' "değeri" ' değerine eşitse true olur.

{
  "field": "Microsoft.Test/resourceType/stringArray[*]",
  "equals": "value"
}

Dizi nesneler içeriyorsa, [*] her bir dizi üyesinden belirli bir özelliğin değerini seçmek için bir diğer ad kullanılabilir. Örnek:

{
  "field": "Microsoft.Test/resourceType/objectArray[*].property",
  "equals": "value"
}

propertyİçindeki tüm özelliklerin değerleri değerine eşitse bu koşul doğrudur objectArray "value" . Daha fazla örnek için bkz. diğer [ * ] diğer ad örnekleri.

field()Bir dizi diğer adına başvurmak için işlevini kullanırken, döndürülen değer seçilen tüm değerlerin bir dizisidir. Bu davranış, işlevin ortak kullanım durumunun field() , kaynak özelliği değerlerine şablon işlevleri uygulama yeteneğinin sınırlı olduğu anlamına gelir. Bu durumda kullanılabilen tek şablon işlevleri, dizi bağımsız değişkenlerini kabul eden bir durumdur. Örneğin, ile dizi uzunluğunu almak mümkündür [length(field('Microsoft.Test/resourceType/objectArray[*].property'))] . Ancak, her bir dizi üyesine şablon işlevi uygulamak ve bunu istenen değerle karşılaştırmak gibi daha karmaşık senaryolar yalnızca ifade kullanılırken mümkündür count . Daha fazla bilgi için bkz. alan sayısı ifadesi.

Özetlemek gerekirse, aşağıdaki örnek kaynak içeriğine ve çeşitli diğer adlarla döndürülen seçili değerlere bakın:

{
  "tags": {
    "env": "prod"
  },
  "properties":
  {
    "stringArray": [ "a", "b", "c" ],
    "objectArray": [
      {
        "property": "value1",
        "nestedArray": [ 1, 2 ]
      },
      {
        "property": "value2",
        "nestedArray": [ 3, 4 ]
      }
    ]
  }
}

Örnek kaynak içeriğinde alan koşulunu kullanırken, sonuçlar aşağıdaki gibidir:

Diğer ad Seçili değerler
Microsoft.Test/resourceType/missingArray null
Microsoft.Test/resourceType/missingArray[*] Boş değerler koleksiyonu.
Microsoft.Test/resourceType/missingArray[*].property Boş değerler koleksiyonu.
Microsoft.Test/resourceType/stringArray ["a", "b", "c"]
Microsoft.Test/resourceType/stringArray[*] "a", "b", "c"
Microsoft.Test/resourceType/objectArray[*] { "property": "value1", "nestedArray": [ 1, 2 ] },
{ "property": "value2", "nestedArray": [ 3, 4 ] }
Microsoft.Test/resourceType/objectArray[*].property "value1", "value2"
Microsoft.Test/resourceType/objectArray[*].nestedArray [ 1, 2 ], [ 3, 4 ]
Microsoft.Test/resourceType/objectArray[*].nestedArray[*] 1, 2, 3, 4

field()İşlevi örnek kaynak içeriğinde kullanırken, sonuçlar aşağıdaki gibidir:

Expression Döndürülen değer
[field('Microsoft.Test/resourceType/missingArray')] ""
[field('Microsoft.Test/resourceType/missingArray[*]')] []
[field('Microsoft.Test/resourceType/missingArray[*].property')] []
[field('Microsoft.Test/resourceType/stringArray')] ["a", "b", "c"]
[field('Microsoft.Test/resourceType/stringArray[*]')] ["a", "b", "c"]
[field('Microsoft.Test/resourceType/objectArray[*]')] [{ "property": "value1", "nestedArray": [ 1, 2 ] }, { "property": "value2", "nestedArray": [ 3, 4 ] }]
[field('Microsoft.Test/resourceType/objectArray[*].property')] ["value1", "value2"]
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray')] [[ 1, 2 ], [ 3, 4 ]]
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray[*]')] [1, 2, 3, 4]

Alan sayısı ifadeleri

Alan sayısı ifadeleri, kaç dizi üyesinin bir koşula uymasını ve sayıyı bir hedef değerle karşılaştırmasını sayar. Count koşullara kıyasla dizileri değerlendirmek için daha sezgisel ve çok yönlüdür field . Söz dizimi aşağıdaki gibidir:

{
  "count": {
    "field": <[*] alias>,
    "where": <optional policy condition expression>
  },
  "equals|greater|less|any other operator": <target value>
}

Koşul olmadan kullanıldığında where , count yalnızca bir dizinin uzunluğunu döndürür. Önceki bölümde bulunan örnek kaynak içeriğiyle, count true bu yana aşağıdaki ifade stringArray üç üyeye sahiptir:

{
  "count": {
    "field": "Microsoft.Test/resourceType/stringArray[*]"
  },
  "equals": 3
}

Bu davranış, iç içe diziler ile de kullanılabilir. Örneğin, count true dizilerde dört dizi üyesi bulunduğundan aşağıdaki ifade olarak değerlendirilir nestedArray :

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
  },
  "greaterOrEquals": 4
}

Öğesinin gücü count where koşulnda. Belirtildiğinde, Azure Ilkesi dizi üyelerini numaralandırır ve her biri koşula göre değerlendirilen dizi üyelerinin sayısını sayarak değerlendirir true . Özellikle, koşul değerlendirmesinin her yinelemesinde where , Azure ilkesi tek bir dizi üyesi *i _ seçer ve kaynak içeriğini * where i array_ 'nin tek üyesi * i . Her yinelemede yalnızca bir dizi üyesinin kullanılabilir olması, her bir dizi üyesine karmaşık koşullar uygulamak için bir yol sağlar.

Örnek:

{
  "count": {
    "field": "Microsoft.Test/resourceType/stringArray[*]",
    "where": {
      "field": "Microsoft.Test/resourceType/stringArray[*]",
      "equals": "a"
    }
  },
  "equals": 1
}

İfadeyi değerlendirmek için count Azure ilkesi, where her üye için bir kez koşulu üç kez değerlendirir, stringArray kaç kez değerlendirildiğini Sayın true . whereKoşul Microsoft.Test/resourceType/stringArray[*] dizi üyelerine başvurduğunda, tüm üyelerini seçmek yerine stringArray yalnızca tek bir dizi üyesini her seferinde seçer:

Yineleme Seçili Microsoft.Test/resourceType/stringArray[*] değerler where Değerlendirme sonucu
1 "a" true
2 "b" false
3 "c" false

, count Döndürür 1 .

Daha karmaşık bir ifade aşağıda verilmiştir:

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*]",
    "where": {
      "allOf": [
        {
          "field": "Microsoft.Test/resourceType/objectArray[*].property",
          "equals": "value2"
        },
        {
          "field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
          "greater": 2
        }
      ]
    }
  },
  "equals": 1
}
Yineleme Seçili değerler where Değerlendirme sonucu
1 Microsoft.Test/resourceType/objectArray[*].property => "value1"
Microsoft.Test/resourceType/objectArray[*].nestedArray[*] => 1, 2
false
2 Microsoft.Test/resourceType/objectArray[*].property => "value2"
Microsoft.Test/resourceType/objectArray[*].nestedArray[*] => 3, 4
true

, count Döndürür 1 .

whereİfadenin Tüm istek içeriğine karşı değerlendirilme (yalnızca şu anda numaralandırılmakta olan dizi üyesine yapılan değişikliklerle), where koşulun dizi dışındaki alanlara de başvurabileceği anlamına gelir:

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*]",
    "where": {
      "field": "tags.env",
      "equals": "prod"
    }
  },
  "equals": 0
}
Yineleme Seçili değerler where Değerlendirme sonucu
1 tags.env => "prod" true
2 tags.env => "prod" true

İç içe geçmiş dizi alanlarına koşul uygulamak için iç içe geçmiş sayı ifadeleri kullanılabilir. Örneğin, aşağıdaki koşul, objectArray[*] dizinin nestedArray[*] bir veya daha fazla üye içeren tam olarak iki üyeye sahip olduğunu denetler:

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*]",
    "where": {
      "count": {
        "field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
      },
      "greaterOrEquals": 1
    }
  },
  "equals": 2
}
Yineleme Seçili değerler İç içe sayım değerlendirme sonucu
1 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] => 1, 2 nestedArray[*] 2 üye içeriyor => true
2 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] => 3, 4 nestedArray[*] 2 üye içeriyor => true

Her iki üyesinin objectArray[*] iki üye içeren bir alt dizisi olduğundan nestedArray[*] , dış sayı ifadesi döndürür 2 .

Daha karmaşık örnek: objectArray[*] dizide, nestedArray[*] veya değerine eşit olan tüm Üyeler ile tam olarak iki üye olup olmadığını denetleyin 2 3 :

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*]",
    "where": {
      "count": {
        "field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
        "where": {
            "field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
            "in": [ 2, 3 ]
        }
      },
      "greaterOrEquals": 1
    }
  },
  "equals": 2
}
Yineleme Seçili değerler İç içe sayım değerlendirme sonucu
1 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] => 1, 2 nestedArray[*] vardır 2 => true
2 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] => 3, 4 nestedArray[*] vardır 3 => true

Her iki üyesinin objectArray[*] veya ya da içeren bir alt dizisi olduğundan nestedArray[*] 2 3 , dıştaki Count ifadesi döndürür 2 .

Not

İç içe alan sayısı ifadeleri yalnızca iç içe dizilere başvurabilir. Örneğin, öğesine başvuran Count ifadesinin iç içe geçmiş Microsoft.Test/resourceType/objectArray[*] diziyi hedefleyen iç içe bir sayısı olabilir Microsoft.Test/resourceType/objectArray[*].nestedArray[*] , ancak iç içe geçmiş bir Count ifadesi hedeflemesi olamaz Microsoft.Test/resourceType/stringArray[*] .

Geçerli dizi üyesine şablon işlevleriyle erişme

Şablon işlevlerini kullanırken, current() geçerli dizi üyesinin değerine veya özelliklerinden herhangi birinin değerlerine erişmek için işlevini kullanın. Geçerli dizi üyesinin değerine erişmek için, içinde tanımlanan diğer adı count.field veya alt diğer adlarını işlevine bağımsız değişken olarak geçirin current() . Örnek:

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*]",
    "where": {
        "value": "[current('Microsoft.Test/resourceType/objectArray[*].property')]",
        "like": "value*"
    }
  },
  "equals": 2
}

Yineleme current() döndürülen değer where Değerlendirme sonucu
1 propertyÖğesinin ilk üyesinin değeri objectArray[*] :value1 true
2 propertyÖğesinin ilk üyesinin değeri objectArray[*] :value2 true

Koşul içinde alan işlevi

Bu field() işlev, sayı ifadesi bir varlık koşulunun içinde olmadığı sürece geçerli dizi üyesinin değerine erişmek için de kullanılabilir ( field() işlev her zaman koşulda değerlendirilen kaynağa başvurur). field()Değerlendirilen diziye başvuru yaparken, aşağıdaki kavramlara göre belirlenir:

  1. Dizi diğer adları, tüm dizi üyelerinden seçilen bir değer koleksiyonuna çözümlenir.
  2. field() dizi diğer adlarına başvuran işlevler, seçili değerlere sahip bir dizi döndürür.
  3. Koşul içinde sayılan dizi diğer adına başvurmak, where geçerli yinelemede değerlendirilen dizi üyesinden tek bir değer seçilmiş bir koleksiyon döndürür.

Bu davranış, koşul içindeki bir işlevle sayılan dizi üyesine başvurulduğunda field() where , tek bir üyeye sahip bir dizi döndürdüğünü gösterir. Bu davranış sezgisel olmasa da, dizi diğer adlarının her zaman seçili özelliklerin bir koleksiyonunu döndürdüğü fikrle tutarlıdır. Aşağıda bir örnek verilmiştir:

{
  "count": {
    "field": "Microsoft.Test/resourceType/stringArray[*]",
    "where": {
      "field": "Microsoft.Test/resourceType/stringArray[*]",
      "equals": "[field('Microsoft.Test/resourceType/stringArray[*]')]"
    }
  },
  "equals": 0
}
Yineleme İfade değerleri where Değerlendirme sonucu
1 Microsoft.Test/resourceType/stringArray[*] => "a"
[field('Microsoft.Test/resourceType/stringArray[*]')] => [ "a" ]
false
2 Microsoft.Test/resourceType/stringArray[*] => "b"
[field('Microsoft.Test/resourceType/stringArray[*]')] => [ "b" ]
false
3 Microsoft.Test/resourceType/stringArray[*] => "c"
[field('Microsoft.Test/resourceType/stringArray[*]')] => [ "c" ]
false

Bu nedenle, sayılan dizi diğer adının değerine bir işlevle erişmeniz gerektiğinde field() , bunu yapmanın yolu bir şablon işlevi ile sarmalıdır first() :

{
  "count": {
    "field": "Microsoft.Test/resourceType/stringArray[*]",
    "where": {
      "field": "Microsoft.Test/resourceType/stringArray[*]",
      "equals": "[first(field('Microsoft.Test/resourceType/stringArray[*]'))]"
    }
  }
}
Yineleme İfade değerleri where Değerlendirme sonucu
1 Microsoft.Test/resourceType/stringArray[*] => "a"
[first(field('Microsoft.Test/resourceType/stringArray[*]'))] => "a"
true
2 Microsoft.Test/resourceType/stringArray[*] => "b"
[first(field('Microsoft.Test/resourceType/stringArray[*]'))] => "b"
true
3 Microsoft.Test/resourceType/stringArray[*] => "c"
[first(field('Microsoft.Test/resourceType/stringArray[*]'))] => "c"
true

Faydalı örnekler için bkz. alan sayısı örnekleri.

Dizileri değiştirme

Oluşturma veya güncelleştirme sırasında bir kaynaktaki değiştirme ve değiştirme özellikleri. Dizi özellikleriyle çalışırken, bu etkilerin davranışı işlemin diğer adı değiştirmeye çalışıp çalışmadığına göre değişir [*] .

Not

modifyDiğer adlarla efektin kullanılması şu anda önizlemededir.

Diğer ad Etki Sonuç
Microsoft.Storage/storageAccounts/networkAcls.ipRules append Azure Ilkesi, eksik olursa, efekt ayrıntılarında belirtilen tüm diziyi ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules modify``addişlem ile Azure Ilkesi, eksik olursa, efekt ayrıntılarında belirtilen tüm diziyi ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules modify``addOrReplaceişlem ile Azure Ilkesi, varsa, efekt ayrıntılarında belirtilen tüm diziyi ekler veya mevcut diziyi değiştirir.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] append Azure Ilkesi, efekt ayrıntılarında belirtilen dizi üyesini ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] modify``addişlem ile Azure Ilkesi, efekt ayrıntılarında belirtilen dizi üyesini ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] modify``addOrReplaceişlem ile Azure Ilkesi, var olan tüm dizi üyelerini kaldırır ve efekt ayrıntılarında belirtilen dizi üyesini ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action append Azure Ilkesi, action her dizi üyesinin özelliğine bir değer ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action modify``addişlem ile Azure Ilkesi, action her dizi üyesinin özelliğine bir değer ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action modify``addOrReplaceişlem ile Azure Ilkesi, her dizi üyesinin var olan özelliğini ekler veya değiştirir action .

Daha fazla bilgi için bkz. append örnekleri.

Ek [*] diğer ad örnekleri

İstek içeriğindeki bir dizinin üyelerinin ' All ' veya ' any ' öğesinin bir koşula uyup uymadığını denetlemek için alan sayısı ifadelerinin kullanılması önerilir. Ancak bazı basit koşullarda, dizi üyeleri koleksiyonuna başvurmabölümünde açıklandığı gibi bir dizi diğer adına sahip bir alan erişimcisi kullanarak aynı sonuca ulaşmak mümkündür. Bu model, izin verilen sayı ifadesi sınırını aşan ilke kurallarında yararlı olabilir. Yaygın kullanım örnekleri için örnekler aşağıda verilmiştir:

Aşağıdaki senaryo tablosu için örnek ilke kuralı:

"policyRule": {
    "if": {
        "allOf": [
            {
                "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
                "exists": "true"
            },
            <-- Condition (see table below) -->
        ]
    },
    "then": {
        "effect": "[parameters('effectType')]"
    }
}

Iprules dizisi aşağıdaki senaryo tablosu için aşağıdaki gibidir:

"ipRules": [
    {
        "value": "127.0.0.1",
        "action": "Allow"
    },
    {
        "value": "192.168.1.1",
        "action": "Allow"
    }
]

Aşağıdaki her koşul örneği için ile değiştirin <field> "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value" .

Aşağıdaki sonuçlar, koşulun birleşiminin ve yukarıdaki mevcut değerlerden oluşan örnek ilke kuralının sonucudur:

Koşul Sonuç Senaryo Açıklama
{<field>,"notEquals":"127.0.0.1"} Nothing Hiçbiri eşleşmiyor Tek bir dizi öğesi yanlış (127.0.0.1! = 127.0.0.1) ve diğeri doğru (127.0.0.1! = 192.168.1.1) olarak değerlendirilir, bu nedenle Not alalals koşulu false olur ve etki tetiklenmez.
{<field>,"notEquals":"10.0.4.1"} İlke etkisi Hiçbiri eşleşmiyor Her iki dizi öğesi de true olarak değerlendirilir (10.0.4.1! = 127.0.0.1 ve 10.0.4.1! = 192.168.1.1), bu nedenle Not al koşulu true ve etki tetiklenir.
"not":{<field>,"notEquals":"127.0.0.1" } İlke etkisi Bir veya daha fazla eşleşme Tek bir dizi öğesi yanlış (127.0.0.1! = 127.0.0.1) ve diğeri doğru (127.0.0.1! = 192.168.1.1) olarak değerlendirilir ve bu nedenle Not al koşulu false olur. Mantıksal işleç doğru olarak değerlendirilir (false değil ), bu nedenle etki tetiklenir.
"not":{<field>,"notEquals":"10.0.4.1"} Nothing Bir veya daha fazla eşleşme Her iki dizi öğesi de true olarak değerlendirilir (10.0.4.1! = 127.0.0.1 ve 10.0.4.1! = 192.168.1.1), bu nedenle Not al koşulu doğrudur. Mantıksal işleç yanlış olarak değerlendirilir ( true değil), bu nedenle etki tetiklenmez .
"not":{<field>,"Equals":"127.0.0.1"} İlke etkisi Tüm eşleşme değil Bir Array öğesi true (127.0.0.1 = = 127.0.0.1) ve diğeri false (127.0.0.1 = = 192.168.1.1) olarak değerlendirilir ve bu nedenle eşittir koşulu false olur. Mantıksal işleç doğru olarak değerlendirilir (false değil ), bu nedenle etki tetiklenir.
"not":{<field>,"Equals":"10.0.4.1"} İlke etkisi Tüm eşleşme değil Her iki dizi öğesi de false olarak değerlendirilir (10.0.4.1 = = 127.0.0.1 ve 10.0.4.1 = = 192.168.1.1), bu nedenle eşittir koşulu false olur. Mantıksal işleç doğru olarak değerlendirilir (false değil ), bu nedenle etki tetiklenir.
{<field>,"Equals":"127.0.0.1"} Nothing Tüm eşleşme Bir Array öğesi true (127.0.0.1 = = 127.0.0.1) ve diğeri false (127.0.0.1 = = 192.168.1.1) olarak değerlendirilir; bu nedenle eşittir koşulu false olur ve etki tetiklenmez.
{<field>,"Equals":"10.0.4.1"} Nothing Tüm eşleşme Her iki dizi öğesi de false olarak değerlendirilir (10.0.4.1 = = 127.0.0.1 ve 10.0.4.1 = = 192.168.1.1), bu nedenle eşittir koşulu false olur ve etki tetiklenmez.

Sonraki adımlar