客户端/etc/init.d/salt-minion start 日志文件默认是这个/var/log/salt/minion

服务端/etc/init.d/salt-master start 日志文件默认是这个/var/log/salt/master


[root@centos salt]# salt-key -L

Accepted Keys:

server.hadoop.com

Unaccepted Keys:

localhost

Rejected Keys:

查看你的key情况


同意加入localhost


[root@centos salt]# salt-key -L

Accepted Keys:

server.hadoop.com

Unaccepted Keys:

localhost

Rejected Keys:

[root@centos salt]# salt-key -a localhost

Key for minion localhost accepted.

[root@centos salt]# salt-key -L

Accepted Keys:

localhost

server.hadoop.com

Unaccepted Keys:

Rejected Keys:

查看一下网络连接情况(也就是看看能否连接客户端)


[root@centos salt]# salt '*' test.ping

localhost:

    True

server.hadoop.com:

    True

先前使用*代表所有机器,如果想单独的话,可以使用


[root@centos salt]# salt 'localhost' cmd.run hostname

localhost:

centos

如果想运行多个的话,可以使用-L


[root@centos salt]# salt -L 'server.hadoop.com,localhost' cmd.run hostname

server.hadoop.com:

    server.hadoop.com

localhost:

centos

还可以使用正则


[root@centos salt]# salt -E 'server*' cmd.run hostname

server.hadoop.com:

    server.hadoop.com

-G 这个参数很强大会根据默认的grain的结果来指定最新 grain这个东西就像puppet里面的facter这个东西


[root@centos salt]# salt -G 'os:Centos' test.ping

localhost:

    True

[root@centos salt]# salt -G 'os:Ubuntu' test.ping

server.hadoop.com:

True

如果想查看哪个项的话


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

server.hadoop.com:

  os: Ubuntu

localhost:

  os: CentOS

执行python代码


[root@centos salt]# salt '*' cmd.exec_code python 'import sys;print sys.version'

localhost:

    2.6.6 (r266:84292, Feb 22 2013, 00:00:18)

    [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]

server.hadoop.com:

    2.7.3 (default, Aug  1 2012, 05:14:39)

    [GCC 4.6.3]

分组操作


在master里配置


nodegroups:

   group1: 'localhost'

   group2: 'server.hadoop.com'

可以把localhost分给group1,server.hadoop.com分给group2


然后重启salt-master


[root@centos salt]# salt -N group1 test.ping

localhost:

True

[root@centos salt]# salt -N group2 test.ping

server.hadoop.com:

True

查看网卡ip

[root@centos /]# salt 'localhost' network.interfaces


下面是我的测试

[root@centos salt]# salt -C 'G@os:ubuntu' test.ping

server.hadoop.com:

True

[root@centos salt]# salt -C 'E@server.\w+' test.ping

server.hadoop.com:

True

[root@centos salt]# salt -C 'P@os:(centos)' test.ping

localhost:

    True

[root@centos salt]# salt -C 'P@os:(centos|ubuntu)' test.ping

server.hadoop.com:

    True

localhost:

True

[root@centos salt]# salt -C 'L@localhost,server.hadoop.com' test.ping

server.hadoop.com:

    True

localhost:

True

[root@centos salt]# salt -C 'S@192.168.56.0/24' test.ping

server.hadoop.com:

    True

localhost:

True



查看磁盘空间

[root@centos tmp]# salt 'localhost' disk.usage

[root@centos tmp]# df -h


如果想查看所有minion的连接情况,可以使用salt-run manage.status

[root@centos apache]# salt '*' test.ping

server.hadoop.com:

    True

localhost:

    True


[root@centos apache]# salt-run manage.status

down:

    - 230

up:

    - localhost

    - server.hadoop.com

如果想安装软件可以使用pkg.install


[root@centos echoping]# salt 'localhost' pkg.install dos2unix

Loaded plugins: fastestmirror

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

 * base: mirror.esocc.com

 * epel: mirrors.vinahost.vn

 * extras: mirror.esocc.com

 * rpmforge: mirror1.hs-esslingen.de

 * updates: centosc6.centos.org

Running rpm_check_debug

Loaded plugins: fastestmirror

localhost:

    ----------

    dos2unix:

        ----------

        new:

            3.1-37.el6

        old:


[root@centos echoping]# rpm -qa|grep dos2unix

dos2unix-3.1-37.el6.x86_64

