1

有没有办法将当前订阅名称转换为变量?

像这样的东西:

  "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。

4

3 回答 3

3

在撰写此答案时(2016 年 10 月 16 日),恐怕您不能。

根据文档,这是 subsbscription() 返回的内容:

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

所以你应该期待在subscription().SubscriptionName.

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

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

这是 2016 年 6 月 6 日,所以我想它正在路上。

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

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

另外,我不知道根据您谈到的订阅名称进行字符串操作的目的是什么,但如果要创建订阅范围的唯一名称,一个好的做法是uniqueString(subscription().subscriptionId)用作名称的一部分。

于 2016-10-16T07:13:06.077 回答
0

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

我认为您看到的这个错误是 Azure 读取模板的结果。根据微软的参考文档,引用不能在变量中使用:

评论

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

function 'reference' is not expected at this location在我将实际的引用调用移动到模板的主体之前,我得到了同样的结果。

于 2018-07-26T20:04:53.027 回答
0

您应该能够使用:

subscription().displayName

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

于 2016-10-17T15:35:02.600 回答