Puppet: El recurso service

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.

Enlaces