#terraform #github-actions
#terraform #github-действия
Вопрос:
Error: Apply not allowed for workspaces with a VCS connection
Я получаю эту ошибку при попытке применить план terraform с помощью действий Github.
Действие Github (применение terraform)
- name: Terraform Apply Dev
id: apply_dev
if: github.ref == 'refs/heads/master' amp;amp; github.event_name == 'push'
run: TF_WORKSPACE=dev terraform apply -auto-approve deployment/
Terraform workspace
Рабочее пространство было создано в Terraform Cloud как Version control workflow
и вызывается app-infra-dev
Серверная часть Terraform
# The configuration for the `remote` backend.
terraform {
backend "remote" {
hostname = "app.terraform.io"
organization = "my-org-name"
workspaces {
prefix = "app-infra-"
}
}
}
Итак, поскольку я вызвал свою рабочую app-infra-dev
область, мой префикс рабочей области в бэкэнд-файле равен app-infra-
и TF_WORKSPACE=dev
установлен в моем действии GH. Я бы надеялся, что этого будет достаточно, чтобы заставить его работать.
Спасибо за любую помощь!
Ответ №1:
Тип вашего рабочего пространства должен быть «Рабочий процесс, управляемый API«.
https://learn.hashicorp.com/tutorials/terraform/github-actions
У меня была такая же проблема, потому что я изначально создал его как «Рабочий процесс управления версиями«, что имеет смысл, но работает не так, как ожидалось.
Извлечено из документации:
В рабочем процессе пользовательского интерфейса и VCS каждое рабочее пространство связано с определенной ветвью репозитория VCS конфигураций Terraform. Terraform Cloud регистрирует веб-ссылки у вашего поставщика VCS при создании рабочей области, а затем автоматически ставит в очередь запуск Terraform всякий раз, когда новые коммиты объединяются с этой ветвью связанного репозитория workspace.
Ответ №2:
Вместо if: github.ref == 'refs/heads/master' amp;amp; github.event_name == 'push'
этого вы можете рассмотреть возможность запуска apply для самого события GitHub, как в этом примере
name: terraform apply
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ master ]
В этом примере вы можете видеть, что terraform apply используется в конце последовательности команд terraform:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
apply:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- uses: hashicorp/setup-terraform@v1
with:
terraform_wrapper: true
terraform_version: 0.14.0
# Runs a single command using the runners shell
- name: create credentials
run: echo "$GOOGLE_APPLICATION_CREDENTIALS" > credentials.json
env:
GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
- name: export GOOGLE_APPLICATION_CREDENTIALS
run: |
echo "GOOGLE_APPLICATION_CREDENTIALS=`pwd`/credentials.json" >> $GITHUB_ENV
- name: terraform init
run: terraform init
- name: terraform workspace new
run: terraform workspace new dev-tominaga
continue-on-error: true
- name: terraform workspace select
run: terraform workspace select dev-tominaga
continue-on-error: true
- name: terraform init
run: terraform init
- name: terraform workspace show
run: terraform workspace show
- name: terraform apply
id: apply
run: terraform apply -auto-approve
Проверьте, можете ли вы адаптировать это к своему рабочему процессу.
Комментарии:
1. Спасибо за предложение. Я попробовал то, что вы сказали, и удалил операторы if, которые у меня были, и все равно столкнулся с той же проблемой, когда дело доходит до применения: (