-
Notifications
You must be signed in to change notification settings - Fork 0
141 lines (132 loc) · 5.12 KB
/
RunTerraform.yml
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
name: Run Terraform
on:
workflow_dispatch:
inputs:
vm_sku:
description: 'Virtual Machine SKU'
required: true
default: 'Standard_NV6ads_A10_v5'
num_instances:
description: 'Number of Instances'
required: true
default: '1'
max_bid:
description: 'Maximum spot bid amount'
required: true
default: '0.24'
allowed_ip:
description: 'Your IP address'
required: true
default: '192.168.50.1'
disk_size:
description: 'VM Disk Size (GB)'
required: true
default: '64'
resource_group:
description: 'Resource Group Name'
required: true
default: 'demo-rg'
jobs:
run-terraform:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Azure CLI
uses: elstudio/action-install-azure-cli@v1
- name: Public IP
id: ip
uses: haythem/[email protected]
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Manage Firewalls
run: |
chmod +x access-helper.sh
#bash access-helper.sh add $RUNNER_IP $RESOURCE_GROUP
shell: bash
env:
RUNNER_IP: ${{ steps.ip.outputs.ipv4 }}
RESOURCE_GROUP: ${{ github.event.inputs.resource_group }}
- name: Terraform fmt
run: |
docker run --platform linux/amd64 \
-e ARM_CLIENT_ID=${{ secrets.ARM_CLIENT_ID }} \
-e ARM_CLIENT_SECRET=${{ secrets.ARM_CLIENT_SECRET }} \
-e ARM_SUBSCRIPTION_ID=${{ secrets.ARM_SUBSCRIPTION_ID }} \
-e ARM_TENANT_ID=${{ secrets.ARM_TENANT_ID }} \
-v $(pwd):/terraform -w /terraform \
hashicorp/terraform fmt
continue-on-error: false
shell: bash
- name: Terraform Init
run: |
docker run --platform linux/amd64 \
-e ARM_CLIENT_ID=${{ secrets.ARM_CLIENT_ID }} \
-e ARM_CLIENT_SECRET=${{ secrets.ARM_CLIENT_SECRET }} \
-e ARM_SUBSCRIPTION_ID=${{ secrets.ARM_SUBSCRIPTION_ID }} \
-e ARM_TENANT_ID=${{ secrets.ARM_TENANT_ID }} \
-v $(pwd):/terraform -w /terraform \
hashicorp/terraform init --upgrade
continue-on-error: false
shell: bash
- name: Terraform Validate
run: |
docker run --platform linux/amd64 \
-e ARM_CLIENT_ID=${{ secrets.ARM_CLIENT_ID }} \
-e ARM_CLIENT_SECRET=${{ secrets.ARM_CLIENT_SECRET }} \
-e ARM_SUBSCRIPTION_ID=${{ secrets.ARM_SUBSCRIPTION_ID }} \
-e ARM_TENANT_ID=${{ secrets.ARM_TENANT_ID }} \
-v $(pwd):/terraform -w /terraform \
hashicorp/terraform validate -no-color
continue-on-error: false
shell: bash
- name: Terraform Plan
run: |
docker run --platform linux/amd64 \
-e ARM_CLIENT_ID=${{ secrets.ARM_CLIENT_ID }} \
-e ARM_CLIENT_SECRET=${{ secrets.ARM_CLIENT_SECRET }} \
-e ARM_SUBSCRIPTION_ID=${{ secrets.ARM_SUBSCRIPTION_ID }} \
-e ARM_TENANT_ID=${{ secrets.ARM_TENANT_ID }} \
-v $(pwd):/terraform -w /terraform \
hashicorp/terraform plan -no-color -lock=false -out terraform.plan \
-var="resource_group=$RESOURCE_GROUP" \
-var="vm_sku=$VM_SKU" \
-var="vm_instances=$NUM_INSTANCES" \
-var="max_bid_price=$MAX_BID" \
-var='allowed_ips=["${{github.event.inputs.allowed_ip}}", "${{ steps.ip.outputs.ipv4 }}"]'
continue-on-error: false
shell: bash
env:
VM_SKU: ${{ github.event.inputs.vm_sku }}
DISK_SIZE: ${{ github.event.inputs.disk_size }}
NUM_INSTANCES: ${{ github.event.inputs.num_instances }}
MAX_BID: ${{ github.event.inputs.max_bid }}
ALLOWED_IPS: ${{ github.event.inputs.allowed_ip }}
RUNNER_IP: ${{ steps.ip.outputs.ipv4 }}
RESOURCE_GROUP: ${{ github.event.inputs.resource_group }}
- name: Terraform Apply
id: apply
run: |
docker run --platform linux/amd64 \
-e ARM_CLIENT_ID=${{ secrets.ARM_CLIENT_ID }} \
-e ARM_CLIENT_SECRET=${{ secrets.ARM_CLIENT_SECRET }} \
-e ARM_SUBSCRIPTION_ID=${{ secrets.ARM_SUBSCRIPTION_ID }} \
-e ARM_TENANT_ID=${{ secrets.ARM_TENANT_ID }} \
-v $(pwd):/terraform -w /terraform \
hashicorp/terraform apply -no-color -auto-approve -input=false \
-var="resource_group=$RESOURCE_GROUP" \
-var="vm_sku=$VM_SKU" \
-var="vm_instances=$NUM_INSTANCES" \
-var="max_bid_price=$MAX_BID" \
-var='allowed_ips=["${{github.event.inputs.allowed_ip}}", "${{ steps.ip.outputs.ipv4 }}"]'
continue-on-error: false
shell: bash
env:
VM_SKU: ${{ github.event.inputs.vm_sku }}
DISK_SIZE: ${{ github.event.inputs.disk_size }}
NUM_INSTANCES: ${{ github.event.inputs.num_instances }}
MAX_BID: ${{ github.event.inputs.max_bid }}
ALLOWED_IPS: ${{ github.event.inputs.allowed_ip }}
RUNNER_IP: ${{ steps.ip.outputs.ipv4 }}
RESOURCE_GROUP: ${{ github.event.inputs.resource_group }}