关于SaltStack介绍与安装基本使用请参考前面博文:http://270142877.blog.51cto.com/12869137/1947847


此博文主要介绍一些常用模块的的使用方法:


基础模块

sys模块:

 此模块主要用于获取帮助,和查看可以使用的模块,方法和状态state

#查看pkg模块的install方法在指定主机可使用的所有参数
salt yuyan* sys.argspec pkg.install

#查看pkg模块所有以i开头的方法在指定主机可使用的所有参数
salt yuyan* sys.argspec pkg.i*

#查看pkg模块在指定主机所有方法和方法参数
salt yuyan* sys.argspec pkg

#查看pkg模块的install方法的使用文档
salt yuyan* sys.doc pkg.install

#查看pkg模块的使用文档
salt yuyan* sys.doc pkg

#查看pkg模块所有以i开头的方法的使用文档
salt yuyan* sys.doc pkg.i*

#列出指定模块的所有方法,多个模块用空隔分开
salt yuyan* sys.list_functions pkg
salt yuyan* sys.list_functions pkg service

#列出指定主机所有可用模块
salt yuyan* sys.list_modules

#列出指定主机所有以p开头的所有可用模块
salt yuyan* sys.list_modules "p*"

#列出指定主机所有可用的状态模块和方法文档
salt yuyan* sys.list_state_functions

#列出指定主机指定的状态模块和方法文档
salt yuyan* sys.list_state_functions pkg service

#列出出指定主机pkg状态模块以i开头的方法文档
salt yuyan* sys.list_state_functions pkg.i*

#列出指定主机pkg状态模块的使用方法文档
salt yuyan* sys.state_doc pkg

#列出指定主机pkg模块的installed方法的使用文档,多个使用空隔分开
salt yuyan* sys.state_doc pkg.installed
salt yuyan* sys.state_doc pkg.installed user.present

关于sys模块的使用方法就讲解这么多,更多的使用请参考官方文档:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.sysmod.html


test模块:

 从字面意思我们也知道这是一个测试模块,此模块官方文档有很多的用法,我研究了下感觉没有太大用处,官方文档如下:

https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.test.html

#查看指定主机的客户端版本
salt yuyan* test.version

#查看指定主机的客户端详细版本信息
salt yuyan* test.versions_information

#查看指定主机的客户端详细版本信息并生成报告
salt yuyan* test.versions_report

#测试指定主机是否在线
salt yuyan* test.ping


cmd模块

从字面意思我们也知道这是一个测试模块命令模块,主要用来在客户端执行命令,官方文档:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.cmdmod.html

#在指定主机执行命令,默认会根据操作系统识别
salt yuyan* cmd.run cmd="sed "s/root/aaaa/g" /etc/passwd"
salt yuyan* cmd.run "sed "s/root/aaaa/g" /etc/passwd"

#在指定主机执行指定shell命令
salt yuyan* cmd.run shell="/bin/sh" cmd="sed "s/root/aaaa/g" /etc/passwd"
salt svn* cmd.run shell="powershell" cmd="ipconfig"

#在指定主机执行脚本
salt yuyan* cmd.script salt://test.sh
#说明:此脚本需要放在服务端的base环境目录下面,关于环境的介绍将在后面的博文中介绍

#查看指定主机命令的所在目录
salt yuyan* cmd.which ls

#查看指定主机可用的所有shell
salt yuyan* cmd.shells


cp模块

主要用来将服务端或者其它地方的文件或目录发送到指定的客户端,官方文档:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.cp.html

#将服务端base环境中的test.sh文件复制到指定的主机/tmp/目录并改名为1.sh
salt yuyan* cp.get_file salt://test.sh /tmp/1.sh

#将服务端base环境中的test.sh文件复制到指定的主机,复制文件的时候进行压缩,压缩等级1-9
salt yuyan* cp.get_file salt://test.sh /tmp/2.sh gzip=9

