saltstack学习五:return及入库

return的用法网上太多资料了,利用return把结果存入数据库网上已经有现在的:


1、在master端创建数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
CREATE  DATABASE  `salt`
       DEFAULT  CHARACTER  SET  utf8
       DEFAULT  COLLATE  utf8_general_ci;
     USE `salt`;
     --
     -- Table structure for table `jids`
     --
     DROP  TABLE  IF EXISTS `jids`;
     CREATE  TABLE  `jids` (
       `jid`  varchar (255)  NOT  NULL ,
       ` load ` mediumtext  NOT  NULL ,
       UNIQUE  KEY  `jid` (`jid`)
     ) ENGINE=InnoDB  DEFAULT  CHARSET=utf8;
     --
     -- Table structure for table `salt_returns`
     --
     DROP  TABLE  IF EXISTS `salt_returns`;
     CREATE  TABLE  `salt_returns` (
       `fun`  varchar (50)  NOT  NULL ,
       `jid`  varchar (255)  NOT  NULL ,
       ` return ` mediumtext  NOT  NULL ,
       `id`  varchar (255)  NOT  NULL ,
       `success`  varchar (10)  NOT  NULL ,
       `full_ret` mediumtext  NOT  NULL ,
       KEY  `id` (`id`),
       KEY  `jid` (`jid`),
       KEY  `fun` (`fun`)
     ) ENGINE=InnoDB  DEFAULT  CHARSET=utf8;


创建数据库用户,并授权给minion端:

GRANT ALL PRIVILEGES ON salt.* to ‘salt’@'%’ identified by ‘salt’;

(在实际环境中帐号密码应该复杂一些)


2、在master端,创建自定义return脚本,路径在/srv/salt/_returners目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
[root@test81 _returners] # cat mysql_return.py
from  contextlib  import  contextmanager
import  sys
import  json
import  logging
try :
     import  MySQLdb
     HAS_MYSQL  =  True
except  ImportError:
     HAS_MYSQL  =  False
log  =  logging.getLogger(__name__)
def  __virtual__():
     if  not  HAS_MYSQL:
         return  False
     return  'test_mysql'
def  _get_options():
     '''
     Returns options used for the MySQL connection.
     '''
     defaults  =  { 'host' '192.168.2.100' ,
                 'user' 'salt' ,
                 'pass' 'salt' ,
                 'db' 'salt' ,
                 'port' 3306 }
     _options  =  {}
     for  attr  in  defaults:
         _attr  =  __salt__[ 'config.option' ]( 'mysql.{0}' . format (attr))
         if  not  _attr:
             log.debug( 'Using default for MySQL {0}' . format (attr))
             _options[attr]  =  defaults[attr]
             continue
         _options[attr]  =  _attr
     return  _options
@contextmanager
def  _get_serv(commit = False ):
     '''
     Return a mysql cursor
     '''
     _options  =  _get_options()
     conn  =  MySQLdb.connect(host = _options[ 'host' ], user = _options[ 'user' ], passwd = _options[ 'pass' ], db = _options[ 'db' ], port = _options[ 'port' ])
     cursor  =  conn.cursor()
     try :
         yield  cursor
     except  MySQLdb.DatabaseError as err:
         error,  =  err.args
         sys.stderr.write(error.message)
         cursor.execute( "ROLLBACK" )
         raise  err
     else :
         if  commit:
             cursor.execute( "COMMIT" )
         else :
             cursor.execute( "ROLLBACK" )
     finally :
         conn.close()
def  returner(ret):
     '''
     Return data to a mysql server
     '''
     with _get_serv(commit = True ) as cur:
         sql  =  '''INSERT INTO `salt_returns`
                 (`fun`, `jid`, `return`, `id`, `success`, `full_ret` )
                 VALUES (%s, %s, %s, %s, %s, %s)'''
         cur.execute(sql, (ret[ 'fun' ], ret[ 'jid' ],
                             str (ret[ 'return' ]), ret[ 'id' ],
                             ret[ 'success' ], json.dumps(ret)))


注意创建的return名字不要用mysql,这样有可能会和自带的mysql return冲突,至于为什么不用自带的return,我实在找不到配置mysql帐号密码在哪里搞


这里minion端需要用到MySQLdb这个python模块,所以应该先安装这个模块:

/srv/salt/packages/install.sls (目录和文件名都是随便起的)

1
2
python26 - mysqldb:
     pkg.installed

然后全局推送安装:

1
salt  '*'  state.sls packages.install


最后推送刚刚我们自定义的return模块:

1
salt  '*'  saltutil.sync_returners


最后测试一下:

1
salt  '*'  cmd.run  'df'  - - return  test_mysql


然后可以看到数据库里面有结果:

wKioL1NbUzWSGZhgAADTo7zcE00738.jpg

本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1403387如需转载请自行联系原作者


lihuipeng

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值