Goss Verifier#

Prérequis#

Initialisation#

  • Créez un rôle pour notre exercice

$ pwd
/home/user/ansible-workspaces/ultimate-training

$ cd roles

$ molecule init role molecule_goss_demo --driver-name docker --verifier-name goss

$ cd molecule_goss_demo
  • Créez un fichier molecule/default/Dockerfile.j2 pour service de modèle à notre host de test :

#
# TEST-ONLY Dockerfile, NE PAS DEPLOYER
#
ARG DEBIAN_TAG=11-slim
FROM debian:$DEBIAN_TAG
ARG DEBIAN_FRONTEND=noninteractive
RUN set -eux; \
  apt-get update && apt-get upgrade && apt-get dist-upgrade; \
  apt-get install --no-install-recommends -y apt-utils \
  curl ca-certificates sudo \
  python python3 python3-apt locales \
  systemd systemd-sysv libpam-systemd dbus dbus-user-session; \
  localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8; \
  localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8
ENV LANG fr_FR.utf8
RUN rm -f /lib/systemd/system/multi-user.target.wants/* \
  /etc/systemd/system/*.wants/* \
  /lib/systemd/system/local-fs.target.wants/* \
  /lib/systemd/system/sockets.target.wants/*udev* \
  /lib/systemd/system/sockets.target.wants/*initctl* \
  /lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup* \
  /lib/systemd/system/systemd-update-utmp*
ENTRYPOINT ["/lib/systemd/systemd"]
  • Modifiez le fichier molecule/default/molecule.yml comme ceci :

---
dependency:
  name: galaxy
driver:
  name: docker
platforms:
  - name: debian
    image: "ultimate:11"
    pre_build_image: false
    pull: false
    privileged: true
provisioner:
  name: ansible
verifier:
  name: goss

À ce stade nous pouvons déjà lancer un molecule test qui s’appuie sur notre Dockerfile. Cependant nous testerions un rôle vide, donc peu de gloire.

Code du rôle#

  • Modifiez le fichier tasks/main.yml pour que notre rôle installe et active le démon SSH :

---
- name: Installation de sshd
  apt:
    name: openssh-server
    update_cache: yes

- name: Activation de sshd
  service:
    name: sshd
    state: started
    enabled: true

Code des tests#

  • Modifiez l’état attendu par goss en éditant le fichier molecule/default/tests/test_default.yml :

---
port:
  tcp:22:
    listening: true
    ip:
    - 0.0.0.0
service:
  sshd:
    enabled: true
    running: true
process:
  sshd:
    running: true

Lancement#

Tout est prêt vous pouvez maintenant lancer les tests :

$ pwd 
/home/user/ansible-workspaces/ultimate-training/roles/molecule_goss_demo

$ molecule test
[...]

Ligne d’arrivée#

Vous avez là la combinaison la plus confortable pour tester des rôles Ansible au moment de la rédaction.