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

时间:2018-12-19 14:54:33

标签: azure kubernetes terraform azure-kubernetes azure-aks

我的解决方案:

├── 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和密码。我将非常有兴趣看到一些示例,这些示例如何将包含服务主体和机密的环境变量传递给每个集群。

2 个答案:

答案 0 :(得分:1)

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

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)}"
}

答案 1 :(得分:0)

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}"
}

this链接中的更多信息和一些example