Azure kaynaklarındaki dizi özellikleri için ilke yazma

Azure Resource Manager özellikleri genellikle dizeler ve boole'lar olarak tanımlanır. Bire çok ilişki mevcut olduğunda, karmaşık özellikler bunun yerine diziler olarak tanımlanır. Azure İlkesi diziler birkaç farklı şekilde kullanılır:

  • Birden çok seçenek sağlamak için tanım parametresinin türü
  • içindeki veyaolmayan koşulları kullanan ilke kuralının bir parçası
  • Bir koşulu karşılayan dizi üyesi 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 makale, Azure İlkesi tarafından her kullanımı kapsar ve çeşitli örnek tanımlar sağlar.

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 eastus2 varsayılanları:

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

Türdize 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ölgesinde izin verilir. çoğu ilke tanımının eastus2, eastus ve westus2'ye izin verme gibi onaylanan seçeneklerin listesine izin vermeleri gerekir.

Birden çok seçeneğe izin verecek ilke tanımını oluşturmak için dizitü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

İlke tanımı kaydedildikten sonra, bir parametredeki tür özelliği değiştirilemez.

Bu yeni parametre tanımı, ilke ataması sırasında birden fazla değer alır. allowedValues dizi özelliği tanımlandığında, atama sırasında kullanılabilen 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 parametre dizisine geçirme

İlkeyi Azure portal aracılığıyla atarken, dizitüründe bir parametre tek bir metin kutusu olarak görüntülenir. İpucunda "Kullan ; değerleri ayırmak için. (ör. Londra; New York)". eastus2, eastus ve westus2'nin izin verilen konum değerlerini parametresine geçirmek için aşağıdaki dizeyi kullanın:

eastus2;eastus;westus2

Azure CLI, 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:

Koşullarda dizileri kullanma

İçinde ve değil

in ve notIn koşulları yalnızca dizi değerleriyle çalışır. Dizideki bir değerin varlığını denetler. Dizi değişmez bir JSON dizisi veya bir dizi parametresi başvurusu olabilir. Örnek:

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

Değer sayısı

Değer sayısı ifadesi, bir koşulu karşılayan dizi üyesi sayısını sayar. Her yinelemede farklı değerler kullanarak aynı koşulu birden çok kez değerlendirmenin bir yolunu 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 İlkesi koşulu her üyesi [ "test*", "dev*", "prod*" ]için bir kez olmak üzere üç kez truedeğerlendirirwhere. Her yinelemede, geçerli dizi üyesinin değeri tarafından count.nametanımlanan dizin adıyla pattern eşleştirilir. Bu değere daha sonra koşul içinde where özel bir şablon işlevi çağrılarak başvurulabilir: current('pattern').

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

Koşul yalnızca sonuçta elde edilen sayı 0'dan büyükse doğrudur.

Yukarıdaki koşulu daha genel hale getirmek için değişmez değer dizisi yerine parametre başvurusu kullanın:

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

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

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

Değer sayısı , karmaşık nesne dizilerini de destekleyerek daha karmaşık koşullar sağlar. Örneğin, aşağıdaki koşul her ad deseni için istenen etiket değerini tanımlar ve kaynak adının desenle eşleşip eşleşmediğini denetler, ancak gerekli etiket değerine sahip değildir:

{
    "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
}

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

Dizi kaynak özelliklerine başvurma

