Azure ARM模板变量:获取订阅名称属性

时间:2016-10-16 00:34:05

标签: 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捕获并不适合使用不同的凭据登录不同的订阅。

由于 W上。

3 个答案:

答案 0 :(得分:1)

在撰写本回答时(2016年10月16日),我担心你不能。

根据docs,这就是subsbscription()返回的内容:

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

所以你应该期待subscription().SubscriptionName失败。

在我链接的同一文档中,评论部分对此进行了讨论,请参阅Microsoft comment #2694777590,其中有一个Microsoft?

  

好的 - 我添加了一个错误,将name属性添加到subcription()表达式。

这是2016年6月6日,所以我想它已经开始了。

作为一种解决方法,您可以从执行模板的事物中注入订阅名称。例如,如果它是PowerShell你可以做

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

另外,我不知道基于你所谈到的订阅名称的字符串操作的目的是什么,但是如果要创建订阅范围的唯一名称,一个好的做法是使用{{1作为名称的一部分。

答案 1 :(得分:0)

你应该可以使用:

subscription().displayName

(我会收到关于VS行为的错误)

答案 2 :(得分:0)

我能够让subscription().subscriptionId在模板的变量中工作。

我认为您看到的此错误是Azure读取模板的结果。基于Microsoft's reference documentation,引用不能在变量中使用:

  

备注

     

引用函数从运行时状态获取其值,因此不能在变量部分中使用。

在将我的实际参考调用移到模板主体中之前,我得到了相同的function 'reference' is not expected at this location