【求助】关于saltstack master 端 returner 的理解问题

73 views
Skip to first unread message

PyLixm

unread,
Oct 14, 2016, 6:07:54 AM10/14/16
to 中国SaltStack用户组
大家好,

       我们在使用saltstack时,使用的是基于master端的returner 。我们根据官方文档将mysql配置添加到 master的配置文件,并增加  master_job_cache: mysql 参数。

    因为我们的机器除了linux还有windows这样就避免了在minion端安装python-Mysqldb 模块的问题。

    returner 配置如下,
master_job_cache: mysql                                                                            
mysql.host: 'localhost'                                                                             
mysql.user: 'root'                                                                            
mysql.pass: 'root'                                                               
mysql.db: 'salt'                                                                       
mysql.port: 3306                                                                                   
mysql.ssl_ca: None                                                                     
mysql.ssl_cert: None                                                                   
mysql.ssl_key: None                                                                                 
                      

其他均为默认参数。

    这样有个弊端,会将所有的salt执行的命令的返回结果入库。

    根据文档,可以对salt命令指定 return :
salt '*' test.ping --return mysql 

    但是,此处的mysql为salt自带的return mysql 模块,大多数使用者都是取得minion上的mysql配置。
    这个地方不知道能不能取master上的数据库配置。即达到一种,我可以控制命令是否入库的功能的效果。


各位大大,有没有什么好的方法。请教,在此先谢过了!

Salt Version:                                                      
           Salt: 2015.8.12                                         
                                                                   
Dependency Versions:                                               
         Jinja2: 2.2.1                                             
       M2Crypto: 0.20.2                                            
           Mako: Not Installed                                     
         PyYAML: 3.10                                              
          PyZMQ: 14.3.1                                            
         Python: 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)         
           RAET: Not Installed                                     
        Tornado: 4.2.1                                             
            ZMQ: 3.2.5                                             
           cffi: Not Installed                                     
       cherrypy: 3.2.2                                             
       dateutil: 1.4.1                                             
          gitdb: Not Installed                                     
      gitpython: Not Installed                                     
          ioflo: Not Installed                                     
        libgit2: Not Installed                                     
        libnacl: Not Installed                                     
   msgpack-pure: Not Installed                                     
 msgpack-python: 0.4.6                                             
   mysql-python: 1.2.3c1                                           
      pycparser: Not Installed                                     
       pycrypto: 2.6.1                                             
         pygit2: Not Installed                                     
   python-gnupg: Not Installed                                     
          smmap: Not Installed                                     
        timelib: Not Installed                                     
                                                                   
System Versions:                                                   
           dist: centos 6.6 Final                                  
        machine: x86_64                                            
        release: 2.6.32-504.30.3.el6.x86_64                        
         system: CentOS 6.6 Final                                  



    

xuanw...@gmail.com

unread,
Oct 16, 2016, 9:55:50 PM10/16/16
to saltstack-users-cn
如果想在Minion端获取Master端的配置,则需要在Master端配置 pillar_opts,设置如下:

pillar_opts: True

配置该选项会将Master配置文件以pillar方式提供给Minion以供后续使用。当前修改完配置文件还需要重启Master以使配置生效,同时也建议执行 saltutil.refresh_pillar以使pillar刷新到Minion端. 

另外补充下为什么这样做就可以让Minion端使用Master端的mysql配置, 原因是Minion端在获取mysql配置时,使用的是 config.option方法。而config.option的工作顺序是:

(1) 先获取Minion的配置,如果找到对应的key值,则直接使用,如果没有,则进入2
(2) 获取Minion pillar中master的配置信息,如果找到对应key值,则直接使用,如果没有,则进入3。  想获取master的配置,就需要将pillar_opts设置为True
(3) 获取Minion pillar中对应key值,如果有,则直接使用,如果没有,则返回空字符串


 
发件人: PyLixm
发送时间: 2016-10-14 18:07
主题: [中国SaltStack用户组] 【求助】关于saltstack master 端 returner 的理解问题
--
您收到此邮件是因为您订阅了Google网上论坛上的“中国SaltStack用户组”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到saltstack-users...@googlegroups.com
要发帖到此群组,请发送电子邮件至saltstack...@googlegroups.com
访问此群组:https://groups.google.com/group/saltstack-users-cn
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/saltstack-users-cn/6cc3effd-08fe-4396-9855-d89f9de0ec88%40googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

PyLixm

unread,
Oct 17, 2016, 3:08:16 AM10/17/16
to 中国SaltStack用户组
您好,我测试了这个参数,确实可以实现入库。但是我有几个疑问,请教您下:

1、pillar_opts 这个参数需要重启 minion 才会生效,我看了和pillar有关的参数设置并没有和时间相关的配置参数。不知是设计如此,还是我配置的问题。
2、当我指定 --return mysql 时,这个returner是在 minion端执行的。
我测试了2台minion 一台装了 python-MySQL, 一台没装,没有安装的机器报这个错误:
2016-10-17 14:06:12,510 [salt.minion                                               ][ERROR   ][12191] Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/salt/minion.py", line 1164, in _thread_return
    returner
  File "/usr/lib/python2.6/site-packages/salt/loader.py", line 900, in __getitem__
    func = super(LazyLoader, self).__getitem__(item)
  File "/usr/lib/python2.6/site-packages/salt/utils/lazy.py", line 90, in __getitem__
    return self._dict[key]
KeyError: 'mysql.returner'

我翻salt的issue列表找到是因为没装 MySQLdb 这个模块(https://github.com/saltstack/salt/issues/12702)。
这样的话,我得出一个结论,salt 的自己 mysql  returner 都是在minion端执行的。
3、我看了您之前写的博客 《基于Salt Event系统构建Master端returner》(http://www.saltstack.cn/kb/saltstack_master_retuner_over_event_system/#saltstack_master_retuner_over_event_system),
给了我一些思路。可以利用event来过滤指定的salt 模块,从而达到控制入库的效果,但是这样需要另起一个进程。

不知道,还有没有其他方案,既不过多的配置minion端(安装MySQLdb、重启minion),还可以指定部分salt 命令执行结果returner。

望回,致谢~ 




在 2016年10月17日星期一 UTC+8上午9:55:50,绿肥写道:
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到saltstack-users-cn+unsubscribe@googlegroups.com
要发帖到此群组,请发送电子邮件至saltstack-user...@googlegroups.com

xuanw...@gmail.com

unread,
Oct 17, 2016, 4:04:04 AM10/17/16
to saltstack-users-cn
第一个问题:  pillar刷新,state模块在执行时会在本进程中进行刷新,其他模块想使用可以通过saltutil.refresh_pillar,当然,重启Minion的时候,也会出现获取最新pillar

第二个问题:  return是作用在Minion端的,所以需要你Minion端安装MySQLdb模块

第三个问题:  据我所知,目前没有方法可以直接满足你的需求,都需要做改造


 
发件人: PyLixm
发送时间: 2016-10-17 15:08
主题: Re: [中国SaltStack用户组] 【求助】关于saltstack master 端 returner 的理解问题
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到saltstack-users...@googlegroups.com
要发帖到此群组,请发送电子邮件至saltstack...@googlegroups.com
访问此群组:https://groups.google.com/group/saltstack-users-cn
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/saltstack-users-cn/6007c8a8-3c87-43ae-bb1e-95e4aa1e5c13%40googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout
Reply all
Reply to author
Forward
0 new messages