El recurso service
de puppet se utiliza para gestión de servicios del sistema. Veamos lo mas importante a la hora de utilizarlo, ya que existe cierta flexibilidad para ello.
Habilitar o no el estado del servicio
enable
nos permite elegir si el servicio se debe iniciar con el sistema. Como valores posibles tiene true, false o manual
service { 'my-service':
...
enable ==> true,
}
Elegir el estado del servicio
ensure
sirve para elegir si el servicio debe estar o no funcionando, para lo que usaremos las opciones running/true o stopped/false
service { 'my-service':
...
ensure => running,
}
Inicio, parada y obtener el estado del servicio
Por defecto puppet aplicara start, stop y status al script de inicio para cuando tenga que iniciar, parar o determinar el estado del servicio.
Una alternativa es usar binary
para indicar la ruta al binario del programa. De esta forma puppet iniciaría el servicio ejecutado el binario o lo buscaría en la tabla de procesos para matarlo o saber su estado. Esto tiene sentido sobre todo cuando el servicio no soporta start, stop y/o status.
service { 'my-service':
...
binary => '/usr/local/bin/my-service.bin',
}
Otra alternativa es especificar manualmente el comando para cada caso, con los parámetros de puppet start, stop y status, lo cual tiene preferencia ante binary.
service { 'my-service':
...
start => '/usr/local/bin/my-service.bin start',
}
Mas sobre determinar el estado del servicio
También podemos indicar manualmente a puppet que no aplique status al script de inicio para determinar su estado. Esto se hace mediante la propiedad hasstatus
con el valor false y especificar como queremos que puppet se comporte.
Una forma de hacerlo es usando el atributo "status" como hemos comentado antes, el cual debe devolver 0 si el servicio esta levantado y diferente a 0 si no lo esta.
service { 'my-service':
...
hasstatus => false,
status => 'grep running /var/lib/myservice/status.txt',
}
Si no lo hacemos, puppet buscará en la lista de procesos el nombre del servicio indicado con el clásico "ps", aunque podemos decirle qué debe buscar en vez del nombre del servicio con el parámetro pattern
.
service { 'my-service':
...
hasstatus => false,
pattern => 'my-service.bin',
}
Reinicio del servicio
Puppet por defecto reiniciara el servicio, por ejemplo debido a un notify, con el parámetro restart aplicado al script de inicio, el cual podemos personalizar con el atributo restart
.
service { 'nginx':
....
restart => '/usr/sbin/service nginx reload',
}
Si no lo hacemos y el script de inicio no soporta restart o le hemos indicado hasrestart => false
, puppet hara un stop y luego un start.
El metaparámetro provider
Nos permite indicar quien se encargara de todo esto. Sus opciones mas comunes son base, debian, gentoo, init, redhat, service, systemd, upstart o windows.