Aracılığıyla paylaş


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

Azure Resource Manager özellikleri genellikle dizeler ve boole'lar olarak tanımlanır. Bire çok ilişkisi 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ü.
  • veya notInkoşullarını in kullanan bir ilke kuralının parçası.
  • Bir koşula uyan 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 birkaç örnek tanım 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ı, parametre allowedLocations için tek bir konuma izin verir ve eastus2 varsayılan değerlerine sahiptir:

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

Dizede olduğu gibitype, ilke atanırken yalnızca bir değer ayarlanabilir. Bu ilke atanırsa kapsamdaki kaynaklara yalnızca tek bir Azure bölgesinde izin verilir. İlke tanımlarının çoğunun 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 dizisini typekullanı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 parametredeki type özellik değiştirilemez.

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

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

İlkeyi Azure portalı üzerinden atadığınızda, dizi parametresi type tek bir metin kutusu olarak görüntülenir. İpucunda yazıyor.Use ; to separate values. (e.g. London;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:

  • Azure CLI: parametresiyle paramsaz policy assignment create komutu.
  • Azure PowerShell: Parametresiyle New-AzPolicyAssignment Cmdlet'i.PolicyParameter
  • REST API: PUT oluşturma işleminde, özelliğin değeri olarak İstek Gövdesi'nin properties.parameters bir parçası olarak.

Koşullarda dizileri kullanma

in ve notIn

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 dizi parametresi başvurusu olabilir. Örneğin:

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

Değer sayısı

Değer sayısı ifadesinde, bir koşula uyan dizi üyesi sayısıdır. 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 her üyesi [ "test*", "dev*", "prod*" ]trueiçin bir kez olmak üzere koşulu üç kez değ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 geçerlidir.

Önceki koşulu daha genel hale getirmek için değişmez değer dizisi yerine başvuru kullanın parameters :

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

value count İfade başka count bir ifadenin 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
}

ayrıca value count karmaşık nesne dizilerini de destekleyerek daha karmaşık koşullara olanak 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ı senaryolarda dizinin tamamına başvuru yapılması gerekir (örneğin, uzunluğunu denetleme). Diğerlerinde her bir dizi üyesine bir koşul uygulanması gerekir (ö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çilen 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 allOf bir davranışa 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() İşlev, diğer adın olduğu gibi temsil ettiği değerleri döndürür ve bu değerler daha sonra diğer şablon işlevleri tarafından işlenebilir.

Dizi alanlarına başvurma

Dizi kaynağı özellikleri iki farklı diğer ad türüyle temsil edilir. Buna 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ğindeki özelliğin 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. Örneğin:

{
  "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 var olup olmadığını denetlemektir:

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

field() işleviyle, döndürülen değer istek içeriğindeki dizidir ve ardından 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, dizi özelliğinin kendisini seçmekten farklıdır. Örneğin, 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şula uygun olup olmadığını denetler, bu nedenle aşağıdaki koşul yalnızca tüm üyeleri stringArray değerine "value"eşitse geçerlidir.

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

Dizi boşsa, dizinin hiçbir üyesi ihlal etmediğinden koşul true olarak değerlendirilir. Bu senaryoda, bunun yerine count ifadesinin kullanılması öneriliyor. 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 . Diğer 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şulunu kullandığınızda, 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 field() örnek kaynak içeriğinde kullandığınızda 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şula uyan dizi üyesi sayısını sayar ve sayıyı hedef değerle karşılaştırır. Count dizileri değerlendirme açısından koşullara göre field 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
}

Gücü count , koşuldadır where . belirtildiğindecount, Azure İlkesi dizi üyelerini numaralandırır ve her birini koşula göre değerlendirir ve kaç dizi üyesinin olarak değerlendirildiğinden truesayılır. Özellikle, koşul değerlendirmesinin where her yinelemesinde, Azure İlkesi tek bir dizi üyesi i seçer ve kaynak içeriğini, dizinin tek üyesi gibi i koşula göre where 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 her üyesi stringArraytrueiçin bir kez olmak üzere koşulu üç kez değ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 count 1.

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 count 1.

İfadenin istek içeriğinin where tamamına göre (yalnızca şu anda numaralandırılmakta olan dizi üyesinde yapılan değişikliklerle) değerlendirilmiş olması, 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 dizinin bir veya daha fazla üye içeren tam olarak iki üyesi nestedArray[*] olup olmadığını objectArray[*] 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 sayım değerlendirme sonucu
1 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1, 2 nestedArray[*] 2 üye var =>true
2 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3, 4 nestedArray[*] 2 üye var =>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 veya değerine eşit 32 herhangi bir üyesi olan nestedArray[*] tam olarak iki üyesi 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 sayım 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 Microsoft.Test/resourceType/objectArray[*].nestedArray[*]hedefleyen iç içe yerleştirilmiş bir sayıya sahip olabilir, ancak öğesini hedefleyen Microsoft.Test/resourceType/stringArray[*]iç içe yerleştirilmiş bir sayı ifadesi 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 veya alt diğer adlarından herhangi birinde tanımlanan diğer adı geçirin. Örneğin:

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

sayı field() ifadesi bir varlık koşulu 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:

  • Dizi diğer adları, tüm dizi üyelerinden seçilen bir değer koleksiyonuna çözümlenir.
  • field() dizi diğer adlarına başvuran işlevler, seçili değerlerle bir dizi döndürür.
  • 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 where başvurduğunda, tek bir üyeye sahip 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. Bir örnek aşağıda 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ı değiştirmeye [*] çalışıp çalışmadığına bağlıdır:

Not

Efekti diğer modify adlarla kullanmak ş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 modifyişlemle add Azure İlkesi eksikse efekt ayrıntılarında belirtilen dizinin tamamını ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules modifyişlemle addOrReplace 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[*] modifyişlemle add Azure İlkesi, efekt ayrıntılarında belirtilen dizi üyesini ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] modifyişlemle addOrReplace 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 modifyişlemle add Azure İlkesi her dizi üyesinin action özelliğine bir değer ekler.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action modifyişlemle addOrReplace Azure İlkesi her dizi üyesinin mevcut action özelliğini ekler veya değiştirir.

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

