Доступ к переменным Terraform вне модуля - PullRequest
1 голос
/ 23 сентября 2019

У меня есть структура папок terraform, как показано ниже.Я обращаюсь к выходной переменной из модуля 01_app в модуль 02_tenant.Однако выходная переменная недоступна для всех модулей.

Я управляю двумя разными файлами состояния для этих двух папок.Может ли кто-нибудь помочь мне в доступе к выходным переменным через модули.

enter image description here

Я объявил выходную переменную в 01_app/main_infra_app.tf:

output "key_vault_id" {
  value = "${azurerm_key_vault.key_vault.id}"
}

02_tenant/variables.tf:

variable "key_vault_id" {
}

Я добавил ниже блок в 02_tenant/main_infra_app.tf:

module "kv" {
  source = "./01_app"
  key_vault_value_name  =   "${01_app.key_vault_id}"
}

[РЕДАКТИРОВАТЬ: 01] Это ошибкаlog.

Terraform v0.12.9
2019-09-23T17:15:39.9624707Z [command]C:\hostedtoolcache\windows\terraform\0.12.9\x64\terraform.exe init --backend-config=d:\a\r1\a/_Infrastructure/terraform/02_tenant/var/backend.tfvars --reconfigure
2019-09-23T17:15:40.0555160Z ‌There are some problems with the configuration, described below.‌
2019-09-23T17:15:40.0555674Z 
2019-09-23T17:15:40.0556565Z The Terraform configuration must be valid before initialization so that
2019-09-23T17:15:40.0556859Z Terraform can determine which modules and providers need to be installed.‌
2019-09-23T17:15:40.0557069Z ‌
2019-09-23T17:15:40.0557287Z ‌Error: ‌Extra characters after interpolation expression‌
2019-09-23T17:15:40.0557482Z 
2019-09-23T17:15:40.0557678Z ‌  on main_infra_tenant.tf line 42, in module "x":‌
2019-09-23T17:15:40.0557881Z   42:   key_vault_value_name  =   "${01‌_app‌.key_vault_id}"‌
2019-09-23T17:15:40.0558082Z ‌
2019-09-23T17:15:40.0558277Z Expected a closing brace to end the interpolation expression, but found extra
2019-09-23T17:15:40.0558484Z characters.
2019-09-23T17:15:40.0558656Z ‌
2019-09-23T17:15:40.0696178Z ##[error]Terraform command 'init' failed with exit code '1'.:  Extra characters after interpolation expression

[EDIT 2] Я добавил блок ниже в 02_tenant / main_infra_tenant.tf.Поскольку у меня есть названия KV и RG, я теперь могу получить kv_id во втором файле .tf.

data "azurerm_key_vault" "kv" {
  name                = var.kv_name
  resource_group_name = var.rg_name
}

# Write to Azure KV 
resource "azurerm_key_vault_secret" "kv_secret_for_key" {
  name         =  var.key_name
  value        =  base64encode(random_string.generate_key.result)
  key_vault_id =  "${data.azurerm_key_vault.kv.id}"

}

1 Ответ

1 голос
/ 24 сентября 2019

Похоже, ваш текущий код использует вывод key_vault_id из модуля 01_app в качестве входа для инициализации самого модуля.Вместо этого вы должны использовать вывод key_vault_id из 01_app в другой части инфраструктуры.

Попробуйте вместо этого сделать что-то подобное, чтобы использовать выходную переменную 01_app key_vault_id в 02_tenant:

In 02_tenant/main_infra_app.tf:

module "kv" {
  source                =   "./01_app"
  key_vault_value_name  =   "somevalue"
}

data "azurerm_key_vault_secret" "test" {
  name         = "key-vault-name"
  key_vault_id = "${module.kv.key_vault_id}"
}

Так что теперь ваш код использует вывод 01_app key_vault_id в модуле 02_tenant.

...