运维工具SaltStack之二常见模块及API
运维工具SaltStack之二常见模块及API
1.Archive模块:实现系统层面的压缩包调用,支持gzip、gunzip、rar、tar、unrar、unzip等
例子:
#salt 'minion01' archive.gzip test.txt #采用gzip压缩test.txt文件
2.cmd模块:实现远程的命令行调用执行(默认具备root操作权限)
例子:
#salt 'minion01' cmd.run 'fdisk -l' #获取被控主机硬盘信息#salt 'minion01' cmd.script salt://script/test.py #该命令首先同步test.py到minion客户端的cache目录并运行该脚本。其中script/test.py存放在file_roots指定的目录(默认在/srv/salt(需要新建),在/etc/salt/master文件中定义)
3.cp模块:远程文件、目录的复制
例子:
#salt 'minion01' cp.get_dir salt://script/ /opt/minion/ #将Master端file_roots指定位置下(默认在/srv/salt)的目录复制到minion01主机/opt/minion/目录下
4.cron模块:minion端主机的crontab操作
例子:
# salt 'minion01' cron.set_job root '*' '*' '*' '*' 1 /home/timesyc.sh #minion01端主机root用户添加任务作业
5.dnsutil模块:Minion主机通用DNS操作
例子:
#salt 'minion01' dnsutil.hosts_append /etc/hosts 192.168.2.71 www.test.com #添加192.168.2.71 www.test.com到minion01端/etc/hosts下
6.file模块:常见的文件操作,包括文件读写、权限、查找等
例子:
#salt 'minion01' file.chown /mydata/data root root #修改minion01主机/mydata/data文件的属组、用户权限,等价于chown root:root /mydata/data#salt 'minion01' file.copy /mydata/data /home/data #minion01主机复制/mydata/data文件到本地的/home/data目录#salt 'minion01' file.get_mode /mydata/data #获取minion01主机/mydata/data的权限mode,如:755,644#salt '*' file.mkdir /home/test #所有Minion端主机创建/home/test#salt '*' file.set_mode /home/test 0755 #所有Minion端主机/home/test的权限mode为0755#salt 'minion01' file.remove /home/test #删除minion01主机的/home/test文件
7.iptables模块:主机的iptables支持
例子:
salt '*' iptables.append filter INPUT rule='-m state --state RELATED,ESTABLISHED -j ACCEPT'salt '*' iptables.insert filter INPUT position=3 rule='-m state --state RELATED,ESTABLISHED -j ACCEPT'
说明:在所有Minion主机端追加(append)、插入(insert)iptables规则,其中INPUT为输入链
salt '*' iptalbes.delete filter INPUT position=3salt '*' iptables.delete filter INPUT rule='-m state --state RELATEC,ESTABLISHED -j ACCEPT'
说明:在所有Minion主机删除指定链编号为3(position=3)或指定存在的规则
8.network模块:返回Minion主机的网络信息
例子:
#salt 'minion01' network.ping www.baidu.com #minion01主机ping域名信息
9.pkg包管理模块:程序包管理,如:yum安装
例子:
#salt '*' pkg.install httpd #所有Minion主机安装等价于yum -y install httpd,pkg.remove为移除
10.service服务模块:程序包服务管理(如:开机自动启动,服务重启等)
例子:
#salt '*' service.enable httpd #所有Minion主机httpd服务开机自启动脚本,service.disable为禁用#salt '*' service.restart httpd #所有Minion主机httpd服务重启,service.reload(加载)、service.start(启动)、service.stop(停止)、service.status(状态)
注:saltstack还提供了user(系统用户模块)、group(系统组模块)、partition(系统分区模块)、puppet(puppet管理模块)、system(系统重启、关机模块)、timezone(时区管理模块)、nginx(nginx管理模块)、mount(文件系统挂载模块)等等。
11.可以通过Python扩展模块,使用API。通过调用master client模块,实例化一个LocalClient对象,再调用cmd()方法来实现
如:API实现archive.gzip
#vim /root/archive_gzip.pyimport salt.clientclient = salt.client.LocalClient()ret = client.cmd('*','archive.gzip','/root/test.txt')print ret
执行结果返回一个字典
{'minion01': '/root/test.txt.gz'}
12.远程执行目标(target)
常见命令参数:
globbing #默认指定id进行匹配
L #以主机ID列表形式匹配,不同主机id名称使用逗号隔开
E #基于id的正则表达式进行匹配
G #基于grains信息进行匹配过滤
I #基于master赋给minion的pillar信息进行匹配
N #基于master配置文件中的分组名称匹配
S #基于minion的IP地址或者IP子网匹配
C #复合匹配,以上参数可以组合使用
#salt 'minion01' test.ping#salt -L 'minion01,minion02' test.ping#salt -E '.*01' test.ping#salt 'minion01' grains.items#salt 'minion01' grains.get os#salt -S '192.168.2.71' test.ping#salt -C 'E@m.*01 or G@id:minion02' test.ping#salt '*' pillar.get mysql
13.State内置模块
state是Saltstack最核心的功能。通过预先定制好的SLS描述了(支持YAML语法)系统的目标状态(程序包(pkg)、文件(file)、网络配置(network)、系统服务(service)、系统用户(user)等),由格式简单的数据构成。这经常被称作配置管理。
state的入口文件与pillar一样,文件名都是top.sls,但state要求sls文件必须存放在Saltstack base定义的目录下(默认为/srv/salt)。
state描述配置*.sls支持jinjia模板、grains及pillar引用等,在state的逻辑层次定义完成后,再通过salt '*' state.highstate执行生效。
可用执行命令
#salt '*' state.highstate #所有Minion到Master上取SLS定义,然后在本地调用对应的state module(user,pkg,service等)来达到SLS描述的状态。#salt-call state.highstate -l debug #输出debug信息,便于调试。
如:
apache: #ID声明,state名称:apache pkg: #管理对象类型states:pkg,进行软件安装(yum、apt) - installed #pkg要执行的方法:install,如未安装就进行安装 service: #管理对象类型states:service,管理系统守护进程 - running #service要执行的方法:running,如未运行就进行启动 - require: #关键字require,确保apache服务只有在成功安装软件包后才会启动 - pkg: apache