Ejemplos de uso de cada una de las primitivas de puppet. File: (crea un fichero ) 1) file {"/tmp/fichero.test": ensure => present, (ensure se asegura que el módulo existe y si no lo crea) mode => 744, content => "esto es una prueba", owner => root, (recurse -> es un directorio y se lo dice desde un sitio (con archivo group => root no se necesita)) } 2) file { "/etc/puppet/manifests/classes/": ensure => directory, owner => root, group => root, recurse => true, (recurse -> es un directorio y se lo dice desde un sitio (con archivo no se necesita)) source => "puppet://puppet2.educarex.es/files/classes/" (<- de dónde lo coge) } exec. (para ejecutar) 1) exec { "/usr/bin/wget -O - http://linex.educarex.es/linex/linex.gpg | /usr/bin/apt-key add -": path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", (sobra pues tiene ruta completa) unless => "/usr/bin/apt-key list | /bin/grep 1024D/66A90DE2" (a menos que ya este metida la clave) } 2) exec { "/usr/bin/apt-get -y update": schedule => diario_varias_veces, path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", require => File["/etc/apt/sources.list"], subscribe => File["/etc/apt/sources.list"] (<-cada vez que cambie lo ejecute, si quisieramos que lo ejecute cuando cambie el fichero necesitariamos un refreshonly) } cron (Añadir un cron al sistema)(esto lo añade al cron del sistema con lo cual para quitarlo necesitaríamos cron{“limpiar- “) cron { limpia-nfs: command => "/etc/init.d/nfs-kernel-server stop ; :> /var/lib/nfs/rmtab ; /etc/init.d/nfs-kernelserver start", user => root, hour => 2, minute => (se quita con ensure=absent) } package (instalar un paquete) package { rayuela-ldap: # ensure => "installed” } ensure => "0.4.3-1" } schedule (<- para actualizar) (<- para mantenerla) schedule { diario_varias_veces: period => daily, range => "8-20", repeat => 6 } schedule { diario: period => daily, range => "9-14" } (el nombre es identificativo pero luego vale) service service { ssh-kernel-server: ensure => running, require => File["/etc/exports"] (si no hay fichero no lo hace) } user user { pepe: password => “Rtfgujdhgyk”, home => “/home/pepe”, comment => “nombre del ususario” } Un ejemplo de clase más sofisticada: (cjto de reglas= clase) class fichero-squid { exec { "comprobacion-previa": command => "/usr/bin/chattr -i /etc/squid/squid.conf", * onlyif => "/usr/bin/lsattr /etc/squid/squid.conf | /bin/grep i" } *chattr -> bit inmutable. Se lo quita si lo tiene) file { "/etc/squid/squid.conf": owner => root, group => root, mode => 644, source => "puppet://puppet.educarex.es/files/squid.conf.nuevo", notify => Exec["reiniciar-squid"], (<- debe notificar) require => Exec["comprobacion-previa"] (<- requiere comprobación } exec { "reiniciar-squid": command => "/etc/init.d/squid restart", refreshonly => true, (solo se refresca si tiene una notificación) subscribe => File["/etc/squid/squid.conf"], (cada vez que cambie el fichero lo cambia) require => File["/etc/squid/squid.conf"] (esto se refiere siempre a una regla que tiene ese fichero) } } (la falta del refreshonly ejecutaría todas las veces el subscribe)