Repository navigation
172 lines (159 loc) · 6.13 KB
/
Copy pathlab04-deploy-sqlmi.yml
File metadata and controls
172 lines (159 loc) · 6.13 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
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
name: Lab 04 - Deploy SQL Managed Instance
on:
workflow_dispatch:
inputs:
implementation:
description: Infrastructure implementation to deploy
required: true
type: choice
default: complete
options:
- student
- complete
pricing_model:
description: SQL MI pricing model (use Regular when Freemium is unavailable)
required: true
type: choice
default: Freemium
options:
- Freemium
- Regular
permissions:
contents: read
concurrency:
group: lab04-sqlmi
cancel-in-progress: false
jobs:
plan:
name: Validate and preview SQL MI
runs-on: ubuntu-latest
environment: lab04
permissions:
contents: read
id-token: write
outputs:
iac-path: ${{ steps.implementation.outputs.path }}
database-vnet-name: ${{ steps.network.outputs.vnet-name }}
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Select allow-listed implementation
id: implementation
shell: bash
run: |
case "${{ inputs.implementation }}" in
student|complete)
echo "path=infra/lab04/${{ inputs.implementation }}" >> "$GITHUB_OUTPUT"
;;
*)
echo "::error::Unsupported implementation selection."
exit 1
;;
esac
- name: Sign in to Azure with OIDC
uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Verify base deployment and SQL MI subnet
id: network
shell: bash
run: |
set -euo pipefail
vnet_name="${{ vars.LAB04_PREFIX }}-db-secondary-${{ vars.LAB04_SUFFIX }}-vnet"
az network vnet subnet show \
--resource-group "${{ vars.LAB04_SECONDARY_RESOURCE_GROUP }}" \
--vnet-name "$vnet_name" \
--name snet-sqlmi \
--query id --output tsv
echo "vnet-name=$vnet_name" >> "$GITHUB_OUTPUT"
- name: Build and validate SQL MI Bicep
shell: bash
env:
IAC_PATH: ${{ steps.implementation.outputs.path }}
run: |
set -euo pipefail
az bicep build --file "$IAC_PATH/sqlmi.bicep" --stdout > /dev/null
az deployment group validate \
--resource-group "${{ vars.LAB04_SECONDARY_RESOURCE_GROUP }}" \
--template-file "$IAC_PATH/sqlmi.bicep" \
--parameters \
prefix="${{ vars.LAB04_PREFIX }}" \
suffix="${{ vars.LAB04_SUFFIX }}" \
location="${{ vars.LAB04_SECONDARY_LOCATION }}" \
databaseVnetName="${{ steps.network.outputs.vnet-name }}" \
sqlEntraAdminObjectId="${{ vars.LAB04_SQL_ADMIN_OBJECT_ID }}" \
sqlEntraAdminLogin="${{ vars.LAB04_SQL_ADMIN_LOGIN }}" \
pricingModel="${{ inputs.pricing_model }}" \
--output none
- name: Preview SQL MI deployment
shell: bash
env:
IAC_PATH: ${{ steps.implementation.outputs.path }}
run: |
set -euo pipefail
az deployment group what-if \
--resource-group "${{ vars.LAB04_SECONDARY_RESOURCE_GROUP }}" \
--template-file "$IAC_PATH/sqlmi.bicep" \
--parameters \
prefix="${{ vars.LAB04_PREFIX }}" \
suffix="${{ vars.LAB04_SUFFIX }}" \
location="${{ vars.LAB04_SECONDARY_LOCATION }}" \
databaseVnetName="${{ steps.network.outputs.vnet-name }}" \
sqlEntraAdminObjectId="${{ vars.LAB04_SQL_ADMIN_OBJECT_ID }}" \
sqlEntraAdminLogin="${{ vars.LAB04_SQL_ADMIN_LOGIN }}" \
pricingModel="${{ inputs.pricing_model }}"
deploy:
name: Deploy approved SQL MI
needs: plan
runs-on: ubuntu-latest
environment: lab04-deploy
timeout-minutes: 360
permissions:
contents: read
id-token: write
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Sign in to Azure with OIDC
uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Deploy SQL Managed Instance
id: sqlmi
shell: bash
env:
IAC_PATH: ${{ needs.plan.outputs.iac-path }}
run: |
set -euo pipefail
outputs="$(az deployment group create \
--name "lab04-sqlmi-${{ github.run_number }}" \
--resource-group "${{ vars.LAB04_SECONDARY_RESOURCE_GROUP }}" \
--template-file "$IAC_PATH/sqlmi.bicep" \
--parameters \
prefix="${{ vars.LAB04_PREFIX }}" \
suffix="${{ vars.LAB04_SUFFIX }}" \
location="${{ vars.LAB04_SECONDARY_LOCATION }}" \
databaseVnetName="${{ needs.plan.outputs.database-vnet-name }}" \
sqlEntraAdminObjectId="${{ vars.LAB04_SQL_ADMIN_OBJECT_ID }}" \
sqlEntraAdminLogin="${{ vars.LAB04_SQL_ADMIN_LOGIN }}" \
pricingModel="${{ inputs.pricing_model }}" \
--query properties.outputs --output json)"
echo "name=$(jq -r '.managedInstanceName.value' <<< "$outputs")" >> "$GITHUB_OUTPUT"
echo "fqdn=$(jq -r '.managedInstanceFqdn.value' <<< "$outputs")" >> "$GITHUB_OUTPUT"
echo "public-endpoint=$(jq -r '.managedInstancePublicEndpoint.value' <<< "$outputs")" >> "$GITHUB_OUTPUT"
- name: Write deployment summary
shell: bash
run: |
{
echo "## SQL Managed Instance"
echo
echo "- Name: \`${{ steps.sqlmi.outputs.name }}\`"
echo "- FQDN: \`${{ steps.sqlmi.outputs.fqdn }}\`"
echo "- Public endpoint: \`${{ steps.sqlmi.outputs.public-endpoint }}\`"
echo "- Pricing model: \`${{ inputs.pricing_model }}\`"
echo "- Resource group: \`${{ vars.LAB04_SECONDARY_RESOURCE_GROUP }}\`"
} >> "$GITHUB_STEP_SUMMARY"