繁体   English   中英

Terraform - 如何将环境变量传递给 terraform 中的子模块

[英]Terraform - How to pass environment variables to sub modules in terraform

我的解决方案:

├── main.tf
├── modules
│   ├── cluster1
│   │   ├── cluster1.tf
│   │   ├── main.tf
│   │   ├── output.tf
│   │   └── variables.tf
│   ├── cluster2
│   │   ├── cluster.tf
│   │   ├── main.tf
│   │   ├── output.tf
│   │   └── variables.tf
│   └── trafficmanager
│       ├── main.tf
│       ├── output.tf
│       ├── trafficmanager.tf
│       └── variables.tf
├── README.md
└── variables.tf

为了让我创建一个 Azure k8s 集群,每个集群都需要服务主体 ID 和密码。 我很想看看有关如何将包含服务主体和机密的环境变量传递给每个集群的一些示例。

您可以在模块中指定变量并将信息传递给它们:

module.tf:

variable "hack" {}
variable "reference" {
  "type" = "map"
}    
variable "ports" {
  "default" = [2379, 6443]
}

模块调用:

module "master" {
  source = "./vmLoop"

  vmName    = "master"
  reference = "${var.reference}"
  hack      = "${element(azurerm_subnet.subnets.*.id, 1)}"
}

令人讨厌的是,您似乎必须复制“根”模块中的定义(即入口点,如果我正确理解 TF 术语的话)。 例如:

# "cluster" module defines variable:
common/terraform/modules/cluster/variables.tf:
variable "environment_root" {
    type = string
}

# "cluster" module uses it:
common/terraform/modules/cluster/nodes.tf:
...
metadata = {
    environment = var.environment_root
  }
...

# "root" module which uses cluster module defines it:
dev/terraform/variables.tf:
variable "environment_root" {
    type = string
}

# "root" module passes it to cluster module:
dev/terraform/main.tf:
module "cluster" {
    environment_root = var.environment_root
...
}

然后可以设置它,例如:

export TF_VAR_environment_root=whatever
terraform apply

爱有人告诉我另一种方式...

Terraform将以TF_VAR_name的形式读取环境变量以查找变量的值。 例如,可以将TF_VAR_access_key变量设置为设置access_key变量。

export TF_VAR_region=us-west-1 # normal string
export TF_VAR_alist='[1,2,3]' # array
export TF_VAR_amap='{ foo = "bar", baz = "qux" }' # map

将模块传递到terraform模块

variable "region" {}
variable "alist" {}
variable "map" {}

module "test" {
  source = "./module/testmodule" # module location
  region = "${var.region}"
  list   = "${var.alist}"
  map    = "${var.map}"
}

链接中的更多信息和一些示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM