Salt Stack: utilizando módulos de ejecución en SLS

Por lo que 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 procesadores, retornadores, etc.). La mayoría de los ejemplos de archivos SLS contienen sentencias relacionadas solo con los 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 la línea de comandos. Por ejemplo, tenemos dos módulos llamados “service”: salt.states.service y salt.modules.service. En este momento tengo problemas para usar los módulos de ejecución en los archivos SLS y parece que o no están disponibles en absoluto 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? Tampoco entiendo claramente la diferencia entre estos tipos de módulos.

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

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

Me encontré con 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 minion (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 . Desafortunadamente 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 “instalar apache” o “reiniciar memcached”.

    Un módulo de estado le dice al Salt Minion cuál debe ser el resultado final o “estado”. Los ejemplos serían “asegúrese de que Apache esté instalado” o “asegúrese de que este archivo de configuración específico existe 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 algo. Entonces, en el caso de “asegúrese de que Apache esté instalado”, Salt Minion comprobará si está instalado y no hará nada si está instalado. Si no es obvio, Salt instalará Apache si es necesario.

    Ahora, para completar el reinicio del nodo de selenium como anotó en su pregunta, querrá que su servicio vea algo; Por lo general, un cambio de paquete y / o cambio de configuración. De esa manera, Selenium solo se reiniciará cuando sea necesario. Aquí hay un ejemplo aproximado. No estoy familiarizado con la instalación de selenium-node, así que considere el siguiente archivo sls como ejemplo. Supongo que se puede instalar Selenium-node desde el paquete de repository 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 selenium”. Estamos administrando el paquete del sistema, el servicio y un archivo de configuración. Notará que el servicio está observando tanto el paquete de nodo de selenium como el archivo de configuración. Cuando un servicio está viendo algo, el servicio se reiniciará, de manera predeterminada, cuando la cosa “observada” informa un cambio.

    Esta es generalmente la forma en que desea controlar el reinicio de un servicio cuando se utiliza Salt States. De esta manera, el servicio solo se reiniciará cuando sea necesario. Esto ayuda a que sus estados de sal sean idempotentes y solo causen cambios en su sistema cuando sea realmente necesario.

    Ahora, para responder a la segunda parte de tu pregunta. Sí, es posible ejecutar un módulo de ejecución desde un archivo de estado o sls. Puedes 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 hacer que su servicio se reinicie 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"