#将服务端base环境中的test.sh文件复制到指定的主机,如果目标目录不存在自动创建
salt yuyan* cp.get_file salt://test.sh /tmp/tmp/test.sh makedirs=True

#从网站下载一个对象并保存到指定的主机
salt yuyan* cp.get_url http://res.test.com/uploads/20101/5cb9a333ce.png /tmp/1.png

#在复制文件的时候使用jinja模板来渲染
salt yuyan* cp.get_file salt://`grains`.`os`.sh /tmp/`grains`.`os`.sh template=jinja

#将base环境中的init目录复制到指定主机的/tmp目录,makedirs,template,gzip都可以在这里使用
salt yuyan* cp.get_dir salt://init /tmp


pkg模块

主要用于包管理完成,yum rpm which等命令的使用,官方文档:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.yumpkg.html

#在指定主机安装一个软件包,自动安装依赖包
salt yuyan* pkg.install httpd

#安装多个软件包
salt yuyan* pkg.install pkgs=['httpd','tree']

#在指定主机删除一个软件包,同样也可以使用pkgs来删除多个软件包
salt yuyan* pkg.remove tree
salt yuyan* pkg.remove tree,httpd

#下载软件包,多个用空隔分开,默认下载到客户端的/var/cache/yum/packages/目录
salt yuyan* pkg.download httpd

#查看指定客户端的指定软件包安装产生的所有文件,返回字典,可以使用file_list返回列表
salt yuyan* pkg.file_dict nginx

#查看软件包的安装信息
salt yuyan* pkg.info_installed nginx

#查看未安装软件包可安装的最新版本
salt yuyan* pkg.latest_version httpd

#列出所有已安装的软件包
salt yuyan* pkg.list_pkgs

#列出所有yum源
salt yuyan* pkg.list_repos

#查看指定文件的所属软件包
salt yuyan* pkg.owner /etc/hostname

#升级所有软件包,也可以指定软件包升级,多个使用pkgs选项
salt yuyan* pkg.upgrade
salt yuyan* pkg.upgrade name=openssl
salt yuyan* pkg.upgrade pkgs=['httpd','tree']


service模块

这个模块相对比较简单,主要是对服务进行管理,官方文档如下:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.service.html

windows服务管理的如下:

https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.win_service.html

#查看指定服务是否存在
salt yuyan* service.available httpd

#列出所有服务
salt yuyan* service.get_all

#reload指定服务
salt yuyan* service.reload nginx

#restart指定服务
salt yuyan* service.reload nginx

#停止指定服务
salt yuyan* service.stop nginx

#启动指定服务
salt yuyan* service.start nginx

#查看指定服务的状态
salt yuyan* service.status httpd


cron模块

这个也相对简单,主要是对计划任务进行管理,官方文档:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.cron.html

#列出指定主机,指定用户的所有计划任务
salt yuyan* cron.list_tab root

#返回结果相当于直接执行crontab -l
salt yuyan* cron.raw_cron root

#在指定主机指定用户设置一个计划任务
salt yuyan* cron.set_job root 1 "*" 5 "*" "*" date

#删除指定计划任务,如果不知道cmd,使用cron.list_tab或者cron.ls查看
#关于删除有一些计划任务删除会失败,原因不明
salt yuyan* cron.rm_job root cmd=date


file模块

这个模块相对方法很多,比较复杂,主要是对文件和目录进行管理,这里只列出一些常用的方法示例,大家可以参考官方文档:

https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.file.html

#测试指定文件是否有指定权限,如rwx
salt yuyan* file.access /tmp/test.sh x

#向指定文件追加行,多行使用args
salt yuyan* file.append /tmp/test.sh "date"
salt yuyan* file.append /tmp/test.sh args=["line1","lineN"]

#检查指定文件的hash值
salt yuyan* file.check_hash /tmp/test.sh

更改文件的属组和属主
salt yuyan* file.chown /tmp/test.sh nginx nginx

