SaltStack – 远程执行

SaltStack – 远程执行


Salt 的核心概念之一是远程执行。Salt 可以在几秒钟内跨数千个系统执行命令。Salt 使用自己的命令来执行此功能。现在让我们了解本章中用于远程执行的不同 Salt 命令。

盐命令

Salt 命令使 Salt Master 能够与一个或多个Salt Minion通信基本语法如下,

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

上述命令语法由以下三个主要部分组成。

  • target – 它确定命令应用哪些系统。

  • module.function – 这是一个命令。命令由模块和函数组成。

  • arguments – 调用函数所需的额外数据。

让我们详细了解每个组件。

什么是目标组件?

Target 是一个组件,它允许您过滤 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 [email protected].*' test.ping

它将产生以下输出

minion1:
   True
minion2:
   True

模块和函数 (module.function)

Salt可以执行shell命令;同时在其所有托管系统中更新包和分发文件等。Salt 使用模块执行这些操作。Salt 具有用于所有可用功能的特殊模块。让我们通过本章中的一些简单示例来了解不同的 Salt 模块。

外壳命令

Salt 使用cmd.run命令跨多个系统远程执行 shell 命令CMD是主模块和运行是在现有的功能之一CMD模块。运行功能使作为显示在下面的代码块被在远程系统执行的任何外壳命令。

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来获取托管系统的完整磁盘详细信息。diskmodule具有使用功能来查询详细信息。

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 执行模块

Salt 函数可以发送到sys.doc执行模块。这用于直接从命令行获取任何模块的详细信息。Salt 函数是自记录的。所有函数文档都可以通过 sys.doc() 函数从 minions 中检索,该函数定义如下。

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格式。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