SaltStack - execução remota

Um dos principais conceitos do Salt é a execução remota. O Salt pode executar comandos em milhares de sistemas em questão de segundos. O Salt usa seu próprio comando para fazer essa funcionalidade. Vamos agora entender os diferentes comandos Salt para execução remota neste capítulo.

Salt Command

O comando Salt permite que o mestre do Salt se comunique com um ou mais Salt minions. A sintaxe básica é a seguinte,

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

A sintaxe de comando acima consiste nos três componentes principais a seguir.

  • target - Determina quais sistemas são aplicados pelo comando.

  • module.function- É um comando. Os comandos consistem em um módulo e uma função.

  • arguments - Dados adicionais necessários para chamar a função.

Vamos entender cada um dos componentes em detalhes.

Qual é o componente de destino?

Destino é um componente que permite filtrar lacaios (sistema gerenciado) para executar a função. Um comando simples usando o componente de destino é definido abaixo.

salt '*' test.ping

Irá produzir o seguinte output -

minion2:
   True
minion1:
   True

Aqui, o alvo ‘*’representa todos os sistemas gerenciados. O 'test'aqui está um módulo e pingé uma função. Isso é usado para testar o serviço de ping no sistema remoto. Aprenderemos sobre os diferentes módulos e suas funções nos capítulos subsequentes.

Alvos usando ID (minion)

Você pode enviar um comando para um lacaio específico usando seu idno alvo. Ao invés de usar'*', você pode substituí-lo usando minion id. É definido abaixo.

salt 'minion1’ test.ping

Irá produzir o seguinte output -

minion1:
   True

Alvos usando Expressão Regular

Os alvos podem ser filtrados por expressão regular específica. É definido abaixo.

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

Irá produzir o seguinte output -

minion2:
   True
minion1:
   True

Alvos usando lista

Os destinos podem ser especificados explicitamente em uma lista. É definido no seguinte bloco de código.

salt -L 'minion1,minion2' test.ping

Irá produzir o seguinte output -

minion2:
   True
minion1:
   True

Metas por condição

Os destinos podem ser combinados em um comando, conforme mostrado no bloco de código abaixo.

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

Irá produzir o seguinte output -

minion1:
   True
minion2:
   True

Módulo e funções (module.function)

Salt pode executar comandos de shell; atualizar pacotes e distribuir arquivos, etc., em todos os seus sistemas gerenciados simultaneamente. Salt faz essas operações usando módulos. O Salt possui módulos especiais para todas as funcionalidades disponíveis. Vamos entender os diferentes módulos do Salt usando alguns exemplos simples neste capítulo.

Comando Shell

O Salt executa comandos shell remotamente em vários sistemas usando o cmd.runcomando. ocmd é o módulo principal e run é uma das funções disponíveis no cmdmódulo. orun A função permite que qualquer comando do shell seja executado no sistema remoto, conforme mostrado no bloco de código abaixo.

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

Irá produzir o seguinte 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 do disco

Salt fornece um módulo especial, diskpara obter os detalhes completos do disco do sistema gerenciado. odiskmodule tem um usage função para consultar os detalhes.

salt '*' disk.usage

Irá produzir o seguinte 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 rede

O Salt fornece um módulo separado, rede e função, interfaces dentro do módulo para consultar as informações da interface de rede sobre os sistemas gerenciados.

salt '*' network.interfaces

Irá produzir o seguinte 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 Execução sys.doc

As funções de sal podem ser enviadas para o sys.docmódulo de execução. Isso é usado para obter os detalhes sobre qualquer módulo diretamente da linha de comando. As funções do Salt são autodocumentadas. Toda a documentação da função pode ser recuperada dos lacaios por meio da função sys.doc (), que é definida abaixo.

salt '*' sys.doc

Argumentos para uma chamada de função

Os argumentos são usados ​​para fornecer dados adicionais para a chamada de função. Um exemplo de argumento simples é fornecido abaixo.

salt '*' sys.doc pkg.install

Aqui, o argumento pkg.install é um módulo para instalar pacotes específicos.

Função Python

Os argumentos são parâmetros delimitados por espaço para a função. Ele permite que o código Python seja passado como argumentos conforme fornecido a seguir.

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

Irá produzir o seguinte 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]

Da mesma forma, você pode usar palavras-chave opcionais e o YAML formato também.