Aller au contenu principal

Améliorer votre code Ansible avec Spotter

Dans ce guide, je vais vous présenter Steampunk Spotter, un outil puissant qui révolutionne qui optimise mes développements Ansible. Steampunk Spotter n'est pas seulement un outil d'analyse ; c'est un complément indispensable à ansible-lint, conçu pour approfondir l'analyse et améliorer considérablement la qualité du code Ansible.

Fonctionnalités Clés de Steampunk Spotter

Steampunk Spotter se distingue par ses fonctionnalités, conçues pour améliorer et faciliter le travail avec Ansible. L'une de ses principales caractéristiques est son interface en ligne de commande (CLI), qui est non seulement facile à utiliser, mais aussi extrêmement puissante.

En outre, Steampunk Spotter s'intègre parfaitement avec des plateformes de de CI/CD populaires comme GitLab ou GitHub. Il propose aussi une extension pour Visual Studio Code. Cette intégration poussée renforce son utilité en permettant aux utilisateurs de l'incorporer facilement dans leur environnement de travail.

Spotter est plus qu'un simple outil de lint. En effet, il possède un site qui recense tous les rapports d'exécution.

En résumé, Spotter permet de vous aider à :

  • Structurer vos playbooks pour qu'ils soient lisibles ;
  • Éviter les anti-patterns les plus courants dans les playbooks ;
  • Identifier des erreurs difficiles à corriger ;
  • Identifier les changements de nom de modules et de collections ;
  • Identifier les paramètres manquants ou obsolètes ;
  • Identifier les modules obsolètes ;
  • Identifier les collections non mises à jour ;
  • Corriger automatiquement les fqcn incomplet ;
  • Migrer votre code vers de nouvelles versions d'Ansible ;

Installation et Configuration de Spotter

Installation de Spotter

Spotter est écrit en python et on peut donc l'installer avec pip ou pipx par exemple :

pip install spotter --user

# ou

pipx install spotter

  installed package steampunk-spotter 3.0.0, installed using Python 3.10.12
  These apps are now globally available
    - spotter
done! ✨ 🌟 ✨

Pour vérifier que Spotter est correctement installé, tapez la commande suivante :

spotter --version
3.0.0

Création d'un compte

Pour commencer à utiliser Steampunk Spotter, rendez-vous sur la page d'inscription, créez un compte et vérifiez votre e-mail.

Configuration

Pour l'authentification, vous avez le choix :

  • D'utiliser le combo user/mot de passe:
    • via les paramètres -u <utilisateur> -p <mot-de-passe>.
    • via les variables d'environnement SPOTTER_USERNAME et SPOTTER_PASSWORD.
  • D'utiliser un token que vous aurez généré sur le portail de spotter dans la section my settings.
    • via le paramètre -t <token>.
    • via la variable d'environnement SPOTTER_API_TOKEN.
spotter --api-token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx login
Login successful!

Analyse du code Ansible avec Spotter

Spotter vous permet de vérifier la qualité de votre contenu Ansible, tel que les playbooks, les rôles et les collections pour améliorer leur qualité. Il peut aussi vous aider à vérifier la qualité des référentiels Git publics pour garantir que les ressources que vous utilisez sont fiables. , sécurisé et bien entretenu.

Pour vérifier le code d'un playbook la commande est assez simple :

spotter scan playbook.yml

Check results:
playbook_container.yml:5:7: WARNING: [W1100] Use of with_items is discouraged. Consider using loop instead. View docs at https://docs.steampunk.si/plugins/community/general/6.6.1/module/proxmox.html for more info.
playbook_container.yml:5:7: HINT: [H1900] (rewritable) Required collection community.general is missing from requirements.yml or requirements.yml is missing.

Scan summary:
Spotter took 1.888 s to scan your input.
It resulted in 0 error(s), 1 warning(s) and 1 hint(s).
Can rewrite 1 file(s) with 1 change(s).
Overall status: WARNING

Reste plus qu'à analyser le retour. Par exemple ici, il conseille de mettre à jour la collection community.general qui est vraiment obsolète.

Vous pouvez vérifier une collection, plusieurs rôles en indiquant simplement le chemin de ceux-ci :

