-
Notifications
You must be signed in to change notification settings - Fork 0
89 lines (74 loc) · 3.02 KB
/
instance_setup.yml
File metadata and controls
89 lines (74 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
name: Create resources using terraform and setup using ansible
on:
workflow_call:
inputs:
WORKSPACE:
type: string
required: true
secrets:
GOOGLE_CREDENTIALS:
required: true
jobs:
terraform-provisioning:
name: Create resources using terraform
runs-on: self-hosted
env:
GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }}
steps:
- name: Check out Git repository
uses: actions/checkout@v3
- name: Setup fresh SSH keys
run: |
ssh-keygen -t rsa -b 4096 -C "mresham" -f ~/.ssh/id_rsa -N '' <<< y
- name: Initialize
run: terraform init
working-directory: ./terraform-files
- name: Create Workspace
run: terraform workspace select -or-create=true ${{ inputs.WORKSPACE }}
working-directory: ./terraform-files
- name: Create plan
run: terraform plan -input=false
working-directory: ./terraform-files
- name: Create resources
run: terraform apply -auto-approve -input=false
working-directory: ./terraform-files
- name: Output External IP
id: external_ip
run: |
terraform refresh
echo "external_ip=$(terraform output -raw external_ip)" >> $GITHUB_OUTPUT
working-directory: ./terraform-files
- name: Output Load Balancer IP
id: load_balancer_ip
run: |
terraform refresh
echo "load_balancer_ip=$(terraform output -raw load_balancer_ip)" >> $GITHUB_OUTPUT
working-directory: ./terraform-files
- name: Output Monitoring IP
id: monitoring_ip
run: |
terraform refresh
echo "monitoring_ip=$(terraform output -raw monitoring_ip)" >> $GITHUB_OUTPUT
working-directory: ./terraform-files
outputs:
external_ip: ${{ steps.external_ip.outputs.external_ip }}
load_balancer_ip: ${{ steps.load_balancer_ip.outputs.load_balancer_ip }}
monitoring_ip: ${{ steps.monitoring_ip.outputs.monitoring_ip }}
ansible-configuration:
name: Configure server using ansible
runs-on: self-hosted
needs: terraform-provisioning
env:
GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }}
steps:
- name: Checkout Git repository
uses: actions/checkout@v3
- name: Trigger Ansible playbook
env:
ANSIBLE_HOST_KEY_CHECKING: False
run: |
echo "" > ansible/inventory.yaml
echo $'\n[webservers]\n${{ needs.terraform-provisioning.outputs.external_ip }}\n' >> ansible/inventory.yaml
echo $'\n[loadbalancer]\n${{ needs.terraform-provisioning.outputs.load_balancer_ip }}\n' >> ansible/inventory.yaml
echo $'\n[monitoring]\n${{ needs.terraform-provisioning.outputs.monitoring_ip }}\n' >> ansible/inventory.yaml
ansible-playbook -i ansible/inventory.yaml --private-key=~/.ssh/id_rsa ansible/deployment.yaml -e ansible_user=mresham --extra-vars "docker_tag=${{ inputs.WORKSPACE }} external_ip=${{ needs.terraform-provisioning.outputs.external_ip }}"