SaltStack 远程执行
Salt 的核心概念之一是远程执行。 Salt 可以在几秒钟内跨数千个系统执行命令。 Salt 使用自己的命令来执行此功能。现在让我们了解本章中远程执行的不同 Salt 命令。
Salt命令
Salt 命令使 Salt Master 能够与一个或多个
Salt Minions 通信。基本语法如下,
salt '<target>' <module.function> [arguments]
上述命令语法由以下三个主要部分组成。
target-它确定命令应用哪些系统。
module.function-这是一个命令。命令由模块和函数组成。
arguments-调用函数所需的额外数据。
让我们详细了解每个组件。
什么是目标组件?
Target 是一个组件,它允许你过滤minions(托管系统)以运行该功能。下面定义了一个使用目标组件的简单命令。
它将产生以下
输出-
minion2:
true
minion1:
true
此处,目标
‘*’ 代表所有受管系统。这里的‘
test’是一个模块,而
ping是一个函数。这用于测试远程系统中的 ping 服务。我们将在后续章节中了解不同的模块及其功能。
使用 ID 的目标(minion)
您可以使用目标中的
id 向特定 Minion 发送命令。您可以使用
minion id 替换它,而不是使用
'*'。定义如下。
它将产生以下
输出-
使用正则表达式的目标
目标可以通过特定的正则表达式过滤。定义如下。
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 模块。
外壳命令
Salt 使用
cmd.run 命令跨多个系统远程执行 shell 命令。
cmd 是主模块,
run 是
cmd 模块中可用的功能之一。
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 来获取受管系统的完整磁盘详细信息。
diskmodule 有一个
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() 函数从 minion 中检索,该函数定义如下。
函数调用的参数
参数用于为函数调用提供附加数据。下面给出了一个简单的参数示例。
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 格式。