Теги переменных на основе Azure ARM JSON
Мы используем следующий шаблон для развертывания нескольких групп ресурсов с помощью шаблона ARM:
"parameters": {
"ResourceGroups": {
"type": "array",
"defaultValue": [
"RG1",
"RG2",
"RG3"
]
}
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2018-05-01",
"location": "[parameters('rgLocation')]",
"name": "[parameters('ResourceGroups')[copyIndex()])]",
"copy": {
"name": "resourcegroupcopy",
"count": "[length(parameters('ResourceGroups'))]",
"mode": "serial"
},
"properties": {},
"tags": {}
Мы также хотим написать теги Azure для этих групп ресурсов. Однако проблема заключается в том, что не всем созданным нами группам ресурсов нужны одинаковые теги. Они варьируются в зависимости от группы ресурсов.
Например: RG1 нужен Tag1, RG2 нужен Tag2 и т. Д.
Как мне вставить это в мой сценарий?
Может кто-то указать мне верное направление?
Спасибо!
1 ответ
Ответ: это зависит от ваших точных требований, но, как правило, 2 подхода: функция if (), сопоставление объектов. Любой из них может быть объединен с функцией union (). создайте переменную для каждого требуемого тега:
"tag1": {
"something": "bla-bla"
},
"tag2": {
"somethingElse": "bla-bla-bla"
}
затем вы можете сделать что-то подобное в коде ресурса:
"tags": "[if(condition(something goes here, depending on your needs), variable('tag1'), variables('tag2'))]"
у вас может быть больше, если операторы объединяются друг с другом, и вы также можете использовать функцию union () для объединения тегов (хотя и не практично). объединение (переменные ('tag1'), переменные ('tag2')).
Другой (более управляемый способ в масштабе) использует маппер для "вычисления" свойства тега. Вы хотите tag1 на rg1, tag2 на rg2, tag3 на rg3. Короче говоря, что происходит: вы извлекаете переменную, имя которой равно значению свойства, которое, в свою очередь, равно названию объекта. Смешение? вот пример. создайте новую переменную:
"mapper": {
"rg1": "tag1",
"rg2": "tag2",
"rg3": "tag3",
}
и тогда в вашем ресурсе вы можете сделать это:
"tags": "[variables(variables('mapper')[variables(parameters('ResourceGroups')[copyIndex()]))])]"
^ ^ ^ ^ name of the property would be RG1\RG2\RG3 depending on where you are in the loop. this would return value of the property, so tag1 or tag2 or tag3
^ ^ ^ access properties of the object you get from the previous function (variables('mapper'))
^ ^ get variable called 'mapper'. you will get an object
^ get variable value called tag1 or tag2 or tag3