如何在Terraform Provider块中引用GitLab Pipeline环境变量?
解决Terraform Docker Provider无法引用GitLab Pipeline环境变量的问题
问题根源
Terraform的Provider初始化阶段早于变量加载流程,因此Provider块无法直接引用var.xxx形式的Terraform变量;同时你之前使用的${TF_VAR_myenvvariable}属于错误的插值语法,TF_VAR_前缀的环境变量是用来给Terraform变量赋值的,不能直接在配置中这样使用。
可行解决方案
方案1:直接读取普通环境变量(推荐)
- 修改GitLab Pipeline的变量定义,去掉
TF_VAR_前缀,设置为普通环境变量:
Plan (Example): variables: MY_DOCKER_CONFIG_PATH: /home/$example
- 在
providers.tf中使用Terraform内置的env()函数读取该环境变量:
provider "docker" { # 其他配置... registry_auth { address = "example.com" config_file = "${env("MY_DOCKER_CONFIG_PATH")}/docker.json" } }
方案2:保留TF_VAR_前缀直接读取
如果不想修改Pipeline的变量命名规则,可直接读取TF_VAR_myenvvariable这个环境变量(GitLab会将其注入到运行环境中):
provider "docker" { # 其他配置... registry_auth { address = "example.com" config_file = "${env("TF_VAR_myenvvariable")}/docker.json" } }
内容的提问来源于stack exchange,提问作者Kent Wong
相关产品推荐
相关产品推荐

