[Ansible] : lister les variables de rôles non documentées dans le README.md

Print Friendly, PDF & Email

Les rôles de ansible sont plus ou moins faciles à utiliser. Un des principaux facteurs limitants, c’est la documentation du README. Du coup j’ai créé un petit script pour lister les variables de vos rôles et ensuite vérifier si ces variables sont bien documentées dans le README.md (si vous avez d’autres idées n’hésitez pas).

#!/usr/bin/python3


# coding: utf8



import re
import os

def list_variables (pattern, dir):
    
  variables=[]
    
  r = re.compile(pattern)
    
  for parent, dnames, fnames in os.walk(dir):
 
       for fname in fnames:

            filename = os.path.join(parent, fname)

            if os.path.isfile(filename):

                with open(filename,encoding="latin-1") as f:

                    for line in f:

                        if r.search(line):

                          reg=r"pattern"

                          for item in re.findall(r''+pattern+'',line):

                            if item not in variables:

                              variables.append(item)

  return variables



# lister les roles

def list_roles (dir):

        roles=[]

        regexp = re.compile(r'.*\/roles\/[a-z0-1_-]+$')

        for dirname, dirnames, filenames in os.walk('.'):

                for subdirname in dirnames:

                        rep=os.path.join(dirname, subdirname)

                        if regexp.search(rep):

                                roles.append(rep)

        return roles



# avec la fonction grep on liste toutes les variables contenant un _


for role in list_roles("."):

    r = re.compile('[.]?roles/(.*)')

    match = r.search(role)

    print("")

    print("#################################################################")

    print("         Analyse du role : "+ match.group(1))

    print("#################################################################")
    compteur=0

    list_var=list_variables("\{\{\s?([a-z]+[_]+[a-z_]+)\s?\}\}",role)

    for variable in list_var:

        compteur+=1

        with open(roles+"/README.md",encoding="latin-1") as f:

            concaten=""

            for line in f:

                concaten+=line

            if not re.search(variable,concaten):

                print("Variable à éditer :"+variable)

    print(" = "+str(compteur)+" variable(s) analysé(es)")

Explications :

  •  une fonction qui liste les variables ansible :
    • on parcourt les directories (à l’aide du module OS de python)
    • et avec une regex on applique un pattern pour retrouver ce qui ressemble à une variable ({{ variable }}
    • enfin on met tout cela dans un tableau bien propre
  • une fonction qui liste les rôles :
    • idem on parcourt les directories et on cherche les répertoires contenus dans “roles”
    • à l’aide d’une regex on nettoie le nom du rôle
  • Pour finir on orchestre tout cela :
    • on boucle sur la liste des variables
    • on ouvre le README.md que l’on place dans une variable simple(on concatène les lignes)
    • et on y cherche la variable
    • si elle n’est pas dedans on affiche qu’elle est à éditer
    • et pour finir on affiche à la fin de chaque rôle le nombre de variables analysées.
Découvrez  [Python] : comment charger des datas en base de données mysql avec mysql.connector ?

Si vous voyez d’autres scripts de ce genre qui pourrait être utiles indiquez le en commentaire j’y jeterez un coup d’oeil.