Module是日常使用SaltStack接触最多的一个组件,其用于管理对象操作,这也是SaltStack通过Push的方式进行管理的入口,比如我们日常简单的执行命令、查看包安装情况、查看服务运行情况等工作都是通过SaltStack Module来实现的。
当安装好Master和Minion包后,系统上会安装很多Module。
可以通过sys.list_modules
命令查看支持的所有Module列表
[root@node01 ~]# salt '*' sys.list_modules
node02:
- acl
- aliases
- alternatives
- ansible
- archive
- artifactory
- beacons
- bigip
- btrfs
- buildout
- chroot
...
可以通过sys.list_functions xxx
命令查看指定模块
[root@node01 ~]# salt 'node02' sys.list_functions cmd
node02:
- cmd.exec_code
- cmd.exec_code_all
- cmd.has_exec
- cmd.powershell
- cmd.powershell_all
- cmd.retcode
- cmd.run
...
可以通过sys.doc xxx
命令查看指定模块的用法
[root@node01 ~]# salt '*' sys.doc cmd
cmd.exec_code:
Pass in two strings, the first naming the executable language, aka -
python2, python3, ruby, perl, lua, etc. the second string containing
the code you wish to execute. The stdout will be returned.
All parameters from :mod:`cmd.run_all <salt.modules.cmdmod.run_all>` except python_shell can be used.
CLI Example:
...
SaltStack默认也支持一次执行多个Module,Module之间通过逗号隔开,默认传参之间也是用逗号分隔
[root@node01 ~]# salt 'node02' test.echo,cmd.run hello,ls
node02:
----------
cmd.run:
anaconda-ks.cfg
original-ks.cfg
test.echo:
hello
返回一个字符串
[root@node01 ~]# salt 'node02' test.echo haha
node02:
haha
[root@node01 ~]# salt 'node02' test.echo 123
node02:
123
用于确认minion启动并响应
[root@node01 ~]# salt 'node02' test.ping
node02:
True
查看存活的minion
[root@node01 ~]# salt-run manage.up
- node01
- node02
查看死掉的minion
[root@node01 ~]# systemctl stop salt-minion
[root@node01 ~]# salt-run manage.down
- node01
查看down掉的minion,并将其删除
[root@node01 ~]# salt-run manage.down removekeys=True
- node01
[root@node01 ~]# salt-key -L
Accepted Keys:
node02
Denied Keys:
Unaccepted Keys:
Rejected Keys:
查看minion的相关状态
[root@node01 ~]# salt-run manage.status
down:
up:
- node02
查看salt的所有master和minion的版本信息
[root@node01 ~]# salt-run manage.versions
Master:
3000.3
Up to date:
----------
node02:
3000.3
测试指定文件是否存在
[root@node01 ~]# salt '*' cmd.run 'ls'
node02:
abc
anaconda-ks.cfg
original-ks.cfg
[root@node01 ~]# salt '*' file.access /root/anaconda-ks.cfg f
node02:
True
[root@node01 ~]# salt '*' file.access /root/anaconda f
node02:
False
检查指定文件的权限信息
[root@node01 ~]# salt '*' cmd.run 'ls -l'
node02:
total 12
drwxr-xr-x 2 root root 4096 Aug 19 02:57 abc
-rw-------. 1 root root 1778 Aug 15 18:55 anaconda-ks.cfg
-rw-------. 1 root root 1004 Aug 15 18:55 original-ks.cfg
[root@node01 ~]# salt '*' file.access /root/abc r
node02:
True
[root@node01 ~]# salt '*' file.access /root/anaconda-ks.cfg x
node02:
False
将内容追加至文本末尾,若此文件不存在则会报异常
[root@node01 ~]# salt '*' cmd.run 'touch test'
node02:
[root@node01 ~]# salt '*' file.append /root/test 'this is test' '123456'
node02:
Wrote 2 lines to "/root/test"
[root@node01 ~]# salt '*' cmd.run 'cat test'
node02:
this is test
123456
获取指定路径的基名,在脚本中很有用
[root@node01 ~]# salt '*' file.basename /abc/cbd/haha
node02:
haha
获取指定路径的目录名
[root@node01 ~]# salt '*' file.dirname /abc/cbd/hah
node02:
/abc/cbd
修改指定文件的属性
属性 | 对文件的意义 | 对目录的意义 |
---|---|---|
a | 只允许在这个文件之后追加数据, 不允许任何进程覆盖或截断这个文件 |
只允许在这个目录下建立和修改文件, 而不允许删除任何文件 |
i | 不允许对这个文件进行任何的修改, 不能删除、更改、移动 |
任何的进程只能修改目录之下的文件, 不允许建立和删除文件 |
给指定文件添加属性
[root@node01 ~]# salt '*' cmd.run 'lsattr /root/anaconda-ks.cfg'
node02:
-------------e-- /root/anaconda-ks.cfg
[root@node01 ~]# salt '*' file.chattr /root/anaconda-ks.cfg operator=add attributes=ai
node02:
True
[root@node01 ~]# salt '*' cmd.run 'lsattr /root/anaconda-ks.cfg'
node02:
----ia-------e-- /root/anaconda-ks.cfg
给指定文件删除属性
[root@node01 ~]# salt '*' file.chattr /root/anaconda-ks.cfg operator=remove attributes=i
node02:
True
[root@node01 ~]# salt '*' cmd.run 'lsattr /root/anaconda-ks.cfg'
node02:
-----a-------e-- /root/anaconda-ks.cfg
检查文件是否与给定的字符串匹配。如果匹配,则返回True,否则返回False
[root@node01 ~]# salt '*' cmd.run 'md5sum /root/anaconda-ks.cfg'
node02:
17ae95eeae402211e0bf29a6da8584d3 /root/anaconda-ks.cfg
[root@node01 ~]# salt '*' file.check_hash /root/anaconda-ks.cfg 17ae95eeae402211e0bf29a6da8584d3
node02:
True
修改文件的属组
[root@node01 ~]# salt '*' cmd.run 'ls -l'
node02:
total 12
drwxr-xr-x 3 root root 4096 Aug 19 03:09 abc
-rw-------. 1 root root 1778 Aug 15 18:55 anaconda-ks.cfg
-rw-------. 1 root root 1004 Aug 15 18:55 original-ks.cfg
[root@node01 ~]# salt '*' file.chgrp /root/abc tom
node02:
None
[root@node01 ~]# salt '*' cmd.run 'ls -l'
node02:
total 12
drwxr-xr-x 3 root tom 4096 Aug 19 03:09 abc
-rw-------. 1 root root 1778 Aug 15 18:55 anaconda-ks.cfg
-rw-------. 1 root root 1004 Aug 15 18:55 original-ks.cfg
修改文件的属主和属组
[root@node01 ~]# salt '*' cmd.run 'ls -l'
node02:
total 12
drwxr-xr-x 3 root tom 4096 Aug 19 03:09 abc
-rw-------. 1 root root 1778 Aug 15 18:55 anaconda-ks.cfg
-rw-------. 1 root root 1004 Aug 15 18:55 original-ks.cfg
[root@node01 ~]# salt '*' file.chown /root/abc tom root
node02:
None
[root@node01 ~]# salt '*' cmd.run 'ls -l'
node02:
total 12
drwxr-xr-x 3 tom root 4096 Aug 19 03:09 abc
-rw-------. 1 root root 1778 Aug 15 18:55 anaconda-ks.cfg
-rw-------. 1 root root 1004 Aug 15 18:55 original-ks.cfg
在远程主机上复制文件或目录
为了复制目录,需要递归标志,并且默认情况下会用相同的路径覆盖目标中的文件,并保留所有其他现有文件。类似于cp -r
//复制文件
[root@node01 ~]# salt '*' file.copy /root/haha /root/hah
node02:
True
[root@node01 ~]# salt '*' cmd.run 'ls'
node02:
abc
anaconda-ks.cfg
hah
haha
original-ks.cfg
//复制目录
[root@node01 ~]# salt '*' cmd.run 'ls -l'
node02:
total 20
drwxr-xr-x 3 tom root 4096 Aug 19 03:09 abc
-rw-------. 1 root root 1778 Aug 15 18:55 anaconda-ks.cfg
-rw-r--r-- 1 root root 29 Aug 19 15:33 hah
-rw-r--r-- 1 root root 29 Aug 19 15:22 haha
-rw-------. 1 root root 1004 Aug 15 18:55 original-ks.cfg
[root@node01 ~]# salt '*' file.copy /root/abc /root/cba recurse=True
node02:
True
[root@node01 ~]# salt '*' cmd.run 'ls -l' node02:
total 24
drwxr-xr-x 3 tom root 4096 Aug 19 03:09 abc
-rw-------. 1 root root 1778 Aug 15 18:55 anaconda-ks.cfg
drwxr-xr-x 3 tom root 4096 Aug 19 15:35 cba
-rw-r--r-- 1 root root 29 Aug 19 15:33 hah
-rw-r--r-- 1 root root 29 Aug 19 15:22 haha
-rw-------. 1 root root 1004 Aug 15 18:55 original-ks.cfg
remove_ existing将删除目标目录中的所有文件,然后从源目录复制文件。
[root@node01 ~]# salt '*' cmd.run 'ls ji'
node02:
abc
[root@node01 ~]# salt '*' cmd.run 'ls abc'
node02:
ni
[root@node01 ~]# salt '*' file.copy /root/abc /root/ji recurse=True remove_existing=True
node02:
True
[root@node01 ~]# salt '*' cmd.run 'ls ji' node02:
ni
类似 find 命令并返回符合指定条件的路径列表
匹配规则选项:
name = path-glob 区分大小写
iname = path-glob 不区分大小写
regex = path-regex 区分大小写
iregex = path-regex 不区分大小写
type = file-types 指定匹配类型
user = users 指定匹配用户
group = groups 指定匹配组
size = [+-]number[size-unit] 默认单位=字节
mtime = interval 修改后的日期
grep = regex 过滤文件内容
示例:
//在根下面查询文件类型名为.bak结尾,文件大小为10M以上的内容
[root@node01 ~]# salt '*' file.find / type=f name=\*.bak size=+10m
//在var目录下查询修改后的时间在30天后并且大小在10M以上的文件,打印路径,文件大小,修改后的时间
[root@node01 ~]# salt '*' file.find /var mtime=+30d size=+10m print=path,size,mtime
node02:
|_
- /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite
- 31612928
- 1588646891
//在根下面查询文件名为haha的文件,并删除
[root@node01 ~]# salt '*' file.find / name=haha delete
node02:
- /root/haha
[root@node01 ~]# salt '*' cmd.run 'ls /root'
node02:
abc
anaconda-ks.cfg
ji
获取指定文件的gid
[root@node01 ~]# salt '*' cmd.run 'ls -l'
node02:
total 12
drwxr-xr-x 3 tom root 4096 Aug 19 03:09 abc
-rw-------. 1 root root 1778 Aug 15 18:55 anaconda-ks.cfg
drwxr-xr-x 3 tom root 4096 Aug 19 03:09 ji
[root@node01 ~]# salt '*' file.get_gid /root/abc
node02:
0
获取指定文件的uid
[root@node01 ~]# salt '*' cmd.run 'ls -l'
node02:
total 12
drwxr-xr-x 3 tom root 4096 Aug 19 03:09 abc
-rw-------. 1 root root 1778 Aug 15 18:55 anaconda-ks.cfg
drwxr-xr-x 3 tom root 4096 Aug 19 03:09 ji
[root@node01 ~]# salt '*' file.get_uid /root/abc
node02:
1000
获取指定文件的用户
[root@node01 ~]# salt '*' file.get_group /root/abc
node02:
root
获取指定文件的hash值,该值通过 sha256 算法得来
[root@node01 ~]# salt '*' cmd.run 'sha256sum /root/haha'
node02:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /root/haha
[root@node01 ~]# salt '*' file.get_hash /root/haha
node02:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
以数字的方式获取指定文件的权限
[root@node01 ~]# salt '*' cmd.run 'ls -l /root/haha'
node02:
-rw-r--r-- 1 root root 0 Aug 20 02:28 /root/haha
[root@node01 ~]# salt '*' file.get_mode /root/haha
node02:
0644
修改文件权限
[root@node01 ~]# salt '*' file.set_mode /root/haha 755
node02:
0755
[root@node01 ~]# salt '*' file.get_mode /root/haha
node02:
0755
按照指定的算法计算指定文件的特征码并显示,默认使用的sha256算法。
该函数可使用的算法参数有:
root@node01 ~]# salt '*' cmd.run 'sha256sum /root/haha'
node02:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /root/haha
[root@node01 ~]# salt '*' file.get_sum /root/haha
node02:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
[root@node01 ~]# salt '*' cmd.run 'md5sum /root/haha'
node02:
d41d8cd98f00b204e9800998ecf8427e /root/haha
[root@node01 ~]# salt '*' file.get_sum /root/haha md5
node02:
d41d8cd98f00b204e9800998ecf8427e
将指定git转换为组名
[root@node01 ~]# salt '*' file.gid_to_group 1000
node02:
tom
将指定用户转换为uid
[root@node01 ~]# salt '*' file.user_to_uid tom
node02:
1000
在指定文件中检索指定内容
该函数支持通配符,若在指定的路径中用通配符则必须用双引号引起来
过滤指定文件包含nobody的行
[root@node01 ~]# salt '*' file.grep /etc/passwd nobody
node02:
----------
pid:
10488
retcode:
0
stderr:
stdout:
nobody:x:99:99:Nobody:/:/sbin/nologin
过滤指定文件包含type的行,忽略大小写
[root@node01 ~]# salt '*' file.grep /etc/sysconfig/network-scripts/ifcfg-eth0 type -- -i
node02:
----------
pid:
10773
retcode:
0
stderr:
stdout:
TYPE=Ethernet
过滤指定文件包含type的行,忽略大小写,并打印过滤行和过滤行的前两行
[root@node01 ~]# salt '*' file.grep /etc/sysconfig/network-scripts/ifcfg-eth0 type -- -i -B2
node02:
----------
pid:
10846
retcode:
0
stderr:
stdout:
IPV6INIT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
判断指定的文件是否是块设备文件
[root@node01 ~]# salt '*' file.is_blkdev /dev/sr0
node02:
True
[root@node01 ~]# salt '*' file.is_blkdev /dev/sr1
node02:
False
检查并显示出指定文件的属性信息
[root@node01 ~]# salt '*' cmd.run 'lsattr /root/haha'
node02:
-------------e-- /root/haha
[root@node01 ~]# salt '*' cmd.run 'chattr +i /root/haha'
node02:
[root@node01 ~]# salt '*' cmd.run 'lsattr /root/haha'
node02:
----i--------e-- /root/haha
[root@node01 ~]# salt '*' file.lsattr /root/haha
node02:
----------
/root/haha:
- i
- e
创建空文件或更新时间戳
[root@node01 ~]# salt '*' file.touch /root/jiji
node02:
True
[root@node01 ~]# salt '*' cmd.run 'ls'
node02:
abc
anaconda-ks.cfg
haha
ji
jiji
创建目录
[root@node01 ~]# salt '*' file.mkdir /root/oo
node02:
True
[root@node01 ~]# salt '*' cmd.run 'ls -ld /root/oo'
node02:
drwxr-xr-x 2 root root 4096 Aug 20 05:03 /root/oo
创建目录时设置属主和属组及权限
[root@node01 ~]# salt '*' file.mkdir /root/gg tom tom 700
node02:
True
[root@node01 ~]# salt '*' cmd.run 'ls -ld /root/gg'
node02:
drwx------ 2 tom tom 4096 Aug 20 05:05 /root/gg
移动或重命名
[root@node01 ~]# salt '*' file.move /root/hehe /root/haha
node02:
----------
comment:
'/root/hehe' moved to '/root/haha'
result:
True
[root@node01 ~]# salt '*' cmd.run 'ls'
node02:
anaconda-ks.cfg
haha
把文本插入指定文件的开头
[root@node01 ~]# salt '*' cmd.run 'cat haha'
node02:
hello
kiki
[root@node01 ~]# salt '*' file.prepend /root/haha '123' '456'
node02:
Prepended 2 lines to "/root/haha"
[root@node01 ~]# salt '*' cmd.run 'cat haha'
node02:
123
456
hello
kiki
修改文本文件的内容
[root@node01 ~]# salt '*' cmd.run 'cat haha'
node02:
123
456
hello
kiki
[root@node01 ~]# salt '*' file.sed /root/haha '123' '456'
node02:
----------
pid:
1793
retcode:
0
stderr:
stdout:
[root@node01 ~]# salt '*' cmd.run 'cat haha'
node02:
456
456
hello
kiki
最后可以加上flags=xx,指定修改每行的第几个
查看指定文件内容
[root@node01 ~]# salt '*' file.read /root/haha
node02:
456
456
hello
kiki
查看指定目录中有哪些文件和目录,包括隐藏文件
[root@node01 ~]# salt '*' file.readdir /
node02:
- .
- ..
- proc
- etc
- media
- lib64
......
删除指定文件或目录,类似于rm -rf命令
[root@node01 ~]# salt '*' cmd.run 'ls -l'
node02:
total 8
-rw-r--r-- 1 root root 19 Aug 20 05:13 haha
drwxr-xr-x 2 root root 4096 Aug 20 05:19 jj
[root@node01 ~]# salt '*' file.remove /root/haha
node02:
True
[root@node01 ~]# salt '*' file.remove /root/jj
node02:
True
[root@node01 ~]# salt '*' cmd.run 'ls -l'
node02:
total 0
给指定文件创建软连接
[root@node01 ~]# salt '*' file.symlink /root/haha /opt/xixi
node02:
True
[root@node01 ~]# salt '*' cmd.run 'ls -ld /opt/xixi'
node02:
lrwxrwxrwx 1 root root 10 Aug 20 05:21 /opt/xixi -> /root/haha
往一个指定的文件里覆盖写入指定内容
[root@node01 ~]# salt '*' file.read /root/haha
node02:
gg
nn
[root@node01 ~]# salt '*' file.write /root/haha '123'
node02:
Wrote 1 lines to "/root/haha"
[root@node01 ~]# salt '*' file.read /root/haha
node02:
123
下载软件包,但不安装
[root@node01 ~]# salt '*' pkg.download wget
node02:
----------
wget:
/var/cache/yum/packages/wget-1.14-18.el7_6.1.x86_64.rpm
安装包组,目前仅对yum和pacman包管理器支持
[root@node01 ~]# salt '*' pkg.group_install 'Development Tools'
安装包
[root@node01 ~]# salt '*' pkg.install wget
node02:
----------
wget:
----------
new:
1.14-18.el7_6.1
old:
列出系统中已安装的所有包的文件
[root@node01 ~]# salt '*' pkg.file_list wget
node02:
----------
errors:
files:
- /etc/wgetrc
- /usr/bin/wget
- /usr/share/doc/wget-1.14
- /usr/share/doc/wget-1.14/AUTHORS
- /usr/share/doc/wget-1.14/COPYING
- /usr/share/doc/wget-1.14/MAILING-LIST
......
查看包组的信息
[root@node01 ~]# salt '*' pkg.group_info 'Development Tools'
node02:
----------
conditional:
default:
- byacc
- cscope
- ctags
- diffstat
- doxygen
- elfutils
......
列出系统中所有的包组
[root@node01 ~]# salt '*' pkg.group_list
node02:
----------
available:
- Additional Development
- Anaconda Tools
- Backup Client
- Backup Server
- Base
- CentOS Linux Client product core
- CentOS Linux ComputeNode product core
- CentOS Linux Server product core
- CentOS Linux Workstation product core
......
列出已下载到本地的软件包
[root@node01 ~]# salt '*' pkg.list_downloaded
node02:
----------
wget:
----------
1.14-18.el7_6.1:
----------
creation_date_time:
2020-08-19T15:45:45
creation_date_time_t:
1597823145
path:
/var/cache/yum/packages/wget-1.14-18.el7_6.1.x86_64.rpm
size:
560272
列出指定文件是由哪个包提供的
[root@node01 ~]# salt '*' pkg.owner /usr/bin/echo
node02:
coreutils
卸载指定软件
[root@node01 ~]# salt '*' pkg.remove wget
node02:
----------
wget:
----------
new:
old:
1.14-18.el7_6.1
升级系统中所有的软件包或升级指定的软件包
[root@node01 ~]# salt '*' pkg.upgrade name=openssl
//若想升级系统中所有的软件包则把 name 参数去掉即可
执行高级状态
[root@node01 ~]# salt '*' state.highstate
node02:
----------
ID: apache-install
Function: pkg.installed
Name: httpd
Result: True
Comment: All specified packages are already installed
Started: 16:33:20.354088
Duration: 544.231 ms
Changes:
......
显示当前系统中有哪些高级状态
[root@node01 ~]# salt '*' state.show_highstate
node02:
----------
apache-install:
----------
__env__:
base
__sls__:
web.apache.apache
pkg:
......
显示当前系统中的高级状态执行情况
[root@node01 ~]# salt '*' state.show_state_usage
node02:
----------
base:
----------
count_all:
2
count_unused:
1
count_used:
1
unused:
- top
used:
- web.apache.apache
执行指定的top file,而不是默认的
[root@node01 ~]# salt '*' state.top abc。sls
node02:
----------
ID: apache-install
Function: pkg.installed
Name: httpd
Result: True
Comment: All specified packages are already installed
Started: 16:33:20.354088
Duration: 544.231 ms
Changes:
......
salt-cp能够很方便的把 master 上的文件批量传到 minion上
[root@node01 ~]# salt '*' cmd.run 'ls /opt'
node02:
[root@node01 ~]# ls
anaconda-ks.cfg vvv
[root@node01 ~]# salt-cp '*' /root/vvv /opt
node02:
----------
/opt/vvv:
True
[root@node01 ~]# salt '*' cmd.run 'ls /opt'
node02:
vvv
判断指定的服务是否可用
[root@node01 ~]# salt '*' service.available sshd
node02:
True
[root@node01 ~]# salt '*' service.available mail
node02:
False
获取所有正在运行的服务
[root@node01 ~]# salt '*' service.get_all
node02:
- NetworkManager
- NetworkManager-dispatcher
- NetworkManager-wait-online
- auditd
- autovt@
- basic.target
- blk-availability
- bluetooth.target
......
设置指定服务开机不自动启动
[root@node01 ~]# salt '*' service.disable httpd
node02:
True
[root@node01 ~]# salt '*' service.enabled httpd
node02:
False
设置指定服务开机自动启动
[root@node01 ~]# salt '*' service.enable httpd
node02:
True
[root@node01 ~]# salt '*' service.enabled httpd
node02:
True
重新加载指定服务
[root@node01 ~]# salt '*' service.reload httpd
node02:
True
停止指定服务
[root@node01 ~]# salt '*' service.stop httpd
node02:
True
启动指定服务
[root@node01 ~]# salt '*' service.start httpd
node02:
True
重启指定服务
[root@node01 ~]# salt '*' service.restart httpd
node02:
True
查看指定服务状态
[root@node01 ~]# salt '*' service.status httpd
node02:
True
//True为启动,False为停止
返回所有活动的tcp连接
[root@node01 ~]# salt '*' network.active_tcp
node02:
----------
0:
----------
local_addr:
172.16.78.128
local_port:
22
remote_addr:
172.16.78.1
remote_port:
50912
1:
----------
local_addr:
172.16.78.128
local_port:
46930
remote_addr:
172.16.78.125
remote_port:
4505
通过IP和子网掩码计算出网段
[root@node01 ~]# salt '*' network.calc_net 192.168.1.1 255.255.255.0
node02:
192.168.1.0/24
测试minion至某一台服务器的网络是否连通
[root@node01 ~]# salt '*' network.connect www.baidu.com 80
node02:
----------
comment:
Successfully connected to www.baidu.com (36.152.44.95) on tcp port 80
result:
True
查看默认路由
[root@node01 ~]# salt '*' network.default_route
node02:
|_
----------
addr_family:
inet
destination:
0.0.0.0
flags:
UG
gateway:
172.16.78.2
interface:
eth0
netmask:
0.0.0.0
获取主机名
[root@node01 ~]# salt '*' network.get_hostname
node02:
node02
查询到一个目标网络的路由信息
[root@node01 ~]# salt '*' network.get_route 192.168.1.1
node02:
----------
destination:
192.168.1.1
gateway:
172.16.78.2
interface:
eth0
source:
172.16.78.128
查询指定网卡的mac地址
[root@node01 ~]# salt '*' network.hw_addr eth0
node02:
00:0c:29:93:a9:41
查看指定网卡信息
[root@node01 ~]# salt '*' network.interface eth0
node02:
|_
----------
address:
172.16.78.128
broadcast:
172.16.78.255
label:
eth0
netmask:
255.255.255.0
查看当前系统中所有的网卡信息
[root@node01 ~]# salt '*' network.interfaces
node02:
----------
eth0:
----------
hwaddr:
00:0c:29:93:a9:41
inet:
|_
----------
address:
172.16.78.128
broadcast:
172.16.78.255
label:
eth0
netmask:
255.255.255.0
inet6:
|_
----------
address:
fe80::20c:29ff:fe93:a941
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
返回一个IPv4的地址列表
该函数将会忽略掉127.0.0.1的地址
[root@node01 ~]# salt '*' network.ip_addrs
node02:
- 172.16.78.128
返回所有打开的端口和状态
[root@node01 ~]# salt '*' network.netstat
node02:
|_
----------
inode:
24891
local-address:
*:68
program:
dhclient
proto:
udp
recv-q:
0
remote-address:
*:*
send-q:
0
user:
0
|_
----------
......