Nous essayons de renforcer la résilience de notre configuration Ansible, qui traite du provisionnement et de la configuration.
Je comprends quelques méthodes de test du côté de la configuration, mais je me demande comment le mieux mettre en œuvre des tests du côté du provisioning, et s’il existe des outils pouvant aider à ce type de mise en oeuvre.
Actuellement, une grande partie de nos tests sont effectués en série dans le livre de jeu, ce qui est logique pour des choses telles que "le service est disponible; la vip est-elle disponible? Cette tâche async est-elle terminée?" configuration au niveau de la couche application et mise en service (telle que la configuration de la machine virtuelle). Je suis conscient que Ansible n'est pas le meilleur outil pour travailler avec la dérive de configuration, mais je suis curieux de connaître votre propre opinion.
Si vous avez quelque chose à automatiser complètement le processus encore mieux. (Nous avons quelques scripts laids qui font un compte rendu quotidien).
Remarque : à l'heure actuelle, il existe quelques conditions dans lesquelles une réapprovisionnement peut avoir lieu (par exemple, une reconstruction à partir d'une sauvegarde, un problème critique des systèmes), mais en général, il effectue une boucle sur certaines des tâches de configuration standard et n'y pense plus.
I'm aware Ansible isn't the best tool for working with configuration drift
S'il vous plaît, expliquez.Réponses:
Quelques options là-bas ..
Outils de test: triés par étoiles de github
Différences majeures entre eux:
En fin de compte, je suggérerais de passer une journée à expérimenter avec chacun d’entre eux pour les sentir avant de décider par vous-même.
Test continu / de divergence:
Tester les faisceaux pour le développement:
Full Disclosure: je suis l'auteur de goss
UPDATE: InSpec 4.x ou une version ultérieure utilise une licence commerciale / open source mixte - voir les commentaires.
la source
Les deux outils que j'ai vus pour cela sont InSpec et ServerSpec . Serverspec est un outil basé sur Ruby qui repose sur RSpec . InSpec est inspiré de RSpec et ServerSpec.
J'ai utilisé ServerSpec. C'est cool, mais peut-être pas 100% stable. J'ai eu des problèmes pour tester des versions spécifiques du logiciel sur Ubuntu.
J'ai lu la documentation InSpec mais je n'ai pas approfondi mes connaissances. Il fait essentiellement la même chose que Serverspec.
À en juger par les commits Github, il semble que le travail sur ServerSpec ait quelque peu diminué, alors qu'InSpec est en train de monter en puissance.
UPDATE: InSpec 4.x ou une version ultérieure utilise une licence commerciale / open source mixte - voir les commentaires.
la source
Lors de l'utilisation d'outils de gestion de la configuration, tels que Ansible, l'outil lui-même serait responsable de la prévention des dérives de configuration. Une fois que vous avez utilisé Ansible pour définir une certaine configuration, son exécution répétitive garantira que votre configuration est celle que vous avez définie. Cela nécessite également que votre code Ansible soit écrit de manière idempotente.
Compte tenu de ce qui précède, il est possible de tester le provisionnement en exécutant vos playbooks Ansible en boucle à partir d’un serveur. Par exemple, un travail cron, ou Jenkins, peut exécuter les playbooks toutes les 30 minutes et rendre compte de tout échec. Ne pas avoir d'échec signifie que votre configuration est sous contrôle, avoir des échecs signifie qu'il est difficile de placer les serveurs dans l' état souhaité .
Dans le cas où vous ne pouvez pas faire confiance à votre code pour qu'il soit écrit en tant qu'idempotent et que vous ne pouvez donc pas exécuter de manière répétitive Ansible dans une boucle à partir d'un serveur automatique, il existe une solution de contournement. Vous pouvez faire la même chose que ci-dessus (exécuter Ansible dans une boucle) mais utiliser son mode de fonctionnement à sec . Chaque fois que Ansible signale que des modifications sont nécessaires, le travail Jenkins (ou le travail cron) peut vous informer que votre configuration provisionnée a été modifiée et que les serveurs ne sont pas dans l' état souhaité .
Pour que votre code Ansible remplisse réellement ce que vous pensez qu'il devrait être, les solutions mentionnées par Dave Swersky s'appliquent. Les deux Inspec et Serverspec sont des outils qui permettent de vérifier dans une autre façon que vos Playbooks ne fait ce que vous voulez dire. Un bon moyen d’exécuter ce type d’outils dans des environnements de test (même dans des conteneurs Docker) consiste à utiliser kitchen.ci, qui gère tout le lien entre les divers outils de test des unités infra et l’exécution de vos playbooks / modules / livres de cuisine.
Kitchen.ci a été utilisé à l'origine pour tester les livres de cuisine Chef, mais des plug-ins existent également pour Ansible et d'autres outils CM.
la source
Test Kitchen dispose d'un plugin d'approvisionnement de cuisine ansible pour tester le code Ansible. Cela n’est pas aussi profond que l’intégration de Chef, mais cela fonctionne dans la plupart des cas. Il y a aussi le projet plus récent Molecule qui est un système de test Ansible dédié.
la source
Vous pouvez suivre les divergences / dérives de configuration / infrastructure avec Outthentic . Il est facile de créer une suite de tests pour "corriger" l'état souhaité et l'exécuter à chaque fois que vous devez suivre les modifications non souhaitées.
la source