关于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模块来查看相对应的信息了