saltstack学习五:return及入库
2014-04-26 14:31
309 查看
return的用法网上太多资料了,利用return把结果存入数据库网上已经有现在的:
1、在master端创建数据库:
创建数据库用户,并授权给minion端:
GRANT ALL PRIVILEGES ON salt.* to ‘salt’@'%’ identified by ‘salt’;
(在实际环境中帐号密码应该复杂一些)
2、在master端,创建自定义return脚本,路径在/srv/salt/_returners目录下
注意创建的return名字不要用mysql,这样有可能会和自带的mysql return冲突,至于为什么不用自带的return,我实在找不到配置mysql帐号密码在哪里搞
这里minion端需要用到MySQLdb这个python模块,所以应该先安装这个模块:
/srv/salt/packages/install.sls (目录和文件名都是随便起的)
最后推送刚刚我们自定义的return模块:
最后测试一下:
然后可以看到数据库里面有结果:
1、在master端创建数据库:
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目录下
[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 (目录和文件名都是随便起的)
python26-mysqldb: pkg.installed然后全局推送安装:
salt '*' state.sls packages.install
最后推送刚刚我们自定义的return模块:
salt '*' saltutil.sync_returners
最后测试一下:
salt '*' cmd.run 'df' --return test_mysql
然后可以看到数据库里面有结果:
相关文章推荐
- PHP学习笔记——自定义函数中的返回值(return);
- C语言学习笔记 C语言sizeof,return、数据类型
- 0016 Java学习笔记-异常-如果try-catch-finally中都存在return语句会怎样?
- java入门学习(十三)运算语句 break,cotinue,return
- C/C++语言函数学习(1):atexit、exit、return
- python学习===如何理解python中的return
- Python学习笔记六:return的用法
- SaltStack 学习笔记 - 第四篇: SaltStack常用模块
- Java学习笔记__异常机制_try_catch_finally_return执行顺序
- 关于try中含有return语句的执行顺序的升入解析(学习javap命令)
- 【Java异常学习笔记系列】try/catch/finally执行顺序及总结(含return)
- saltstack学习二:grains与pillar
- [置顶] 需要学习的内容--长期出入库
- 【Java学习笔记】break continue return
- SaltStack学习(五)SaltStack中的文件服务器
- Linux c编程一站式学习笔记(02), Return语句
- 出入库管理系统学习笔记
- JAVA学习提高之----(try与finally块中return的问题)
- saltstack学习三:批量修改zabbix配置文件 推荐
- C++primer学习笔记-----6.3返回类型和return 语句