Birçok kullanım örneği, değerlendirilen kaynaktaki dizi özellikleriyle çalışmayı gerektirir. Bazı senaryolar için dizinin tamamına başvuru yapılması gerekir (örneğin, uzunluğunu denetleme). Diğerleri her bir dizi üyesine bir koşul uygulamayı gerektirir (örneğin, tüm güvenlik duvarı kuralının İnternet'ten erişimi engellediğinden emin olun). Azure İlkesi kaynak özelliklerine başvurmanın farklı yollarını ve bu başvuruların dizi özelliklerine başvurduğunda nasıl davrandığını anlamak, bu senaryoları kapsayan koşulları yazmanın anahtarıdır.

Kaynak özelliklerine başvurma

Kaynak özelliklerine diğer adlar kullanılarak Azure İlkesi başvurabilirsiniz Azure İlkesi içindeki bir kaynak özelliğinin değerlerine başvurmanın iki yolu vardır:

  • Seçili tüm kaynak özelliklerinin bir koşulu karşılayıp karşılamadığını denetlemek için alan koşulunu kullanın. Örnek:

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

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

Alan koşulu örtük bir "tümü" davranışına sahiptir. Diğer ad bir değer koleksiyonunu temsil ederse, tek tek tüm değerlerin koşulu karşılayıp karşılamadığını denetler. field() işlevi, diğer adla olduğu gibi temsil edilen değerleri döndürür ve bu değerler diğer şablon işlevleri tarafından değiştirilebilir.

Dizi alanlarına başvurma

Dizi kaynağı özellikleri iki farklı diğer ad türüyle temsil edilir. Bir 'normal' diğer adı ve buna eklenmiş dizi diğer adları[*]:

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

Diziye başvurma

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

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

Bu koşul, dizinin tamamını stringArray tek bir dize değeriyle karşılaştırır. dahil olmak üzere equalsçoğu koşul yalnızca dize değerlerini kabul eder, bu nedenle diziyi dizeyle karşılaştırmak için çok fazla kullanım yoktur. Dizi özelliğine başvurmanın yararlı olduğu ana senaryo, dizi özelliğinin mevcut olup olmadığını denetlemektir:

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

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

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

Dizi üyeleri koleksiyonuna başvurma

Söz dizimini [*] kullanan diğer adlar, dizi özelliğinden seçilen özellik değerlerinin koleksiyonunu temsil eder ve bu koleksiyon dizi özelliğinin kendisini seçmekten farklıdır. durumunda, öğesinin Microsoft.Test/resourceType/stringArray[*]tüm üyelerini stringArrayiçeren bir koleksiyon döndürür. Daha önce belirtildiği gibi, bir field koşul seçilen tüm kaynak özelliklerinin koşulu karşıladığını denetler, bu nedenle aşağıdaki koşul yalnızca tüm üyeleri stringArray '"value"' değerine eşitse geçerlidir.

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

Dizi boşsa, dizinin hiçbir üyesi ihlal edilmediğinden koşul true olarak değerlendirilir. Bu senaryoda, bunun yerine count ifadesinin kullanılması önerilir. Dizi nesneleri içeriyorsa, her 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"
}

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

Bir dizi diğer adına başvurmak için işlevini kullanırken field() , döndürülen değer seçilen tüm değerlerin bir dizisidir. Bu davranış, işlevin ortak kullanım örneğinin field() , kaynak özelliği değerlerine şablon işlevleri uygulama özelliğinin sınırlı olduğu anlamına gelir. Bu durumda kullanılabilecek tek şablon işlevleri, dizi bağımsız değişkenlerini kabul eden işlevlerdir. Örneğin, ile [length(field('Microsoft.Test/resourceType/objectArray[*].property'))]dizinin uzunluğunu elde etmek mümkündür. Ancak, her dizi üyesine şablon işlevi uygulama ve bunu istenen değerle karşılaştırma gibi daha karmaşık senaryolar yalnızca ifade kullanılırken count mümkündür. 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 adlar tarafından 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şulu kullanılırken sonuçlar aşağıdaki gibidir:

Diğer ad Seçilen değerler
Microsoft.Test/resourceType/missingArray null
Microsoft.Test/resourceType/missingArray[*] Boş bir değer koleksiyonu.
Microsoft.Test/resourceType/missingArray[*].property Boş bir değer 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

İşlevi örnek kaynak içeriğinde kullanırken field() 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, bir koşulu karşılayan dizi üyesi sayısını sayar ve sayıyı hedef değerle karşılaştırır. Count , dizileri koşullarla karşılaştırıldığında field değerlendirmek için daha sezgisel ve çok yönlüdür. 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 where kullanıldığında, count bir dizinin uzunluğunu döndürmeniz yeterlidir. Önceki bölümde yer alan örnek kaynak içeriğiyle, üç üyesi olduğundan stringArray aşağıdaki count ifade olarak değerlendirilirtrue:

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

Bu davranış, iç içe dizilerle de çalışır. Örneğin, dizilerde dört dizi üyesi olduğundan aşağıdaki count ifade olarak değerlendirilirtrue:nestedArray

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

count Gücü bu durumdadırwhere. Belirtildiğinde, Azure İlkesi dizi üyelerini numaralandırır ve her bir öğeyi koşula göre değerlendirir ve kaç dizi üyesinin olarak değerlendirilip değerlendirileceini truesayarak değerini hesaplar. Özellikle, koşul değerlendirmesinin where her yinelemesinde, Azure İlkesi tek bir dizi üyesi i seçer ve kaynak içeriğini koşula göre wheredizisinin tek üyesi benmiş gibi değerlendirir. 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 count değerlendirmek için, Azure İlkesi koşulu her üyesi stringArrayiçin bir kez olmak üzere üç kez truedeğerlendirirwhere. where Koşul dizi üyelerine başvurduğunda, öğesinin Microsoft.Test/resourceType/stringArray[*] tüm üyelerini stringArrayseçmek yerine her seferinde yalnızca tek bir dizi üyesi seçer:

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

