From fec7a5234dc715cd7fd2361db2560790799de9e8 Mon Sep 17 00:00:00 2001 From: fejao <mail@fejao.de> Date: Tue, 28 Jan 2025 15:57:46 +0000 Subject: [PATCH] Added molecule tests for 'test' role --- .gitlab-ci.yml | 71 ++++++++++++++++--- roles/test/README.md | 27 ++++++- roles/test/defaults/main.yml | 1 - roles/test/molecule/default/converge.yml | 5 ++ .../group_vars/example_servers_group.yml | 2 + .../inventory/host_vars/example_server.yml | 2 + roles/test/molecule/default/molecule.yml | 37 ++++++++++ .../molecule/default/tests/test_default.yml | 34 +++++++++ roles/test/tasks/main.yml | 5 +- roles/test/vars/main.yml | 1 - 10 files changed, 168 insertions(+), 17 deletions(-) create mode 100644 roles/test/molecule/default/converge.yml create mode 100644 roles/test/molecule/default/inventory/group_vars/example_servers_group.yml create mode 100644 roles/test/molecule/default/inventory/host_vars/example_server.yml create mode 100644 roles/test/molecule/default/molecule.yml create mode 100644 roles/test/molecule/default/tests/test_default.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bbd7344..a2be19e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: python:3.10.15-bullseye +# image: python:3.10.15-bullseye variables: AUTHOR: fejao @@ -15,12 +15,14 @@ variables: stages: - syntax-check - lint-tests + - molecule ### ### SYNTAX-CHECK ### -syntax-check-test: +syntax-test: stage: syntax-check + image: python:3.10.15-bullseye before_script: - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* - pip3 install -r ci-cd/requirements.txt @@ -29,8 +31,9 @@ syntax-check-test: - ansible-playbook --syntax-check -i $INVENTORIES_PATH $PLAYBOOK_PATH_FOR_ROLE_TEST allow_failure: false -syntax-check-dependencies: +syntax-dependencies: stage: syntax-check + image: python:3.10.15-bullseye before_script: - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* - pip3 install -r ci-cd/requirements.txt @@ -39,8 +42,9 @@ syntax-check-dependencies: - ansible-playbook --syntax-check -i $INVENTORIES_PATH $PLAYBOOK_PATH_FOR_ROLE_DEPENDENCIES allow_failure: false -syntax-check-clone-repositories: +syntax-clone-repositories: stage: syntax-check + image: python:3.10.15-bullseye before_script: - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* - pip3 install -r ci-cd/requirements.txt @@ -49,8 +53,9 @@ syntax-check-clone-repositories: - ansible-playbook --syntax-check -i $INVENTORIES_PATH $PLAYBOOK_PATH_FOR_ROLE_CLONE_REPOSITORIES allow_failure: false -syntax-check-docker-images: +syntax-docker-images: stage: syntax-check + image: python:3.10.15-bullseye before_script: - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* - pip3 install -r ci-cd/requirements.txt @@ -59,8 +64,9 @@ syntax-check-docker-images: - ansible-playbook --syntax-check -i $INVENTORIES_PATH $PLAYBOOK_PATH_FOR_ROLE_DOCKER_IMAGES allow_failure: false -syntax-check-docker-containers: +syntax-docker-containers: stage: syntax-check + image: python:3.10.15-bullseye before_script: - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* - pip3 install -r ci-cd/requirements.txt @@ -72,8 +78,9 @@ syntax-check-docker-containers: ### ### LINT-TESTS ### -role-test: +lint-test: stage: lint-tests + image: python:3.10.15-bullseye before_script: - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* - pip3 install -r ci-cd/requirements.txt @@ -82,8 +89,9 @@ role-test: - ansible-lint $PLAYBOOK_PATH_FOR_ROLE_TEST allow_failure: false -role-dependencies: +lint-dependencies: stage: lint-tests + image: python:3.10.15-bullseye before_script: - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* - pip3 install -r ci-cd/requirements.txt @@ -92,8 +100,9 @@ role-dependencies: - ansible-lint $PLAYBOOK_PATH_FOR_ROLE_DEPENDENCIES allow_failure: false -role-clone-repositories: +lint-clone-repositories: stage: lint-tests + image: python:3.10.15-bullseye before_script: - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* - pip3 install -r ci-cd/requirements.txt @@ -102,8 +111,9 @@ role-clone-repositories: - ansible-lint $PLAYBOOK_PATH_FOR_ROLE_CLONE_REPOSITORIES allow_failure: false -role-docker-images: +lint-docker-images: stage: lint-tests + image: python:3.10.15-bullseye before_script: - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* - pip3 install -r ci-cd/requirements.txt @@ -112,8 +122,9 @@ role-docker-images: - ansible-lint $PLAYBOOK_PATH_FOR_ROLE_DOCKER_IMAGES allow_failure: false -role-docker-containers: +lint-docker-containers: stage: lint-tests + image: python:3.10.15-bullseye before_script: - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* - pip3 install -r ci-cd/requirements.txt @@ -121,3 +132,41 @@ role-docker-containers: - echo "Running ansible-lint tests at the role-> 'docker_containers'" - ansible-lint $PLAYBOOK_PATH_FOR_ROLE_DOCKER_CONTAINERS allow_failure: false + + +### +### molecule +### +# molecule-test: +# stage: molecule +# # image: docker:latest +# # image: docker:27.5.1-alpine3.21 +# image: docker:27.5.1-dind +# before_script: +# - apk add --no-cache python3 py3-pip +# - rm /usr/lib/python*/EXTERNALLY-MANAGED +# - python3 -m ensurepip +# - pip3 install ansible ansible-lint molecule molecule-docker +# - pip3 install --user "molecule-plugins[docker]" +# script: +# - echo "Running ansible-lint tests at the role-> 'test'" +# - docker ps -a +# - cd roles/test +# - molecule test +# allow_failure: false + +# molecule-test: +# stage: molecule +# # image: docker:latest +# image: docker:27.5.1-alpine3.21 +# before_script: +# - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* +# - pip3 install -r ci-cd/requirements.txt +# - pip3 install --upgrade molecule molecule-docker +# # - python3 -m pip install --user "molecule-plugins[docker] +# - pip3 install --user "molecule-plugins[docker]" +# script: +# - echo "Running ansible-lint tests at the role-> 'test'" +# - cd roles/test +# - molecule test +# allow_failure: false diff --git a/roles/test/README.md b/roles/test/README.md index e443d18..123e545 100644 --- a/roles/test/README.md +++ b/roles/test/README.md @@ -1,16 +1,19 @@ # test role - This is a ansible-role for testing your installed ansible. + ## Requirements To have ansible installed at your system. + ## Role Variables You should look around where the variables are setted. And figure it out from where the ouput comes + ## Dependencies This role have no dependency from any another role. + ## Example Playbook Here is an example for adding this role for your playbook for **restarting** the **c3infodesk-printer**. containers: @@ -27,10 +30,32 @@ And call the playbook as: ansible-playbook -i <INVENTORY> <PLAYBOOK_NAME>.yml ``` +## Tests +Here are the tests made at **CI-CD** for this role. + +The tests shuold be runned at the root directory from the repository. + +### Syntax +```bash +ansible-playbook --syntax-check -i invenvories/hosts ci-cd/01_test.yml +``` + +### Lint +```bash +ansible-lint ci-cd/01_test.yml +``` + +### molecule +```bash +cd roles/test +molecule test +``` + ## License MIT/BSD + ## Author Information  [https://chaos.social/@fejao](https://chaos.social/@fejao) diff --git a/roles/test/defaults/main.yml b/roles/test/defaults/main.yml index 7ec0ac3..9c8dd30 100644 --- a/roles/test/defaults/main.yml +++ b/roles/test/defaults/main.yml @@ -2,5 +2,4 @@ # defaults file for test var_setted_everywhere: "answer from roles/test/defaults/main.yml" - var_setted_only_defaults_main: "MESSAGE FROM roles/test/defaults/main.yml" diff --git a/roles/test/molecule/default/converge.yml b/roles/test/molecule/default/converge.yml new file mode 100644 index 0000000..7cbd7c0 --- /dev/null +++ b/roles/test/molecule/default/converge.yml @@ -0,0 +1,5 @@ +--- +- name: MOLECULE | Converge + hosts: all + roles: + - role: test diff --git a/roles/test/molecule/default/inventory/group_vars/example_servers_group.yml b/roles/test/molecule/default/inventory/group_vars/example_servers_group.yml new file mode 100644 index 0000000..7ba656a --- /dev/null +++ b/roles/test/molecule/default/inventory/group_vars/example_servers_group.yml @@ -0,0 +1,2 @@ +var_setted_only_group_vars: "group_vars_value" +var_setted_everywhere: "group_vars_value" diff --git a/roles/test/molecule/default/inventory/host_vars/example_server.yml b/roles/test/molecule/default/inventory/host_vars/example_server.yml new file mode 100644 index 0000000..3ed6bf4 --- /dev/null +++ b/roles/test/molecule/default/inventory/host_vars/example_server.yml @@ -0,0 +1,2 @@ +var_setted_only_host_vars: "host_vars_value" +var_setted_everywhere: "host_vars_value" diff --git a/roles/test/molecule/default/molecule.yml b/roles/test/molecule/default/molecule.yml new file mode 100644 index 0000000..55eb160 --- /dev/null +++ b/roles/test/molecule/default/molecule.yml @@ -0,0 +1,37 @@ +--- +dependency: + name: galaxy +driver: + name: docker +platforms: + - name: instance + image: geerlingguy/docker-ubuntu2004-ansible:latest + # privileged: true + pre_build_image: true +provisioner: + name: ansible + lint: + name: ansible-lint + inventory: + group_vars: + example_servers_group: + var_setted_only_group_vars: "group_vars_value" + var_setted_everywhere: "group_vars_value" + host_vars: + instance: + var_setted_only_host_vars: "host_vars_value" + var_setted_everywhere: "host_vars_value" +verifier: + name: ansible + ### + # lint: + # name: ansible-lint + ### + # playbook: verify.yml + ### + # Remove the 'playbooks' key and use 'playbooks' directly under 'verifier' + # playbooks: + # verify: verify.yml + ### + # lint: + # name: flake8 diff --git a/roles/test/molecule/default/tests/test_default.yml b/roles/test/molecule/default/tests/test_default.yml new file mode 100644 index 0000000..75dae12 --- /dev/null +++ b/roles/test/molecule/default/tests/test_default.yml @@ -0,0 +1,34 @@ +--- +- name: MOLECULE | Test role for debugging variables + hosts: all + tasks: + - name: MOLECULE | TESTS | Test parsed variable setted only at roles/test/defaults/main.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_defaults_main }}" + + - name: MOLECULE | TESTS | Test parsed variable setted only at roles/test/vars/main.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_vars_main }}" + + - name: MOLECULE | TESTS | Test parsed variable setted only at inventory/group_vars/example_servers_group.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_group_vars }}" + when: var_setted_only_group_vars is defined + + - name: MOLECULE | TESTS | Test parsed variable setted only at inventory/host_vars/example_server.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_host_vars }}" + + - name: MOLECULE | TESTS | Test parsed variable setted EVERYWHERE -> should come from roles/test/vars/main.yml + ansible.builtin.debug: + msg: "{{ var_setted_everywhere }}" + + - name: MOLECULE | TESTS | List the root ('/') folder from the target to a register + ansible.builtin.command: + cmd: ls -hal / + register: ret_list_folder + changed_when: false + + - name: MOLECULE | TESTS | Shows output from listing folder + ansible.builtin.debug: + msg: "{{ ret_list_folder }}" diff --git a/roles/test/tasks/main.yml b/roles/test/tasks/main.yml index 231332e..3e7e633 100644 --- a/roles/test/tasks/main.yml +++ b/roles/test/tasks/main.yml @@ -1,8 +1,6 @@ --- # tasks file for test -# - import_tasks: test_task.yml - - name: Test parsed variable setted only at roles/test/defaults/main.yml ansible.builtin.debug: msg: "{{ var_setted_only_defaults_main }}" @@ -14,6 +12,7 @@ - name: Test parsed variable setted only at inventory/group_vars/example_servers_group.yml ansible.builtin.debug: msg: "{{ var_setted_only_group_vars }}" + when: var_setted_only_group_vars is defined - name: Test parsed variable setted only at inventory/host_vars/example_server.yml ansible.builtin.debug: @@ -27,7 +26,7 @@ ansible.builtin.command: cmd: ls -hal / register: ret_list_folder - changed_when: ret_list_folder.rc != 0 + changed_when: false - name: Shows output from listing folder ansible.builtin.debug: diff --git a/roles/test/vars/main.yml b/roles/test/vars/main.yml index 9fbe7d9..76a45cb 100644 --- a/roles/test/vars/main.yml +++ b/roles/test/vars/main.yml @@ -2,5 +2,4 @@ # vars file for test var_setted_everywhere: "MESSAGE EVERYWHERE FROM roles/test/vars/main.yml" - var_setted_only_vars_main: "MESSAGE FROM roles/test/vars/main.yml" -- GitLab