Parce que j’ai fait mon grub ce weekend…
Il y a maintenant un peu plus d’une année, je publiais mon premier module Puppet (puppet-grub, sans trop savoir comment cela fonctionnait je l’avoue). Quelques issues furent ouvertes sur Github, dans l’ensemble le module semblait vivre sa vie sans trop de soucis.
Ayant eu enfin le courage de me décider à corriger le ticket (Refresh (update-grub) always triggered), de fil en aiguille, j’ai corrigé, modifié le module pour en sortir une nouvelle version.
L’objectif était de rendre le module le plus compatible possible avec les standards de la forge Puppet. Pour se faire, j’ai dû:
- Remplacer le fichier Modulefile par le fichier metadata.json
- Vérifier l’indentation, la doc, etc… via puppet-lint
- Vérifier la syntaxe via puppet parser validate
Autre amélioration, rendre le module compatible avec les distributions Red Hat like, ceci est désormais chose faite. Pour se faire, le module se base sur le fact osfamily:
case $::osfamily { 'Debian': { $config_file = '/etc/default/grub' $distributor = '$(lsb_release -i -s 2> /dev/null || echo Debian)' $install_binary = '/usr/sbin/grub-install' $package_name = [ 'grub-pc', 'grub-common' ] $update_binary = '/usr/sbin/update-grub' } 'Redhat': { $config_file = '/etc/default/grub' $distributor = "$(sed 's, release .*$,,g' /etc/system-release)" $install_binary = '/usr/sbin/grub2-install' $package_name = [ 'grub2', 'grub2-tools' ] $update_binary = '/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg' } default: { fail("The ${module_name} module is not supported on ${::operatingsystem}") }
Ce module a été testé sur une CentOS 7 ainsi que sur une Debian GNU/Linux Wheezy, il devrait donc fonctionner sur Fedora, RHEL, Ubuntu, etc… Si ce n’est pas le cas, merci d’ouvrir une issue sur Github (cf. le lien en bas de la page).
N’étant pas un esspert Puppet/Ruby… je vous invite à faire des PR (pull request) sur Github afin d’améliorer soit le code soit le module en général soit les deux ^^
Travis, un ami qui vous veut du bien !
Qu’est-ce que Travis:
Pour faire simple, vous pouvez paramétrer Travis-CI pour qu’à chaque push, il exécute vos tests et vous indique si votre build (plusieurs « jobs ») s’est bien déroulé ou non. Cela permet à chaque modification du projet, de s’assurer que tout fonctionne correctement. Cela s’appelle l’intégration continue.
Travis-CI est gratuit pour les projets publics hébergés sur GitHub. (source)
Le module puppet-grub2 est donc désormais validé par Travis à chaque push Git, cela garantit que rien n’a été cassé suite à un commit un peu foufou
Changelog du module Puppet
- Add GRUB_HIDDEN_TIMEOUT and GRUB_HIDDEN_TIMEOUT_QUIET options
- Replace Puppet Modulefile by metadata.json
- Make Puppet module compliant with Lint, Parser and Travis
- Redhat distribution are now supported
- Replace static distributor value by a dynamic value
- Add GRUB_DISABLE_SUBMENU option
- Fix update_grub always triggered issue: https://github.com/goldyfruit/puppet-grub2/issues/5
- Fix some typos and make it compliant with puppet-lint
Liens
- Module sur le forge Puppet: https://forge.puppetlabs.com/goldyfruit/grub2
- Projet sur Github: https://github.com/goldyfruit/puppet-grub2
- Ouvrir une issue sur Github: https://github.com/goldyfruit/puppet-grub2/issues
- CI du projet Github: https://travis-ci.org/goldyfruit/puppet-grub2
Gaëtan Trellu (goldyfruit)
Derniers articles parGaëtan Trellu (goldyfruit) (voir tous)
- Qinling, let’s the journey begin! - 23 mai 2019
- systemd-networkd, l’âge de la maturité ? - 13 mars 2018
- Hyper-V, Nova, VxLAN et Open vSwitch, enfin une belle histoire ! - 31 décembre 2017
Mise à jour du module grub2 pour Puppet par Gaëtan Trellu (goldyfruit) est sous Licence Creative Commons Internationale Attribution 4.0.