您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

saltstack学习五:return及入库_MySQL

2024/2/25 2:57:15发布21次查看
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 mysqldb has_mysql = trueexcept importerror: has_mysql = falselog = 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@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 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
然后可以看到数据库里面有结果:
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product