来自 gitlab CI/CD 变量的 Terraform 变量

Wil*_*lly 1 gitlab-ci terraform hcl terraform-provider-ibm

我知道 CI/CD 变量可以在 HCL 中使用,因为在环境中使用 TF_VAR_ 前缀声明它们将使我能够将它们作为输入变量查找,然后在我所在的 .tf 文件中使用它们。需要他们。

\n

我做了:

\n
    \n
  • 通过 GitLab 项目中的 UI 设置我的变量,如TF_VAR_ibm_api_key,然后屏蔽它。
  • \n
  • 为其写入一个变量块main.tf
  • \n
  • 在同一文件中需要的地方调用它main.tf
  • \n
  • 尝试将变量包含在 中variables.tf,结果相同
  • \n
  • 阅读 gitlab 和 terraform 的文档,但我没有得到正确的结果。
  • \n
\n

这是我的main.tf文件:

\n
variable ibm_api_key {\n}\n\nterraform {\n  required_version = ">= 0.13"\nrequired_providers {\n    ibm = {\n    source = "IBM-Cloud/ibm"\n    }\n }\n}\n\nprovider "ibm" {\n  ibmcloud_api_key = var.ibm_api_key\n}\n
Run Code Online (Sandbox Code Playgroud)\n

预期行为:变量从 CI/CD 传递并添加到 HCL 代码中。

\n

当前行为:在 \xc2\xb4plan\xc2\xb4 期间,作业失败并出现错误代码 1

\n
$ terraform plan\nvar.ibm_api_key\n  Enter a value: \xe2\x95\xb7\n\xe2\x94\x82 Error: No value for required variable\n\xe2\x94\x82 \n\xe2\x94\x82   on main.tf line 1:\n\xe2\x94\x82    1: variable ibm_api_key {\n\xe2\x94\x82 \n\xe2\x94\x82 The root module input variable "ibm_api_key" is not set, and has no default\n\xe2\x94\x82 value. Use a -var or -var-file command line argument to provide a value for\n\xe2\x94\x82 this variable.\n\xe2\x95\xb5\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • 尽管从逻辑上讲这似乎不是问题,但我尝试将变量调用格式化为字符串插值,例如:

    \n

    供应商 "ibm" {\nibmcloud_api_key = "${var.ibm_api_key}"\n}\n自然无济于事。

    \n
  • \n
  • 尽管从逻辑上讲这似乎不是问题,但我尝试为变量定义类型:

    \n

    变量 ibm_api_key {\ntype = string\n}\n自然无济于事。

    \n
  • \n
  • 为了检查变量是否从 CI/CD 设置传递到 gitlab 运行程序的环境,我添加了一个既未受保护也未屏蔽的变量,并插入了双重检查的分配字符串:

    \n
      \n
    • 回显${输出检查}
    • \n
    • 回显${TF_VAR_ibm_api_key}
    • \n
    \n
  • \n
\n

这不会导致错误,但也不会被打印。输出中仅出现“echo”命令。

\n
$ echo ${output_check}\n$ echo ${TF_VAR_ibm_api_key}\nCleaning up project directory and file based variables 00:01\nJob succeeded\n
Run Code Online (Sandbox Code Playgroud)\n

Mat*_*ard 5

提供者通常在其架构和/或关联的身份验证绑定中配置固有环境变量。根据提供商身份验证文档,这种情况没有什么不同。您可以使用 GitlabCI 项目环境变量设置中的 IBM API 密钥对提供程序进行身份验证:

IAAS_CLASSIC_API_KEY="iaas_classic_api_key"
Run Code Online (Sandbox Code Playgroud)

  • 虽然上述内容是合法的,但它并没有回答问题中所述的问题,这也是设置提供商的可行方法。 (2认同)