Servicios para Puppet y Kerberos para utilizar clichés para proporcionar archivos de configuración.
Puppet es un kit de herramientas para gestionar la configuración de varios sistemas. En Oracle Solaris, la aplicación Puppet es gestionada por SMF.
Al instalar el paquete system/management/puppet, obtiene dos instantáneas de servicio SMF: puppet:master y puppet:agent. De manera predeterminada, estas instancias están desactivadas.
Después de activar estas instancias, el siguiente comando muestra los servicios de contrato puppet:master y puppet:agent.
$ svcs -p puppet STATE STIME FMRI online 17:19:32 svc:/application/puppet:agent 17:19:32 2565 puppet online 17:19:32 svc:/application/puppet:master 17:19:32 2567 puppet
El siguiente comando muestra un poco más de información sobre los procesos iniciados por los servicios de contrato:
$ ps -o pid,args -p 2565,2567 PID COMMAND 2565 /usr/ruby/1.9/bin/ruby /usr/sbin/puppet agent --logdest /var/log/puppet/puppet- 2567 /usr/ruby/1.9/bin/ruby /usr/sbin/puppet master --logdest /var/log/puppet/puppet
Como sugirió la salida ps, puppet escribe los archivos log en /var/log/puppet:
$ ls /var/log/puppet puppet-agent.log puppet-master.log
Puppet espera utilizar un archivo de configuración denominado /etc/puppet/puppet.conf. La aplicación /usr/sbin/puppet lee información de configuración de /etc/puppet/puppet.conf y no de propiedades definidas en las instancias de servicio application/puppet. Para proporcionar el archivo de configuración requerido, cada instancia puppet proporciona un archivo de cliché y un grupo de propiedades configfile. El grupo de propiedades configfile le indica a la utilidad svcio que ejecute y cree el archivo de configuración especificado. El archivo de cliché se utiliza para escribir datos de valores de propiedad de servicio en el archivo de configuración en el formato correcto.
El siguiente comando muestra todas las propiedades de servicio puppet que están en un grupo de propiedades de tipo configfile. Esta salida muestra que ambas instancias del servicio puppet tienen las mismas propiedades configfile con los mismos valores. Cada instancia de servicio puppet proporciona la ruta al archivo de configuración, el modo del archivo de configuración y la ruta al archivo de cliché.
$ svcprop -g configfile puppet svc:/application/puppet:master/:properties/puppet_stencil/mode astring 0444 svc:/application/puppet:master/:properties/puppet_stencil/path astring /etc/puppet/puppet.conf svc:/application/puppet:master/:properties/puppet_stencil/stencil astring puppet.stencil svc:/application/puppet:agent/:properties/puppet_stencil/mode astring 0444 svc:/application/puppet:agent/:properties/puppet_stencil/path astring /etc/puppet/puppet.conf svc:/application/puppet:agent/:properties/puppet_stencil/stencil astring puppet.stencil
Los siguientes comandos confirman que estas propiedades de instancia se heredan del servicio principal.
$ svccfg -s puppet listprop -l all puppet_stencil puppet_stencil configfile manifest puppet_stencil/mode astring manifest 0444 puppet_stencil/path astring manifest /etc/puppet/puppet.conf puppet_stencil/stencil astring manifest puppet.stencil $ svccfg -s puppet:agent listprop -l all puppet_stencil $ svccfg -s puppet:master listprop -l all puppet_stencil
Para la infraestructura, es posible que necesite instancias puppet:agent1 y puppet:agent2, por ejemplo. En ese caso, debe personalizar los valores de propiedad y agregar propiedades para cada instancia como se muestra en Modificación del archivo de configuración Puppet.
A continuación, se muestra el contenido inicial del archivo de configuración, /etc/puppet/puppet.conf:
# WARNING: THIS FILE GENERATED FROM SMF DATA. # DO NOT EDIT THIS FILE. EDITS WILL BE LOST. # # See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html # for details.
El contenido del archivo de cliché le indica qué propiedades y qué otra información se escriben en el archivo de configuración. La ruta puppet.stencil que es el valor de la propiedad puppet_stencil/stencil se relaciona con /lib/svc/stencils. A continuación se muestra el contenido del archivo de cliché, /lib/svc/stencils/puppet.stencil:
# WARNING: THIS FILE GENERATED FROM SMF DATA. # DO NOT EDIT THIS FILE. EDITS WILL BE LOST. # # See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html # for details. ; walk each instance and extract all properties from the config PG $%/(svc:/$%s:(.*)/:properties)/ { $%{$%1/general/enabled:? [$%2] $%/$%1/config/(.*)/ { $%3 = $%{$%1/config/$%3} } } }
En el archivo de cliché, svc:/$%s:(.*)/:properties (o %1) se expande a svc:/application/puppet:agent/:properties y svc:/application/puppet:master/:properties, donde .* (o %2) coincide con cada instancia. El nombre de la instancia es luego utilizada para etiquetar el bloque en el archivo de configuración. La siguiente incidencia de .* (o %3) coincide con cada propiedad en el grupo de propiedades config para la instancia de servicio %1. El cliché le indica a svcio escribir el nombre propiedad y el valor de esa propiedad de la instancia de servicio al archivo de configuración.
Como puede ver en Archivo de configuración Puppet inicial, inicialmente sólo las líneas de comentario literal se escriben en el archivo de configuración. La escritura de valores de propiedad en el archivo de configuración es evitada por la evaluación del valor de la propiedad general/enabled en el archivo de cliché. El siguiente comando muestra que, de manera predeterminada, el valor de la propiedad general/enabled es falso:
$ svcprop -p general/enabled puppet svc:/application/puppet:master/:properties/general/enabled boolean false svc:/application/puppet:agent/:properties/general/enabled boolean false
El uso del comando svcadm enable para activar la instancia no cambia el valor de la propiedad general/enabled. Al cambiar el valor de la propiedad general/enabled a true y reiniciar la instancia, todas las propiedades en el grupo de propiedades config para esa instancia se escriben en el archivo de configuración.
$ svccfg -s puppet:agent setprop general/enabled=true $ svcprop -p general/enabled puppet:agent false $ svcadm refresh puppet:agent $ svcprop -p general/enabled puppet:agent true $ svcadm restart puppet:agent
El siguiente comando muestra que inicialmente la única propiedad en el grupo de propiedades config es la ruta al archivo log para cada instancia:
$ svcprop -p config puppet svc:/application/puppet:master/:properties/config/logdest astring /var/log/puppet/puppet-master.log svc:/application/puppet:agent/:properties/config/logdest astring /var/log/puppet/puppet-agent.log
La propiedad config para la instancia activada ha sido agregada al archivo de configuración en un bloque etiquetado con el mismo nombre de instancia:
# WARNING: THIS FILE GENERATED FROM SMF DATA. # DO NOT EDIT THIS FILE. EDITS WILL BE LOST. # # See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html # for details. [agent] logdest = /var/log/puppet/puppet-agent.log
La documentación de configuración Puppet indica que el archivo de configuración puede tener los bloques [main], [agent] y [master]. La configuración en el bloque [main] se aplica al agente y al elemento principal. Para el agente Puppet, la configuración en el bloque [agent] sobrescribe la misma configuración en el bloque [main]. Para el elemento principal Puppet, la configuración en el bloque [master] sobrescribe la misma configuración en el bloque [main]. Si desea proporcionar un bloque [main] para una configuración que sea común tanto al agente y al elemento principal, cree una instancia puppet:main y las propiedades config apropiadas para esa instancia.
Los comandos siguientes muestran cómo agregar la configuración al archivo de configuración Puppet.
$ svccfg -s puppet:agent svc:/application/puppet:agent> setprop config/report=true svc:/application/puppet:agent> setprop config/pluginsync=true svc:/application/puppet:agent> refresh svc:/application/puppet:agent> exit $ svcadm restart puppet:agent $ cat /etc/puppet/puppet.conf # WARNING: THIS FILE GENERATED FROM SMF DATA. # DO NOT EDIT THIS FILE. EDITS WILL BE LOST. # # See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html # for details. [agent] logdest = /var/log/puppet/puppet-agent.log pluginsync = true report = true
Se pueden utilizar comandos similares para eliminar propiedades y cambiar los valores de propiedad. Consulte Chapter 4, Configuración de servicios. Para agregar una instancia main, utilice el comando svccfg add como se muestra en Agregación de instancias de servicio.
Otro ejemplo de un servicio Oracle Solaris que utiliza un cliché es Kerberos. El siguiente comando muestra que el grupo de propiedades configfile es krb5_conf, el archivo de cliché es /lib/svc/stencils/krb5.conf.stencil y el archivo de configuración es /etc/krb5/krb5.conf.
$ svcprop -g configfile svc:/system/kerberos/install:default krb5_conf/disabled boolean true krb5_conf/group astring sys krb5_conf/mode integer 644 krb5_conf/owner astring root krb5_conf/path astring /etc/krb5/krb5.conf krb5_conf/stencil astring krb5.conf.stencil