Переменная шаблона Azure ARM: получить свойство имени подписки

Есть ли способ получить имя текущей подписки в переменной?

Что-то вроде этого:

  "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

Для мешка процентов у нас есть несколько подписок. Имя подписки содержит трехзначный «короткий код», который используется для именования групп ресурсов в рамках данной подписки. Это не служит никакой другой цели, кроме как облегчить определение того, что к чему принадлежит. Это часть нашего соглашения об именах, чтобы помочь администраторам (которые не особенно знакомы с Azure) легко увидеть, какие ресурсы и где находятся. Я знаю, что есть и другие способы, такие как RBAC и т. Д., Но непрерывный захват файлов cookie учетных данных Microsoft не позволяет входить в систему с разными учетными данными для разных подписок.

Спасибо W.


person woter324    schedule 16.10.2016    source источник


Ответы (3)


На момент написания этого ответа (16 октября 2016 г.) я боюсь, что вы не можете.

Согласно документам, это то, что возвращает subbscription ():

{
   "id": "/subscriptions/#####",
   "subscriptionId": "#####",
   "tenantId": "#####"
}

Так что вы должны ожидать неудачи на subscription().SubscriptionName.

В том же документе, который я связал, это обсуждается в разделе комментариев, см. comment # 2694777590, где Microsoft говорит:

Хорошо - я добавил ошибку, чтобы добавить атрибут name в выражение subcription ().

это было 6 июня 2016 года, так что я думаю, это уже в пути.

В качестве обходного пути вы можете ввести имя подписки из того, что выполняет шаблон. Например, если это PowerShell, вы можете сделать

$subName = (Get-AzureRmSubscription).subscriptionname
New-AzureRmResourceGroupDeployment ... -SecscriptionName $subName

Кроме того, я не знаю, какова цель этой манипуляции со строкой на основе имени подписки, о котором вы говорили, но если это создать уникальные имена с подпиской, хорошей практикой является использование uniqueString(subscription().subscriptionId) как часть имени.

person itaysk    schedule 16.10.2016
comment
Спасибо @itaysk. Я добавил в свой вопрос дополнительную информацию. После недавнего решения по дизайну, принятого после встречи с Microsoft, мы решили отказаться от PS (поскольку это, очевидно, старый способ) и использовать шаблоны JSON. Пока функция не будет добавлена, я буду использовать PS для создания имен ресурсов. - person woter324; 17.10.2016

Вы должны уметь использовать:

subscription().displayName

(Я получу сообщение об ошибке в поведении VS)

person bmoore-msft    schedule 17.10.2016

Мне удалось заставить subscription().subscriptionId работать с переменной моего шаблона.

Я думаю, что эта ошибка является результатом того, как Azure читает шаблон. На основе справочника Microsoft документация, ссылки в переменных использовать нельзя:

Примечания

Ссылочная функция получает свое значение из состояния выполнения и поэтому не может использоваться в разделе переменных.

У меня было то же function 'reference' is not expected at this location, пока я не переместил свой реальный ссылочный вызов в тело шаблона.

person Negatar    schedule 26.07.2018