SaltStack - Ejecución remota

Uno de los conceptos centrales de Salt es la ejecución remota. Salt puede ejecutar comandos en miles de sistemas en cuestión de segundos. Salt usa su propio comando para hacer esta funcionalidad. Entendamos ahora los diferentes comandos de Salt para ejecución remota en el capítulo.

Comando de sal

El comando Salt permite que el maestro Salt se comunique con uno o más Salt minions. La sintaxis básica es la siguiente,

salt '<target>' <module.function> [arguments]

La sintaxis de comando anterior consta de los siguientes tres componentes principales.

  • target - Determina qué sistemas aplica el comando.

  • module.function- Es un comando. Los comandos constan de un módulo y una función.

  • arguments - Datos adicionales necesarios para llamar a la función.

Entendamos cada uno de los componentes en detalle.

¿Qué es el componente de destino?

Target es un componente que le permite filtrar minions (sistema administrado) para ejecutar la función. A continuación se define un comando simple que utiliza el componente de destino.

salt '*' test.ping

Producirá lo siguiente output -

minion2:
   True
minion1:
   True

Aquí, el objetivo ‘*’representa todos los sistemas gestionados. Los 'test'aquí hay un módulo y pinges una función. Esto se usa para probar el servicio de ping en el sistema remoto. Conoceremos los diferentes módulos y sus funciones en capítulos posteriores.

Objetivos que usan ID (minion)

Puedes enviar un comando a un minion específico usando su iden el objetivo. En lugar de usar'*', puedes reemplazarlo usando minion id. Se define a continuación.

salt 'minion1’ test.ping

Producirá lo siguiente output -

minion1:
   True

Objetivos que utilizan expresiones regulares

Los destinos se pueden filtrar por expresiones regulares específicas. Se define a continuación.

salt -E 'minion[0-9]' test.ping

Producirá lo siguiente output -

minion2:
   True
minion1:
   True

Objetivos que utilizan la lista

Los destinos se pueden especificar explícitamente en una lista. Se define en el siguiente bloque de código.

salt -L 'minion1,minion2' test.ping

Producirá lo siguiente output -

minion2:
   True
minion1:
   True

Objetivos por condición

Los objetivos se pueden combinar en un comando como se muestra en el bloque de código a continuación.

salt -C 'G@os:Ubuntu and minion* or [email protected].*' test.ping

Producirá lo siguiente output -

minion1:
   True
minion2:
   True

Módulo y funciones (módulo.función)

Salt puede ejecutar comandos de shell; actualizar paquetes y distribuir archivos, etc., en todos sus sistemas administrados simultáneamente. Salt realiza estas operaciones mediante módulos. Salt dispone de módulos especiales para todas las funcionalidades disponibles. Entendamos los diferentes módulos de Salt usando un ejemplo simple en este capítulo.

Comando de Shell

Salt ejecuta comandos de shell de forma remota en varios sistemas utilizando el cmd.runmando. loscmd es el módulo principal y run es una de las funciones disponibles en el cmdmódulo. losrun La función permite ejecutar cualquier comando de shell en el sistema remoto como se muestra en el bloque de código a continuación.

salt '*' cmd.run 'ls -l /etc'

Producirá lo siguiente output -

minion2:
   total 868
   drwxr-xr-x 7 root root    4096 Jan 26 22:10 X11
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 acpi
   -rw-r--r-- 1 root root    2981 Jan 26 20:48 adduser.conf
   -rw-r--r-- 1 root root      10 Jan 26 21:04 adjtime
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 alternatives
   drwxr-xr-x 3 root root    4096 Jan 26 20:53 apm
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apparmor
   drwxr-xr-x 9 root root    4096 Jan 26 21:02 apparmor.d
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apport
   drwxr-xr-x 6 root root    4096 Jan 29 07:14 apt
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 at-spi2
……………
……………
minion1:
   total 868
   drwxr-xr-x 7 root root    4096 Jan 26 22:10 X11
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 acpi
   -rw-r--r-- 1 root root    2981 Jan 26 20:48 adduser.conf
   -rw-r--r-- 1 root root      10 Jan 26 21:04 adjtime
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 alternatives
   drwxr-xr-x 3 root root    4096 Jan 26 20:53 apm

   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apparmor
   drwxr-xr-x 9 root root    4096 Jan 26 21:02 apparmor.d
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apport
   drwxr-xr-x 6 root root    4096 Jan 29 07:09 apt
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 at-spi2
   -rw-r----- 1 root daemon   144 Oct 21  2013 at.deny
   -rw-r--r-- 1 root root    2177 Apr  9  2014 bash.bashrc
   -rw-r--r-- 1 root root      45 Mar 22  2014 bash_completion
……………
……………

Mostrar uso de disco

Salt proporciona un módulo especial, diskpara obtener los detalles completos del disco del sistema administrado. losdiskmodule tiene un usage función para consultar los detalles.

salt '*' disk.usage

Producirá lo siguiente output -

