<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Configuration Management on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/configuration-management/</link><description>Recent content in Configuration Management on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Thu, 20 Apr 2023 18:00:00 +0200</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/configuration-management/index.xml" rel="self" type="application/rss+xml"/><item><title>Rudder - astuces en vrac</title><link>https://blog.zwindler.fr/2023/04/20/rudder-astuces-en-vrac/</link><pubDate>Thu, 20 Apr 2023 18:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2023/04/20/rudder-astuces-en-vrac/</guid><description>&lt;img src="https://blog.zwindler.fr/2023/03/rudder_logo.webp" alt="Featured image of post Rudder - astuces en vrac" /&gt;&lt;p&gt;Cet article fait partie d&amp;rsquo;une suite d&amp;rsquo;articles sur Rudder. La version qui est testée ici sera la version open source (car je n&amp;rsquo;ai pas les moyens de me payer une licence pour mon infra perso 😛) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/03/19/premiers-pas-avec-rudder-installation/" &gt;Présentation, installation du serveur et des agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/03/27/premiers-pas-avec-rudder-concept-configuration/" &gt;Concepts et configuration des groupes, des directives, des rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/04/20/rudder-astuces-en-vrac/" &gt;Astuces en vrac&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note : une fois de plus, je tiens à préciser qu&amp;rsquo;il ne s&amp;rsquo;agit PAS d&amp;rsquo;un article sponsorisé. J&amp;rsquo;ai eu des contacts (techniques) avec la team Rudder, mais je n&amp;rsquo;ai été influencé d&amp;rsquo;aucune manière, en particulier dans la rédaction de cet article.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="but-de-larticle"&gt;But de l&amp;rsquo;article
&lt;/h2&gt;&lt;p&gt;Dans les deux articles précédents, j&amp;rsquo;ai parlé des concepts de Rudder, de l&amp;rsquo;installation du serveur et des agents. Je suis allé un poil plus loin avec mon installation perso mais avec ce que j&amp;rsquo;ai déjà écrit, on est déjà en capacité de jouer avec Rudder et je pense pas qu&amp;rsquo;on ait besoin d&amp;rsquo;aller beaucoup plus loin.&lt;/p&gt;
&lt;p&gt;Cependant, au cours de mes péripéties avec Rudder, je suis tombé sur quelques petits &amp;ldquo;os&amp;rdquo;. Rien de bien poussé, qui ne justifierait un article seul. Je vais donc tout regrouper ici, en vrac ;-P.&lt;/p&gt;
&lt;h2 id="tuning-pour-les-petits-cpus-et-les-petites-rams"&gt;Tuning pour les petits CPUs et les petites RAMs
&lt;/h2&gt;&lt;p&gt;On l&amp;rsquo;a dit dans le premier article, Rudder est assez doux en termes de prérequis matériels. Quelques Mo de mémoire suffisent pour l&amp;rsquo;agent, et grosso modo pas besoin de machine de guerre pour le CPU.&lt;/p&gt;
&lt;p&gt;Cependant, comme je suis extrêmement économe (aka radin) dans la gestion de mon infra perso, je suis quasiment un anti pattern dans le cas de Rudder. J&amp;rsquo;ai un cluster Proxmox monté sur des machines louées à 6€/mois à base d&amp;rsquo;un antédiluvien Atom C2350 (des duals core de 2013 !).&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est d&amp;rsquo;ailleurs pour essayer de grappiller quelques % de CPU que j&amp;rsquo;avais publié les articles &lt;a class="link" href="https://blog.zwindler.fr/2020/07/06/optimisation-de-pfsense-dans-proxmox-ve/" &gt;Optimisation de PFsense dans Proxmox VE&lt;/a&gt; et &lt;a class="link" href="https://blog.zwindler.fr/2022/10/22/proxmox-tips-tricks/" &gt;Proxmox - Tips and tricks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ces machines ne supportant même pas les instructions VT-x, je ne fais donc pas de machines virtuelles mais uniquement des machines à bases de containers LXC. Je me retrouve donc à installer une dizaine d&amp;rsquo;agents (oui, je suis vraiment bourrin) sur un même Atom.&lt;/p&gt;
&lt;p&gt;Rudder a beau être économe, multiplier les agents sur une machine aussi faible avait un coût difficilement soutenable sur ma machine, comme en témoigne le graphique CPU ci-dessous (mon serveur ne fait quasiment rien, c&amp;rsquo;est donc quasiment exclusivement de la charge Rudder).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/cpu_avant_tuning.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Il est très peu probable que vous ayez &lt;strong&gt;vous&lt;/strong&gt; une charge perceptible sur vos infras. Dans le cas de machines aussi peu puissantes, il est probable que la team Rudder recommanderait de ne pas installer d&amp;rsquo;agent sur mes containers LXC. Mais dans le cas de machines très très peu puissantes et/ou très très densifiées en termes de nombre de VMs, sachez qu&amp;rsquo;il est quand même possible de tuner le scheduling des runs de Rudder et ainsi limiter la casse.&lt;/p&gt;
&lt;p&gt;Dans le menu &lt;strong&gt;Administration&lt;/strong&gt; / &lt;strong&gt;Settings&lt;/strong&gt;, il existe une section &lt;strong&gt;Agent run schedule&lt;/strong&gt;. Par défaut, l&amp;rsquo;ordonnancement est prévu de la façon suivante : Rudder lance les vérifications / corrections sur sa liste d&amp;rsquo;agent sur une plage de 5 minutes, le premier tiré au hasard commençant à 0 minutes (directement donc) et le dernier jusqu&amp;rsquo;à 4 minutes (1 minute avant la fin de la fenêtre de tir).&lt;/p&gt;
&lt;p&gt;Note : au-delà de mon cas particulier, c&amp;rsquo;est quand même intéressant à savoir, car en fonction de ce qu&amp;rsquo;on lancera (scripts très longs par exemple, upgrades &lt;code&gt;apt&lt;/code&gt;, &amp;hellip;), il peut être intéressant de tuner ce dernier paramètre (Maximum delay) pour être certain que 2 jobs ne se chevauchent pas.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/agent_run_schedule.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;En modifiant le scheduling pour que les runs se lancent non pas sur 5 minutes mais sur 30, avec un dernier lancement à la 29 ème minute, j&amp;rsquo;ai pu retrouver une charge relativement acceptable sur mon infra.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/cpu_apres_tuning.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Deuxième astuce, si vous êtes limité en RAM, que vous avez moins de 50 machines et que vous n&amp;rsquo;utilisez pas beaucoup les plugins, il est possible de diminuer la taille de la JVM de rudder (par défaut à 1 Go) et ainsi un peu mieux respirer sur une machine à 2 Go (prérequis Rudder, un peu justes).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s1"&gt;&amp;#39;s/JAVA_XMX=1024/JAVA_XMX=512/&amp;#39;&lt;/span&gt; /etc/default/rudder-jetty
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl restart rudder-server.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Merci Nicolas pour l&amp;rsquo;astuce :)&lt;/p&gt;
&lt;h2 id="changer-le-nom-des-machines-du-point-de-vue-de-rudder"&gt;Changer le nom des machines du point de vue de Rudder
&lt;/h2&gt;&lt;p&gt;Autre problème, je n&amp;rsquo;ai pas toujours la main sur le FQDN des machines que je loue. En particulier, le retour de la commande &lt;code&gt;hostname -f&lt;/code&gt; renvoit parfois le nom de la machine telle que l&amp;rsquo;appelle l&amp;rsquo;hébergeur.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/fqdn.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je me retrouve avec un inventaire rudder plein de machines avec des noms du type &lt;code&gt;int.nua.ge&lt;/code&gt; et &lt;code&gt;randomid.dedibox.fr&lt;/code&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;Dans certains cas, je peux le modifier moi-même et/ou feinter Rudder (en modifiant le fichier /etc/hosts par exemple) mais plutôt que de faire ça, j&amp;rsquo;ai préféré utiliser une technique détaillée dans la documentation officielle de Rudder appelée &lt;a class="link" href="https://docs.rudder.io/reference/7.2/usage/advanced_node_management.html#override-node-fqdn" target="_blank" rel="noopener"
&gt;override node fqdn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La méthode pour le faire à la main est la suivante. En tant que root, je crée un script qui renvoie un JSON contenant une variable avec le nom que je souhaite pour mon hôte :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# mkdir -p /var/rudder/hooks.d/
# vi /var/rudder/hooks.d/override-hostname.sh
echo &amp;#39;{&amp;#34;rudder_override_hostname&amp;#34;: &amp;#34;myhost.example.org&amp;#34;}&amp;#39;
# chmod +x /var/rudder/hooks.d/override-hostname.sh
# rudder agent inventory
Rudder agent 7.2.4
Node uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;C&amp;rsquo;est relativement simple, mais j&amp;rsquo;étais pas satisfait car ça nécessite une action manuelle et je suis super fainéant. Comme les noms courts de mes machines sont eux toujours bons, quel que soit le provider et que je connais le domaine par avance (zwindler.fr), j&amp;rsquo;ai créé une&lt;strong&gt;directive&lt;/strong&gt; Rudder pour le faire à ma place !&lt;/p&gt;
&lt;p&gt;A partir d&amp;rsquo;une technique de type &lt;strong&gt;Distribution files&lt;/strong&gt; / &lt;strong&gt;File content&lt;/strong&gt;, j&amp;rsquo;ai mis les valeurs suivantes :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/file_content1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/file_content2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et voilà le résultat, 5 minutes pour tard :)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/fqdn2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="agent-qui-ne-démarre-pas-après-une-désinstallation--réinstallation"&gt;Agent qui ne démarre pas après une désinstallation / réinstallation
&lt;/h2&gt;&lt;p&gt;Au début, quand je commençais à jouer avec Rudder, je me suis un peu mélangé les pinceaux au point qu&amp;rsquo;il était plus simple de tout désinstaller et recommencer proprement.&lt;/p&gt;
&lt;p&gt;En théorie, quand on veut debug et/ou réinstaller un agent qui marche mal, on peut utiliser les commandes suivantes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;rudder agent factory-reset
rudder agent inventory
rudder agent check
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sauf que dans mon cas, j&amp;rsquo;avais désinstallé puis réinstallé l&amp;rsquo;agent. Et à chaque fois, tout avait l&amp;rsquo;air OK, mais rudder ne faisait rien et voici le message d&amp;rsquo;erreur que j&amp;rsquo;avais :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;rudder agent check
INFO: No disable file detected and no agent executor process either. Restarting agent service... Done
WARNING: The file /var/rudder/cfengine-community/last_successful_inputs_update is older than twice 10 minutes, the agent is probably stuck. Purging the CFEngine lock database... Done
FINISH: Rudder agent check ran properly, please look at messages above to see if there has been any error.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pour essayer de comprendre pourquoi Rudder ne se lançait jamais alors que la communication avec le serveur semblait OK, je suis allé voir ce que faisait le service systemd &lt;strong&gt;rudder-agent.service&lt;/strong&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /lib/systemd/system/rudder-agent.service
[Unit]
Description=Rudder agent umbrella service
Documentation=man:rudder(8)
Documentation=https://docs.rudder.io
After=syslog.target
# Dependencies register themselves with a WantedBy/RequiredBy
# currently they are rudder-cf-serverd and rudder-cf-execd
[Service]
Type=oneshot
RemainAfterExit=yes
# This is required for the service to be able to
# pass these commands to its dependencies
ExecStart=/bin/true
ExecReload=/bin/true
[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et là, c&amp;rsquo;était tout de suite plus clair. Le service rudder-agent est en réalité un simple service &amp;ldquo;chapeau&amp;rdquo;, dont dépendent 2 sous services &lt;code&gt;rudder-cf-serverd&lt;/code&gt; et &lt;code&gt;rudder-cf-execd&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Or, par défaut, quand vous désinstallez &lt;strong&gt;rudder-agent&lt;/strong&gt; (à minima sur Debian/Ubuntu), les services &lt;code&gt;rudder-cf-serverd.service&lt;/code&gt; et &lt;code&gt;rudder-cf-execd.service&lt;/code&gt; sont &amp;ldquo;disabled&amp;rdquo; mais pas re-&amp;ldquo;enabled&amp;rdquo; à la réinstallation.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;root@node01:/# systemctl status rudder-cf-serverd
● rudder-cf-serverd.service - CFEngine file server
Loaded: loaded (/lib/systemd/system/rudder-cf-serverd.service; disabled; vendor preset: enabled)
Active: inactive (dead)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Rudder ne faisait rien, tout simplement parce qu&amp;rsquo;il n&amp;rsquo;était juste pas activé :D. On règle ça en 4 commandes :-P&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;root@node01:/# systemctl enable rudder-cf-serverd
Created symlink /etc/systemd/system/multi-user.target.wants/rudder-cf-serverd.service → /lib/systemd/system/rudder-cf-serverd.service.
Created symlink /etc/systemd/system/rudder-agent.service.wants/rudder-cf-serverd.service → /lib/systemd/system/rudder-cf-serverd.service.
root@node01:/# systemctl start rudder-cf-serverd
root@node01:/# systemctl enable rudder-cf-execd
Created symlink /etc/systemd/system/multi-user.target.wants/rudder-cf-execd.service → /lib/systemd/system/rudder-cf-execd.service.
Created symlink /etc/systemd/system/rudder-agent.service.requires/rudder-cf-execd.service → /lib/systemd/system/rudder-cf-execd.service.
root@node01:/# systemctl start rudder-cf-serverd
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note : je ne suis pas convaincu que ce soit un comportement voulu, j&amp;rsquo;ai remonté le point à la team Rudder, je vous tiendrais au courant.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Voilà les quelques petits trucs rigolos que j&amp;rsquo;ai eu avec Rudder pour l&amp;rsquo;instant.&lt;/p&gt;
&lt;p&gt;Je ne sais pas quand je ferai le prochain article sur Rudder. La version 8 approche doucement, ça sera peut-être à cette occasion (il y a une fonctionnalité que j&amp;rsquo;attends dedans).&lt;/p&gt;
&lt;p&gt;On a pas non plus parlé des plugins. Ca pourrait valoir le coup (il en existe certains uniquement utilisables avec la version entreprise que je n&amp;rsquo;ai pas, mais aussi des gratuits).&lt;/p&gt;
&lt;p&gt;A voir. En attendant, have fun !&lt;/p&gt;</description></item><item><title>Premiers pas avec Rudder - concepts et configuration</title><link>https://blog.zwindler.fr/2023/03/24/premiers-pas-avec-rudder-concept-configuration/</link><pubDate>Fri, 24 Mar 2023 06:30:00 +0200</pubDate><guid>https://blog.zwindler.fr/2023/03/24/premiers-pas-avec-rudder-concept-configuration/</guid><description>&lt;img src="https://blog.zwindler.fr/2023/03/rudder_logo.webp" alt="Featured image of post Premiers pas avec Rudder - concepts et configuration" /&gt;&lt;p&gt;Cet article fait partie d&amp;rsquo;une suite d&amp;rsquo;articles sur Rudder. La version qui est testée ici sera la version open source (car je n&amp;rsquo;ai pas les moyens de me payer une licence pour mon infra perso 😛) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/03/19/premiers-pas-avec-rudder-installation/" &gt;Présentation, installation du serveur et des agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/03/27/premiers-pas-avec-rudder-concept-configuration/" &gt;Concepts et configuration des groupes, des directives, des rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/04/20/rudder-astuces-en-vrac/" &gt;Astuces en vrac&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note : une fois de plus, je tiens à préciser qu&amp;rsquo;il ne s&amp;rsquo;agit PAS d&amp;rsquo;un article sponsorisé. J&amp;rsquo;ai eu des contacts (techniques) avec la team Rudder, mais je n&amp;rsquo;ai été influencé d&amp;rsquo;aucune manière, en particulier dans la rédaction de cet article.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="on-reprend-où-on-en-était"&gt;On reprend où on en était
&lt;/h2&gt;&lt;p&gt;Dans l&amp;rsquo;article précédent, je m&amp;rsquo;étais arrêté après l&amp;rsquo;installation du serveur Rudder sur une machine Ubuntu, ainsi que d&amp;rsquo;un agent.&lt;/p&gt;
&lt;p&gt;Dans cet article, je pars du principe qu&amp;rsquo;on est un peu plus loin dans le temps. On a installé des agents à droite à gauche.&lt;/p&gt;
&lt;p&gt;Dans mon cas, j&amp;rsquo;ai une dizaine de machines Debian et Ubuntu, provenant de VMs (chez nua.ge) et d&amp;rsquo;hyperviseurs/containers LXC (Proxmox VE).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_begin.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour le &amp;ldquo;fun&amp;rdquo;, j&amp;rsquo;aurais pu faire l&amp;rsquo;effort d&amp;rsquo;installer des machines Windows mais je n&amp;rsquo;ai pas eu le courage. Peut-être une autre fois.&lt;/p&gt;
&lt;h2 id="node-inventory"&gt;Node Inventory
&lt;/h2&gt;&lt;p&gt;C&amp;rsquo;est cool d&amp;rsquo;avoir une flotte de machines dans notre Rudder, mais qu&amp;rsquo;est-ce qu&amp;rsquo;on peut faire avec ?&lt;/p&gt;
&lt;p&gt;La première chose qu&amp;rsquo;on peut faire, c&amp;rsquo;est d&amp;rsquo;aller voir ce que l&amp;rsquo;agent remonte comme info au serveur. Un peu comme les &amp;ldquo;facts&amp;rdquo; d&amp;rsquo;Ansible. Ca nous sera utile par la suite.&lt;/p&gt;
&lt;p&gt;On va donc choisir un de nos &amp;ldquo;nodes&amp;rdquo; dans la liste et regarder l&amp;rsquo;onglet Inventory pour voir ce qu&amp;rsquo;on peut faire avec.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_inventory.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je n&amp;rsquo;ai pas creusé en détail pour savoir s&amp;rsquo;il y avait plus d&amp;rsquo;infos collectées que ce qui est affiché dans ce menu, mais on a déjà de quoi faire, en parcourant toutes les catégories.&lt;/p&gt;
&lt;p&gt;Grosso modo on va utiliser ces infos-là pour définir des groupes, puis l&amp;rsquo;état souhaité de nos machines.&lt;/p&gt;
&lt;h2 id="groups"&gt;Groups
&lt;/h2&gt;&lt;p&gt;Dans la terminologie Rudder, les serveurs sont des &amp;ldquo;nodes&amp;rdquo;, on en a déjà parlé. On va ensuite regrouper nos nodes par &amp;ldquo;groups&amp;rdquo; (avec une relation n-to-n).&lt;/p&gt;
&lt;p&gt;Il y a plusieurs catégories de groupes. On peut soit regrouper les nodes par groupes statiques (pas super efficace quand on passe à l&amp;rsquo;échelle), soit tirer parti des informations trouvées dans l&amp;rsquo;inventaire (cf section précédente) pour créer des groupes dynamiques.&lt;/p&gt;
&lt;p&gt;Enfin, il existe une dernière catégorie de groupes, dits &amp;ldquo;system&amp;rdquo; qui des groupes spéciaux gérés par Rudder.&lt;/p&gt;
&lt;p&gt;On retrouve ça dans l&amp;rsquo;interface de Rudder dans la partie &lt;strong&gt;Node management / Groups&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_groups_menu.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="créer-un-groupe-pour-tous-les-serveurs-ubuntu"&gt;Créer un groupe pour tous les serveurs Ubuntu
&lt;/h2&gt;&lt;p&gt;Comme j&amp;rsquo;ai beaucoup de serveurs Ubuntu, la première idée qui m&amp;rsquo;est venue à l&amp;rsquo;esprit a été de créer un groupe pour les regrouper.&lt;/p&gt;
&lt;p&gt;Dans ce menu, il existe 2 choses qu&amp;rsquo;on peut créer. Des &lt;strong&gt;Categories&lt;/strong&gt; et des &lt;strong&gt;Groups&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Je fais un mini aparté sur les &lt;strong&gt;Categories&lt;/strong&gt;, concept qu&amp;rsquo;on pourra retrouver ailleurs dans l&amp;rsquo;interface. Il s&amp;rsquo;agit de subdivisions logiques (des &amp;ldquo;dossiers&amp;rdquo;, en gros) qui permettent de faciliter le rangement de nos bidules.&lt;/p&gt;
&lt;p&gt;Comme j&amp;rsquo;aime bien que les choses soient bien rangées, j&amp;rsquo;ai commencé donc par créer une catégorie &amp;ldquo;By OS&amp;rdquo; pour regrouper tous mes groupes.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_groups_categories.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois que c&amp;rsquo;est fait, on peut rentrer dans le dur et créer un groupe dynamique pour nos serveurs Ubuntu.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_group_byos_1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Quand on clique sur &lt;em&gt;create&lt;/em&gt;, on peut ensuite ajouter les conditions pour déterminer si un hôte est dans le groupe ou pas.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_group_byos_2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Jusque-là, rien de bien foufou, on demande à Rudder de se baser sur les infos de l&amp;rsquo;inventaire et de matcher ou pas avec une regex.&lt;/p&gt;
&lt;p&gt;Je note la petite feature de preview, qui permet de voir d&amp;rsquo;un coup d&amp;rsquo;œil si ça matche bien les bons hosts. C&amp;rsquo;est très sympa :)&lt;/p&gt;
&lt;p&gt;Autre remarque, le menu déroulant est assez pratique à utiliser et assez fourni (c&amp;rsquo;est les infos de l&amp;rsquo;inventaire, donc assez riche).&lt;/p&gt;
&lt;p&gt;Un exemple de ce qu&amp;rsquo;on peut faire juste avec la partie &amp;ldquo;node summary&amp;rdquo; :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_group_byos_3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour l&amp;rsquo;instant, rien de bien compliqué/original.&lt;/p&gt;
&lt;h2 id="un-peu-de-théorie"&gt;Un peu de théorie
&lt;/h2&gt;&lt;p&gt;C&amp;rsquo;est là où ça se corse (un peu, pas beaucoup). Avant d&amp;rsquo;aller plus loin, il va falloir comprendre quelques concepts propres à Rudder.&lt;/p&gt;
&lt;p&gt;Je pompe honteusement &lt;a class="link" href="https://docs.rudder.io/reference/7.2/usage/configuration_management.html" target="_blank" rel="noopener"
&gt;le schéma de la doc officielle&lt;/a&gt; pour faire un support visuel, puis j&amp;rsquo;explique ensuite :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_concepts.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On a déjà parlé de notre relation &lt;em&gt;n-to-n&lt;/em&gt; avec nos nodes et nos groups. Si on se concentre sur la partie gauche, on découvre 3 nouveaux concepts :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les techniques&lt;/li&gt;
&lt;li&gt;les directives&lt;/li&gt;
&lt;li&gt;les rules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les techniques, c&amp;rsquo;est les fonctionnalités que rudder va appliquer ou vérifier sur nos nodes. Les techniques sont configurables et c&amp;rsquo;est pour ça qu&amp;rsquo;on va créer des directives à partir de ces techniques (relation &lt;em&gt;1-to-n&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Et pour finir, les rules sont ce qui va relier un certain nombre de groupes à un certain nombre de directives.&lt;/p&gt;
&lt;h2 id="premier-exemple-de-directive"&gt;Premier exemple de directive
&lt;/h2&gt;&lt;p&gt;Quand j&amp;rsquo;ai commencé à tester Rudder, une CVE (de plus) venait de sortir sur &lt;code&gt;sudo&lt;/code&gt;. Je voulais voir si Rudder était capable de vérifier si mes binaires sur mes ubuntu étaient patchés ou pas.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_sudo.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je suis donc allé dans le menu &lt;strong&gt;Directives&lt;/strong&gt;, cliqué dans la liste sur la technique &lt;strong&gt;Packages&lt;/strong&gt; et j&amp;rsquo;ai créé ma directive à partie de cette technique.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_directive5.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Cette directive est relativement triviale, on fera des exemples plus complexes dans l&amp;rsquo;article suivant. Mais ça vous donne une idée du concept.&lt;/p&gt;
&lt;h2 id="première-rule"&gt;Première rule
&lt;/h2&gt;&lt;p&gt;Une fois la directive sauvegardée, on va créer une &lt;em&gt;rule&lt;/em&gt; qui va regrouper nos &lt;em&gt;groups&lt;/em&gt; et notre &lt;em&gt;directive&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_rule_directive.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_rule_group.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Comme vous pouvez le voir, c&amp;rsquo;est relativement trivial. Une fois que c&amp;rsquo;est validé, rudder passe sur tous nos nodes pour appliquer la nouvelle configuration.&lt;/p&gt;
&lt;p&gt;On peut retrouver sur le Dashboard principal pour voir ce qu&amp;rsquo;il se passe de manière globale&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_directive_applied.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ou aller sur un node en détail et aller lire l&amp;rsquo;historique&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_node_logs.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="et-si-je-ne-veux-pas-appliquer-"&gt;Et si je ne veux pas appliquer ?
&lt;/h2&gt;&lt;p&gt;Par défaut, le &amp;ldquo;Policy mode&amp;rdquo; est positionné sur &amp;ldquo;Enforce&amp;rdquo;, ce qui veut dire que Rudder va auditer nos systèmes, &lt;strong&gt;puis&lt;/strong&gt; les corriger s&amp;rsquo;ils ne sont pas conformes.&lt;/p&gt;
&lt;p&gt;Si on veut faire ça, il suffit de positionner la directive sur &amp;ldquo;Audit&amp;rdquo;, et utiliser l&amp;rsquo;option &amp;ldquo;This specific version&amp;rdquo; plutôt que &amp;ldquo;Latest available version&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_audit.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Voici le résultat sur un node qui n&amp;rsquo;était pas à jour :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder2_non_compliant.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Voilà pour une très brève introduction sur le système de configuration des nodes et des politiques de conformité avec Rudder.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai pris un exemple très très basique, mais il permet de se faire une idée rapide de la facilité d&amp;rsquo;utilisation de Rudder.&lt;/p&gt;</description></item><item><title>Premiers pas avec Rudder - Installation</title><link>https://blog.zwindler.fr/2023/03/19/premiers-pas-avec-rudder-installation/</link><pubDate>Sun, 19 Mar 2023 14:30:00 +0200</pubDate><guid>https://blog.zwindler.fr/2023/03/19/premiers-pas-avec-rudder-installation/</guid><description>&lt;img src="https://blog.zwindler.fr/2023/03/rudder_logo.webp" alt="Featured image of post Premiers pas avec Rudder - Installation" /&gt;&lt;p&gt;Cet article fait partie d&amp;rsquo;une suite d&amp;rsquo;articles sur Rudder. La version qui est testée ici sera la version open source (car je n&amp;rsquo;ai pas les moyens de me payer une licence pour mon infra perso 😛) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/03/19/premiers-pas-avec-rudder-installation/" &gt;Présentation, installation du serveur et des agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/03/27/premiers-pas-avec-rudder-concept-configuration/" &gt;Concepts et configuration des groupes, des directives, des rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/04/20/rudder-astuces-en-vrac/" &gt;Astuces en vrac&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note : une fois de plus, je tiens à préciser qu&amp;rsquo;il ne s&amp;rsquo;agit PAS d&amp;rsquo;un article sponsorisé. J&amp;rsquo;ai eu des contacts (techniques) avec la team Rudder, mais je n&amp;rsquo;ai été influencé d&amp;rsquo;aucune manière, en particulier dans la rédaction de cet article.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="mais-dabord-cest-quoi-rudder-"&gt;Mais d&amp;rsquo;abord, c&amp;rsquo;est quoi Rudder ?
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.rudder.io/fr/" target="_blank" rel="noopener"
&gt;Rudder est un logiciel open-source de gestion de configuration et d&amp;rsquo;automatisation des systèmes&lt;/a&gt;, qui permet aux administrateurs système de contrôler et de gérer leurs infrastructures de manière industrialisée. Il est en grande majorité édité par la société Normation, qui vend du support et des fonctionnalités complémentaires (plugins).&lt;/p&gt;
&lt;p&gt;Pendant longtemps, j&amp;rsquo;ai un peu mis de côté Rudder, pensant que ce n&amp;rsquo;était pas pour moi, surtout que j&amp;rsquo;avais investi beaucoup de temps dans Ansible (vous trouverez mes &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=ansible" &gt;nombreux articles sur le sujet ici&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Cependant, ce qui fait à la fois la force et la faiblesse d&amp;rsquo;Ansible, c&amp;rsquo;est le fait qu&amp;rsquo;il soit &lt;em&gt;agentless&lt;/em&gt;. On peut lancer nos playbooks depuis n&amp;rsquo;importe quelle machine, mais ça veut aussi dire qu&amp;rsquo;il n&amp;rsquo;y a pas a priori de machine privilégiée pour garder notre infra conforme dans la durée.&lt;/p&gt;
&lt;p&gt;Alors oui, je sais qu&amp;rsquo;on va me rétorquer qu&amp;rsquo;il existe Tower/AWX, mais je n&amp;rsquo;ai pas du tout apprécié l&amp;rsquo;expérience le peu que je l&amp;rsquo;ai testé, au point de ne pas vouloir l&amp;rsquo;utiliser ni au travail, ni en perso. En particulier en perso, je trouve l&amp;rsquo;outil lourd et pas adapté pour mon objectif : garantir la conformité de mes quelques machines.&lt;/p&gt;
&lt;p&gt;Parallèlement à ça, Rudder fonctionne avec un agent, et il y a un serveur centralisé qui contrôle les serveurs enregistrés. On peut consulter le tout dans une interface web et on voit en un clin d&amp;rsquo;oeil si les serveurs sont conformes ou pas.&lt;/p&gt;
&lt;p&gt;Sans juger de l&amp;rsquo;expérience avec des centaines voire des milliers de serveurs, ça me parait adapté pour mon besoin perso (gérer une flotte de quelques machines voire dizaines de machines).&lt;/p&gt;
&lt;h2 id="installation-du-serveur"&gt;Installation du serveur
&lt;/h2&gt;&lt;p&gt;Je vais essayer de ne pas passer trop de temps sur cette partie. Elle a déjà été détaillée récemment par &lt;a class="link" href="https://blog.stephane-robert.info/post/introduction-rudder/" target="_blank" rel="noopener"
&gt;Stéphane Robert sur son blog&lt;/a&gt; et par &lt;a class="link" href="https://www.youtube.com/watch?v=NRb0Irk7OO8" target="_blank" rel="noopener"
&gt;Nidouille en stream&lt;/a&gt; la semaine dernière.&lt;/p&gt;
&lt;p&gt;Grosso modo, j&amp;rsquo;ai popé une VM chez nua.ge en Ubuntu 22.04 avec 2 CPU et 2 Go de RAM, &lt;a class="link" href="https://docs.rudder.io/reference/7.2/installation/quick_install.html" target="_blank" rel="noopener"
&gt;suivi la documentation officielle d&amp;rsquo;installation&lt;/a&gt; et basta.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt update
sudo apt upgrade
sudo wget --quiet -O /etc/apt/trusted.gpg.d/rudder_apt_key.gpg &amp;#34;https://repository.rudder.io/apt/rudder_apt_key.gpg&amp;#34;
echo &amp;#34;deb http://repository.rudder.io/apt/7.2/ $(lsb_release -cs) main&amp;#34; | sudo tee /etc/apt/sources.list.d/rudder.list
(output) deb http://repository.rudder.io/apt/7.2/ jammy main
sudo apt update
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;Note : j&amp;rsquo;étais assez content de voir &lt;a class="link" href="https://docs.rudder.io/reference/7.2/installation/requirements.html" target="_blank" rel="noopener"
&gt;dans la doc officielle&lt;/a&gt; que pour quelques nodes, 2 CPU / 2 Go de RAM suffisent (surtout qu&amp;rsquo;il y a une JVM, donc la conso RAM aurait pu être bien plus importante).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;On nous conseille évidemment de vérifier que la clé correspond à celle indiquée dans la documentation officielle, puis on l&amp;rsquo;ajoute (affichée au moment de l&amp;rsquo;apt update) et on installe le package contenant le serveur.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apt install rudder-server
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une fois installé, la première chose à faire est de créer un utilisateur admin, puis on peut se connecter sur l&amp;rsquo;IP du serveur en HTTPS/443 (certificat autosigné par contre, faudra que je regarde comment ajouter du let&amp;rsquo;s encrypt).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ubuntu@rudder:~$ sudo rudder server create-user -u toto
New password:
Re-type new password:
User &amp;#39;toto&amp;#39; added, restarting the Rudder server
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Côté sécurité réseau, il va falloir ouvrir les ports 443 (obviously) mais aussi le 5309 pour que ça marche bien ( pour la partie &amp;ldquo;Fetch policy&amp;rdquo;, je vous &lt;a class="link" href="https://docs.rudder.io/reference/7.2/installation/requirements.html#configure-the-network" target="_blank" rel="noopener"
&gt;laisse aller lire la doc&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder_login.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="installation-des-agents"&gt;Installation des agents
&lt;/h2&gt;&lt;p&gt;Même topo pour les agents, j&amp;rsquo;ai &lt;a class="link" href="https://docs.rudder.io/reference/7.2/installation/agent/debian.html" target="_blank" rel="noopener"
&gt;suivi la doc&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On peut donc installer simplement un agent sur nos serveurs en ajoutant la clé + le repo de rudder, puis en lançant la commande&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo wget --quiet -O /etc/apt/trusted.gpg.d/rudder_apt_key.gpg &amp;#34;https://repository.rudder.io/apt/rudder_apt_key.gpg&amp;#34;
echo &amp;#34;deb http://repository.rudder.io/apt/7.2/ $(lsb_release -cs) main&amp;#34; | sudo tee /etc/apt/sources.list.d/rudder.list
sudo apt update &amp;amp;&amp;amp; sudo apt install rudder-agent
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, l&amp;rsquo;agent ne sait pas où il doit s&amp;rsquo;enregistrer. On ajoute l&amp;rsquo;agent au serveur Rudder :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rudder agent policy-server &amp;lt;IP.Du.Rudder.Server&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Petite subtilité, je n&amp;rsquo;ai pas eu besoin de faire cette étape dans un premier temps, car il se trouve que par défaut, les agents cherchent sur le LAN une machine s&amp;rsquo;appelant &amp;ldquo;rudder&amp;rdquo;. J&amp;rsquo;étais donc un poil surpris de ne pas voir cette info dans la doc (il faut que je fasse une PR pour corriger ça).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder_tweet.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On vérifie ensuite que tout fonctionne :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rudder agent inventory
Rudder agent 7.2.4
Node uuid: 72577f55-46b0-47e2-acd0-2eeb45353122
M| State Technique Component Key Message
E| compliant Common Compute inventory splay Scheduling rudder_run_inventory was correct
E| compliant Inventory Inventory The inventory has been successfully sent
info Rudder agent was run on a subset of policies - not all policies were checked
## Summary #####################################################################
2 components verified in 3 directives
=&amp;gt; 2 components in Enforce mode
-&amp;gt; 2 compliant
Execution time: 10.67s
################################################################################
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;Note : On prendra évidemment garde à ne pas ouvrir les ports des serveur/agents Rudder sur Internet et à utiliser des IPs locales et/ou des firewalls pour filtrer proprement tout ça. On pourra aussi utiliser un VPN, mais il ne faudra pas oublier d&amp;rsquo;autoriser les IPs des machines distantes dans Rudder (on en reparlera).&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="accepter-les-machines-dans-notre-inventaire"&gt;Accepter les machines dans notre inventaire
&lt;/h2&gt;&lt;p&gt;Un point qui n&amp;rsquo;était pas super clair pour moi dans la doc de &lt;strong&gt;Quickstart d&amp;rsquo;installation des agents&lt;/strong&gt;, est qu&amp;rsquo;une fois que les agents étaient installés, il faut &lt;strong&gt;les autoriser&lt;/strong&gt; côté serveur. C&amp;rsquo;est logique (on ne veut pas autoriser n&amp;rsquo;importe qui) mais la doc méritera une petite suggestion de ma part je pense.&lt;/p&gt;
&lt;p&gt;Ce point est détaillé dans une autre partie de la documentation &lt;a class="link" href="https://docs.rudder.io/reference/7.2/usage/node_management.html#accept-new-nodes" target="_blank" rel="noopener"
&gt;Node management / Accept new nodes&lt;/a&gt;, mais même cette partie de la documentation ne semble pas à jour, car je n&amp;rsquo;ai pas vu de menu &amp;ldquo;Navigate to Node Management → Accept new Nodes.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;On a en revanche un menu &amp;ldquo;Pending nodes&amp;rdquo; où on retrouve une liste de tous les agents fraichement installés en attente.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/03/rudder_pending_nodes.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="la-suite-"&gt;La suite ?
&lt;/h2&gt;&lt;p&gt;A partir de là, on a installé tout ce qu&amp;rsquo;on avait besoin d&amp;rsquo;installer pour commencer à jouer avec Rudder.&lt;/p&gt;
&lt;p&gt;Cependant, on est déjà à 8000 signes et entamer la partie configuration dans cet article me parait lourd.&lt;/p&gt;
&lt;p&gt;Je vais arrêter ici pour aujourd&amp;rsquo;hui et publier dans un prochain article (semaine prochaine surement) comment créer des groupes, ce que sont les rules et les directives en un seul et même bloc (ça sera plus cohérent).&lt;/p&gt;
&lt;p&gt;En attendant, have fun !&lt;/p&gt;</description></item></channel></rss>