User story #1743
closeddocument rudder-agent workflow
Description
Voici ce qui se passe, dans le détail et dans l'ordre sur un nouveau noeud. Je te laisse filtrer le niveau de détails des informations, et intégrer ce qui te paraît cohérant dans la doc !
1. Installation du paquet rudder-agent
1. Dépot de fichiers (surtout dans /opt/rudder et /etc)
1. /etc : script d'init rudder-agent et fichier default associé
2. /opt/rudder/share/initial-promises : promesses d'initialization de l'agent, ce sont ceux qu'il utilise tant qu'il n'a pas été accepté dans Rudder
3. /opt/rudder/lib/perl5 : FusionInventory et ses dépendances Perl
4. /opt/rudder/bin/run-inventory : wrapper qu'on utilise pour lancer FusionInventory avec les bonnes libs
5. /opt/rudder/sbin : binaires de CFEngine Community
6. /var/rudder/cfengine-community : aucun fichier, mais création de l'arborescene de répertoires nécessaire
7. /var/cfengine : dossier créé, mais c'est probablement une connerie
2. Installation des binaires CFEngine dans leur répertoire "de travail" : cp a /opt/rudder/sbin/cf* /var/rudder/cfengine-community/bin/
3. Installation des promesses d'initialization dans le réperoire de travail de CFEngine : cp -r /opt/rudder/share/initial-promises/* /var/rudder/cfengine-community/inputs
4. Création d'une clé SSL unique pour cette machine (dans /var/rudder/cfengine-community/ppkeys)
5. Génération d'un UUID unique pour cette machine (uuidgen > /opt/rudder/etc/uuid.hive)
6. Lancement de cf-execd (le démon de CFEngine qui lance cf-agent toutes les 5 minutes) et cf-serverd (démon de CFEngine qui écoute pour les connexions sur le réseau, ca nous sert pour le "gros bouton rouge")
2. Configuration manuelle de l'adresse IP du serveur Rudder
3. Au premier lancement de cf-agent (maximum 5 minutes après le lancement de cf-execd)
1. Copie depuis le serveur Rudder du répertoire "tools" (/opt/rudder/share/tools sur le serveur, vers /var/rudder/tools sur le noeud)
2. Tentative de copie depuis le serveur Rudder des promesses du noeud (échec car le noeud n'est pas encore accepté)
3. Vérification que les processus cf-execd et cf-serverd tournent, et lancement sinon
4. Entre 5:00 et 5:05, redémarrage quotidien de cf-execd et cf-serverd
5. Ajout d'une ligne dans /etc/crontab pour lancer cf-execd s'il ne tourne pas
6. Relancement de cf-serverd s'il ne tourne pas (oui oui, encore, et non, ca ne sert à rien de le refaire je crois)
7. Vérification que le paquet curl est installé, et sinon l'installe
8. Récupération de l'UUID du serveur Rudder (curl http://adresse_serveur_Rudder/uuid)
9. Si l'inventaire n'a pas déjà été envoyé dans les 8 dernières heures, ou si la classe force_inventory est définie :
1. Création d'un inventaire en XML avec FusionInventory dans /var/rudder/tmp/inventory
2. Lancement de diverses commandes pour récupérer des infos en plus :
1. Liste de VMs pour VMWare et VirtualBox
2. Récupération d'infos CPU (CPUID)
3. Récupération de l'UUID de la machine (/usr/sbin/dmidecode -s system-uuid)
3. Insertion de données supplémentaires dans le fichier d'inventaire XML :
1. UUID de la machine
2. Clé publique CFEngine
3. Nom de l'utilisateur qui a lancé CFEngine (normalement root)
4. UUID du serveur Rudder
5. Nom de l'agent CFEngine (Community ou Nova)
6. Liste de VMs obtenues pour VMWare et VirtualBox
7. Liste d'utilisateurs du système (lus dans /etc/passwd)
4. Copie du fichier d'inventaire en XML de /var/rudder/tmp/inventory vers /var/rudder/inventories/
5. Envoi du fichier d'inventaire vers le serveur Rudder (avec curl)
4. À chaque lancement successif de cf-agent (toutes les 5 minutes, à x heures 00/05/10/etc, + ou - 1 minute)
1. Répétition de toutes les vérifications du point 3 ci-dessus
À noter : le noeud ne génère aucun rapport avant d'être accepté.
Ensuite, aucun changement jusqu'à ce que le noeud soit accepté dans l'interface web. Alors, le serveur génère des promesses pour le noeud, et l'étape 3.1 ci-dessus récupère ses promesses.
Les promesses minimales pour tout noeud incluent deux Policy Templates dites "system", qui font les étapes de vérification suivantes sur chaque noeud :
1. Copie depuis le serveur Rudder des promesses du noeud (mise à jour à chaque changement, aucune copie sinon)
2. Copie depuis le serveur Rudder du répertoire "tools" (/opt/rudder/share/tools sur le serveur, vers /var/rudder/tools sur le noeud) (mise à jour en cas de changement, aucune copie sinon)
3. Si, et seulement si, les promesses du noeud ont changés, vérification que cf-execd et cf-serverd tournent bien (WTF la condition ?)
4. Entre 5:00 et 5:05, redémarrage quotidien de cf-execd et cf-serverd
5. Ajout d'une ligne dans /etc/crontab pour lancer cf-execd s'il ne tourne pas
6. Vérification que les processus cf-execd et cf-serverd tournent, et lancement sinon
7. Écriture de l'UUID du noeud dans /opt/rudder/etc/uuid.hive (s'il n'y est pas déjà)
8. Détection du démon syslog (rsyslogd/syslog-ng/syslogd)
9. Modification de la configuration du démon syslog (/etc/rsyslog.d/rudder-agent.conf ou /etc/syslog-ng/rudder.conf ou /etc/syslog.conf) pour envoyer les logs de Rudder via le protocole syslog au serveur Rudder
10. Redémarrage du démon syslog si la configuration a été modifiée
11. Inventaire (même procédure que ci-dessus) si il est entre 0:00 et 6:00, à une heure prise aléatoirement (si le lancement est bien effectué toutes les 5 minutes comme prévu, cette heure sera entre 0:00 et 1:00) et si l'inventaire n'a pas déjà été envoyé dans les 8 dernières heures OU si la classe force_inventory est définie
12. Viennent ensuite les Policy Templates configurées dans l'interface Rudder
À noter : toutes ces opérations génèrent des rapports qui sont remontés au serveur Rudder. Actuellement l'interface n'affiche pas le résultat pour ces deux Policy Templates dites "system", mais c'est peut-être une betîse ?
Une précision pour l'inventaire : on peut à tout moment forcer la création et l'envoi d'un inventaire sur tout noeud en lancant la commande "/var/rudder/cfengine-community/bin/cf-agent -IKD force_inventory".
Finalement, sur ton schéma, le "Warning" en résultat de "Process Reports from the Node" est un peu sur-simplifié. On ne lève jamais vraiment de warning, mais à chaque lot de reports reçus, on calcule un état de compliance, affiché dans l'interface web.
Updated by Fabrice FLORE-THÉBAULT about 13 years ago
in the documentation, for execution of agent : describe the process once, variation between "initial" and "minimal" policy instances is :
- syslog step
- time for inventory
Updated by Fabrice FLORE-THÉBAULT about 13 years ago
<themr0c> les "initial|minimal promises", c'est quoi la manière correcte de les appeler ? "Promises" ou "Policy Instances" ?
<jooooooon> themr0c: les promesses initiales == "Initial Promises". les "minimales" ce sont les "System Policy Templates ("common" and "inventory")"
<themr0c> argl
<fanf> themr0c: "promises", ce sont les fichiers compris par CFEngine, donc ceux générés à partir de "policy instances" par rudder
<themr0c> jooooooon, quand ça arrive à l'agent ça peut plus être des templates en tous cas
<themr0c> policy templates -> policy instances -> promises
<themr0c> l'agent il télécharge les promises donc ?
<jooooooon> oui
<themr0c> pour l'instant j'ai mis "policies"
<jooooooon> mais ce sont des promises générées par Rudder, depuis des PT
<jooooooon> contrairement aux promises initiales, qui sont statiques et pas générées par Rudder
<themr0c> "Applied Policies" ça pourrait le faire ? Ou bien il faut garder "Promises" ?
<fanf> themr0c: "Promises", c'est une terme utilisé par CFEngine.
<themr0c> fanf, justement, quel est le terme à utiliser pour Rudder
<fanf> j'aime bien "applied policies", mais peut-être qu'on devrait garder le terme existant ?
<fanf> pour montrer qu'à ce niveau, c'est du CFEngine standard ?
<themr0c> fanf, c'est exactement mon souci
<fanf> (vrai question, aussi pour jooooooon et ncharles et les autres)
<jooooooon> hum
<themr0c> si on veut garder le vocabulaire rudder => applied policies
<themr0c> sinon, => promises
<jooooooon> j'aime bien aussi applied policies. à condition de préciser par ailleurs dans la doc (ptet dans advanced usage) qu'en fait, les applied policies sont ni plus ni moins des promises CFEngine standard ?
<ncharles> Je prefere le terme applied policies, parce qu'on ne manipule que des elements haut niveau
<fanf> ok, ca me va bien
<ncharles> et des policies sont des ensembles de promises
<themr0c> pour l'instant c'est le bronx total dans la doc à ce sujet, donc de toutes façons je vais devoir tout relire pour uniformiser
<ncharles> (promises au sens cfengine)
<themr0c> ok donc je considère "applied policies" comme validé ? je vais voir ce que ça donne.
Updated by Fabrice FLORE-THÉBAULT about 13 years ago
- % Done changed from 0 to 50
Updated by Fabrice FLORE-THÉBAULT about 13 years ago
- Target version changed from 19 to 21
Updated by Fabrice FLORE-THÉBAULT about 13 years ago
- % Done changed from 50 to 80
il faut encore relire, et clarifier la présentation première fois / fois suivantes
le schéma aussi est beaucoup trop grand, il faudrait le garder, mais faire d'autres schémas à côté avec seulement des parties.
Updated by Jonathan CLARKE about 13 years ago
- Target version changed from 21 to 23
Updated by Jonathan CLARKE about 13 years ago
- Target version changed from 23 to 2.3.0
Updated by Jonathan CLARKE about 13 years ago
- Assignee deleted (
Fabrice FLORE-THÉBAULT) - Target version changed from 2.3.0 to 2.3.1
Updated by Jonathan CLARKE about 13 years ago
- Target version changed from 2.3.1 to 2.3.2
Updated by Jonathan CLARKE about 13 years ago
- Target version changed from 2.3.2 to 2.3.3
Updated by Jonathan CLARKE about 13 years ago
- Target version changed from 2.3.3 to 2.3.4
Updated by Jonathan CLARKE almost 13 years ago
- Target version changed from 2.3.4 to 2.3.5
Updated by Jonathan CLARKE almost 13 years ago
- Target version changed from 2.3.5 to 2.3.6
Updated by Jonathan CLARKE almost 13 years ago
- Target version changed from 2.3.6 to 2.3.7
Updated by Jonathan CLARKE over 12 years ago
- Target version changed from 2.3.7 to 2.3.8
Updated by Jonathan CLARKE over 12 years ago
- Target version changed from 2.3.8 to Ideas (not version specific)
Updated by François ARMAND almost 12 years ago
- Status changed from In progress to 10
Updated by Benoît PECCATTE over 9 years ago
- Project changed from 30 to Rudder
- Category set to Documentation
Updated by Benoît PECCATTE over 7 years ago
- Status changed from 10 to Discussion
Updated by Benoît PECCATTE almost 7 years ago
- Status changed from Discussion to Rejected