一.远程命令执行
 1.1测试联通性
 salt '*' test.ping
 1.2# 查询主机运行了多长时间
 salt '*' cmd.run "uptime"
 1.3 # 批量重启服务
 salt '*' cmd.run "service httpd restart"
 1.4测试多个单独客户端
 salt -L 'web202,db203' test.ping
 1.5主机分组测试
   需要在master上面做配置修改。
   vim /etc/salt/master  
   增加下面分组
   nodegroups:
     web:  'web202'         #web为组名
      db:  'db203'             #db为组名


    service salt-master restart #重新启动master让添加的配置生效
  1.6测试web分组下所有机器联通性
    salt -N web test.ping
  1.7测试db分组下所有机器联通性
    salt -N db test.ping
二.配置管理
 2.1批量安装配置测试
   在master服务器端:
   vim /etc/salt/master #添加里面内容
file_roots:
  base:
    - /srv/salt               #基础路径
  service salt-master restart #重新启动master让添加的配置生效
  2.2#需要自己创建/srv/salt目录
   mkdir -p /srv/salt               #salt基础路径
   mkdir /srv/salt/nginx         #nginx配置路径
   mkdir /srv/salt/mysql         #mysql配置路径
   mkdir /srv/salt/conf_sls      #nginx,mysql,packs的sls文件
   mkdir /srv/salt/software     #软件包存放路径
   mkdir /srv/salt/scripts        #脚本文件存放路径
   mkdir /srv/salt/_modules    #模板文件存放路径
  2.3#为客户端安装vsftpd这个软件包,通过yum安装。
  vim /srv/salt/conf_sls/packs.sls
 vsftpd:
  pkg:
    - installed    #卸载是- removed
 service:           #如果带有service,running表示安装的包需要自动运行
     - running
     - enable: True
  修改top.sls为基础配置文件
 vim /srv/salt/top.sls  
 base:
  '*':                      #'*'表示所有监控客户端
   - conf_sls.packs  #表示调用/srv/salt/conf_sls/packs.sls文件
 #在master服务端上面执行发布到客户端
 salt '*' state.highstate
 2.4分发文件及修改文件权限
 vim  /srv/salt/conf_sls/nginx.sls 
/usr/local/nginx/conf/nginx.conf:
  file:
    - managed
    - source: salt://nginx/nginx.conf
    - mode: 777   
    - owner: root  
    - group: root
   修改top.sls为基础配置文件
  vim /srv/salt/top.sls  
 base:
  '*':                      #'*'表示所有监控客户端
   - conf_sls.nginx  #表示调用/srv/salt/conf_sls/nginx.sls文件
  #在master服务端上面执行发布到web组客户端
 salt -N web state.highstate
2.5分发单个脚本文件到客户端
  salt '*' cp.get_file salt://scripts/hello.sh /root/scripts/hello.sh makedirs=True
  #把/srv/salt/scripts/hello.sh文件拷贝到所有监控客户端的/root/scripts/目录下,如果不存在此目录,将自动建此目录
  salt '*' cmd.run 'sh /root/scripts/hello.sh'  #执行拷贝的hello.sh脚本文件
2.6分发目录到客户端
  salt '*' cp.get_dir salt://software /root gzip=5
2.7分发crontab到客户端
  vim /srv/salt/scripts/cron.sh
#!/bin/bash
/usr/sbin/ntpdate ntp.api.bz
chmod u+x /srv/salt/scripts/cron.sh
   vim  /srv/salt/conf_sls/crontab.sls 
/root/scripts/cron.sh:
  file.managed:
    - source: salt://scripts/cron.sh
    - mode: 700
  cron.present:
    - minute: '5'
    - hour: '*/2'
    修改top.sls为基础配置文件
  vim /srv/salt/top.sls  
 base:
  '*':                      #'*'表示所有监控客户端
   - conf_sls.crontab  #表示调用/srv/salt/conf_sls/crontab.sls文件
  salt '*' state.highstate
2.8为客户端添加系统用户
 vim  /srv/salt/conf_sls/useradd.sls
test_user:                     #添加的用户名
 user.present:                #次状态为添加用户
   - fullname: test          #全名
   - shell: /bin/bash       #shell环境
   - password: '$1$NdyLqU0s$yxa4TI//RmBmQ/hQwE0NR1'  #默认密码是123456
   - home: /home/test_user   #用户家目录
   - uid: 10001                       #用户id
   - gid: 10001                       #组id
   - groups:                           #所包含为root和test_user组
     - root
     - test_user
   - require: 
     - group: test_user
 group.present:                       #次状态为添加组
   - gid: 10001                          #组id
 修改top.sls为基础配置文件
  vim /srv/salt/top.sls  
 base:
  '*':                      #'*'表示所有监控客户端
   - conf_sls.useradd  #表示调用/srv/salt/conf_sls/useradd.sls文件
  salt '*' state.highstate
2.9为客户端删除系统用户
 vim  /srv/salt/conf_sls/userdel.sls
test_user: 
 user.absent: 
   - purge: True  #设置清除用户的文件(家目录) 
   - force: True  #如果用户当前已登录,则absent state会失败. 设置force选项为True时,就算用户当前处于登录状态也会删除本用户. 
修改top.sls为基础配置文件
  vim /srv/salt/top.sls  
 base:
  '*':                      #'*'表示所有监控客户端
   - conf_sls.userdel  #表示调用/srv/salt/conf_sls/userdel.sls文件
  salt '*' state.highstate
3.1为客户端删除系统用户组
 vim  /srv/salt/conf_sls/groupdel.sls
test_user: 
 group.absent
  vim /srv/salt/top.sls  
 base:
  '*':                      #'*'表示所有监控客户端
   - conf_sls.group  #表示调用/srv/salt/conf_sls/group.sls文件
  salt '*' state.highstate
3.2自定义模板
 cd  /srv/salt/_modules   #存放模板文件
  vim check_web.py 
#!usr/bin/python
import os
num=int(os.popen("netstat -tunlp|grep nginx|wc -l").readline().strip())
def status():
    if num==1:
       return  "this  is nginx server!!!"
    else:
       return  "this  is not nginx server!!!"


  salt '*' saltutil.sync_all    #同步到所有客户端
  salt '*' check_web.status        #调用自定义模板方法
3.2目录显示
[root@lnmp conf_sls]#  tree /srv/salt/
/srv/salt/
|-- _modules
|   `-- check_web.py
|-- conf_sls
|   |-- crontab.sls
|   |-- groupdel.sls
|   |-- nginx.sls
|   |-- packs.sls
|   |-- useradd.sls
|   `-- userdel.sls
|-- mysql
|-- nginx
|   `-- nginx.conf
|-- scripts
|   `-- cron.sh
|-- software
|   `-- Django-1.5.8.tar.gz
`-- top.sls