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
notIn
koş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 type
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 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
params
az 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*" ]
true
için bir kez olmak üzere koşulu üç kez değerlendirirwhere
. Her yinelemede, geçerli dizi üyesinin değeri tarafından count.name
tanı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 stringArray
iç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 true
sayı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 stringArray
true
iç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 stringArray
seç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 3
2
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 3
iç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 |
modify işlemle add |
Azure İlkesi eksikse efekt ayrıntılarında belirtilen dizinin tamamını ekler. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify iş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[*] |
modify işlemle add |
Azure İlkesi, efekt ayrıntılarında belirtilen dizi üyesini ekler. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify iş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 |
modify işlemle add |
Azure İlkesi her dizi üyesinin action özelliğine bir değer ekler. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify iş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
allOf
denetlemek 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.1 127.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.1 127.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
- örnekleri Azure İlkesi gözden geçirin.
- Azure İlkesi tanımı yapısını gözden geçirin.
- İlkenin etkilerini anlama konusunu gözden geçirin.
- Program aracılığıyla ilkelerin nasıl oluşturulacağını anlama.
- Uyumlu olmayan kaynakları düzeltmeyi öğrenin.
- Kaynaklarınızı Azure yönetim gruplarıyla düzenleme ile yönetim grubunun ne olduğunu gözden geçirin.