Skip to content

Terraform Plan and Apply #96

Terraform Plan and Apply

Terraform Plan and Apply #96

Workflow file for this run

name: Terraform Plan and Apply
on:
# push:
# branches:
# - main
workflow_dispatch:
jobs:
terraform:
runs-on: ubuntu-latest
env:
TF_TOKEN_app_terraform_io: ${{ secrets.TF_TOKEN_APP_TERRAFORM_IO }}
ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
ANSIBLE_VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT_PASSWORD }}
EA_GITHUB_CLIENT_ID: ${{ secrets.EA_GITHUB_CLIENT_ID }}
EA_GITHUB_CLIENT_SECRET: ${{ secrets.EA_GITHUB_CLIENT_SECRET }}
defaults:
run:
working-directory: ./terraform
steps:
- uses: actions/checkout@v2
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: latest
- run: terraform init
- run: terraform plan -out=tfplan
- name: Validate terraform formatting
run: terraform fmt -check
- name: Terraform Validate
run: terraform validate
- run: terraform apply -auto-approve tfplan
- name: Get Master Public IP
id: master_ip
run: echo "MASTER_IP=$(bash ./scripts/get_master_ip.sh)" >> $GITHUB_ENV
working-directory: .
- name: Get Ingress Public IP
id: ingress_ip
run: echo "INGRESS_IP=$(bash ./scripts/get_ingress_ip.sh)" >> $GITHUB_ENV
working-directory: .
- name: Update All Dynu DNS Records
run: |
# Update main domai + wildcard
curl -X POST "https://api.dynu.com/v2/dns/12956376" \
-H "accept: application/json" \
-H "API-Key: ${{ secrets.DYNU_API_KEY }}" \
-H "Content-Type: application/json" \
-d '{
"id": 12956376,
"name": "exploravis.mywire.org",
"unicodeName": "exploravis.mywire.org",
"ipv4Address": "'$MASTER_IP'",
"ipv6Address": null,
"ttl": 120,
"ipv4": true,
"ipv6": false,
"ipv4WildcardAlias": true,
"ipv6WildcardAlias": false
}'
# Update main domain A record
curl -X POST "https://api.dynu.com/v2/dns/12956376/record/16541388" \
-H "accept: application/json" \
-H "API-Key: ${{ secrets.DYNU_API_KEY }}" \
-H "Content-Type: application/json" \
-d '{
"nodeName": "",
"recordType": "A",
"ttl": 120,
"state": true,
"group": "",
"ipv4Address": "'$MASTER_IP'"
}'
# Update teleport subdomain
curl -X POST "https://api.dynu.com/v2/dns/12956376/record/16541285" \
-H "accept: application/json" \
-H "API-Key: ${{ secrets.DYNU_API_KEY }}" \
-H "Content-Type: application/json" \
-d '{
"nodeName": "teleport",
"recordType": "A",
"ttl": 120,
"state": true,
"group": "",
"ipv4Address": "'$MASTER_IP'"
}'
# Update staging subdomain
curl -X POST "https://api.dynu.com/v2/dns/12956376/record/16836371" \
-H "accept: application/json" \
-H "API-Key: ${{ secrets.DYNU_API_KEY }}" \
-H "Content-Type: application/json" \
-d '{
"nodeName": "staging",
"recordType": "A",
"ttl": 120,
"state": true,
"group": "",
"ipv4Address": "'$INGRESS_IP'"
}'
- name: Send Slack alert
run: |
curl -X POST -H 'Content-type: application/json' --data '{"text":"Terraform infrastructure has been provisioned, dynu ddns has been configured in https://teleport.exploravis.mywire.org/"}' ${{ secrets.SLACK_WEBHOOK }}
ansible:
needs: terraform
uses: ./.github/workflows/ansible.yml
secrets:
TF_TOKEN_APP_TERRAFORM_IO: ${{ secrets.TF_TOKEN_APP_TERRAFORM_IO }}
ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK}}
teleport:
needs: ansible
uses: ./.github/workflows/teleport.yml
secrets:
TF_TOKEN_APP_TERRAFORM_IO: ${{ secrets.TF_TOKEN_APP_TERRAFORM_IO }}
ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK}}
EA_GITHUB_CLIENT_ID: ${{ secrets.EA_GITHUB_CLIENT_ID }}
EA_GITHUB_CLIENT_SECRET: ${{ secrets.EA_GITHUB_CLIENT_SECRET }}
ANSIBLE_VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT_PASSWORD }}