gpt4 book ai didi

python - 如何通过Python API调用salt-ssh(SSHClient)

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:12 27 4
gpt4 key购买 nike

我在 Python 3 虚拟环境中安装了 Salt,并创建了一个 Salt 配置,该配置使用非根文件夹来存储所有内容 (/home/user/saltenv)。在 venv 中使用 salt-ssh 命令时,例如salt-ssh '*' test.ping,一切都按预期进行。 (请注意,配置目录是通过 Saltfile 解析的,因此省略了 -c 选项,但这并不重要。)

但是,当通过 Python 直接调用 SSHClient 时,我没有得到任何结果。我已经发现名册文件没有被读取,显然导致目标列表为空。我不知何故陷入困境,documentation没那么有帮助。

这是代码:

import salt.config
from salt.client.ssh.client import SSHClient

def main():
c_path = '/home/user/saltenv/etc/salt/master'
master_opts = salt.config.client_config(c_path)

c = SSHClient(c_path=c_path, mopts=master_opts)
res = c.cmd(tgt='*', fun='test.ping')
print(res)

if __name__ == '__main__':
main()

最佳答案

看起来,CLI 和客户端对某些选项的处理有所不同。 salt-ssh 不使用 SSHClient。相反,直接使用salt.client.ssh.SSH类。

salt-sshSaltfile中的config_dir添加到opts字典中以解析 >master 配置文件,SSHClient 直接读取传递给构造函数的配置文件,并且 config_dir 没有添加到选项中(导致名册文件不被发现)。

我的解决方案是将 config_dir 也包含在 master 配置文件中。问题中的代码将保持不变。

替代方案 1:如果您只有一种 Salt 配置,也可以设置环境变量 SALT_CONFIG_DIR

替代方案 2:SSHClientmopts 参数可用于传递自定义配置目录,但需要更多代码行:

config = '/home/user/saltenv/etc/salt/master'
defaults = dict(salt.config.DEFAULT_MASTER_OPTS)
defaults['config_dir'] = os.path.dirname(config)
master_opts = salt.config.client_config(config, defaults=defaults)
c = SSHClient(mopts=master_opts)

关于python - 如何通过Python API调用salt-ssh(SSHClient),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49510772/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com