Terraform 模块 - 无法从 root 访问变量
Terraform Modules - Unable to Access variable from root
我正在尝试使用以下语法将变量从根模块传递到子模块,但我无法这样做:
└── Terraform
├── main.tf
├── variable.tf
└── module
├──main.tf
├── variable.tf
Terraform 版本:
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
重现步骤
terraform init
terraform apply
不确定这里出了什么问题
错误提示您使用未知密钥imageId
。此消息是准确的,因为实际上密钥应该是 image_id
。您可以检查 Terraform openstack_compute_instance_v2 resource documentation and note the presence of the 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"]
}
我有这个要求从 module/myservice/main.tf
中的根 variable.tf 访问变量
我们怎样才能做到这一点?通过使用 var.environmentdoes 无效
例如:
root/variable.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
.
.
.
}
我正在尝试使用以下语法将变量从根模块传递到子模块,但我无法这样做:
└── Terraform
├── main.tf
├── variable.tf
└── module
├──main.tf
├── variable.tf
Terraform 版本:
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
重现步骤
terraform init
terraform apply
不确定这里出了什么问题
错误提示您使用未知密钥imageId
。此消息是准确的,因为实际上密钥应该是 image_id
。您可以检查 Terraform openstack_compute_instance_v2 resource documentation and note the presence of the 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"]
}
我有这个要求从 module/myservice/main.tf
中的根 variable.tf 访问变量我们怎样才能做到这一点?通过使用 var.environmentdoes 无效
例如:
root/variable.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
.
.
.
}