döndürür count1.

Daha karmaşık bir ifade aşağıdadır:

{
  "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çilen 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

döndürür count1.

İfadenin istek içeriğinin wheretamamına göre değerlendirilmiş olması (yalnızca şu anda numaralandırılmakta olan dizi üyesinde yapılan değişikliklerle) koşulun where dizi dışındaki alanlara da başvurabileceği anlamına gelir:

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

İç içe yerleştirilmiş sayı ifadeleri, iç içe dizi alanlarına koşulları uygulamak için kullanılabilir. Örneğin, aşağıdaki koşul dizide objectArray[*] bir veya daha fazla üye içeren tam olarak iki üye nestedArray[*] olup olmadığını denetler:

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

her iki üyesinin objectArray[*] de iki üyesi olan bir alt dizisi nestedArray[*] olduğundan, dış count ifadesi döndürür 2.

Daha karmaşık bir örnek: dizinin tam olarak veya öğesine eşit 23olan iki üyesi nestedArray[*] olup olmadığını objectArray[*] denetleyin:

{
  "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çilen değerler İç içe geçmiş sayı değerlendirme sonucu
1 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1, 2 nestedArray[*] contains 2 =>true
2 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3, 4 nestedArray[*] contains 3 =>true

her iki üyesi de objectArray[*] veya 3içeren 2 bir alt diziye nestedArray[*] sahip olduğundan, dış count ifadesi döndürür2.

Not

İç içe alan sayısı ifadeleri yalnızca iç içe dizilere başvurabilir. Örneğin, öğesine başvuran Microsoft.Test/resourceType/objectArray[*] sayı ifadesi, iç içe dizisini hedefleyen iç içe Microsoft.Test/resourceType/objectArray[*].nestedArray[*]bir sayıya sahip olabilir, ancak öğesini hedefleyen Microsoft.Test/resourceType/stringArray[*]iç içe bir sayı ifadesine sahip olamaz.

Şablon işlevleriyle geçerli dizi üyesine erişme

Şablon işlevlerini kullanırken, geçerli dizi üyesinin değerine veya özelliklerinden herhangi birinin değerlerine erişmek için işlevini kullanın current() . Geçerli dizi üyesinin değerine erişmek için işlevine bağımsız değişken current() olarak içinde count.field tanımlanan diğer adı veya alt diğer adlarından herhangi birini geçirin. Ö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 öğesinin property ilk üyesindeki objectArray[*]değeri: value1 true
2 öğesinin property ilk üyesindeki objectArray[*]değeri: value2 true

Koşulların içinde alan işlevi

Count field()ifadesi birvarlık koşulunun içinde olmadığı sürece işlevi geçerli dizi üyesinin değerine erişmek için de kullanılabilir (field() işlev her zaman if koşulunda değerlendirilen kaynağa başvurur). field() Değerlendirilen diziye başvururken davranışı aşağıdaki kavramları temel alır:

  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çilen değerlerle bir dizi döndürür.
  3. Koşulun içinde where sayılan dizi diğer adına başvuruda bulunmak, geçerli yinelemede değerlendirilen dizi üyesinden seçilen tek bir değere sahip bir koleksiyon döndürür.

Bu davranış, koşulun içinde bir field() işlevi olan sayılan dizi üyesine wherebaşvurduğunda, tek üyeli bir dizi döndürdüğü anlamına gelir. Bu davranış sezgisel olmasa da, dizi diğer adlarının her zaman seçili özelliklerden oluşan bir koleksiyon döndürmesi fikriyle 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 field() işlevle erişmeye ihtiyaç duyulduğunda, bunu bir şablon işleviyle first() sarmalamanın yoludur:

{
  "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

Yararlı örnekler için bkz . Alan sayısı örnekleri.

Dizileri değiştirme

Oluşturma veya güncelleştirme sırasında kaynakta ekleme ve değiştirme özellikleri. Dizi özellikleriyle çalışırken, bu efektlerin davranışı işlemin [*] diğer adını değiştirmeye çalışıp çalışmadığına bağlıdır:

Not

Efekti diğer modify adlarla kullanma şu anda önizleme aşamasındadır.

Diğer ad Etki Sonuç
Microsoft.Storage/storageAccounts/networkAcls.ipRules append Azure İlkesi eksikse efekt ayrıntılarında belirtilen dizinin tamamını ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules modify with add operation Azure İlkesi eksikse efekt ayrıntılarında belirtilen dizinin tamamını ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules modify with addOrReplace operation Azure İlkesi eksikse efekt ayrıntılarında belirtilen dizinin tamamını ekler veya varolan dizinin yerini alır.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] append Azure İlkesi, efekt ayrıntılarında belirtilen dizi üyesini ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] modify with add operation Azure İlkesi, efekt ayrıntılarında belirtilen dizi üyesini ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] modify with addOrReplace operation Azure İlkesi varolan 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 İlkesi her dizi üyesinin action özelliğine bir değer ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action modify with add operation Azure İlkesi her dizi üyesinin action özelliğine bir değer ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action modify with addOrReplace operation Azure İlkesi, her dizi üyesinin mevcut action özelliğini ekler veya değiştirir.

