salt数据同步方式





方式一:

minion自动向master进行数据同步:

    默认是60秒自动同步一次数据

   自动同步时间间隔由参数loop_interval来决定(minion端)

         [root@scj salt]# grep loop_interval /etc/salt/minion

         # The loop_interval sets how long in seconds the minion will wait between

         #loop_interval: 60

    如果我们想让minion永远不要自动同步,可以把这个参数值改大一点

         loop_interval: 3153600000          (设置100年同步一次)





方式二:

master端通过执行命令进行数据同步:

     检测配置是否正确,并没有真正的推送数据:

           salt '*' state.highstate -v test=true

           salt '*' state.highstate -v test=True

           注意:远程执行命令时 -v test=true 参数是不起作用的

           salt "*" cmd.run "yum -y install man" -v test=true (minion机仍然会安装man软件包,远程执行命令时没有必要检测)


     向所有minion推送所有数据:

           salt '*' state.highstate


     向某一台minion推送所有数据:

           salt '192.168.186.129' state.highstate


     向某一个分组推送所有数据:

           salt -N 'BJwebgroup' state.highstate


     向所有minion只推送web这个模块目录的数据

           salt '*' state.sls web

           注意:

               [root@scj salt]# cat top.sls 

               base:

                 'BJwebgroup':

                   - match: nodegroup

                   - web


     向所有minion只推送web模块下面的httpd.sls文件:

            salt '*' state.sls web.httpd

            注意:

                [root@scj web]# pwd

                /srv/salt/web

                [root@scj web]# ls

                files  httpd.sls  init.sls 


     向所有minion只推送web模块下面php目录下面的conf.sls文件:

            salt '*' state.sls web.php.conf

            注意:

                [root@scj php]# pwd

                /srv/salt/web/php

                [root@scj php]# ls

                conf.sls


     向所有minion直接执行某个命令:

            salt "*" cmd.run "yum -y install man"









附加:

salt常用命令:

salt '*' grains.ls            查看grains所有分类

salt '*' grains.items         查看grains所有信息

salt '*' grains.item os       查看grains某个分类信息

salt '*' pillar.items         查看pillar所有信息

salt '*' pillar.item users    查看pillar某个信息

[root@scj salt]# salt '*' grains.item os

192.168.186.129:

    ----------

    os:

        CentOS

[root@scj salt]# salt '*' grains.item fqdn

192.168.186.129:

    ----------

    fqdn:

        scj.51.com

[root@scj salt]# salt '*' grains.item host

192.168.186.129:

    ----------

    host:

        scj



salt '匹配正则' state.highstate                           匹配正则

[root@scj salt]# salt '*' state.highstate


salt -N  'GroupName'  state.highstate                     指定某个组    

[root@scj salt]#salt -N 'BJwebgroup' state.highstate


salt -L 'minion1,minion2,minion3' state.highstate         指定多个minion

[root@scj salt]# salt -L '192.168.186.129,192.168.186.128' state.sls web.php.conf


salt -G 'os:CentOS' test.ping                             指定操作系统是CentOS的所有minion


salt-cp "*" /root/file1  /tmp/            (远程复制:将master机上 /root/file1 复制到minion机的 /tmp/ 目录下)


salt '*' cmd.script /usr/local/script/iptables.sh   (执行某个脚本,这个脚本在master机上)


salt '*' cmd.run 'hostname'                 (对minion机远程执行某个命令)


[root@dbm133 ~]# salt '*' cp.get_file  salt://web/httpd/httpd.sls  /tmp/httpd.sls

[root@dbm133 ~]# salt '*' cp.get_dir  salt://web/httpd  /tmp/    ##把httpd目录拷贝到/tmp下

cp.get_file可以用来在minion端下载master上的文件。
 
salt '*' cp.get_file salt://vimrc /etc/vimrc 
  这个会通知所有的minion客户端来下载vimrc文件到/etc/vimrc
 
salt '*' cp.get_file "salt://`grains`.`os`/vimrc" /etc/vimrc template=jinja  
  也可以用模版,表示只在OS系统名称一样的机器上下载文件
   
salt '*' cp.get_file salt://vimrc /etc/vimrc gzip=5
  salt在传输大文件时还支持压缩:压缩比率是1-9
 
salt '*' cp.get_file salt://vimrc /etc/vim/vimrc makedirs=True
  cp.get_file默认是不会创建目的端的目录的,如果该目录不存在的时候。要改变这种情况可以使用mkaedirs参数
 
salt '*' cp.get_dir salt://etc/apache2 /etc
salt '*' cp.get_dir salt://etc/`pillar`.`webserver` /etc gzip=5 template=jinja
  cp.get_dir和cp.get_file一样,不过get_dir是用来下载整个目录的,也支持模版和压缩

注意:使用cp.get_file从master拷贝文件到客户端,使用cp.get_dir拷贝目录到客户端

      拷贝的文件或目录必须在salt配置的根目录下,即:/srv/salt

      把文件拷到客户端/tmp目录下,必须写成/tmp/httpd.sls,完整路径文件