Skip to content

Commit

Permalink
Add Github action that check Metal3 chart
Browse files Browse the repository at this point in the history
  • Loading branch information
Kristian-ZH committed Oct 18, 2023
1 parent 2190fdd commit f0e469e
Showing 1 changed file with 111 additions and 0 deletions.
111 changes: 111 additions & 0 deletions .github/workflows/test-metal3-chart.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: Test Metal3 Helm Chart

on:
pull_request:
paths:
- '**/assets/metal3/metal3-0.2.0.tgz'

jobs:
test-metal3-helm-chart:
runs-on: ubuntu-latest

steps:
- name: Checkout Repository
uses: actions/checkout@v3

- 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: Extract Metal3 Helm Chart
id: get-chart
run: |
mkdir helm-metal3-charts
tar xvzf assets/metal3/metal3-0.2.0.tgz -C helm-metal3-charts/
- 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

0 comments on commit f0e469e

Please sign in to comment.