SaltStack工具中MySQL的模块返回值问题解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaltStack工具中MySQL的模块返回值问题解决相关的知识,希望对你有一定的参考价值。

由于管理系统中对mysql管理的开发中用到了saltstack集成的mysql模块其中一个主要的功能是 mysql.query 

官方文档中的两个示例:


salt.modules.mysql.query(database, query, **connection_args)

Run an arbitrary SQL query and return the results or the number of affected rows.

CLI Example:

      salt ‘*‘ mysql.query mydb "UPDATE mytable set myfield=1 limit 1"

       Return data:

           {‘query time‘: {‘human‘: ‘39.0ms‘, ‘raw‘: ‘0.03899‘}, ‘rows affected‘: 1L}


CLI Example:

     salt ‘*‘ mysql.query mydb "SELECT id,name,cash from users limit 3"

     Return data:

            {‘columns‘: (‘id‘, ‘name‘, ‘cash‘),

             ‘query time‘: {‘human‘: ‘1.0ms‘, ‘raw‘: ‘0.001‘},

             ‘results‘: ((1L, ‘User 1‘, Decimal(‘110.000000‘)),

              (2L, ‘User 2‘, Decimal(‘215.636756‘)),          

              (3L, ‘User 3‘, Decimal(‘0.040000‘))),

              ‘rows returned‘: 3L}


我测试的一个示例:

 salt www.pyadmin.com mysql.query salt "explain select * from salt_events"

  www.pyadmin.com:

    ----------

    query time:

        ----------

        human:

            14.0ms

        raw:

            0.01402

    rows affected:

        1


观察官方的和我测试的输出显示结果来看只有 SELECT 语句显示了希望的结果。

那么我要显示 explain的结果呢? 查看了好多遍官方的文档也没有头绪,只好从源代码入手了

首先找到这个相关的模块--mysql

主要位置在  /usr/local/lib/python2.7/dist-packages/salt/modules/mysql.py

注意:有的系统是在 site-packages 文件夹下

编辑这个文件找到如下位置:

ret = {}
ret[‘query time‘] = {‘human‘: elapsed_h, ‘raw‘: str(round(elapsed, 5))}
select_keywords = ["SELECT", "SHOW", "DESC"]
select_query = False
for keyword in select_keywords:
    if query.upper().strip().startswith(keyword):
        select_query = True
        break
if select_query:
    ret[‘rows returned‘] = affected
    columns = ()
    for column in cur.description:
        columns += (column[0],)
    ret[‘columns‘] = columns
    ret[‘results‘] = results
    return ret
else:
    ret[‘rows affected‘] = affected
    return ret

在字典里面增加  “EXPLAIN” 这样一个元素

select_keywords = ["SELECT", "SHOW", "DESC", "EXPLAIN"]


然后我们在来查看一下执行结果的输出:


www.pyadmin.com:

    ----------

    columns:

        - id

        - select_type

        - table

        - partitions

        - type

        - possible_keys

        - key

        - key_len

        - ref

        - rows

        - filtered

        - Extra

    query time:

        ----------

        human:

            0.24s

        raw:

            0.23805

    results:

        |_

          - 1

          - SIMPLE

          - salt_events

          - None

          - ALL

          - None

          - None

          - None

          - None

          - 3707

          - 100.00

          - None

    rows returned:

        1

和修改之前的输出结果对比多了results 这一项。

本文出自 “影子骑士” 博客,请务必保留此出处http://andylhz2009.blog.51cto.com/728703/1951339

以上是关于SaltStack工具中MySQL的模块返回值问题解决的主要内容,如果未能解决你的问题,请参考以下文章

关于saltstack的job问题

关于Saltstack核心模块state详解

SaltStack常用模块之file和mysqllvs

SaltStack常用模块之file和mysqllvs

saltstack cp模块使用

saltstack模块之pkg相关模块