Skip to content

update workflow to run terraform first #2

update workflow to run terraform first

update workflow to run terraform first #2

name: "Deploy and configure Infrastructure"
on:
push:
branches:
- main
paths:
- 'infrastructure-terraform/**'
- 'ansible/**'
pull_request:
branches:
- main
paths:
- 'infrastructure-terraform/**'
- 'ansible/**'
permissions:
contents: read
pull-requests: write
jobs:
terraform:
container: ubuntu:latest
runs-on: [self-hosted, linux, x64]
name: Terraform
env:
TF_VARS_FILE: ./vars/production.tfvars
steps:
- uses: actions/checkout@v3
- name: Setup environment
run : apt update -y && apt install -y curl unzip git
- name: Setup Terraform
id: setup
uses: hashicorp/setup-terraform@v2
with:
terraform_wrapper: false
- name: Terraform Fmt
id: fmt
run: terraform fmt -check -recursive
working-directory: ./infrastructure-terraform
- name: Terraform Init
id: init
run: terraform init -upgrade -var-file ${{ env.TF_VARS_FILE }}
working-directory: ./infrastructure-terraform
env:
TF_VAR_vsphere_user : ${{ secrets.VSPHERE_USER }}
TF_VAR_vsphere_password : ${{ secrets.VSPHERE_PASSWORD }}
TF_VAR_rancher_access_key : ${{ secrets.RANCHER_ACCESS_KEY }}
TF_VAR_rancher_secret_key : ${{ secrets.RANCHER_SECRET_KEY }}
AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
TF_VAR_github_token : ${{ secrets.PAT_TOKEN }}
TF_WORKSPACE: "default" # Allow for init without errors
- name: Terraform Validate
id: validate
run: terraform validate
working-directory: ./infrastructure-terraform
- name: Terraform Plan
id: plan
run: terraform plan -input=false -no-color -out tf.plan -var-file ${{ env.TF_VARS_FILE }}
working-directory: ./infrastructure-terraform
env:
TF_VAR_vsphere_user : ${{ secrets.VSPHERE_USER }}
TF_VAR_vsphere_password : ${{ secrets.VSPHERE_PASSWORD }}
TF_VAR_rancher_access_key : ${{ secrets.RANCHER_ACCESS_KEY }}
TF_VAR_rancher_secret_key : ${{ secrets.RANCHER_SECRET_KEY }}
AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
TF_VAR_github_token : ${{ secrets.PAT_TOKEN }}
- name: Terraform Show
id: show
run: terraform show -no-color tf.plan 2>&1 > /tmp/plan.txt
working-directory: ./infrastructure-terraform
env:
TF_VAR_vsphere_user : ${{ secrets.VSPHERE_USER }}
TF_VAR_vsphere_password : ${{ secrets.VSPHERE_PASSWORD }}
TF_VAR_rancher_access_key : ${{ secrets.RANCHER_ACCESS_KEY }}
TF_VAR_rancher_secret_key : ${{ secrets.RANCHER_SECRET_KEY }}
AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
TF_VAR_github_token : ${{ secrets.PAT_TOKEN }}
- name: Terraform Apply
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
run: terraform apply -input=false tf.plan
working-directory: ./infrastructure-terraform
shell: bash
env:
TF_VAR_vsphere_user : ${{ secrets.VSPHERE_USER }}
TF_VAR_vsphere_password : ${{ secrets.VSPHERE_PASSWORD }}
TF_VAR_rancher_access_key : ${{ secrets.RANCHER_ACCESS_KEY }}
TF_VAR_rancher_secret_key : ${{ secrets.RANCHER_SECRET_KEY }}
AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
TF_VAR_github_token : ${{ secrets.PAT_TOKEN }}
ansible:
container: ubuntu:latest
runs-on: [self-hosted, linux, x64]
name: Ansible
needs: terraform
steps:
- name: Setup environment
run : apt update -y && apt install -y curl git ansible
- name: Run Ansible playbook
run: ansible-playbook ansible/main.yml -i inventory/homelab.ini