查看你已经安装的包


salt 'localhost' pkg.list_pkgs


删除包


bc. [root@centos tmp]# salt 'localhost' pkg.remove echoping

Loaded plugins: fastestmirror

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

 * base: mirror.esocc.com

 * epel: mirror.neu.edu.cn

 * extras: mirror.esocc.com

 * rpmforge: mirrors.neusoft.edu.cn

 * updates: mirror.esocc.com

Running rpm_check_debug

Loaded plugins: fastestmirror

localhost:

    - echoping

[root@centos tmp]# rpm -qa|grep echoping

查看你repos(由于内容过多,我就只列出命令了)


salt 'localhost' pkg.list_repos

配置类似puppet操作

由于我的master上的存放信息目录是在/var/salt上


file_roots:

  base:

     - /var/salt/

所以进入换个目录


下面是我的配置


[root@centos salt]# cat top.sls

base:

    '*': #对象名,我使用*代表所有

    - vim #资源文件名

如果你的资源文件存放在一个目录里,比如在/var/salt/apache/vim.sls,


那么可以写为


-apache.vim

代表apache目录下的vim.sls


下面测试


Top里内容为


[root@centos salt]# cat top.sls

base:

    'localhost':

      - echoping.echoping#代表echoping目录下的echoping.sls文件

[root@centos echoping]# pwd

/var/salt/echoping

[root@centos echoping]# cat echoping.sls

echoping:   #id宣告

  pkg:  #安装包管理

    - name: echoping    #安装哪个软件

    - installed         #要求是安装

  service:      #服务管理

    - name: httpd   #指定服务

    - running       #服务运行状态

    - reload: True  #是否重启

    - watch:        #如果下面文件发生变化,就重启

      - file: /tmp/test_echoping.conf   #监控的文件地址

/tmp/test_echoping.conf:    #宣告

  file.managed:     #文件管理

    - source: salt://echoping/test_echoping.conf    #源数据在哪里

    - user: root                                #用户

    - group: root                               #组

    - mode: 644                             #权限

    - backup: minion                            #备份一份



运行的话,可以使用salt 'localhost' state.highstate

注意,如果需要把服务设置为开机启动可以使用- enable:True


由于我设置的是有变化就重启http,所以先查看http的状态


[root@centos salt]# ps -ef|grep httpd

root      1430     1  0 17:03 ?        00:00:00 /usr/sbin/httpd

apache    1436  1430  0 17:03 ?        00:00:00 /usr/sbin/httpd

apache    1469  1430  0 17:03 ?        00:00:00 /usr/sbin/httpd

apache    1470  1430  0 17:03 ?        00:00:00 /usr/sbin/httpd

apache    1471  1430  0 17:03 ?        00:00:00 /usr/sbin/httpd

apache    1472  1430  0 17:03 ?        00:00:00 /usr/sbin/httpd

apache    1473  1430  0 17:03 ?        00:00:00 /usr/sbin/httpd

apache    1474  1430  0 17:03 ?        00:00:00 /usr/sbin/httpd

apache    1475  1430  0 17:03 ?        00:00:00 /usr/sbin/httpd

apache    1476  1430  0 17:03 ?        00:00:00 /usr/sbin/httpd

root      1886  1782  0 17:04 pts/0    00:00:00 grep httpd

[root@centos salt]# date

Fri Aug  9 17:04:54 CST 2013

在17:04启动,然后在运行salt 'localhost' state.highstate


[root@centos salt]# salt 'localhost' state.highstate

Info: Running a benchmark to measure system clock frequency...

Info: Finished RDTSC test. To prevent the startup delay from this benchmark, set the environment variable RDTSC_FREQUENCY to 2495 on 


this system. This value is dependent upon the CPU clock speed and architecture and should be determined separately for each server.

localhost:

----------

    State: - file

    Name:      /tmp/test_echoping.conf

    Function:  managed

        Result:    True

        Comment:   File /tmp/test_echoping.conf updated

        Changes:   diff: New file


----------

    State: - pkg

    Name:      echoping

    Function:  installed

        Result:    True

        Comment:   The following packages were installed/updated: echoping.

        Changes:   echoping: { new : 5.2.0-1.2.el6.rf

old :

}


----------

    State: - service

    Name:      httpd

    Function:  running

        Result:    True

        Comment:   Service restarted

        Changes:   httpd: True

