最近在看returners,其实就是个返回模块。我们一般执行命令的时候,结果会打印在屏幕上,returner就是把结果重定向其他地方,比如文件、数据库、nosql等等。
saltstack有很多自带的returners模块,比如redis,mysql,sqlite3等等。我这里以mysql为例子。
需要MySQLdb python模块和mysql server。
首先需要配置数据库。saltstack源码里有写明怎么操作
CREATE DATABASE `salt`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
USE `salt`;
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;
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,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY `id` (`id`),
KEY `jid` (`jid`),
KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
授予权限。
grant all privileges on salt.* to salt@'192.168.110.%' identified by 'salt';
配置minion
mysql.conf内容如下
mysql.host: '192.168.110.132'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
salt-cp '*' mysql.conf /opt/app/salt/etc/minion.d/mysql.conf
salt '*' cmd.run '/opt/app/salt/admin/salt-minion restart'
执行前
现在使用salt操作下
salt '*' test.ping --return mysql
有两条记录。
因为这里只有两台机器。如图
这样就可以方便以后统计数据,统计哪些没有成功,哪些成功。
但是呢,有个问题,就是使用系统自带的returner,需要修改配置文件,重启minion。如果你已经部署线上使用了,代价挺大的。
那么有什么方法可以不用修改配置,你要知道saltstack非常灵活,只有你想不到的,没有salt办不到的。前面event文章里提到过,event可以用来自定义returners。
关于结合event自定义returner可以参考下面的文章,这里不再叙述。
但是呢,又有个问题,以上的returners适合于master-minion的小架构。如果salt架构比较大,使用到了master-syndic-minion架构,master和minion是不能通信的,此时咋办。
这个时候还是要结合event来处理,在master-syndic之间写个c/s结构的程序。
这个下篇文章再聊,先写到这里。
参考文章:
http://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html
http://www.saltstack.cn/projects/cssug-kb/wiki/Saltstack_master_retuner_over_event_system