Daha fazla bilgi için ekleme örneklerine bakın.

Ek [*] diğer ad örnekleri

İstek içeriğindeki bir dizinin üyelerinin 'tümünün' veya 'herhangi birinin' bir koşula uygun olup olmadığını denetlemek için alan sayısı ifadelerinin kullanılması önerilir. Ancak, bazı basit koşullar için dizi üyeleri koleksiyonuna başvurma bölümünde açıklandığı gibi bir dizi diğer adıyla bir alan erişimcisi kullanarak aynı sonucu elde etmek mümkündür. Bu düzen, izin verilen sayı ifadelerinin sınırını aşan ilke kurallarında yararlı olabilir. Yaygın kullanım örnekleri şunlardır:

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 değerini ile "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"değiştirin<field>.

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

Koşul Sonuç Senaryo Açıklama
{<field>,"notEquals":"127.0.0.1"} Nothing Hiçbiri eşleşmiyor Bir dizi öğesi false (127.0.0.1 != 127.0.0.1) ve biri true (127.0.0.1 != 192.168.1.1) olarak değerlendirilir, bu nedenle notEquals koşulu false olur ve efekt tetiklenmez.
{<field>,"notEquals":"10.0.4.1"} İlke etkisi Hiçbiri eşleşmiyor Her iki dizi öğesi de true (10.0.4.1 != 127.0.0.1 ve 10.0.4.1 != 192.168.1.1) olarak değerlendirilir, dolayısıyla notEquals koşulu true olur ve etki tetikler.
"not":{<field>,"notEquals":"127.0.0.1" } İlke etkisi Bir veya daha fazla eşleşme Bir dizi öğesi false (127.0.0.1 != 127.0.0.1) ve biri true (127.0.0.1 != 192.168.1.1) olarak değerlendirilir, bu nedenle notEquals koşulu false olur. Mantıksal işleç true (falsedeğil) olarak değerlendirilir, bu nedenle etki tetikler.
"not":{<field>,"notEquals":"10.0.4.1"} Nothing Bir veya daha fazla eşleşme Her iki dizi öğesi de true (10.0.4.1 != 127.0.0.1 ve 10.0.4.1 != 192.168.1.1) olarak değerlendirilir, bu nedenle notEquals koşulu true olur. Mantıksal işleç false (doğrudeğil) olarak değerlendirilir, bu nedenle etki tetiklenmez.
"not":{<field>,"Equals":"127.0.0.1"} İlke etkisi Tümü eşleşmiyor Bir dizi öğesi true (127.0.0.1 == 127.0.0.1) ve biri yanlış (127.0.0.1 == 192.168.1.1) olarak değerlendirilir, dolayısıyla Eşittir koşulu false olur. Mantıksal işleç true (falsedeğil) olarak değerlendirilir, bu nedenle etki tetikler.
"not":{<field>,"Equals":"10.0.4.1"} İlke etkisi Tümü eşleşmiyor Her iki dizi öğesi de false (10.0.4.1 == 127.0.0.1 ve 10.0.4.1 == 192.168.1.1) olarak değerlendirilir, dolayısıyla Eşittir koşulu false olur. Mantıksal işleç true (falsedeğil) olarak değerlendirilir, bu nedenle etki tetikler.
{<field>,"Equals":"127.0.0.1"} Nothing Tüm eşleşmeler Bir dizi öğesi true (127.0.0.1 == 127.0.0.1) ve biri false (127.0.0.1 == 192.168.1.1) olarak değerlendirilir, bu nedenle Eşittir koşulu yanlıştır ve efekt tetiklenmemiştir.
{<field>,"Equals":"10.0.4.1"} Nothing Tüm eşleşmeler Her iki dizi öğesi de false (10.0.4.1 == 127.0.0.1 ve 10.0.4.1 == 192.168.1.1) olarak değerlendirilir; dolayısıyla Eşittir koşulu yanlıştır ve etki tetiklenmemiştir.

Sonraki adımlar