Files
k3s-ansible/.github/workflows/integration.yml
Derek Nola bc3f66be7b Add HA Server test (#491)
* Add HA Server test
Signed-off-by: Derek Nola <derek.nola@suse.com>
2026-01-26 09:15:58 -08:00

174 lines
5.6 KiB
YAML

---
name: Integration Test
on:
pull_request:
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
service_mgr: [systemd, openrc]
# K3s requires privileged containers to run inside Docker and access to cgrougs.
steps:
- name: Set container OS based on service manager
id: set-container
run: |
if [ "${{ matrix.service_mgr }}" == "systemd" ]; then
echo "container_os=geerlingguy/docker-debian12-ansible" >> $GITHUB_ENV
else
echo "container_os=jrei/openrc-alpine" >> $GITHUB_ENV
fi
- name: Checkout codebase
uses: actions/checkout@v6
- name: Set up Python 3.13.
uses: actions/setup-python@v4
with:
python-version: '3.13.x'
- name: Install Ansible and dependencies
run: |
pip install ansible
ansible-galaxy collection install -r collections/requirements.yml
- name: Verify Inventory
run: ansible-inventory -i tests/basic.yml --list
- name: Create Docker Network
run: docker network create k3s-ansible
- name: Start Docker containers
run: |
# Start the Server node
docker run -d --name server-node \
--privileged \
--volume=/sys/fs/cgroup:/sys/fs/cgroup:rw \
--volume=/lib/modules:/lib/modules:ro \
--cgroupns=host \
--network=k3s-ansible \
geerlingguy/docker-debian12-ansible:latest
# Start the Agent node
docker run -d --name agent-node \
--privileged \
--volume=/sys/fs/cgroup:/sys/fs/cgroup:rw \
--volume=/lib/modules:/lib/modules:ro \
--cgroupns=host \
--network=k3s-ansible \
${{ env.container_os }}:latest
- name: Setup openrc Image
if: matrix.service_mgr == 'openrc'
run: docker exec agent-node apk add curl python3
- name: Run Playbook
env:
ANSIBLE_FORCE_COLOR: '1'
run: ansible-playbook playbooks/site.yml -i tests/basic.yml
- name: Verify K3s is running on Server
run: docker exec server-node k3s kubectl get nodes | grep Ready
- name: Verify K3s is running on Agent (systemd)
if: matrix.service_mgr == 'systemd'
run: docker exec agent-node systemctl status k3s-agent | grep running
- name: Verify K3s is running on Agent (openrc)
if: matrix.service_mgr == 'openrc'
run: docker exec agent-node rc-service k3s-agent status | grep started
- name: Modify the k3s_version in inventory for upgrade
run: |
sed -i 's/k3s_version: v1.33.4+k3s1/k3s_version: v1.34.1+k3s1/' tests/basic.yml
- name: Run Upgrade Playbook
run: ansible-playbook playbooks/upgrade.yml -i tests/basic.yml
- name: Verify K3s upgraded on Server
run: docker exec server-node k3s --version | grep v1.34.
- name: Verify K3s upgraded on Agent
run: docker exec agent-node k3s --version | grep v1.34.
- name: Remove K3s from Server and Agent
run: ansible-playbook playbooks/reset.yml -i tests/basic.yml
- name: Stop and remove Docker containers
run: |
docker stop server-node && docker rm -f server-node
docker stop agent-node && docker rm -f agent-node
docker network rm k3s-ansible
test-ha:
runs-on: ubuntu-latest
# K3s requires privileged containers to run inside Docker and access to cgrougs.
env:
SERVERS: server-node1 server-node2 server-node3
steps:
- name: Checkout codebase
uses: actions/checkout@v6
- name: Set up Python 3.13.
uses: actions/setup-python@v4
with:
python-version: '3.13.x'
- name: Install Ansible and dependencies
run: |
pip install ansible
ansible-galaxy collection install -r collections/requirements.yml
- name: Verify Inventory
run: ansible-inventory -i tests/ha.yml --list
- name: Create Docker Network
run: docker network create k3s-ha-ansible
- name: Start Docker containers
run: |
for SERVER in $SERVERS; do
docker run -d --name $SERVER \
--privileged \
--volume=/sys/fs/cgroup:/sys/fs/cgroup:rw \
--volume=/lib/modules:/lib/modules:ro \
--cgroupns=host \
--network=k3s-ha-ansible \
geerlingguy/docker-debian12-ansible:latest
done
- name: Run Playbook
env:
ANSIBLE_FORCE_COLOR: '1'
run: ansible-playbook playbooks/site.yml -i tests/ha.yml
- name: Verify K3s is running on servers
run: docker exec server-node1 k3s kubectl get nodes | grep Ready | wc -l | grep 3
- name: Modify the k3s_version in inventory for upgrade
run: |
sed -i 's/k3s_version: v1.33.4+k3s1/k3s_version: v1.34.1+k3s1/' tests/ha.yml
- name: Run Upgrade Playbook
run: ansible-playbook playbooks/upgrade.yml -i tests/ha.yml
- name: Verify K3s upgraded on all servers
run: |
sleep 5 && docker exec server-node1 k3s kubectl get nodes
for SERVER in $SERVERS; do
docker exec $SERVER k3s --version | grep v1.34.
done
- name: Remove K3s from server nodes
run: ansible-playbook playbooks/reset.yml -i tests/ha.yml
- name: Stop and remove Docker containers
run: |
for SERVER in $SERVERS; do
docker stop $SERVER && docker rm -f $SERVER
done
docker network rm k3s-ha-ansible