SaltStack - 遠端執行



Salt 的核心概念之一是遠端執行。Salt 可以在幾秒鐘內跨數千個系統執行命令。Salt 使用其自身的命令來實現此功能。讓我們在本章中瞭解遠端執行的不同 Salt 命令。

Salt 命令

Salt 命令使 Salt master 能夠與一個或多個Salt minion 通訊。基本語法如下:

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

上述命令語法包含以下三個主要組成部分。

  • 目標 (target) − 它確定命令應用於哪些系統。

  • 模組.函式 (module.function) − 它是一個命令。命令由模組和函式組成。

  • 引數 (arguments) − 呼叫函式所需的其他資料。

讓我們詳細瞭解每個元件。

什麼是目標元件?

目標是一個元件,它允許你過濾 minion(受管理的系統)來執行函式。下面定義了一個使用目標元件的簡單命令。

salt '*' test.ping

它將產生以下輸出

minion2:
   True
minion1:
   True

這裡,目標‘*’ 代表所有受管理的系統。這裡的 ‘test’ 是一個模組,ping 是一個函式。這用於測試遠端系統的 ping 服務。我們將在後續章節中學習不同的模組及其功能。

使用 ID (minion) 的目標

你可以使用其id在目標中向特定 minion 傳送命令。你可以使用minion 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 S@192.168.50.*' test.ping

它將產生以下輸出

minion1:
   True
minion2:
   True

模組和函式 (module.function)

Salt 可以同時在其所有受管理的系統中執行 shell 命令;更新包和分發檔案等。Salt 使用模組執行這些操作。Salt 為所有可用的功能提供了特殊的模組。讓我們在本節中使用一些簡單的示例來了解不同的 Salt 模組。

Shell 命令

Salt 使用cmd.run命令遠端地在多個系統上執行 shell 命令。cmd是主模組,runcmd模組中可用的函式之一。run函式允許在遠端系統中執行任何 shell 命令,如下面的程式碼塊所示。

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來獲取受管理系統的完整磁碟詳細資訊。disk模組有一個usage函式來查詢詳細資訊。

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 提供了一個單獨的模組 network 和模組內的函式 interfaces 來查詢受管理系統的網路介面資訊。

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 執行模組

Salt 函式可以傳送到sys.doc執行模組。這用於直接從命令列獲取任何模組的詳細資訊。Salt 函式是自文件化的。所有函式文件都可以透過 minion 透過 sys.doc() 函式檢索,該函式定義如下。

salt '*' sys.doc

函式呼叫的引數

引數用於為函式呼叫提供其他資料。下面給出了一個簡單的引數示例。

salt '*' sys.doc pkg.install

這裡,引數pkg.install是一個用於安裝特定包的模組。

Python 函式

引數是函式的空格分隔的引數。它允許將 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格式。

廣告