可以看到已经安装了echoping,并且更新了/tmp/test_echoping.conf


在查看一下httpd情况


[root@centos salt]# ps -ef|grep httpd

root      2025     1  0 17:06 ?        00:00:00 /usr/sbin/httpd

apache    2028  2025  0 17:06 ?        00:00:00 /usr/sbin/httpd

apache    2031  2025  0 17:06 ?        00:00:00 /usr/sbin/httpd

apache    2032  2025  0 17:06 ?        00:00:00 /usr/sbin/httpd

apache    2033  2025  0 17:06 ?        00:00:00 /usr/sbin/httpd

apache    2034  2025  0 17:06 ?        00:00:00 /usr/sbin/httpd

apache    2035  2025  0 17:06 ?        00:00:00 /usr/sbin/httpd

apache    2036  2025  0 17:06 ?        00:00:00 /usr/sbin/httpd

apache    2037  2025  0 17:06 ?        00:00:00 /usr/sbin/httpd

apache    2038  2025  0 17:06 ?        00:00:00 /usr/sbin/httpd

root      2043  1782  3 17:06 pts/0    00:00:00 grep httpd

[root@centos salt]# date

Fri Aug  9 17:06:57 CST 2013

可以看到已经重启了。


在查看一下文件传输情况


源文件


[root@centos salt]# cat /var/salt/echoping/test_echoping.conf

this is test echoping

this twice test

生成的文件


[root@centos salt]# cat /tmp/test_echoping.conf

this is test echoping

this twice test


查看echoping是否安装

[root@centos salt]# rpm -qa|grep echoping

echoping-5.2.0-1.2.el6.rf.x86_64

已经安装了


在看看下面的用户与权限


[root@centos salt]# ll /tmp/test_echoping.conf

-rw-r--r-- 1 root root 38 Aug  9 17:05 /tmp/test_echoping.conf

也是我们定义的


如果在给/var/salt/echoping/test_echoping.conf修改了,在运行


[root@centos echoping]# salt 'localhost' state.highstate

localhost:

----------

    State: - file

    Name:      /tmp/test_echoping.conf

    Function:  managed

        Result:    True

        Comment:   File /tmp/test_echoping.conf updated

        Changes:   diff: ---

+++

@@ -1,2 +1,3 @@

 this is test echoping

 this twice test

+this is 3

----------

    State: - service

    Name:      httpd

    Function:  running

        Result:    True

        Comment:   Service restarted

        Changes:   httpd: True

然后服务也重启了


[root@centos echoping]# ps -ef|grep httpd

root      2352     1  0 17:21 ?        00:00:00 /usr/sbin/httpd

apache    2354  2352  0 17:21 ?        00:00:00 /usr/sbin/httpd

apache    2355  2352  0 17:21 ?        00:00:00 /usr/sbin/httpd

apache    2356  2352  0 17:21 ?        00:00:00 /usr/sbin/httpd

apache    2357  2352  0 17:21 ?        00:00:00 /usr/sbin/httpd

apache    2358  2352  0 17:21 ?        00:00:00 /usr/sbin/httpd

apache    2359  2352  0 17:21 ?        00:00:00 /usr/sbin/httpd

apache    2360  2352  0 17:21 ?        00:00:00 /usr/sbin/httpd

apache    2361  2352  0 17:21 ?        00:00:00 /usr/sbin/httpd

apache    2362  2352  0 17:21 ?        00:00:00 /usr/sbin/httpd

root      2372  2183  0 17:22 pts/1    00:00:00 grep httpd

[root@centos echoping]# date

Fri Aug  9 17:23:01 CST 2013

如果想让salt能想puppet那样定时自动的获取配置,可以在/etc/salt/minion里配置


schedule:

  highstate:

    function: state.highstate

    minutes: 60

然后重启salt-minion


请注意,在服务端可以使用salt 'localhost' state.highstate,在客户端的话,使用salt-callstate.highstate


如果使用grains来区分不同的系统安装不同的东东,可以使用下面(比如安装apache,在centos里安装httpd,在ubuntu里安装apache2)


[root@centos apache]# cat apache.sls

