#azure #arm-template
#azure #arm-template
Вопрос:
Есть ли способ получить имя текущей подписки в переменной?
Что-то вроде этого:
"variables": {
"Purpose": "[subscription().SubscriptionName]"
},
Visual Studio сообщает, что «Свойство «подписки» должно быть одним из следующих: id, subscriptionId, TenantId». Таким образом, вышеуказанное не будет работать.
Я также нашел несколько примеров функции «ссылка» и попытался использовать ее таким образом:
"variables": {
"SubName": "[reference('/subscriptions/subscription().subscriptionId','2015-01-01').outputs.name.value]"
},
Но при вызове шаблона он выдает ошибку:
function 'reference' is not expected at this location
Я не уверен, куда я должен его поместить и как я получаю его в переменную.
В PowerShell я мог бы сделать это: (Get-AzureRmSubscription).subscriptionname
Для интересующего нас пакета у нас есть несколько подписок. Имя подписки содержит 3-значный «короткий код», который используется для присвоения имен группам ресурсов в рамках данной подписки. Это не служит никакой другой цели, кроме упрощения определения того, что к чему относится. Это часть нашего соглашения об именовании, чтобы помочь администраторам (которые не особенно знакомы с Azure) легко увидеть, какие ресурсы где находятся. Я знаю, что есть другие способы, такие как RBAC и т. Д., Но непрерывный сбор файлов cookie учетных данных Microsoft не позволяет входить в систему с разными учетными данными для разных подписок.
Спасибо W.
Ответ №1:
На момент написания этого ответа (16 октября 2016 года) Боюсь, вы не сможете.
Согласно документам, это то, что возвращает subscription():
{
"id": "/subscriptions/#####",
"subscriptionId": "#####",
"tenantId": "#####"
}
Поэтому вам следует ожидать сбоя subscription().SubscriptionName
.
В том же документе, на который я ссылался, есть обсуждение этого в разделе комментариев, см. Комментарий # 2694777590, где Microsoft говорит:
Хорошо — я добавил ошибку для добавления атрибута name в выражение subscription().
это было 6 июня 2016 года, так что, я думаю, это уже в пути.
В качестве обходного пути вы можете ввести имя подписки из объекта, который выполняет шаблон. Например, если это PowerShell, вы могли бы сделать
$subName = (Get-AzureRmSubscription).subscriptionname
New-AzureRmResourceGroupDeployment ... -SecscriptionName $subName
Кроме того, я не знаю, какова цель этой манипуляции со строками на основе имени подписки, о котором вы говорили, но если требуется создать уникальные имена в области подписки, рекомендуется использовать uniqueString(subscription().subscriptionId)
как часть имени.
Комментарии:
1. Спасибо @itaysk. Я обновил свой вопрос дополнительной информацией. После недавнего решения по дизайну после встречи с Microsoft мы решили отказаться от PS (поскольку это, по-видимому, «старый» способ) и использовать шаблоны JSON. Пока функция не будет добавлена, я буду использовать PS для создания имен ресурсов.
Ответ №2:
Вы должны иметь возможность использовать:
subscription().displayName
(Я получу сообщение об ошибке в поведении VS)
Ответ №3:
Я смог приступить subscription().subscriptionId
к работе с переменной моего шаблона.
Я думаю, что эта ошибка, которую вы видите, является результатом того, как Azure считывает шаблон. Согласно справочной документации Microsoft, ссылки нельзя использовать в переменных:
Примечания
Ссылочная функция получает свое значение из состояния времени выполнения и, следовательно, не может использоваться в разделе переменные.
Я получал то же function 'reference' is not expected at this location
самое, пока не переместил свой фактический ссылочный вызов в тело шаблона.
Ответ №4:
subscription()
displayName
Согласно документации, у now есть дополнительный атрибут.
Для вас должно сработать следующее:
"variables": {
"Purpose": "[subscription().displayName]"
}