运维工具SaltStack之二常见模块及API

1.Archive模块:实现系统层面的压缩包调用,支持gzip、gunzip、rar、tar、unrar、unzip等

例子:

#salt 'minion01' archive.g
zip 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=3
salt '*' 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.py
import salt.client
client = 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