34

我有两个环境变量。一个是TF_VAR_UN,另一个是TF_VAR_PW。然后我有一个看起来像这样的 terraform 文件。

resource "google_container_cluster" "primary" {
    name = "marcellus-wallace"
    zone = "us-central1-a"
    initial_node_count = 3

    master_auth {
        username = ${env.TF_VAR_UN}
        password = ${env.TF_VAR_PW}
    }

    node_config {
        oauth_scopes = [
            "https://www.googleapis.com/auth/compute",
            "https://www.googleapis.com/auth/devstorage.read_only",
            "https://www.googleapis.com/auth/logging.write",
            "https://www.googleapis.com/auth/monitoring"
        ]
    }
}

我想用环境变量替换的两个值TF_VAR_UNTF_VAR_PW用户名和密码。我尝试了上面显示的内容,但没有成功,我还玩弄了其他一些东西,但总是遇到语法问题。

4

5 回答 5

48

我会尝试更多类似的东西,这似乎更接近文档

variable "UN" {
  type = string
}

variable "PW" {
  type = string
}

resource "google_container_cluster" "primary" {
  name = "marcellus-wallace"
  zone = "us-central1-a"
  initial_node_count = 3

  master_auth {
    username = var.UN
    password = var.PW
  }

  node_config {
    oauth_scopes = [
        "https://www.googleapis.com/auth/compute",
        "https://www.googleapis.com/auth/devstorage.read_only",
        "https://www.googleapis.com/auth/logging.write",
        "https://www.googleapis.com/auth/monitoring"
    ]
  }
}

CLI 命令如下。

TF_VAR_UN=foo TF_VAR_PW=bar terraform apply
于 2016-04-17T05:14:00.123 回答
6

使用插值语法会引发 terraform 警告v0.12.18。现在您不需要使用插值语法。您可以将其引用为var.hello.

注意: 从语言的角度来看,要理解的一件重要事情是,您不能使用环境变量声明变量。您只能使用环境变量为脚本中声明的变量赋值。例如,假设您有以下 .tf 脚本

variable "hello" { type=string }

现在,如果环境有一个变量 TF_VAR_hello="foobar",则在运行时变量 hello 将具有值“foobar”。如果在没有声明变量的情况下分配变量,则不会产生任何影响。

于 2019-12-26T17:53:59.167 回答
3

您可以执行以下操作以使其正常工作。

1.在 terraform 配置中声明要用作环境变量的变量。-->变量“db_password”{类型=字符串}

  1. 在要使用此变量的资源部分中,将其更改为 -->"db_password":"${var.db_password}"

3.导出环境变量。--> 导出 TF_VAR_db_password="##password##"

4.terraform plan or apply

于 2021-05-20T07:04:22.090 回答
-2

为了使用变量,它需要用 "" 包装,例如:

用户名 = "${var.UN}"

于 2017-07-25T09:32:32.283 回答