-
Notifications
You must be signed in to change notification settings - Fork 20
127 lines (103 loc) · 4.44 KB
/
test-metal3-helm-chart.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
name: Test Metal3 Helm Chart
on:
pull_request:
paths:
- '**/assets/metal3/**' # Adjust the path based on your Helm chart structure
jobs:
test-metal3-helm-chart:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v39
- name: Verify and copy metal3 assets
run: |
metal3_archive=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr -s " " "\012" | grep assets/metal3/)
# Count the number of files in the array
num_files=$(echo "${metal3_archive}" | wc -l)
# Check if there is only one file
if [ "${num_files}" -gt 1 ]; then
echo "Multiple archives modified - please modify only a single chart release per PR:"
for file in "$metal3_archive"; do
echo "${file}"
done
exit 1 # Fail the workflow
fi
mkdir helm-metal3-charts
tar xvzf "${metal3_archive}" -C helm-metal3-charts/
- name: Install K3s
run: |
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --cluster-init --write-kubeconfig-mode=644 --disable=servicelb" K3S_TOKEN=foobar sh -
- name: Install Helm
run: |
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod +x get_helm.sh
./get_helm.sh
- name: Install CertManager
run: |
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true \
--version v1.11.1
- name: Disable provisioning network
run: |
echo "global:" > disable_provnet.yaml
echo " enable_dnsmasq: false" >> disable_provnet.yaml
echo " enable_pxe_boot: false" >> disable_provnet.yaml
echo " provisioningInterface: \"\"" >> disable_provnet.yaml
echo " provisioningIP: \"\"" >> disable_provnet.yaml
echo " enable_metal3_media_server: false" >> disable_provnet.yaml
- name: Deploy Metal3 Helm Chart
run: |
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
helm install metal3 helm-metal3-charts/metal3 --values disable_provnet.yaml
- name: Wait for all Metal3 pods to become ready
run: |
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# Set a timeout of 5 minutes
timeout=$((SECONDS + 300))
while [ $SECONDS -lt $timeout ]; do
# Run the kubectl command to get pod information
kubectl_output=$(kubectl -n default get po | tail -n +2)
# Flag to track whether all pods are ready
all_pods_ready=true
# Iterate over each line in the kubectl output
while IFS= read -r line; do
# Extract the pod name and the readiness status
pod_name=$(echo "$line" | awk '{print $1}')
readiness_status=$(echo "$line" | awk '{print $2}')
# Extract the desired and running replicas from the readiness status
desired_replicas=$(echo "$readiness_status" | awk -F'/' '{print $1}')
running_replicas=$(echo "$readiness_status" | awk -F'/' '{print $2}')
# Check if the digit before / is the same as the one after /
if [ "$desired_replicas" -eq "$running_replicas" ]; then
echo "$pod_name is ready"
else
echo "$pod_name is not ready"
all_pods_ready=false
fi
done <<< "$kubectl_output"
# Check if all pods are ready
if [ "$all_pods_ready" = true ]; then
echo "All pods are ready"
exit 0
fi
# Wait for a moment before checking again
sleep 5
done
# If the loop completes, it means the timeout occurred
echo "Timeout: Not all pods are ready in 5 minutes."
exit 1
- name: Uninstall Helm Chart
run: |
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
helm uninstall metal3
- name: Uninstall K3s
run: |
/usr/local/bin/k3s-uninstall.sh