首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform:错误:无效的索引操作

Terraform:错误:无效的索引操作
EN

Stack Overflow用户
提问于 2021-02-05 16:30:27
回答 1查看 647关注 0票数 0

我使用Terraform 0.14来自动创建一些Azure资源。

我正在尝试为Azure Kubernetes集群分配一个拉角色,以便使用托管系统标识Azure容器注册表中提取图像。

这里是我的代码

Azure Kubernetes集群(main.tf文件)

代码语言:javascript
复制
resource "azurerm_kubernetes_cluster" "akc" {
  name                = var.cluster_name
  location            = var.location
  resource_group_name = var.resource_group_name
  dns_prefix          = var.dns_prefix
  kubernetes_version  = var.kubernetes_version
  api_server_authorized_ip_ranges = var.api_server_authorized_ip_ranges

  identity {
    type = "SystemAssigned"
  }
}

Azure Kubernetes集群(outputs.tf文件)

代码语言:javascript
复制
output "principal_id" {
  value = azurerm_kubernetes_cluster.akc.identity[0]["principal_id"]
}

Azure角色分配(main.tf文件)

代码语言:javascript
复制
# Create a role assignment
resource "azurerm_role_assignment" "ara" {
  scope                            = var.scope
  role_definition_name             = var.role_definition_name
  principal_id                     = var.principal_id
}

测试环境(main.tf文件)

代码语言:javascript
复制
# Create azure kubernetes cluster
module "azure_kubernetes_cluster" {
  source                   = "../modules/azure-kubernetes-cluster"
  cluster_name             = var.cluster_name
  location                 = var.location
  dns_prefix               = var.dns_prefix
  resource_group_name      = var.resource_group_name
  kubernetes_version       = var.kubernetes_version
  node_count               = var.node_count
  min_count                = var.min_count
  max_count                = var.max_count
  os_disk_size_gb          = "100"
  max_pods                 = "110"
  vm_size                  = var.vm_size
  aad_group_name           = var.aad_group_name
  vnet_subnet_id           = var.vnet_subnet_id
}

# Create azure container registry
module "azure_container_registry" {
  source                   = "../modules/azure-container-registry"
  container_registry_name  = var.container_registry_name
  resource_group_name      = var.resource_group_name
  location                 = var.location
  sku                      = var.sku
  admin_enabled            = var.admin_enabled
}

# Create azure role assignment
module "azure_role_assignment" {
  source                   = "../modules/azure-role-assignment"
  scope                    = module.azure_container_registry.acr_id
  role_definition_name     = var.role_definition_name
  principal_id             = module.azure_kubernetes_cluster.principal_id
}

但是,当我运行terraform plan命令时,会得到以下错误:

代码语言:javascript
复制
Error: Invalid index operation

  on ../modules/aks-cluster/outputs.tf line 14, in output "principal_id":
  14:   value = azurerm_kubernetes_cluster.cluster.identity[0]["principal_id"]

Only attribute access is allowed here. Did you mean to access attribute
"principal_id" using the dot operator?

想办法解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-05 16:30:27

我后来想出了这个错误的解决方案。在Terraform 0.12和更高版本中对如何调用索引操作进行了一些修改。因此,与其这样做,不如:

Azure Kubernetes集群(outputs.tf文件)

代码语言:javascript
复制
output "principal_id" {
  value = azurerm_kubernetes_cluster.akc.identity[0]["principal_id"]
}

这将是:

Azure Kubernetes集群(outputs.tf文件)

代码语言:javascript
复制
output "principal_id" {
  value = azurerm_kubernetes_cluster.akc.identity.*.principal_id
}

而不是这样:

测试环境(main.tf文件)

代码语言:javascript
复制
# Create azure role assignment
module "azure_role_assignment" {
  source                   = "../modules/azure-role-assignment"
  scope                    = module.azure_container_registry.acr_id
  role_definition_name     = var.role_definition_name
  principal_id             = module.azure_kubernetes_cluster.principal_id
}

这将是:

测试环境(main.tf文件)

代码语言:javascript
复制
# Create azure role assignment
module "azure_role_assignment" {
  source                   = "../modules/azure-role-assignment"
  scope                    = module.azure_container_registry.acr_id
  role_definition_name     = var.role_definition_name
  principal_id             = module.azure_kubernetes_cluster.principal_id[0]
}

Resources引用0.12中模块输出时的无效索引

就这样

我希望这对有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66067000

复制
相关文章

相似问题

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