Saltstack主节点找不到执行模块,提示不可用

5 投票
1 回答
4077 浏览
提问于 2025-04-18 15:11

我写了一个简单的模块,并把文件放在 <salt_file_roots>/_modules 目录下,内容大致如下:

# foomod.py
def foo(*args):
    return {'name': 'foo', 'result': True}

我运行了 salt minion saltutil.sync_all,看到输出中有我添加的模块。我也在从属机的日志中看到了它被同步的记录。

minion:
    - modules.foomod

1. 我可以在从属机上使用它:

$ salt-call foomod.foo
local:
    ----------
    name:
        foo
    result:
        True

2. 我可以在状态中用 module.run 来调用它,并且运行状态时也能正常工作。

3. 但是当我从主控机调用它时,就出现了以下情况:

$ salt minion foomod.foo
minion:
    - 'foomod.foo' is not available.

我在从属机的日志中也看到了从主控机发出的调用记录。

2014-07-29 15:30:44,290 [salt.minion      ][INFO    ] User root Executing command foomod.foo with jid 20140729153044256654
2014-07-29 15:30:44,291 [salt.minion      ][DEBUG   ] Command details {'tgt_type': 'glob', 'jid': '20140729153044256654', 'tgt': 'minion', 'ret': '', 'user': 'root', 'arg': [], 'fun': 'foomod.foo'}
2014-07-29 15:30:44,308 [salt.minion      ][INFO    ] Returning information for job: 20140729153044256654

所以要么是我漏掉了某个步骤,没有让它可以直接从主控机运行,要么就是我想象了一个并不存在的功能。

任何帮助都非常感谢。

1 个回答

2

自己回答自己的问题。盐大师(Salt master)上安装的是 pycrypto==2.6.1,而小兵(minion)上安装的是 pycrypto==2.4.1。把小兵上的版本更新到最新解决了这个问题。

撰写回答