- SaltStack 教程
- SaltStack - 首页
- SaltStack - 概述
- SaltStack - 架构
- SaltStack - 竞争对手
- SaltStack - 安装
- 创建简单的环境
- SaltStack - 访问控制系统
- SaltStack - 作业管理
- SaltStack - Salt 文件服务器
- SaltStack - Git 作为文件服务器
- 使用 MinionFS 作为文件服务器
- SaltStack - 使用 Salt 与 Cron
- SaltStack - 远程执行
- 配置管理
- SaltStack - 日志记录
- SaltStack - 通过 SSH 使用 Salt
- Salt 用于云基础设施
- SaltStack - Salt 代理 Minion
- SaltStack - 事件系统
- SaltStack - 编排
- SaltStack - Salt 包管理器
- SaltStack - Python API
- SaltStack - 工作示例
- SaltStack 有用资源
- SaltStack - 快速指南
- SaltStack - 有用资源
- SaltStack - 讨论
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是主模块,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来获取受管理系统的完整磁盘详细信息。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格式。