Diğer diğer ad örnekleri

Öneri, istek içeriğindeki bir dizinin üyelerinin bir koşulu karşılayıp karşılamadığını anyOf allOfdenetlemek için alan sayısı ifadelerini kullanmaktır. Bazı basit koşullar için, dizi üyeleri koleksiyonuna başvurma bölümünde açıklandığı gibi dizi diğer adına sahip bir alan erişimcisi kullanarak aynı sonucu elde etmek mümkündür. Bu desen, izin verilen count ifade sınırını aşan ilke kurallarında yararlı olabilir. Yaygın kullanım örnekleri 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')]"
  }
}

Dizi ipRules 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 koşul örneklerinin her biri için değerini ile "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"değiştirin<field>.

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

Koşul Sonuç Senaryo Açıklama
{<field>,"notEquals":"127.0.0.1"} Hiçbir şey Hiçbiri eşleşmiyor Bir dizi öğesi false () ve biri true (127.0.0.1 != 127.0.0.1127.0.0.1 != 192.168.1.1 olarak değerlendirilir; bu nedenle notEquals koşul false olur ve etki tetiklenmemiştir.
{<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 and 10.0.4.1 != 192.168.1.1 olarak değerlendirilir, bu nedenle notEquals koşul 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şul false olur. Mantıksal işleç true (yanlış değil) olarak değerlendirilir, bu nedenle etki tetikler.
"not":{<field>,"notEquals":"10.0.4.1"} Hiçbir şey Bir veya daha fazla eşleşme Her iki dizi öğesi de true ()10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1 olarak değerlendirilir, bu nedenle notEquals koşul true olur. Mantıksal işleç false (doğru değ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 false (127.0.0.1 == 192.168.1.1 olarak değerlendirilir, bu nedenle Equals koşul false olur. Mantıksal işleç true (yanlış değ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 and 10.0.4.1 == 192.168.1.1 olarak değerlendirilir, bu nedenle Equals koşul false olur. Mantıksal işleç true (yanlış değil) olarak değerlendirilir, bu nedenle etki tetikler.
{<field>,"Equals":"127.0.0.1"} Hiçbir şey Tüm eşleşmeler Bir dizi öğesi true () ve biri false (127.0.0.1 == 127.0.0.1127.0.0.1 == 192.168.1.1 olarak değerlendirilir; bu nedenle Equals koşul false olur ve etki tetiklenmemiştir.
{<field>,"Equals":"10.0.4.1"} Hiçbir şey Tüm eşleşmeler Her iki dizi öğesi de false ()10.0.4.1 == 127.0.0.1 and 10.0.4.1 == 192.168.1.1 olarak değerlendirilir, bu nedenle Equals koşul false olur ve etki tetiklenmemiştir.

Sonraki adımlar