L'infrastructure en tant que code nous dit d'utiliser des outils qui automatisent vos builds. Génial. Des outils comme ansible , chef , marionnette , pile de sel et autres nous poussent à écrire à quoi ressemble l'infrastructure, tout en résolvant les différences.
Dans Salt Stack, ces bits sont appelés états . Si l'état ne correspond pas à la réalité, l'outil le résoudra pour nous. En d'autres termes - nous écrivons un test pour notre infrastructure et si le test échoue, l'outil le réparera de lui-même. C'est du moins l'idée.
XP nous apprend à utiliser TDD et la question est de savoir s'il est applicable à l'infrastructure? L'outillage le suggère.
Je peux imaginer quelques types de tests qui peuvent être très utiles.
Nous rédigeons des tests de fumée fournis avec le service déployé pour garantir que le service déployé de bout en bout fonctionne et s'exécute comme prévu. Ce serait un appel d'API ou / et une vérification de systemctl pour vous assurer que ce que nous venons de déployer fonctionne. Une grande partie de cette fonctionnalité peut être couverte dans les mêmes états car des outils comme ansible ont des états pour s'assurer qu'un service est en cours d'exécution.
Il existe un projet Molecule qui permet d'exécuter des rôles individuels (comme l'appelle ansible ses états) contre Docker ou un autre moteur de virtualisation temporaire. Cela oblige à découpler les rôles et permet de les exécuter indépendamment du playbook tout en travaillant dessus. Les tests permettent principalement de se moquer des variables avec lesquelles le rôle est censé fonctionner. Cependant, d'autres exemples semblent être une duplication du moteur ansible (affirmer qu'un fichier appartient à un utilisateur ...).
Le radar technologique de ThoughtWorks vante en ce moment des outils comme inspec , serverspec ou goss pour valider que le serveur répond aux spécifications. Mais nous écrivons une spécification, n'est-ce pas?
Alors, y a-t-il un intérêt à tester davantage l'infrastructure si nous décrivons l'infrastructure dans les états / rôles? Je pourrais soupçonner que cela devient plus nécessaire dans les grandes organisations où une équipe fournit les spécifications et d'autres suit, ou s'il y a un grand ensemble de rôles, vous voudrez peut-être exécuter un sous-ensemble de ceux-ci et bénéficier de la vitesse des tests? J'ai du mal à voir pourquoi vous écririez un test si vous pouviez avoir un rôle / état pour la même question à l'esprit.
goss
. Ainsi, par exemple, RPM est installé (ansible) puis testé si le fichier par défaut attendu est mis en place, ou si le service est en cours d'exécution et écoute un port spécifique. Je ne veux pas résoudre ce problème automatiquement, mais soyez averti et arrêtez la progression. Bien sûr, Ansible peut également tester le système pour vous, il vous suffit d'être explicite à ce sujet, mais dans notre cas, nous utilisonsgoss
pour tester le comportement du service dans un conteneur