作为GitHub使用terraform操作配置google云资源的一部分,我需要绕过使用terraform变量文件的一些输入值,问题是THL不支持Golang。
我已经试着做了如下:
- 使用 创建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