diff --git a/.gitea/workflows/molecule-tests.yml b/.gitea/workflows/molecule-tests.yml new file mode 100644 index 0000000..a5d28f8 --- /dev/null +++ b/.gitea/workflows/molecule-tests.yml @@ -0,0 +1,43 @@ +#SPDX-License-Identifier: GPL-3.0-only +--- +name: Molecule Tests + +on: + schedule: + - cron: '0 7 * * 1' # Every Monday at 07:00 UTC + workflow_dispatch: + pull_request: + branches: + - main + +jobs: + molecule-tests: + runs-on: fedora-latest + steps: + - name: Add ~/.local/bin to PATH + run: echo "$HOME/.local/bin" >> "$GITEA_PATH" + + - name: Checkout + uses: actions/checkout@v6 + with: + path: ansible_role_mail + + - name: Install Molecule + run: pip install ansible molecule molecule-plugins[podman] + + - name: Install Ansible collections + run: ansible-galaxy collection install containers.podman + + - name: Run Molecule tests + working-directory: ansible_role_mail + run: molecule test + + - name: Tag latest + if: github.ref == 'refs/heads/main' + working-directory: ansible_role_mail + run: | + git config user.name "giabot" + git config user.email "bot@mail.gianet.us" + git remote set-url origin "https://giabot:${{ secrets.GITEA_TOKEN }}@gianet.us/engineering/ansible_role_mail.git" + git tag -f latest + git push -f origin latest diff --git a/meta/main.yml b/meta/main.yml index 4d799e2..741366b 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -1,5 +1,6 @@ galaxy_info: role_name: "mailserver" + namespace: "gianet" author: "Luciano Giacchetta" description: "Complete Mail Server Role" company: "Giacchetta Networks LLC" diff --git a/molecule/default/Dockerfile b/molecule/default/Dockerfile new file mode 100644 index 0000000..2f0fcf5 --- /dev/null +++ b/molecule/default/Dockerfile @@ -0,0 +1,13 @@ +FROM docker.io/library/debian:stable + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + python3 \ + systemd \ + systemd-sysv \ + dbus \ + ca-certificates && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +CMD ["/usr/sbin/init"] diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml new file mode 100644 index 0000000..16a9115 --- /dev/null +++ b/molecule/default/converge.yml @@ -0,0 +1,6 @@ +#SPDX-License-Identifier: GPL-3.0-only +--- +- name: Converge + hosts: all + roles: + - role: ansible_role_mail diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000..878ce77 --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,64 @@ +#SPDX-License-Identifier: GPL-3.0-only +--- +dependency: + name: galaxy + options: + requirements-file: molecule/default/requirements.yml + +driver: + name: podman + +platforms: + - name: debian-stable + image: docker.io/library/debian:stable + pre_build_image: false + dockerfile: Dockerfile + privileged: true + systemd: always + command: /usr/sbin/init + + - name: debian-oldstable + image: docker.io/library/debian:oldstable + pre_build_image: false + dockerfile: Dockerfile + privileged: true + systemd: always + command: /usr/sbin/init + + - name: ubuntu-latest + image: docker.io/library/ubuntu:latest + pre_build_image: false + dockerfile: Dockerfile + privileged: true + systemd: always + command: /usr/sbin/init + + - name: ubuntu-jammy + image: docker.io/library/ubuntu:jammy + pre_build_image: false + dockerfile: Dockerfile + privileged: true + systemd: always + command: /usr/sbin/init + +provisioner: + name: ansible + env: + ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.." + playbooks: + converge: converge.yml + verify: verify.yml + +scenario: + test_sequence: + - dependency + - destroy + - syntax + - create + - converge + - idempotence + - verify + - destroy + +verifier: + name: ansible diff --git a/molecule/default/requirements.yml b/molecule/default/requirements.yml new file mode 100644 index 0000000..ad7a05e --- /dev/null +++ b/molecule/default/requirements.yml @@ -0,0 +1,4 @@ +#SPDX-License-Identifier: GPL-3.0-only +--- +collections: + - name: containers.podman diff --git a/molecule/default/verify.yml b/molecule/default/verify.yml new file mode 100644 index 0000000..7e1659b --- /dev/null +++ b/molecule/default/verify.yml @@ -0,0 +1,37 @@ +#SPDX-License-Identifier: GPL-3.0-only +--- +- name: Verify + hosts: all + tasks: + - name: Gather service facts + ansible.builtin.service_facts: + + - name: Assert postfix service is present + ansible.builtin.assert: + that: + - "'postfix.service' in ansible_facts.services" + + - name: Assert dovecot service is present + ansible.builtin.assert: + that: + - "'dovecot.service' in ansible_facts.services" + + - name: Check postfix main.cf exists + ansible.builtin.stat: + path: /etc/postfix/main.cf + register: postfix_main_cf + + - name: Assert postfix main.cf exists + ansible.builtin.assert: + that: + - postfix_main_cf.stat.exists + + - name: Check dovecot.conf exists + ansible.builtin.stat: + path: /etc/dovecot/dovecot.conf + register: dovecot_conf + + - name: Assert dovecot.conf exists + ansible.builtin.assert: + that: + - dovecot_conf.stat.exists