python service salt-stack

python - Pila de sal: utilizando módulos de ejecución en SLS



service salt-stack (1)

Hasta donde puedo ver en la documentación de Salt (por ejemplo, aquí ), hay dos tipos principales de módulos compatibles: módulos de estado y módulos de ejecución (sé que también hay representadores, retornadores, etc.). La mayoría de los ejemplos de archivos SLS contienen sentencias relacionadas solo con módulos de estado (bajo el espacio de nombres salt.state) mientras que para los módulos de ejecución solo se muestran ejemplos de líneas de comando. Por ejemplo, tenemos dos módulos llamados "servicio": salt.states.service y salt.modules.service. En este momento tengo problemas para usar módulos de ejecución en archivos SLS y parece que o no están disponibles o me falta algo para ponerlos a disposición. Mi pregunta es: ¿ es posible usar módulos de ejecución en archivos SLS y cómo, por ejemplo, puedo reiniciar un servicio en la máquina Ubuntu usando la función salt.modules.service.restart? Además, no entiendo claramente la diferencia entre estos tipos de módulos.

Mi nombre de servicio es selenium-node y probé varias combinaciones y todas ellas fallaron:

# First attempt: selenium-node: service.restart # Another one: service: - restart - name: selenium-node # Or even: selenium-node: service: - restart

Enfrenté el mismo problema al trabajar con los módulos de estado y ejecución de git. Sin embargo, cuando ejecuto el siguiente comando en el servidor (como se muestra en la documentación) tiene éxito:

$ sudo salt-call service.restart selenium-node


Tiene razón en que hay diferencias significativas entre los módulos de ejecución y los módulos de estado . Lamentablemente, el término módulo está un poco sobrecargado.

Un módulo de ejecución es un comando enviado a un Salt Minion para ser ejecutado inmediatamente. Algunos ejemplos son "install apache" o "restart memcached".

Un módulo de estado le dice al Salt Minion cuál es el resultado final, o "estado". Algunos ejemplos serían "asegúrese de que apache esté instalado" o "asegúrese de que este archivo de configuración específico exista en el sistema de archivos". La diferencia importante es que un módulo de estado verificará el sistema para ver si la máquina cumple con el estado deseado antes de hacer cualquier cosa. Por lo tanto, en el caso de "asegúrese de que apache esté instalado", Salt Minion comprobará si Apache está instalado y no hará nada si Apache está instalado. Si no es obvio, Salt instalará Apache si es necesario.

Ahora, para lograr reiniciar el nodo de selenio como anotó en su pregunta, querrá que su servicio vea algo; generalmente un cambio de paquete y / o cambio de configuración. De esa forma, Selenium solo se reiniciará cuando sea necesario. Aquí hay un ejemplo aproximado. No estoy familiarizado con la instalación de selenio-nodo así que considere el siguiente archivo sls como un ejemplo. Asumo que selenium-node se puede instalar desde el repositorio de paquetes de su sistema.

cat /srv/salt/selenium-node.sls selenium-node: pkg: - installed service: - running - watch: - pkg: selenium-node - file: /etc/selenium-node.conf file: - managed - name: /etc/selenium-node.conf - source: salt://selenium/selenium-node.conf # assuming config located at /srv/salt/selenium/selenium-node.conf on the Salt Master

Aquí tenemos 3 estados bajo la declaración de ID "nodo de selenio". Estamos administrando el paquete del sistema, el servicio y un archivo de configuración. Notarás que el servicio está mirando tanto el paquete selenium-node como el archivo config. Cuando un servicio está viendo algo, el servicio se reiniciará, de forma predeterminada, cuando la cosa "vista" informe un cambio.

Por lo general, esto es lo que quiere hacer para que un servicio se reinicie al usar Salt States. De esta forma, el servicio solo se reiniciará cuando sea necesario. Esto ayuda a que sus Salt States sean idempotentes y solo causen cambios en su sistema cuando realmente lo necesite.

Ahora, para responder la segunda parte de tu pregunta. Sí, es posible ejecutar un módulo de ejecución desde un archivo de estado o sls. Puede lograr esto a través del estado "module.run". Los documentos están aquí: http://docs.saltstack.com/ref/states/all/salt.states.module.html#module-salt.states.module

A continuación, le indicamos cómo podría reiniciar su servicio cada vez que ejecute este archivo de estado o sls:

cat /srv/salt/selenium/selenium-restart.sls

restart_selenium: module.run: - name: service.restart - m_name: selenium-node # m_name gets passed to the execution module as "name"