Aller au contenu

Renovate gère les dépendances d'Ansible

logo ansible

Dans ma première utilisation de Renovate au sein de mon Home Lab Devops, je me limitais à la mise à jour des dépendances dans la construction des images docker. Mais voilà j’utilise pas mal de playbooks Ansible pour installer des applications sur des VM.

J’ai ajouté le repository du playbook de rundeck, mais pas d’issue crée. Mais comment gérer ce versionning avec renovate ?

Ajouter des fichiers non pris en charge par Renovate

Renovate possède un nombre impressionnant de paramètres, je vous envoie vers sa documentation pour vous en rendre compte.

En fouillant dans les configurations de renovate sur github, j’ai remarqué l’utilisation de l’option regexManagers. Cette option permet d’étendre l’analyse de fichier non pris en charge par Renovate.

J’ai donc testé ce mécanisme sur le playbook. Pour que cela fonctionne, il faut ajouter dans le playbook Ansible des informations indiquant à Renovate ou chercher les informations sur les versions.

  • datasource : la source du versioning les tags ou releases github mais il en existe d’autres
  • depName : dans le cas de github le nom du repository
  • currentValue : la version actuelle

Il faut absolument que la version que vous utilisez dans votre playbook Ansible corresponde à celle déclaré sur le repository.

Par exemple pour rundeck on doit télécharger une version 3.4.10-20220118 mais voila la release sur github est égale à v3.4.10. Il faudra donc ajouter une tache pour construire la version à télécharger. Je n’ai pas trouvé pour le moment le moyen de récupérer la date de la release, mais j’y travaille. Donc je traite manuellement cette mise à jour. Dans le playbook j’installe également Ansible sur la VM rundeck, je l’ajoute également.

#datasource=github-releases depName=rundeck/rundeck
rundeck_version: 3.4.10-20220118
#datasource=github-tags depName=ansible-community/ansible-build-data
ansible_version: 5.5.0

Maintenant je construis la configuration Renovate avec la [regex](/docs/developper/expressions-regulieres/ pour qu’il trouve les informations. Les informations se trouvent sur deux lignes. Pour construire la regex je suis allé sur le site regex101. Dans Text String j’ai copié le playbook.

regex renovate ansible

Je crée la configuration renovate.json pour le repository rundeck. Je pousse dans le repo.

{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:base"],
"regexManagers": [
{
"fileMatch": [".*yml$"],
"matchStrings": [
"datasource=(?<datasource>.*)\\sdepName=(?<depName>.*)\\n.*version:\\s(?<currentValue>.*)"
]
}
}

Je lance renovate-bot depuis gitlab. Et oui ca fonctionne. Renovate me créé bien une issue pour renovate mais pas ansible.

Je décide de lancer renovate depuis ma machine en activant le mode Debug.

Terminal window
git clone git@gitlab.com:dockerfiles6/renovate-bot.git
docker run --rm -e LOG_LEVEL=debug -v $PWD/renovate-config.js:/usr/src/app/config.js -v /home/vagrant/.ssh:/home/ubuntu/.ssh -it renovate/renovate:31.90.2-slim

Je remarque dans les traces qu’il trouve bien la nouvelle version d’ansible 5.5.0 mais il n’en tient pas compte. En fouillant dans la documentation de renovate je vois qu’il faut lui indiquer que pour la configuration github-tags il faut prendre en compte les versions major, minor et patch avec l’option packageRules.

{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:base"],
"regexManagers": [
{
"fileMatch": [".*yml$"],
"matchStrings": [
"datasource=(?<datasource>.*)\\sdepName=(?<depName>.*)\\n.*version:\\s(?<currentValue>.*)"
]
}
],
"packageRules": [
{
"datasources": ["github-tags"],
"matchUpdateTypes": ["minor", "patch", "major"]
}
]
}

Je relance et hop j’ai bien mes issues de créer :

regex renovate ansible

Renovate est un super produit mais compliqué à configurer, la documentation manque de cas d’exemple. En tout cas je sais désormais étendre l’analyse de tout types de dépendances à Renovate.