设为首页 收藏本站
查看: 1111|回复: 0

[经验分享] saltstack日常应用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-11-6 08:24:18 | 显示全部楼层 |阅读模式
客户端/etc/init.d/salt-minion start 日志文件默认是这个/var/log/salt/minion
服务端/etc/init.d/salt-master start 日志文件默认是这个/var/log/salt/master


[iyunv@centos salt]# salt-key -L
Accepted Keys:
server.hadoop.com
Unaccepted Keys:
localhost
Rejected Keys:
查看你的key情况

同意加入localhost

[iyunv@centos salt]# salt-key -L
Accepted Keys:
server.hadoop.com
Unaccepted Keys:
localhost
Rejected Keys:
[iyunv@centos salt]# salt-key -a localhost
Key for minion localhost accepted.
[iyunv@centos salt]# salt-key -L
Accepted Keys:
localhost
server.hadoop.com
Unaccepted Keys:
Rejected Keys:
查看一下网络连接情况(也就是看看能否连接客户端)

[iyunv@centos salt]# salt '*' test.ping
localhost:
    True
server.hadoop.com:
    True
先前使用*代表所有机器,如果想单独的话,可以使用

[iyunv@centos salt]# salt 'localhost' cmd.run hostname
localhost:
centos
如果想运行多个的话,可以使用-L

[iyunv@centos salt]# salt -L 'server.hadoop.com,localhost' cmd.run hostname
server.hadoop.com:
    server.hadoop.com
localhost:
centos
还可以使用正则

[iyunv@centos salt]# salt -E 'server*' cmd.run hostname
server.hadoop.com:
    server.hadoop.com
-G 这个参数很强大会根据默认的grain的结果来指定最新 grain这个东西就像puppet里面的facter这个东西

[iyunv@centos salt]# salt -G 'os:Centos' test.ping
localhost:
    True
[iyunv@centos salt]# salt -G 'os:Ubuntu' test.ping
server.hadoop.com:
True
如果想查看哪个项的话

[iyunv@centos test]# salt '*' grains.item os
server.hadoop.com:
  os: Ubuntu
localhost:
  os: CentOS
执行python代码

[iyunv@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

[iyunv@centos salt]# salt -N group1 test.ping
localhost:
True
[iyunv@centos salt]# salt -N group2 test.ping
server.hadoop.com:
True
查看网卡ip
[iyunv@centos /]# salt 'localhost' network.interfaces

下面是我的测试
[iyunv@centos salt]# salt -C 'G@os:ubuntu' test.ping
server.hadoop.com:
True
[iyunv@centos salt]# salt -C 'E@server.\w+' test.ping
server.hadoop.com:
True
[iyunv@centos salt]# salt -C 'P@os:(centos)' test.ping
localhost:
    True
[iyunv@centos salt]# salt -C 'P@os:(centos|ubuntu)' test.ping
server.hadoop.com:
    True
localhost:
True
[iyunv@centos salt]# salt -C 'L@localhost,server.hadoop.com' test.ping
server.hadoop.com:
    True
localhost:
True
[iyunv@centos salt]# salt -C 'S@192.168.56.0/24' test.ping
server.hadoop.com:
    True
localhost:
True


查看磁盘空间
[iyunv@centos tmp]# salt 'localhost' disk.usage
[iyunv@centos tmp]# df -h

如果想查看所有minion的连接情况,可以使用salt-run manage.status
[iyunv@centos apache]# salt '*' test.ping
server.hadoop.com:
    True
localhost:
    True

[iyunv@centos apache]# salt-run manage.status
down:
    - 230
up:
    - localhost
    - server.hadoop.com
如果想安装软件可以使用pkg.install

[iyunv@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:

[iyunv@centos echoping]# rpm -qa|grep dos2unix
dos2unix-3.1-37.el6.x86_64
查看你已经安装的包

salt 'localhost' pkg.list_pkgs

删除包

bc. [iyunv@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
[iyunv@centos tmp]# rpm -qa|grep echoping
查看你repos(由于内容过多,我就只列出命令了)

salt 'localhost' pkg.list_repos
配置类似puppet操作
由于我的master上的存放信息目录是在/var/salt上

file_roots:
  base:
     - /var/salt/
所以进入换个目录

下面是我的配置

[iyunv@centos salt]# cat top.sls
base:
    '*': #对象名,我使用*代表所有
    - vim #资源文件名
如果你的资源文件存放在一个目录里,比如在/var/salt/apache/vim.sls,

那么可以写为

-apache.vim
代表apache目录下的vim.sls

下面测试

Top里内容为

[iyunv@centos salt]# cat top.sls
base:
    'localhost':
      - echoping.echoping#代表echoping目录下的echoping.sls文件
[iyunv@centos echoping]# pwd
/var/salt/echoping
[iyunv@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的状态

[iyunv@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
[iyunv@centos salt]# date
Fri Aug  9 17:04:54 CST 2013
在17:04启动,然后在运行salt 'localhost' state.highstate

[iyunv@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情况

[iyunv@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
[iyunv@centos salt]# date
Fri Aug  9 17:06:57 CST 2013
可以看到已经重启了。

在查看一下文件传输情况

源文件

[iyunv@centos salt]# cat /var/salt/echoping/test_echoping.conf
this is test echoping
this twice test
生成的文件

[iyunv@centos salt]# cat /tmp/test_echoping.conf
this is test echoping
this twice test

查看echoping是否安装
[iyunv@centos salt]# rpm -qa|grep echoping
echoping-5.2.0-1.2.el6.rf.x86_64
已经安装了

在看看下面的用户与权限

[iyunv@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修改了,在运行

[iyunv@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
然后服务也重启了

[iyunv@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
[iyunv@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)

[iyunv@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
[iyunv@centos apache]# cat test.conf
this is test apache
this is 2
然后运行更新

[iyunv@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
[iyunv@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)

[iyunv@centos _modules]# salt '*' saltutil.sync_all
server.hadoop.com:
    |_
      - modules.dl
    |_
    |_
    |_
    |_
    |_
localhost:
    |_
      - modules.dl
    |_
    |_
    |_
    |_
    |_
下面测试

[iyunv@centos _modules]# salt '*' dl.msg
localhost:
    this is test message
server.hadoop.com:
this is test message
[iyunv@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)
同步

之后测试

[iyunv@centos _modules]#  salt '*' saltutil.sync_all
server.hadoop.com:
    |_
    |_
    |_
    |_
    |_
    |_
localhost:
    |_
      - modules.dl
    |_
    |_
    |_
    |_
    |_
[iyunv@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
[iyunv@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'}}


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-27175-1-1.html 上篇帖子: salt新通信架构—saltraet 下篇帖子: Salt Runners manage学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表