#注释文件的指定行,可用正则表达式匹配
salt yuyan* file.comment_line /tmp/test.sh '^line'

#复制服务端上面的文件到客户端
salt yuyan* file.copy /etc/passwd /tmp/passwd

#查看客户端指定目录是否存在
salt yuyan* file.directory_exists /tmp/init

#查看指定文件是否存在
salt yuyan* file.file_exists /tmp/test.sh

#查看指定文件占用磁盘的大小
salt yuyan* file.diskusage /tmp/test.sh

#查看客户端/tmp目录下指定文件,根据文件名
salt yuyan* file.find /tmp name=test.sh
#指定类型和文件名
salt yuyan* file.find /tmp name=test.sh type=f
#以正则匹配文件名
salt yuyan* file.find /tmp regex="^t.*sh$"
#找到文件执行删除
salt yuyan* file.find /tmp regex="^t.*sh$" delete
#注:此命令功能强大,更多用法还需要参考官方文档

#查看文件的gid和uid
salt yuyan* file.get_gid /tmp/test.sh.bak
salt yuyan* file.get_uid /tmp/test.sh.bak

#获取文件的权限
salt yuyan* file.get_mode /tmp/test.sh.bak

#更改文件的名字
salt yuyan* file.rename /tmp/test.sh.bak /tmp/test.sh

#删除目录,但目录必须为空
salt yuyan* file.rmdir /tmp/init

#将指定文件里面的line替换为1234
salt yuyan* file.sed /tmp/test.sh "line" "1234"

#创建软件链接
salt yuyan* file.symlink /tmp/test.sh /tmp/test.123

#创建一个文件
salt yuyan* file.touch /tmp/123.txt


user模块

主要用于用户管理,如创建用户,删除用户,更改用户信息等,官方文档:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.useradd.html

#创建一个test用户,其它都和useradd一样默认
salt yuyan* user.add test

#创建用户时指定shell
salt yuyan* user.add test1 shell=/sbin/nologin

#创建用户时指定不创建家目录
salt yuyan* user.add test3 createhome=False

#创建用户时指定附加组
salt yuyan* user.add test4 groups=nginx

#将test用户加入到nginx组,此为附加组
salt yuyan* user.chgroups test nginx

#查看test用户所有的组
salt yuyan* user.list_groups test

#删除test用户
salt yuyan* user.delete test remove=True

#查看所有用户
salt yuyan* user.list_users


archive模块

主要用于打包,压缩和归档使用,官方文档:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.archive.html

#打包指定文件,多个文件使用空隔分开,打包后的名称为test.zip
salt yuyan* archive.cmd_zip /opt/test.zip /tmp/test.sh

#打包目录
salt yuyan* archive.cmd_zip /opt/test.zip /tmp/init

#将init.zip解压至/root目录下面
salt yuyan* archive.cmd_unzip /opt/init.zip /root/

#将test.sh打包为test.sh.gz,打包后就在当前目录
salt yuyan* archive.gzip /tmp/test.sh

#将test.sh.gz解压,解压后就在当前目录
salt yuyan* archive.gunzip /tmp/test.sh.gz

#对/tmp/init目录打包后压缩为tar.gz
salt yuyan* archive.tar czvf /opt/init.tar.gz /tmp/init

#解压init.tar.gz,默认放到/root目录下面,因为minion进程是以root用户启动的
salt yuyan* archive.tar xvzf /opt/init.tar.gz


iptables模块

主要用于管理iptables规则,比如增加,删除等,官方文档:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.iptables.html

#向filter表的INPUT链追加一条iptables规则
salt yuyan* iptables.append filter INPUT rule='-p tcp --dport 8080 -j DROP'

#向filter表的INPUT链插入一条iptables规则
salt yuyan* iptables.insert filter INPUT rule='-p tcp --dport 8080 -j DROP'

