Я создаю сценарий bash для предоставления нескольких ресурсов Azure с помощью Azure CLI . Пока все хорошо, но у меня проблема с маркировкой ресурсов.
Моя цель - сохранить несколько тегов в переменной и предоставить эту переменную для опции --tags нескольких az
команд в сценарии. Однако проблема в том, что пробел в значении будет интерпретироваться как новый ключ.
Если мы возьмем, например, команду az group update
(которая обновит группу ресурсов), docs сообщит следующее о опции --tags:
--tags
Разделенные пробелами теги в формате «ключ [= значение]». Используйте "", чтобы очистить существующие теги.
Когда значение (или ключ) содержит пробелы, оно должно быть заключено в кавычки.
Поэтому, когда мы предоставляем пары ключ-значение непосредственно команде, включая значение с пробелами, как в следующем примере, результат будет таким, как ожидалось:
az group update --tags owner="FirstName LastName" application=coolapp --name resource-group-name
В результате в группу ресурсов будут добавлены два тега:
{
"id": "/subscriptions/1e42c44c-bc55-4b8a-b35e-de1dfbcfe481/resourceGroups/resource-group-name",
"location": "westeurope",
"managedBy": null,
"name": "resource-group-name",
"properties": {
"provisioningState": "Succeeded"
},
"tags": {
"application": "coolapp",
"owner": "FirstName LastName"
}
}
Однако, когда мы сохраняем то же значение, которое мы использовали в предыдущем шаге, в переменной, возникает проблема.
tag='owner="FirstName LastName" application=coolapp'
Я использую echo $tag
, чтобы проверить, что переменная содержит точно такое же значение, которое мы указали в предыдущем примере для опции --tags:
owner="FirstName LastName" application=coolapp
Но когда мы предоставляем эту переменную тега для опции тегов команды, как показано в следующей строке:
az group update --tags $tag --name resource-group-name
Результатом будет три тега вместо ожидаемых двух:
{
"id": "/subscriptions/1e42c44c-bc55-4b8a-b35e-de1dfbcfe481/resourceGroups/resource-group-name",
"location": "westeurope",
"managedBy": null,
"name": "resource-group-name",
"properties": {
"provisioningState": "Succeeded"
},
"tags": {
"LastName\"": "",
"application": "coolapp",
"owner": "\"FirstName"
}
}
Я уже пытался определить переменную следующими способами, но пока не повезло:
tag="owner=FirstName LastName application=coolapp"
tag=owner="Firstname Lastname" application=cool-name
tag='`owner="Firstname Lastname" application=cool-name`'
Я даже пытался определить переменную как массив и предоставить ее команде, как показано на следующей строке, но также это не дало правильного результата:
tag=(owner="Firstname Lastname" application=cool-name)
az group update --tags ${tag[*]}--name resource-group-name
Я также попытался поместить кавычки вокруг переменной в команде, как это было предложено @socowi, но это привело к следующему неверному результату одного тега вместо двух:
az group update --tags "$tag" --name resource-group-name
{
"id": "/subscriptions/1e42c44c-bc55-4b8a-b35e-de1dfbcfe481/resourceGroups/resource-group-name",
"location": "westeurope",
"managedBy": null,
"name": "resource-group-name",
"properties": {
"provisioningState": "Succeeded"
},
"tags": {
"owner": "Firstname Lastname application=cool-name"
}
}
Кто-нибудь знает, как это решить?