apache:

   pkg:

     {% if grains['os'] == 'CentOS'%}

     - name: httpd

     {% elif grains['os'] == 'Ubuntu'%}

     - name: apache2

     {% endif %}

     - installed

   service:

     {% if grains['os'] == 'CentOS'%}

     - name: httpd

     {% elif grains['os'] == 'Ubuntu'%}

     - name: apache2

     {% endif %}

     - running

     - reload: True

     - watch:

       - pkg: apache

       - file: /tmp/test.conf

/tmp/test.conf:

  file.managed:

    - source: salt://apache/test.conf

    - user: root

    - group: root

- mode: 644

[root@centos apache]# cat test.conf

this is test apache

this is 2

然后运行更新


[root@centos apache]# salt 'server.hadoop.com' state.highstate

server.hadoop.com:

----------

    State: - file

    Name:      /tmp/test.conf

    Function:  managed

        Result:    True

        Comment:   File /tmp/test.conf updated

        Changes:   diff: New file


----------

    State: - pkg

    Name:      apache2

    Function:  installed

        Result:    True

        Comment:   Package apache2 is already installed

        Changes:

----------

    State: - service

    Name:      apache2

    Function:  running

        Result:    True

        Comment:   Service restarted

        Changes:   apache2: True

注意,如果你想使用命令的话,可以使用cmd.wait


echo-msg:

  cmd.wait:

    - name: echo 'this is test' >/tmp/echo-msg

    - user: root

    - watch:

      - pkg: apache

自定义模块


查看你master上的file_root路径,比如我的为


file_roots:

  base:

     - /var/salt/

所以在/var/salt里创建个_modules


mkdir /var/salt/_modules

然后进入目录编写模块


cd /var/salt/_modules

[root@centos _modules]# cat dl.py

def msg():

    msg='this is test message'

    return msg

def time():

    import time

    a=time.asctime()

return a

必须以.py结尾


然后同步到minion里(使用saltutil.sync_all)


[root@centos _modules]# salt '*' saltutil.sync_all

server.hadoop.com:

    |_

      - modules.dl

    |_

    |_

    |_

    |_

    |_

localhost:

    |_

      - modules.dl

    |_

    |_

    |_

    |_

    |_

下面测试


[root@centos _modules]# salt '*' dl.msg

localhost:

    this is test message

server.hadoop.com:

this is test message

[root@centos _modules]# salt '*' dl.time

server.hadoop.com:

    Tue Aug 13 15:25:32 2013

localhost:

Tue Aug 13 15:25:29 2013

当然还可以直接调用salt的模块


调用先有的module来显现自定义module中需要的功能saltsalt内置的一个字典,包含了所有的salt的moudle


def cmd(cmd):

    return __salt__['cmd.run'](cmd)

同步


之后测试


[root@centos _modules]#  salt '*' saltutil.sync_all

server.hadoop.com:

    |_

    |_

    |_

    |_

    |_

    |_

localhost:

    |_

      - modules.dl

    |_

    |_

    |_

    |_

    |_

[root@centos _modules]# salt 'localhost' dl.cmd ls

localhost:

    1.log

    1.py

    111.py

    1111.log

    2.log

    3.log

    anaconda-ks.cfg

    install.log

    install.log.syslog

    install_openstack.sh

    install_zabbix_agent.sh

    svn_install.sh

    test

    test5

    test7.py

    zatree

[root@centos _modules]# salt 'localhost' dl.cmd hostname

localhost:

    centos

下面是一些关于client的描述


Python client API

Salt is written to be completely API centric, Salt minions and master can be built directly into third party applications as a 


communication layer. The Salt client API is very straightforward.

运行单个命令


>>> import salt.client

>>> a=salt.client.LocalClient()

>>> a

<salt.client.LocalClient object at 0x1ad8f10>

>>> a.cmd("localhost","test.ping")

{'localhost': True}

>>> a.cmd("*","test.ping")

{'server.hadoop.com': True, 'localhost': True}

>>> a.cmd("*","dl.time")

{'server.hadoop.com': 'Wed Aug 14 09:53:22 2013', 'localhost': 'Wed Aug 14 09:53:22 2013'}

运行多个命令


>>> a.cmd('*',['cmd.run','test.ping','dl.time'],[['hostname'],[],[]])

{'server.hadoop.com': {'test.ping': True, 'dl.time': 'Wed Aug 14 10:01:35 2013', 'cmd.run': 'server.hadoop.com'}, 'localhost': 


{'test.ping': True, 'dl.time': 'Wed Aug 14 10:01:35 2013', 'cmd.run': 'centos'}}