Учебники

SaltStack — Удаленное выполнение

Одна из основных концепций Salt — удаленное выполнение. Salt может выполнять команды на тысячах систем за считанные секунды. Соль использует свою собственную команду, чтобы сделать эту функциональность. Давайте теперь разберемся с различными командами Salt для удаленного выполнения в этой главе.

Соляная команда

Команда Salt позволяет Мастеру соли общаться с одним или несколькими миньонами Salt . Основной синтаксис выглядит следующим образом:

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

Приведенный выше синтаксис команды состоит из следующих трех основных компонентов.

  • target — определяет, какие системы применяются командой.

  • module.function — это команда. Команды состоят из модуля и функции.

  • arguments — дополнительные данные, необходимые для вызова функции.

target — определяет, какие системы применяются командой.

module.function — это команда. Команды состоят из модуля и функции.

arguments — дополнительные данные, необходимые для вызова функции.

Давайте разберемся с каждым из компонентов в деталях.

Что такое целевой компонент?

Target — это компонент, который позволяет фильтровать миньонов (управляемую систему) для запуска функции. Простая команда, использующая целевой компонент, определена ниже.

salt '*' test.ping

Это даст следующий результат

minion2:
   True
minion1:
   True

Здесь цель ‘*’ представляет все управляемые системы. Здесь ‘ test ‘ — это модуль, а ping — это функция. Это используется для проверки службы ping в удаленной системе. Мы узнаем о различных модулях и их функциях в следующих главах.

Цели с использованием ID (миньон)

Вы можете отправить команду конкретному миньону, используя его идентификатор в цели. Вместо использования ‘*’ вы можете заменить его, используя идентификатор миньона . Это определено ниже.

salt 'minion1’ test.ping

Это даст следующий результат

minion1:
   True

Цели с использованием регулярных выражений

Цели могут быть отфильтрованы по определенному регулярному выражению. Это определено ниже.

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

Это даст следующий результат

minion2:
   True
minion1:
   True

Цели с использованием списка

Цели могут быть явно указаны в списке. Это определено в следующем блоке кода.

salt -L 'minion1,minion2' test.ping

Это даст следующий результат

minion2:
   True
minion1:
   True

Цели по условию

Цели могут быть объединены в одну команду, как показано в блоке кода ниже.

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

Это даст следующий результат

minion1:
   True
minion2:
   True

Модуль и функции (module.function)

Соль может выполнять команды оболочки; обновлять пакеты и распространять файлы и т. д. одновременно во всех управляемых системах. Соль выполняет эти операции с использованием модулей. Соль имеет специальные модули для всех доступных функций. Давайте разберемся с различными модулями Salt, используя простой пример из этой главы.

Shell Shell

Salt выполняет команды оболочки удаленно в нескольких системах с помощью команды cmd.run . Cmd — это основной модуль, а run — одна из функций, доступных в модуле cmd . Функция run позволяет выполнять любую команду оболочки в удаленной системе, как показано в блоке кода ниже.

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

Это даст следующий результат

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
……………
……………

Показать использование диска

Солт предоставляет специальный модуль- диск для получения полной информации о диске управляемой системы. Дисковый модуль имеет функцию использования для запроса деталей.

salt '*' disk.usage

Это даст следующий результат

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

Сетевые интерфейсы

Salt предоставляет отдельный модуль, сеть и функцию, интерфейсы внутри модуля для запроса информации сетевого интерфейса об управляемых системах.

salt '*' network.interfaces

Это даст следующий результат

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

Модуль выполнения sys.doc

Солевые функции могут быть отправлены в исполнительный модуль sys.doc . Это используется для получения подробной информации о любом модуле непосредственно из командной строки. Функции Соли самодокументированы. Всю документацию по функциям можно получить из миньонов с помощью функции sys.doc (), которая определена ниже.

salt '*' sys.doc

Аргументы для вызова функции

Аргументы используются для предоставления дополнительных данных для вызова функции. Простой аргумент приведен ниже.

salt '*' sys.doc pkg.install

Здесь аргумент pkg.install — это модуль для установки определенных пакетов.

Python Function

Аргументы — это разделенные пробелами параметры функции. Это позволяет передавать код Python в качестве аргументов, как указано ниже.

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

Это даст следующий результат

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]

Точно так же вы можете использовать дополнительные ключевые слова и формат YAML .