绕过GitHub Actions工作流中的输入值到地形变量文件



作为GitHub使用terraform操作配置google云资源的一部分,我需要绕过使用terraform变量文件的一些输入值,问题是THL不支持Golang。

我已经试着做了如下:

  1. 使用
  2. 创建GitHub动作工作流
workflow_dispatch:
inputs:
new_planet:
description: 'Bucket Name'
required: true
default: 'some bucket'

在工作流程的末尾:

- name: terraform plan
id: plan
run: |
terraform plan -var-file=variables.tf

在variables.tf:

variable "backend_bucket" {
type = string
default = ${{ github.event.inputs.new_planet }}
description = "The backend bucket name"

如果你知道如何绕过工作流的输入值进入地形,我将不胜感激。

您可以在命令行中使用backend-config选项[1]。您首先需要配置后端(例如,通过创建一个backend.tf文件)并添加以下内容:

terraform {
backend "s3" {
}
}

这样,每次运行terraform init时都会提示输入。但是,还有一个额外的CLI选项-input=false,它可以防止Terraform请求输入。下面的代码片段将移动到Terraform代码所在的目录中(取决于repo的名称,目录名称会有所不同),并运行terraform init,并将-backend-config选项和-input设置为false:

- name: Terraform Init
id: init
run: |
cd terraform-code
terraform init -backend-config="bucket=${{ secrets.STATE_BUCKET_NAME }}" 
-backend-config="key=${{ secrets.STATE_KEY }}" 
-backend-config="region=${{ secrets.AWS_REGION }}" 
-backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID }}" 
-backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY }}" 
-input=false -no-color

我想你不希望桶的名称和其他敏感值被硬编码,我建议使用GitHub Actions secrets[2]。

设置好之后,您可以运行terraform plan,而不必为后端配置指定变量。另一方面,您可以在前面的步骤中创建一个terraform.tfvars文件,以便计划步骤使用它。下面是我的一个例子:

- name: Terraform Tfvars
id: tfvars
run: |
cd terraform-code
cat << EOF > terraform.tfvars 
profile                 = "profilename"
aws_region              = "us-east-1"
EOF
您将以以下代码段结束(再次注意-input=false):
- name: Terraform Plan
id: plan
run: |
cd terraform-code        
terraform plan -no-color -input=false
continue-on-error: true

所有的地形部分都可以通过Hashicorp提供的GitHub Action获得[3]。


[1] https://www.terraform.io/docs/language/settings/backends/configuration.html部分配置

[2] https://docs.github.com/en/actions/security-guides/encrypted-secrets

[3] https://github.com/hashicorp/setup-terraform

相关内容

  • 没有找到相关文章

最新更新