1. 前置配置

   安装mysql-python包, 可以直接使用yum安装

    yum install MySQL-python -y


2 . 配置本次测试需要使用的数据库及用户:

# 创建salt数据库
mysql -e 'create database salt'
# 创建用于连接salt数据库的用户
mysql -e '"grant all on salt.* to salt@localhost identified by "salt_pass';
# 将数据库配置添加至master配置文件中

3. 创建用于存储Job的数据库表结构:

mysql -usalt -psalt_pass
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;


4. 配置Master

将MySQL连接权限等信息添加到Salt Master配置文件中:
echo -e "\n\n# MySQL\nmysql.host: 'localhost'\nmysql.user: 'salt'\nmysql.pass: 'salt_pass'\nmysql.db: 'salt'\nmysql.port: 3306" >> /etc/salt/master

配置master_job_cache选项, 以使将Job结果存储在MySQL中:

echo -e "\n\n# Master Job Cache\nmaster_job_cache: mysql" >> /etc/salt/master

重启Salt Master, 以使配置生效:

service salt-master restart

5. 测试

对主机执行test.ping:

salt '*' test.ping -v

输出结果:

Executing job with jid 20141120060202308159
-------------------------------------------

minion-01.example.com:
    True

查询MySQL jids表数据:

mysql -usalt -psalt_pass -e 'select * from salt.jids\G'

输出结果:

*************************** 1. row ***************************
fun: test.ping
jid: 20141120060202308159
return: true
id: minion-01.example.com
success: 1
full_ret: {"fun_args": [], "jid": "20141120060202308159", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2014-11-20T06:02:02.533850", "fun": "test.ping", "id": "minion-01.example.com"}
alter_time: 2014-11-20 06:02:02

Job执行结果已经按照之前的配置存储到了MySQL中, 达到预期效果


本文来自: http://pengyao.org/saltstack-master-external-job-cache.html