Utilisation des composants Guillaume PHILIPPON
Sommaire Fonctionnement des composants Comprendre le fonctionnement d’un composant Les bonnes pratiques pour l’utilisation d’un composant Installer un nouveau composant Comment gérer un service qui n’a pas de composant spécifique
Fonctionnement d’un composant Les composants se découpe en deux parties – Les templates PAN – Un programme perl qui tourne sur la machine Les templates PAN définissent le « schéma » des composants – Permet de valider que la configuration est « correct » avant le déploiement
Comprendre le fonctionnement d’un composant Pour chaque composant, il existe une « man page » Le prefix d’un composant est toujours ‘/software/component/name’ Toute la configuration d’un composant se « charge » en incluant le template component/name/config Ne pas hésiter à regarder si le composant est déjà utiliser
Comprendre un schéma Les schémas se lisent toujours de bas en haut – L’operateur ‘:’ défini une valeur obligatoire – L’opérateur ‘?’ défini une valeur optionnel – L’opérateur ‘[]’ défini une list() PAN – L’opérateur ‘{}’ défini une nlist() PAN declaration template components/ntpd/schema; include { 'quattor/schema' }; type ntpd_clientnet_type = { "net" : type_ip "mask" : type_ip }; type component_ntpd_type = { include structure_component "servers" ? type_hostname[] "clientnetworks" ? ntpd_clientnet_type[] }; bind "/software/components/ntpd" = component_ntpd_type;
Bonnes pratiques d’utilisation d’un composant Toujours inclure la configuration de base d’un composant avant de l’utiliser – S’assurer que le schema est bien « charger » […] ‘/software/component/ntpd/servers’=list(‘ntp.example.org’); # Renvoi une erreur si le composant ntp n’a pas été chargé avant l’utilisation […] include { ‘component/ntpd/config’ }; # Charge la configuration si cela n’a pas été fait ‘/software/component/ntpd/servers’=list(‘ntp.example.org’); […]
Bonnes pratiques d’utilisation d’un composant Ne pas hésiter à créer de nouveaux templates – Généralement dans cfg/site/services/name Object template box.example.org; […] # Ne peux pas être utiliser par un autre profile ‘/software/component/ntpd/servers’ = list(‘ntpd.example.org’); […] Object template box.example.org; […] include { ‘services/ntpd/config’ }; […] template services/ntpd/config; […] # Peut être inclus par n’importe quel profile ‘/software/component/ntpd/servers’=list(‘ntp.example.org’); […] Object template box2.example.org; […] include { ‘services/ntpd/config’ }; […]
Bonnes pratiques d’utilisation d’un composant Préférer l’utilisation de variable aux déclarations direct [...] # La valeur ne peux pas être redéfini par le profile ‘/software/component/ntpd/servers’=list(‘ntp.example.org’); […] variable NTPD_SERVERS ?= list(‘ntp.example.org’); # Permet de redéfinir la valeur "/software/components/ntpd/servers" = NTP_SERVERS; Object template box.example.org; variable NTPD_SERVERS ?= list(‘ntp2.example.org’); include {‘services/ntpd/config’}; # Le serveur ntp2.example.org est configuré Object template box.example.org; Include {‘services/ntpd/config’}; # le serveur ntp.example.org est configuré
Bonnes pratiques d’utilisation des composants Regrouper les configurations d’un même service dans un même repertoire template services/mail/config; Variable SPAM_ASSASSIN_ENABLE ?= true; Include { ‘services/mail/postfix’ }; Include { ‘services/mail/amavis-new’ }; Include { if (SPAM_ASSASSIN_ENABLE) { ‘services/mail/spam-assassin’; } else { null; } ;
Installer un nouveau composant Une liste des composants existant est disponible – Les sources des composants sont disponible sur le SVN de sourceforge – runk runk Des RPMs sont créer tout les soirs – repo01.in2p3.fr:8081/nexus/content/repositories/rele ases/
Installer un nouveau composant Directement a partir de SCDB – Il existe un script utils/misc/updateComponent – Construit le RPM ($COMP_DIR/core/ncm-smartd/work/RPMS/noarch/ncm- smartd noarch.rpm) – Installe le composant dans $SCDB_DIR/cfg/site/name/component Svn co /path/to/ SCDB_DIR=/path/to/scdb COMP_DIR=/path/to/component-sourceforge/ncm-component cd $SCDB_DIR; Utils/misc/updateComponent –comp-dir $SCDB_DIR/cfg/site/name –source $COMP_DIR/core smartd
Gérer un service qui n’a pas de composant dédié Filecopy, le composant « magique » – Permet d’écrire le contenu d’une variable dans un fichier – Permet des actions après modification du fichier A utiliser avec précaution – Ne valide pas les donné en entré (pas de schéma associé au contenu du fichier)
Gérer un service qui n’a pas de composant Par exemple, un service foo qui a comme fichier de configuration /etc/foo.cfg variable contents = <<EOF Ceci est le contenu de mon fichier EOF include { ‘components/filecopy/config’ }; prefix ‘/software/components/filecopy/services/{/etc/foo.cfg}’; ‘config’=contents; ‘owner’=‘root:root’; ‘perms’=‘0755’; ‘restart’=’service foo restart’;
Gérer le démarrage automatique d’une application Le composant chkconfig permet de gérer le démarrage automatique d’une application au boot de la machine include { 'components/chkconfig/config' }; "/software/components/chkconfig/service/cups/startstop" = true; "/software/components/chkconfig/service/cups/on" = ‘’; include { 'components/chkconfig/config' }; "/software/components/chkconfig/service/cups/off" = ‘2345’;
En cas de soucis