首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform将查找和splat语法结合起来

Terraform将查找和splat语法结合起来
EN

Stack Overflow用户
提问于 2018-04-23 18:21:37
回答 2查看 1.2K关注 0票数 1

我试图提供多个Azure虚拟机与Terraform,然后获得MSI标识ID的权利。我从这个对我有用的MSI示例(msi.html)开始,并试图添加计数,即

代码语言:javascript
复制
resource "azurerm_virtual_machine" "virtual_machine" {
  count = "5"
  name                  = "test"
  ....

  identity = {
    type = "SystemAssigned"
  }

  .....
}

resource "azurerm_virtual_machine_extension" "virtual_machine_extension" {
  count = "5"
  name                 = "test"
  location             = "${var.location}"
  resource_group_name  = "test"
  virtual_machine_name = "${element(azurerm_virtual_machine.virtual_machine.*.name, count.index)}"
  publisher            = "Microsoft.ManagedIdentity"
  type                 = "ManagedIdentityExtensionForWindows"
  type_handler_version = "1.0"

  settings = <<SETTINGS
    {
        "port": 50342
    }
SETTINGS
}


output "vm_principals" {
  # original had --- "${lookup(azurerm_virtual_machine.virtual_machine.identity[0], "principal_id"}"
  value = ["${azurerm_virtual_machine.virtual_machine.*.identity[0]}"]
}

问题是,我得到一个输出数组如下:

代码语言:javascript
复制
vm_principals = [
  { 
     principal_id = xxxxxxxxxxxxx, 
     type = SystemAssigned
  }, 
  { 
     principal_id = yyyyyyyyyyyyy,
     type = SystemAssigned
  }
]

我想得到的是

代码语言:javascript
复制
vm_principals = [
  xxxxxxxxxxxxxxxxx,
  yyyyyyyyyyyyyyyyy
]

我尝试了明显的变化,但我怀疑这是一个地形的限制。

代码语言:javascript
复制
  value = ["${lookup(azurerm_virtual_machine.virtual_machine.*.identity[0], "principal_id)}"]

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-22 21:10:34

不幸的是你是对的。我相信你在打本期。然而,这可能在Terraform的0.12版本中得到解决,因为它将引入一种改进的语言(HCL)。有关更多细节,请参见此Hashicorp博客文章

票数 1
EN

Stack Overflow用户

发布于 2019-02-11 22:40:20

我是如何处理这个问题的

代码语言:javascript
复制
resource "azurerm_virtual_machine" "kubenode" {
  count = "3"
  ...
}

对于名为kubenode的azurerm_virtual_machine资源,可以这样做:

代码语言:javascript
复制
${azurerm_virtual_machine.kubenode.*.identity.0.principal_id}

它将返回主体ids的列表。然后你可以:

代码语言:javascript
复制
${azurerm_virtual_machine.kubenode.*.identity.0.principal_id[count.index]}

例如,在角色分配场景中:

代码语言:javascript
复制
resource "azurerm_role_assignment" "kubenode-subscription-reader-role" {
  count                = "${azurerm_virtual_machine.kubenode.count}"
  scope                = "${data.azurerm_subscription.primary.id}"
  role_definition_name = "Reader"
  principal_id         = "${azurerm_virtual_machine.kubenode.*.identity.0.principal_id[count.index]}"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49987579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档