Bonjour. Ansible a été mentionné plus d'une fois sur Habré, mais je n'ai pas trouvé d'articles sur le test de ses rôles à l'aide de la molécule, mais je trouve ce cadre extrêmement pratique et je voudrais le partager avec le public de Habr.
Mais d'abord, un peu sur ce que j'ai utilisé auparavant.
Auparavant, pour tester les rôles ansibles que je créais, j'utilisais vagabond, conduisant simplement:
$ vagrant init debian/jessie64 $ vagrant up
Création de machines virtuelles, après quoi j'ai écrit l'inventaire et le playbook pour lancer le rôle, jusqu'au jour où j'ai découvert la molécule.
Que peut offrir la molécule?
- Initialisation du rĂ´le initial
- Chauffeur / fournisseur
- Tests d'idempotence
- Vérification
Initialisation du rĂ´le initial
Si un nouveau rôle est spécifié, crée un exemple de structure pour le rôle ansible
Chauffeur / fournisseur
Molecule nous permet d'utiliser un conteneur Docker ou une machine virtuelle comme cobaye en utilisant Vagrant, ceci est déterminé en indiquant le pilote lors de l'initialisation, ou dans molecule.yml. Parce que Si je dois tester les rôles d'orchestrer des conteneurs, alors Vagrant reste le pilote préféré pour moi. Choisir Vagrant comme pilote vous permet également de sélectionner un fournisseur.
Les éléments suivants sont disponibles:
- Libvirt
- Parallels
- VirtualBox (par défaut)
- VMware Fusion
Ensuite, nous considérerons une variante de Vagrant avec VirtualBox comme fournisseur.
Tests d'idempotence
Selon le wiki:
La propriété d'un objet ou d'une opération lors de l'application à nouveau de l'opération à l'objet donne le même résultat que lorsqu'elle est unique.
En ce qui concerne les rôles ansibles, lorsque le rôle est redémarré, aucune modification ne doit être apportée.
Vérification
Afin de s'assurer que le rôle a fonctionné correctement, ne pas échouer à l'une des tâches ne suffit pas. Après tout, vous devez vérifier que les services ont démarré, que les ports sont ouverts, etc.
Les cadres suivants sont disponibles pour vérification:
- Goss
- Serverspec
- Testinfra (par défaut)
J'ai été testé par Goss et Testinfra. Pour moi, j'ai choisi Testinfra.
Exemple d'utilisation:
$ molecule init --role sample-role
Après avoir exécuté cette commande, nous obtenons un répertoire sample-role avec une structure de rôle ansible typique et les fichiers yaml nécessaires:
defaults handlers meta molecule.yml // - molecule playbook.yml // README.md tasks tests // vars
Vous pouvez commencer sans spécifier le commutateur --role, dans ce cas, les fichiers molecule.yml et playbook.yml seront créés dans le répertoire courant.
Il arrive que vous deviez vous assurer que le rôle fonctionne sur plusieurs distributions dans ce cas, dans molecyle.yml, vous devez spécifier les noms des boîtes vagabondes (sur les plateformes):
vagrant: platforms: - name: jessie64 box: debian/jessie64 - name: centos7 box: centos/7
Ensuite, ajoutez les actions / variables nécessaires, etc. dans le rôle, après quoi nous testons sur toutes les plateformes spécifiques:
$ molecule test --platform all
Après cette molécule:
- s'il y a déjà des machines virtuelles créées, il s'arrêtera et les supprimera
- augmentera les machines virtuelles nécessaires
- tester notre rĂ´le avec ansible-lint
- remplir notre rôle dans les conteneurs nouvellement créés
- testera l'idempotence
- exécuter des tests testinfra
- supprimera les machines virtuelles créées
Vous devrez peut-être modifier le comportement de la molécule lorsque vous exécutez le test, par exemple, ne testez pas l'idempotence, pour cela, ajoutez ce qui suit à molecule.yml:
molecule: test: sequence: - destroy - syntax - create - converge - verify - destroy
Vous pouvez également appeler chacune des étapes correspondantes séparément à l'aide de la commande appropriée, par exemple:
$ molecule create --platform all $ molecule syntax $ molecule create $ molecule converge $ molecule verify
En option, ne supprimez / créez pas de nouvelle machine virtuelle avant chaque convergence.
Vous pouvez spécifier une plate-forme spécifique et la tester séparément:
$ molecule create --platform jessie64 $ molecule syntax $ molecule create $ molecule converge $ molecule verify
Merci de votre attention!