【问题标题】:Terraform Modules - Unable to Access variable from rootTerraform 模块 - 无法从根访问变量
【发布时间】:2019-02-07 01:16:23
【问题描述】:

我正在尝试使用以下语法将变量从根模块传递给子模块,但我无法这样做:

└── Terraform
            ├── main.tf
            ├── variable.tf
    └── module
                ├──main.tf
                ├── variable.tf

地形版本:

Terraform v0.11.11
+ provider.openstack v1.15.0

Terraform 配置文件 /Terraform/main.tf:

provider "openstack" {
openstack_user_name         = "${var.openstack_user_name}"
openstack_tenant_name   = "${var.openstack_tenant_name}"
openstack_password      = "${var.openstack_password}"
openstack_auth_url          = "${var.openstack_auth_url}"
domain_name             = "${var.domain_name}"
}
module "testMod" {
name                    = "${var.name}"
imageId                     = "${var.imageId}"
flavor_name                 = "${var.flavor_name}"
openstack_keypair   = "${var.openstack_keypair}"
tenant_network_id           = "${var.tenant_network_id}"
tenant_network      = "${var.tenant_network}"
source = "./modules"
}

/Terraform/variable.tf:

variable "name" {default = "XXX"}
variable "imageId" {default = "11-22-33"}
variable "flavor_name"{default = "flavor"}
...

/Terraform/modules/main.tf:

resource "openstack_compute_instance_v2" "test" {
 name               = "${var.name}"
imageId                 = "${var.imageId}"
flavor_name             = "${var.flavor_name}"
openstack_keypair       = "${var.openstack_keypair}"
security_groups     =   ["default"]

network {
tenant_network_id       = "${var.tenant_network_id}"
tenant_network      = "${var.tenant_network}"
    }
}

/Terraform/modules/variable.tf:

variable "name" {}
variable "imageId" {}
variable "flavor_name" {}
variable "openstack_keypair" {}
variable "tenant_network_id"{}
variable "tenant_network" {}

实际行为

Error: module.testMod.openstack_compute_instance_v2.test: : invalid or unknown key: imageId

复制步骤

  1. terraform init
  2. terraform apply

不确定这里出了什么问题

【问题讨论】:

    标签: terraform terraform-provider-openstack


    【解决方案1】:

    错误提示您注意未知键imageId。这个消息是准确的,事实上,密钥应该是image_id。您可以查看 Terraform openstack_compute_instance_v2 资源文档并注意 image_id 参数的存在。

    您的代码将如下所示:

    resource "openstack_compute_instance_v2" "test" {
      name              = "${var.name}"
      image_id          = "${var.imageId}"
      flavor_name       = "${var.flavor_name}"
      openstack_keypair = "${var.openstack_keypair}"
      security_groups   = ["default"]
    }
    

    【讨论】:

      【解决方案2】:

      我需要从模块/myservice/main.tf 中的根变量.tf 访问变量

      我们怎样才能做到这一点?通过使用 var.environment 不起作用

      例如:

      根/变量.tf

      variable "environment" {
        type        = string
        description = "Resource environment e.g dev, test or prod."
        default     = "dev"
      }
      

      如何使用 ${var.environment} 访问 root/module/myservice/main.tf 中的上述变量 var.environment 不起作用。

      root/module/myservice/main.tf

      locals {
        name = "${var.environment}.myInstance"
      }
      resource "aws_network_interface" "foo" {
        name = local.name
        .
        .
        .
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-16
        • 1970-01-01
        • 1970-01-01
        • 2021-07-13
        • 1970-01-01
        • 2021-04-01
        • 1970-01-01
        • 2021-10-23
        相关资源
        最近更新 更多