La migration d’applications traditionnelles vers des applications dites cloud native rime le plus souvent avec l’adoption d’architectures microservices, de consommation de services managés, d’orchestration de conteneurs… Cela se traduit d’un point de vue opérationnel par l'explosion du nombre d'éléments interdépendants à installer et configurer. Cela augmente donc le nombre de prérequis à vérifier avant de pouvoir déployer une application.
Pour ce faire, il est possible d’utiliser des moteurs de vérification matures tels qu’ InSpec, Serverspec, Bats, Testinfra… Ceux-ci couvrent en effet un spectre suffisamment large de fonctions permettant de couvrir la majorité des besoins. Et comme bien des outils matures, le coût en termes de temps de leur prise en main peut finir par être un de leur point faible pour un besoin simple. Tel sera par exemple le cas si l’on veut les utiliser pour valider les prérequis (sanity check) sur le poste local d’un projet cloud native qui constitue pourtant une vérification plutôt simple.
C’est là qu’intervient Opunit qui est un moteur de vérification de conformité beaucoup plus simple à prendre en main que ceux sus-cités.
En effet la prise en main des moteurs Inspec et Serverspec nécessite l’apprentissage du DSL Rspec, Testinfra du python et Bats du bash … alors qu’Opunit repose sur le format de représentation des données YAML.
De plus alors qu’avec les autres outils, c’est à vous de construire avec les briques existantes des tests de vérification haut niveau, Opunit fournit directement des briques haut niveau regroupées autour de 4 propriétés :
Ainsi la vérification de version minimale du binaire node sur le poste local se fera en utilisant semver de la façon suivante:
- version:
cmd: node --version
range: ^10.x.x
alors qu’en exploitant Inspec, ce serait plus long et nous devrions écrire une regexp pour avoir la version minimale de node:
describe command('node --version |
<récupérer la="" ligne="" et="" mot="" correspondant="">
’') do its('stdout') { should eq (
) } end
</récupérer>
Pour exécuter la vérification des propriétés Opunit, rien de plus simple :
- group:
description: "Terraform basic opunit checks"
checks:
- version:
cmd: terraform --version
range: ^13.x.x
- reachable:
- registry.terraform.io
Toutes les indications en vous rendant sur le lien suivant : https://github.com/nvm-sh/nvm#install--update-script
npm install -g Opunit
Opunit verify local
Cela générera sur votre console un rapport de vérification:
Ainsi, il est possible de savoir très aisément quelles assertions ont échoué ou passé le test de vérification.
La liste des 4 propriétés que l’on peut vérifier avec Opunit est loin d’être exhaustive, même si ces propriétés sont essentielles. Opunit n’est donc pas adapté à tests de vérification complexe de type “compliance as code” car il ne couvre pas tous les cas d’usage fonctionnel du fait de sa simplicité. De plus, il ne répond pas au besoin du test d’une infrastructure “bas niveau” souvent globale (et donc complexe) mais plutôt celui d’une application spécifique (environnement local ou distant). Les outils pertinents pour ce type de besoin sont InSpec, Serverspec, Bats, Testinfra…
Références
Pour aller plus loin
Outils de vérification de conformité infrastructure “bas niveau” pouvant aussi servir à de la compliance as code: Ansible & KitchenCI : Infrastructure As Code guidée par les Tests Part I