salt-master的master_job_cache设置为redis并且设置密码

修改salt-master配置 /etc/salt/master:

# redis job cache
master_job_cache: redis
redis.db: '0'
redis.host: '127.0.0.1'
redis.port: 6379
redis.password: 'xxxx'

修改缓存结果获取脚本:

/opt/saltstack/salt/lib/python3.10/site-packages/salt/returners/redis_return.py


不同版本,python版本或有不同,总共修改三处。

def _get_options(ret=None):
    """
    Get the redis options from salt.
    """
    attrs = {
        "host": "host",
        "port": "port",
        "unix_socket_path": "unix_socket_path",
        "db": "db",
        "password": "password",   #新增第一处
        "cluster_mode": "cluster_mode",
        "startup_nodes": "cluster.startup_nodes",
        "skip_full_coverage_check": "cluster.skip_full_coverage_check",
    }

    if salt.utils.platform.is_proxy():
        return {
            "host": __opts__.get("redis.host", "salt"),
            "port": __opts__.get("redis.port", 6379),
            "unix_socket_path": __opts__.get("redis.unix_socket_path", None),
            "db": __opts__.get("redis.db", "0"),
            "password": __opts__.get("redis.password", ""),   #新增第二处
            "cluster_mode": __opts__.get("redis.cluster_mode", False),
            "startup_nodes": __opts__.get("redis.cluster.startup_nodes", {}),
            "skip_full_coverage_check": __opts__.get(
                "redis.cluster.skip_full_coverage_check", False
            ),
        }

    _options = salt.returners.get_returner_options(
        __virtualname__, ret, attrs, __salt__=__salt__, __opts__=__opts__
    )
    return _options


def _get_serv(ret=None):
    """
    Return a redis server object
    """
    _options = _get_options(ret)
    global REDIS_POOL
    if REDIS_POOL:
        return REDIS_POOL
    elif _options.get("cluster_mode"):
        REDIS_POOL = StrictRedisCluster(
            startup_nodes=_options.get("startup_nodes"),
            skip_full_coverage_check=_options.get("skip_full_coverage_check"),
            decode_responses=True,
        )
    else:
        REDIS_POOL = redis.StrictRedis(
            host=_options.get("host"),
            port=_options.get("port"),
            unix_socket_path=_options.get("unix_socket_path", None),
            db=_options.get("db"),
            password=_options.get("password", ""),   #新增第三处
            decode_responses=True,
        )
    return REDIS_POOL

安装redis 以及python  库文件

yum install redis -y

systemctl start redis

redis-cli -h 127.0.0.1 -p 6379

>CONFIG set  requirepass XX

pip3 install redis==2.10.6  -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

 重启master即可。 

异常处理:

重启后执行测试命令时,抛异常:

2023-05-26 17:56:31,230 [salt.utils.parsers:1060][WARNING ][341] Master received a SIGTERM. Exiting.
2023-05-26 17:56:41,726 [salt.master      :2355][ERROR   ][19096] Failed to allocate a jid. The requested returner 'redis' could not be loaded.
2023-05-26 17:56:41,728 [salt.channel.server:166 ][ERROR   ][19096] Some exception handling a payload from minion
Traceback (most recent call last):
  File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/channel/server.py", line 163, in handle_message
    ret, req_opts = yield self.payload_handler(payload)
  File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/ext/tornado/gen.py", line 1056, in run

...

表明redis 库未被引用

重新执行:

pip3 install --target=/opt/saltstack/salt/lib/python3.10/site-packages/   redis==2.10.6

 问题修复!

猜你喜欢

转载自blog.csdn.net/qq_29520895/article/details/130891533