spotter scan path/to/role1 path/to/role2

# ou

spotter scan path/to/collection

Si vous avez trop d'erreurs, vous pouvez limiter l'analyse à un des niveaux suivant HINT, WARNING ou ERROR :

spotter scan --display-level error playbook.yml

Il est aussi possible de bypasser certaines erreurs (ce n'est pas bien !) :

spotter scan --skip-checks E1300,E1301,H1302 playbook.yml

Il est aussi possible de limiter aussi l'analyse à certains types de profil : default, security ou full :

spotter scan --profil security playbook.yml

Vous pouvez aussi demander à Spotter à corriger pour vous votre code :

spotter scan --rewrite playbook.yml

Spotter peut aussi analyser le code d'un dépôt git. Il suffit de créer dans l'interface web de Spotter un projet de type Git. Une fois enregistré, le code est automatiquement scanné.

Spotter stocke les informations de toutes vos analyses, que vous pouvez ensuite visualiser dans l'interface web de l'application. Par défaut, les résultats de votre analyse sont stockés dans le premier projet de votre organisation, mais si vous souhaitez organiser vos analyses ou avoir plusieurs organisations ou projets pour mettre de l'ordre dans vos données d'analyse, alors la gestion par projets est la réponse. Pour spécifier le projet sous lequel vous souhaitez stocker les résultats d'analyse spécifiques, utilisez l'argument --project-id ou -p.

Définir la configuration

Pour simplifier, il est possible de définir une configuration par défaut. Pour cela, il faut créer un fichier de configuration au format JSON :

{
  "ansible_version": "2.13",
  "skip_checks": [
    {
      "event": "W003",
      "fqcn": "ansible.builtin.uri"
    }
  ],
  "enforce_checks": [
    {
      "event": "E005",
      "fqcn": "community.crypto.x509_certificate"
    }
  ]
}

Pour appliquer la configuration :

spotter config set ./config.json

Pour afficher la configuration en cours :

spotter config get

{
  "organization": "c2vNasohT_aBZ85_osikhw",
  "spotter_noqa": [
    {
      "type": "skip",
      "enabled": true,
      "event": "W003",
      "subevent_code": null,
      "fqcn": "ansible.builtin.uri"
    },
    {
      "type": "enforce",
      "enabled": true,
      "event": "E005",
      "subevent_code": null,
      "fqcn": "community.crypto.x509_certificate"
    }
  ],
  "ansible_version": null,
  "display_level": null,
  "profile": null
}

Pour effacer la configuration en cours

spotter config clear

Utilisation de l'extension Visual Studio Code

Dans ce chapitre, je me penche sur l'extension Steampunk Spotter pour Visual Studio Code, un outil très pratique pour les développeurs Ansible. Cette extension améliore significativement l'expérience de développement Ansible directement dans l'environnement VS Code.

Elle permet une intégration transparente avec Steampunk Spotter, offrant ainsi aux développeurs la possibilité d'analyser et d'optimiser leurs playbooks sans quitter leur environnement de développement. L'extension fournit des retours en temps réel sur les erreurs potentielles, les questions de sécurité, et les conseils d'optimisation, rendant le processus de développement plus efficace et fiable.

Un peu d'IA dans l'extension Visual Studio code

L'extension Steampunk Spotter pour Visual Studio Code (VSC) intègre une fonctionnalité d'écriture assistée par IA, facilitant l'écriture de code Ansible.

En activant les paramètres de cette fonctionnalité, les utilisateurs ont accès à une multitude de suggestions qui économisent du temps et enrichissent la rédaction des playbooks. Spotter permet de personnaliser le nombre de suggestions affichées, offrant un contrôle total sur le niveau d'assistance​​.

Conclusion

En conclusion, Steampunk Spotter se révèle être un outil précieux pour tout professionnel travaillant avec Ansible. Ses fonctionnalités avancées, comme l'intégration avec Visual Studio Code et l'écriture assistée par IA, transforment radicalement le processus de création et d'optimisation du code Ansible. Steampunk Spotter offre une plateforme robuste pour améliorer la qualité, la sécurité et l'efficacité des automatisations résalisés avec Ansible.