From 84c0b6d2436005bea60ffecd0274253764141c61 Mon Sep 17 00:00:00 2001 From: Bertrand Lanson Date: Wed, 23 Aug 2023 23:27:16 +0200 Subject: [PATCH] added custom test, but pipx module isnt idempotent --- defaults/main.yml | 3 +- molecule/default/requirements.yml | 4 ++ molecule/with_custom_packages/converge.yml | 7 +++ .../with_custom_packages/group_vars/all.yml | 13 ++++++ molecule/with_custom_packages/molecule.yml | 37 +++++++++++++++ .../with_custom_packages/requirements.yml | 4 ++ molecule/with_custom_packages/verify.yml | 46 +++++++++++++++++++ tasks/main.yml | 10 ++-- 8 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 molecule/default/requirements.yml create mode 100644 molecule/with_custom_packages/converge.yml create mode 100644 molecule/with_custom_packages/group_vars/all.yml create mode 100644 molecule/with_custom_packages/molecule.yml create mode 100644 molecule/with_custom_packages/requirements.yml create mode 100644 molecule/with_custom_packages/verify.yml diff --git a/defaults/main.yml b/defaults/main.yml index 7dc819b..af88006 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,7 +1,8 @@ --- # defaults file for manage_pipx_packages manage_pipx_packages_install_prereqs: true +manage_pipx_packages_path: "/usr/local/bin" manage_pipx_packages_list: - - name: pip + - name: ansible-core version_constraint: latest state: present diff --git a/molecule/default/requirements.yml b/molecule/default/requirements.yml new file mode 100644 index 0000000..ca250b7 --- /dev/null +++ b/molecule/default/requirements.yml @@ -0,0 +1,4 @@ +--- +# requirements file for molecule +roles: + - name: ednxzu.manage_apt_packages diff --git a/molecule/with_custom_packages/converge.yml b/molecule/with_custom_packages/converge.yml new file mode 100644 index 0000000..6c10078 --- /dev/null +++ b/molecule/with_custom_packages/converge.yml @@ -0,0 +1,7 @@ +--- +- name: Converge + hosts: all + tasks: + - name: "Include ednxzu.manage_pipx_packages" + ansible.builtin.include_role: + name: "ednxzu.manage_pipx_packages" diff --git a/molecule/with_custom_packages/group_vars/all.yml b/molecule/with_custom_packages/group_vars/all.yml new file mode 100644 index 0000000..bb28712 --- /dev/null +++ b/molecule/with_custom_packages/group_vars/all.yml @@ -0,0 +1,13 @@ +--- +manage_pipx_packages_install_prereqs: true +manage_pipx_packages_path: "/usr/local/bin" +manage_pipx_packages_list: + - name: ansible-core + version_constraint: latest + state: present + - name: yamllint + version_constraint: latest + state: present + - name: vault-cli + version_constraint: latest + state: present diff --git a/molecule/with_custom_packages/molecule.yml b/molecule/with_custom_packages/molecule.yml new file mode 100644 index 0000000..30f7b0f --- /dev/null +++ b/molecule/with_custom_packages/molecule.yml @@ -0,0 +1,37 @@ +--- +dependency: + name: galaxy + options: + requirements-file: ./requirements.yml +driver: + name: docker +platforms: + - name: instance + image: geerlingguy/docker-${MOLECULE_TEST_OS}-ansible + command: "" + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup + cgroupns_mode: host + privileged: true + pre_build_image: true +provisioner: + name: ansible + config_options: + defaults: + remote_tmp: /tmp/.ansible +verifier: + name: ansible +scenario: + name: with_custom_packages + test_sequence: + - dependency + - cleanup + - destroy + - syntax + - create + - prepare + - converge + - idempotence + - verify + - cleanup + - destroy diff --git a/molecule/with_custom_packages/requirements.yml b/molecule/with_custom_packages/requirements.yml new file mode 100644 index 0000000..ca250b7 --- /dev/null +++ b/molecule/with_custom_packages/requirements.yml @@ -0,0 +1,4 @@ +--- +# requirements file for molecule +roles: + - name: ednxzu.manage_apt_packages diff --git a/molecule/with_custom_packages/verify.yml b/molecule/with_custom_packages/verify.yml new file mode 100644 index 0000000..d0c1d64 --- /dev/null +++ b/molecule/with_custom_packages/verify.yml @@ -0,0 +1,46 @@ +--- +- name: Verify + hosts: all + gather_facts: false + tasks: + - name: "Test: file /etc/hosts" + block: + - name: "Stat file /etc/hosts" + ansible.builtin.stat: + path: "/etc/hosts" + register: stat_etc_hosts + + - name: "Verify file /etc/hosts" + ansible.builtin.assert: + that: + - stat_etc_hosts.stat.exists + - stat_etc_hosts.stat.isreg + - stat_etc_hosts.stat.pw_name == 'root' + - stat_etc_hosts.stat.gr_name == 'root' + + - name: "Test: packages pip, vault-cli, yamllint, docker" + block: + - name: "Get pip3 up-to-date packages" + ansible.builtin.command: "pip3 list -u --format=json" + changed_when: false + register: pip_updated_packages + + - name: "Get pip3 out-of-date packages" + ansible.builtin.command: "pip3 list -o --format=json" + changed_when: false + register: pip_outdated_packages + + - name: "Verify packages pip, vault-cli, yamllint, docker" + vars: + pip_up_to_date_list: "{{ pip_updated_packages.stdout | from_json | json_query('[].name') }}" + pip_out_of_date_list: "{{ pip_outdated_packages.stdout | from_json | json_query('[].name') }}" + ansible.builtin.assert: + that: + - "'pip' in pip_up_to_date_list" + - "'pip' not in pip_out_of_date_list" + - "'vault-cli' not in pip_up_to_date_list" + - "'vault-cli' in pip_out_of_date_list" + - "'yamllint' not in pip_up_to_date_list" + - "'yamllint' in pip_out_of_date_list" + - "'docker' in pip_up_to_date_list" + - "'docker' not in pip_out_of_date_list" diff --git a/tasks/main.yml b/tasks/main.yml index cd41bac..d3bca7c 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -2,12 +2,14 @@ # task/main file for manage_pipx_packages - name: "Import prerequisites.yml" ansible.builtin.include_tasks: prerequisites.yml - when: manage_pip_packages_install_prereqs + when: manage_pipx_packages_install_prereqs - name: "Install/remove required pip packages" community.general.pipx: name: "{{ item.name }}{% if item.version_constraint not in [None, '', 'latest'] %}{{ item.version_constraint }}{% endif %}" state: "{{ item.state }}" - loop: "{{ manage_pip_packages_list }}" - when: manage_pip_packages_list is defined - and manage_pip_packages_list not in [None, ''] + # environment: + # PIPX_BIN_DIR: "{{ manage_pipx_packages_path }}" + loop: "{{ manage_pipx_packages_list }}" + when: manage_pipx_packages_list is defined + and manage_pipx_packages_list not in [None, '']