绕过GitHub Actions工作流程中的输入值,写入terraform变量文件。

3

作为使用terraform在GitHub actions中提供Google Cloud资源的一部分,我需要通过terraform变量文件绕过一些输入值,但问题是THL不支持Golang。

我尝试了以下操作:

  1. 创建一个带有GitHub actions工作流程的
  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"

如果您有任何想法可以绕过来自工作流的输入值并将其传递给terraform,我将不胜感激。

1个回答

2
你可以在命令行中使用backend-config选项[1]。首先需要配置后端(例如,通过创建backend.tf文件),然后添加以下内容:
terraform {
  backend "s3" {
  }
}

这样,每次运行terraform init时都会提示您输入。但是,还有一个额外的CLI选项-input=false可以防止Terraform请求输入。以下代码片段将进入包含Terraform代码的目录(根据存储库的名称,目录名称将不同),并使用-backend-config选项以及-input设置为false运行terraform init

      - 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

今日免费次数已满, 请开通会员/明日再来
      - name: Terraform Plan
        id: plan
        run: |
          cd terraform-code        
          terraform plan -no-color -input=false
        continue-on-error: true

所有的terraform部分都可以通过Hashicorp提供的GitHub Action [3] 来实现。
[1] 可以在这里找到更多有关配置文件的信息:https://www.terraform.io/docs/language/settings/backends/configuration.html#partial-configuration [2] 了解如何加密秘密信息,请查看此链接:https://docs.github.com/en/actions/security-guides/encrypted-secrets [3] 请访问此链接了解如何设置terraform: https://github.com/hashicorp/setup-terraform

我不确定你是否理解了我的问题,而且后端是一个糟糕的例子。 - Shay Pinchasi
我已经做了。你想将后端存储桶名称作为变量传递,但为了避免提供任何输入,因此我详细介绍了如何正确地完成它,而不需要硬编码任何内容。 - Marko E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接