minion1:
   ----------
   /:
      ----------
      1K-blocks:
         41251136
      available:
         37852804
      capacity:
         5%
      filesystem:
         /dev/sda1
      used:
         1662420
   /dev:
      ----------
      1K-blocks:
         503908
      available:
         503896
      capacity:
         1%
      filesystem:
         udev
      used:
         12
   /run:
      ----------
      1K-blocks:
         101780
      available:
         101412
      capacity:
         1%
      filesystem:
         tmpfs
      used:
         368
   /run/lock:
      ----------
      1K-blocks:
         5120
      available:
         5120
      capacity:
         0%
      filesystem:
         none
      used:
         0
   /run/shm:
      ----------
      1K-blocks:
         508884
      available:
         508872
      capacity:
         1%
      filesystem:
         none
      used:
         12
   /run/user:
      ----------
      1K-blocks:
         102400
      available:
         102400
      capacity:
         0%
      filesystem:
         none
      used:
         0
   /sys/fs/cgroup:
      ----------
      1K-blocks:
         4
      available:
         4
      capacity:
         0%
      filesystem:
         none
      used:
         0
   /vagrant:
      ----------
      1K-blocks:
         303114632
      available:
         252331440
      capacity:
         17%
      filesystem:
         none
      used:
         50783192
minion2:
   ----------
   /:
      ----------
      1K-blocks:
         41251136
      available:
         37852804
      capacity:
         5%
      filesystem:
         /dev/sda1
      used:
         1662420
   /dev:
      ----------
      1K-blocks:
         503908
      available:
         503896
      capacity:
         1%
      filesystem:
         udev
      used:
         12
   /run:
      ----------
      1K-blocks:
         101780
      available:
         101412
      capacity:
         1%
      filesystem:
         tmpfs
      used:
         368
   /run/lock:
      ----------
      1K-blocks:
         5120
      available:
         5120
      capacity:
         0%
      filesystem:
         none
      used:
         0
   /run/shm:
      ----------
      1K-blocks:
         508884
      available:
         508872
      capacity:
         1%
      filesystem:
         none
      used:
         12
   /run/user:
      ----------
      1K-blocks:
         102400
      available:
         102400
      capacity:
         0%
      filesystem:
         none
      used:
            0
   /sys/fs/cgroup:
      ----------
      1K-blocks:
         4
      available:
         4
      capacity:
         0%
      filesystem:
         none
      used:
         0
   /vagrant:
      ----------
      1K-blocks:
         303114632
      available:
         252331440
      capacity:
         17%
      filesystem:
         none
      used:
         50783192

Interfaces de red

Salt proporciona un módulo, una red y una función independientes, interfaces dentro del módulo para consultar la información de la interfaz de red sobre los sistemas administrados.

salt '*' network.interfaces

Producirá lo siguiente output -

minion1:
   ----------
   eth0:
      ----------
      hwaddr:
         08:00:27:04:3e:28
      inet:
         |_
            ----------
            address:
               10.0.2.15
            broadcast:
               10.0.2.255
            label:
               eth0
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fe04:3e28
            prefixlen:
               64
            scope:
               link
      up:
         True
   eth1:
      ----------
      hwaddr:
         08:00:27:34:10:52
      inet:
         |_
            ----------
            address:
               192.168.50.11
            broadcast:
               192.168.50.255
            label:
               eth1
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fe34:1052
            prefixlen:
               64
            scope:
               link
      up:
         True
   lo:
      ----------
      hwaddr:
         00:00:00:00:00:00
      inet:
         |_
            ----------
            address:
               127.0.0.1
            broadcast:
               None
            label:
               lo
            netmask:
               255.0.0.0
      inet6:
         |_
            ----------
            address:
               ::1
            prefixlen:
               128
            scope:
               host
      up:
         True
minion2:
   ----------
   eth0:
      ----------
      hwaddr:
         08:00:27:04:3e:28
      inet:
         |_
            ----------
            address:
               10.0.2.15
            broadcast:
               10.0.2.255
            label:
               eth0
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fe04:3e28
            prefixlen:
               64
            scope:
               link
      up:
         True
   eth1:
      ----------
      hwaddr:
         08:00:27:a7:31:8e
      inet:
         |_
            ----------
            address:
               192.168.50.12
            broadcast:
               192.168.50.255
            label:
               eth1
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fea7:318e
            prefixlen:
               64
            scope:
               link
      up:
         True
   lo:
      ----------
      hwaddr:
         00:00:00:00:00:00
      inet:
         |_
            ----------
            address:
               127.0.0.1
            broadcast:
               None
            label:
               lo
            netmask:
               255.0.0.0
      inet6:
         |_
            ----------
            address:
               ::1
            prefixlen:
               128
            scope:
               host
      up:
         True

Módulo de ejecución sys.doc

Las funciones de sal se pueden enviar al sys.docmódulo de ejecución. Se utiliza para obtener los detalles de cualquier módulo directamente desde la línea de comandos. Las funciones de Salt se autodocumentan. Toda la documentación de la función se puede recuperar de los minions a través de la función sys.doc (), que se define a continuación.

salt '*' sys.doc

Argumentos para una llamada a función

Los argumentos se utilizan para proporcionar datos adicionales para la llamada a la función. A continuación se ofrece un ejemplo de argumento sencillo.

salt '*' sys.doc pkg.install

Aquí, el argumento pkg.install es un módulo para instalar paquetes específicos.

Función Python

Los argumentos son parámetros de la función delimitados por espacios. Permite que el código de Python se pase como argumentos como se indica a continuación.

salt '*' cmd.exec_code python 'import sys;print sys.version'

Producirá lo siguiente output -

minion2:
   2.7.6 (default, Oct 26 2016, 20:30:19) 
   [GCC 4.8.4]
minion1:
   2.7.6 (default, Oct 26 2016, 20:30:19) 
   [GCC 4.8.4]

Del mismo modo, puede utilizar palabras clave opcionales y la YAML formato también.