Модули Terraform - Невозможно получить доступ к переменной из корня
Я пытаюсь передать переменную из корневого модуля в дочерний модуль со следующим синтаксисом, и я не могу это сделать:
└── 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
Не уверены, что здесь происходит не так
2 ответа
Ошибка предупреждает вас о неизвестном ключе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"]
}
У меня есть это требование для доступа к переменным из корневой переменной .tf внутри модуля/myservice/main.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} не работает.
корень/модуль/myservice/main.tf
locals {
name = "${var.environment}.myInstance"
}
resource "aws_network_interface" "foo" {
name = local.name
.
.
.
}