saltstack return 除了在配置文件中能夠定義外(太繁瑣),還能夠自定義retunner,固然,這須要經過代碼實現了,實現方式和自定義的pillar和grains相似,步驟以下:node
#建立_returners目錄,並建立腳本 [root@linux-node1 _returners]# pwd /srv/salt/base/_returners [root@linux-node1 _returners]# cat mysql_return.py #這裏腳本的名稱須要和__virual__函數返回的一致 #!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Charles Chang' import json import MySQLdb #模塊須要在master和minion端都安裝 def __virtual__(): return 'mysql_return' def returner(ret): conn = MySQLdb.connect(host='192.168.74.20',user='salt',passwd='salt',db='salt',port=3306) cursor = conn.cursor() cursor.execute('INSERT INTO salt_returns VALUES (%s,%s,%s,%s,%s,%s)'%(json.dumps(ret['fun']),json.dumps(ret['jid']), json.dumps(ret['return']),json.dumps(ret['id']),'"'+str(ret['success'])+'"',"'"+json.dumps(ret)+"'")) conn.commit() cursor.close() conn.close() #建立mysql庫和表 CREATE DATABASE `salt` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; GRANT ALL PRIVILEGES ON salt.* TO 'salt'@localhost IDENTIFIED BY 'salt'; GRANT ALL PRIVILEGES ON salt.* TO 'salt'@'%' IDENTIFIED BY 'salt'; 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; #同步returnner到客戶端 [root@linux-node1 _returners]# salt '*' saltutil.sync_returners linux-node1.oldboyedu.com: - returners.mysql_return linux-node2-computer: - returners.mysql_return #執行 [root@linux-node1 ~]# salt \* cmd.run 'whoami' --return mysql_return linux-node2-computer: root linux-node1.oldboyedu.com: root #數據:每個minion佔據一行數據 select * from salt_returns\G *************************** 6. row *************************** fun: cmd.run jid: 20170608165722516408 return: root id: linux-node2-computer success: True full_ret: {"fun_args": ["whoami"], "jid": "20170608165722516408", "return": "root", "retcode": 0, "success": true, "fun": "cmd.run", "id": "linux-node2-computer"} *************************** 7. row *************************** fun: cmd.run jid: 20170608165722516408 return: root id: linux-node1.oldboyedu.com success: True full_ret: {"fun_args": ["whoami"], "jid": "20170608165722516408", "return": "root", "retcode": 0, "success": true, "fun": "cmd.run", "id": "linux-node1.oldboyedu.com"}
查看有哪些returnerpython
[root@linux-node1 ~]# salt '*' sys.list_returners linux-node2-computer: - carbon - couchdb - etcd - hipchat - local - local_cache - memcache - multi_returner - mysql - mysql_return - slack - smtp - sqlite3 - syslog linux-node1.oldboyedu.com: - carbon - couchdb - django - etcd - hipchat - local - local_cache - mongo - mongo_return - multi_returner - mysql - mysql_return - pushover - rawfile_json - redis - slack - smtp - splunk - sqlite3 - syslog - zabbix
returner的源碼在 salt項目下的 salt/returners.pymysql