saltstack mysql_saltstack学习五:return及入库_MySQL

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

1、在master端创建数据库:CREATE DATABASE `salt`DEFAULT CHARACTER SET utf8DEFAULT 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目录下[root@test81 _returners]# cat mysql_return.pyfrom contextlib import contextmanagerimport sysimport jsonimport loggingtry:import MySQLdbHAS_MYSQL = Trueexcept ImportError:HAS_MYSQL = Falselog = logging.getLogger(__name__)def __virtual__():if not HAS_MYSQL:return Falsereturn '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] = _attrreturn _options@contextmanagerdef _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 cursorexcept MySQLdb.DatabaseError as err:error, = err.argssys.stderr.write(error.message)cursor.execute("ROLLBACK")raise errelse: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 (目录和文件名都是随便起的)python26-mysqldb:pkg.installedsalt '*' state.sls packages.install

最后推送刚刚我们自定义的return模块:salt '*' saltutil.sync_returners

最后测试一下:salt '*' cmd.run 'df' --return test_mysql

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

1405KP25K0-143J0.jpg

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值