#删除filter表的INPUT链的-p tcp --dport 8080 -j DROP规则
salt yuyan* iptables.delete filter INPUT rule='-p tcp --dport 8080 -j DROP'

#保存iptables规则到文件
salt yuyan* iptables.save /etc/sysconfig/iptables

#获取所有规则
salt yuyan* iptables.get_rules

#获取所有保存的规则
salt yuyan* iptables.get_saved_rules


network模块

主要用来处理与IP网络有关的事务,官方文档:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.network.html

#获取主机名
salt yuyan* network.get_hostname

#查看所有网络接口信息
salt yuyan* network.interfaces

#测试与www.baidu.com的连通性
salt yuyan* network.ping 

#查看所有活动的tcp连接
salt yuyan* network.active_tcp 

查看arp解释表,可以把连接的IP地址解释成MAC地址
salt zabbix* network.arp

#测试指定主机,指定端口的连通性
salt yuyan* network.connect zabbix.aek.com 10051

#查看默认路由
salt yuyan* network.default_route

#获取指定的路由信息
salt **** network.get_route 10.8.3.0

#获取指定网卡的MAC地址
salt yuyan* network.hw_addr eth0

#获取指定网卡的IP地址
salt yuyan* network.interface_ip eth0

#获取指定网卡的IP地址详细信息
salt yuyan* network.interface eth0


扩展模块高级模块:

grains模块

grains模块为minion服务启动的时候从客户端收集的一些硬件,系统基础信息,比如硬件的配置,生产厂商,快速服务代码,系统主机名,IP,环境变量等信息。这些信息我们都可以通过master向minion发送请求获取,官方文档如下:

https://docs.saltstack.com/en/latest/topics/grains/

#获取指定主机的所有grains信息
salt yuyan* grains.items

#获取单个信息,如os,还有其它很多,我们可以通过grains.items查看到所有的
salt yuyan* grains.item os

除了一些已有的信息,我们还可以自定义grains信息,比如我们想给每台主机定义一个角色,方便我们来对服务器分组,对特定的角色执行相关的操作:


修改minion端配置文件,在文件最后新增以下三行

grains:
  roles:
    - webserve

注:此配置为ymal语法结构,关于ymal语法可参考百度百科

grains  关键字,不可以修改

roles  此为key的名称

webserver  此为key的值

我们还可以定义多个key-value来应用到我们的环境中满足不同的需求如:

grains:
  roles:
    - webserve
  address:
    - HangZhou

修改完成后需要重启minion服务,这样就可以通过上面介绍的命令进行获取了,如:

salt yuyan* grains.item roles
salt yuyan* grains.item address


pillar模块

此模块是存放在master端的动态数据,然后通过master下发给指定的每台minion,一般用于存放一些动态敏感信息,默认情况下每台主机也有很多默认的pillar,但默认是禁用的,因为不是特别重要。一般情况下我们都是自定义pillar

命令使用方法

#查看指定客户端的所有pillar
salt yuyan* pillar.items

#查看指定客户端的单个pillar
salt yuyan* pillar.item PILLAR_NAME

开启默认的pillar方法如下:

修改服务端配置文件/etc/salt/master,不推荐开启

#打开以下行的注释,并改为True
pillar_opts: True

自定义pillar方法如下

修改服务端配置文件/etc/salt/master,在文件最后加入

pillar_roots:
  base:
    - /srv/pillar

然后重启服务端服务

创建目录:

mkdir /srv/pillar

编辑配置文件vim /srv/pillar/address.sls

{% if grains['os'] == 'CentOS' %}
address: HangZhou
{% elif grains['os'] == 'Debian' %}
address: Guangdong
{% endif %}

编辑配置文件vim /srv/pillar/top.sls

base:
  "*":
   - address

执行同步命令,需要pillar信息同步到不同的客户端

salt yuyan* saltutil.refresh_pillar

这时候就可以通过最前面介绍的pillar模块来查看相对应的信息了