From 3f26203ed04c63fc9b38a9cbbd0c1284033758b8 Mon Sep 17 00:00:00 2001 From: Max Gautier Date: Fri, 13 Jun 2025 15:41:29 +0200 Subject: [PATCH] Convert containerd molecule to ansible verifier --- .../containerd/molecule/default/molecule.yml | 2 +- .../molecule/default/tests/test_default.py | 55 ------------------- .../containerd/molecule/default/verify.yml | 39 +++++++++++++ roles/container-engine/molecule/test_cri.yml | 24 ++++++++ 4 files changed, 64 insertions(+), 56 deletions(-) delete mode 100644 roles/container-engine/containerd/molecule/default/tests/test_default.py create mode 100644 roles/container-engine/containerd/molecule/default/verify.yml create mode 100644 roles/container-engine/molecule/test_cri.yml diff --git a/roles/container-engine/containerd/molecule/default/molecule.yml b/roles/container-engine/containerd/molecule/default/molecule.yml index e4a4491e6..9b473b7bd 100644 --- a/roles/container-engine/containerd/molecule/default/molecule.yml +++ b/roles/container-engine/containerd/molecule/default/molecule.yml @@ -37,4 +37,4 @@ provisioner: create: ../../../../../tests/cloud_playbooks/create-kubevirt.yml prepare: ../../../molecule/prepare.yml verifier: - name: testinfra + name: ansible diff --git a/roles/container-engine/containerd/molecule/default/tests/test_default.py b/roles/container-engine/containerd/molecule/default/tests/test_default.py deleted file mode 100644 index e1d915179..000000000 --- a/roles/container-engine/containerd/molecule/default/tests/test_default.py +++ /dev/null @@ -1,55 +0,0 @@ -import os -import pytest - -import testinfra.utils.ansible_runner - -testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( - os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') - - -def test_service(host): - svc = host.service("containerd") - assert svc.is_running - assert svc.is_enabled - - -def test_version(host): - crictl = "/usr/local/bin/crictl" - path = "unix:///var/run/containerd/containerd.sock" - with host.sudo(): - cmd = host.command(crictl + " --runtime-endpoint " + path + " version") - assert cmd.rc == 0 - assert "RuntimeName: containerd" in cmd.stdout - - -@pytest.mark.parametrize('image, dest', [ - ('quay.io/kubespray/hello-world:latest', '/tmp/hello-world.tar') -]) -def test_image_pull_save_load(host, image, dest): - nerdctl = "/usr/local/bin/nerdctl" - dest_file = host.file(dest) - - with host.sudo(): - pull_cmd = host.command(nerdctl + " pull " + image) - assert pull_cmd.rc ==0 - - with host.sudo(): - save_cmd = host.command(nerdctl + " save -o " + dest + " " + image) - assert save_cmd.rc == 0 - assert dest_file.exists - - with host.sudo(): - load_cmd = host.command(nerdctl + " load < " + dest) - assert load_cmd.rc == 0 - - -@pytest.mark.parametrize('image', [ - ('quay.io/kubespray/hello-world:latest') -]) -def test_run(host, image): - nerdctl = "/usr/local/bin/nerdctl" - - with host.sudo(): - cmd = host.command(nerdctl + " -n k8s.io run " + image) - assert cmd.rc == 0 - assert "Hello from Docker" in cmd.stdout diff --git a/roles/container-engine/containerd/molecule/default/verify.yml b/roles/container-engine/containerd/molecule/default/verify.yml new file mode 100644 index 000000000..96ad82d2a --- /dev/null +++ b/roles/container-engine/containerd/molecule/default/verify.yml @@ -0,0 +1,39 @@ +--- +- name: Test containerd CRI + import_playbook: ../../../molecule/test_cri.yml + vars: + container_manager: containerd + cri_socket: unix:///var/run/containerd/containerd.sock + cri_name: containerd + +- name: Test nerdctl + hosts: all + gather_facts: false + become: true + tasks: + - name: Get kubespray defaults + import_role: + name: ../../../../../kubespray_defaults + - name: Test nerdctl commands + command: "{{ bin_dir }}/nerdctl {{ item | join(' ') }}" + vars: + image: quay.io/kubespray/hello-world:latest + loop: + - - pull + - "{{ image }}" + - - save + - -o + - /tmp/hello-world.tar + - "{{ image }}" + - - load + - -i + - /tmp/hello-world.tar + - - -n + - k8s.io + - run + - "{{ image }}" + register: nerdctl + - name: Check log from running a container + assert: + that: + - ('Hello from Docker' in nerdctl.results[3].stdout) diff --git a/roles/container-engine/molecule/test_cri.yml b/roles/container-engine/molecule/test_cri.yml new file mode 100644 index 000000000..e40fe111f --- /dev/null +++ b/roles/container-engine/molecule/test_cri.yml @@ -0,0 +1,24 @@ +--- +- name: Test container manager + hosts: all + gather_facts: false + become: true + tasks: + - name: Get kubespray defaults + import_role: + name: ../../kubespray_defaults + - name: Collect services facts + ansible.builtin.service_facts: + + - name: Check container manager service is running + assert: + that: + - ansible_facts.services[container_manager + '.service'].state == 'running' + - ansible_facts.services[container_manager + '.service'].status == 'enabled' + + - name: Check runtime version + command: "{{ bin_dir }}/crictl --runtime-endpoint {{ cri_socket }} version" + register: cri_version + failed_when: > + cri_version is failed or + ("RuntimeName: " + cri_name) not in cri_version.stdout