使用Salt的LocalClient,如何在test.ping命令中实现相同结果或指定'-v'参数?

1 投票
3 回答
1001 浏览
提问于 2025-04-18 18:07

通过命令行界面(CLI),我可以输入以下内容:

salt '*' test.ping -v

执行后得到的结果如下:

minion_A:
True
minion_B:
True
minion_C:
True
minion_D:
Minion没有返回结果

我想知道如何使用 LocalClient 得到相同的结果?这是我目前尝试的代码,但只返回了响应为 True 的小助手:

self.localClient.cmd('*', 'test.ping', ['-v'])  

更新:
根据提示,可能在命令中的 arg 元组存在一个 bug,我还尝试了以下内容:

args = ('-v',)
return self.localClient.cmd('*', 'test.ping', arg=args)

...可惜,还是没有成功

3 个回答

2

文档中没有提到一个参数 show_timeout,这个参数可以设置为 True,这样就可以包含那些超时的从属机器(minions)的结果,而且每次也不会打印调试信息。我在 salt 2015.8.4 (Beryllium) 上测试过,但看起来在写这段话的时候,这个参数的默认值还是 False

代码

import salt.client
from pprint import pprint
local = salt.client.LocalClient()

# Use show_timeout=True to make salt return
# results for disconnected minions
pings = local.cmd('*', 'test.ping', show_timeout=True)
pprint(pings)

输出

{'host_one': True,
 'host_two': 'Minion did not return. [Not connected]',
 'host_three': True}
6

test.ping 这个函数不需要任何参数,-v 是传给 salt 命令的。你可以查看这个链接了解更多信息:ping

下面这两个命令是一样的:

# salt '*' test.ping -v
Executing job with jid 20140825123756314894
-------------------------------------------

palabras:
    True

# salt '*' -v test.ping
Executing job with jid 20140825124044472307
-------------------------------------------

palabras:
    True

如果你想获取原始输出的原版,可以使用以下代码。(你也可以直接调用 SaltCMD 来获取完整的、格式化的输出,但它会使用自己的 LocalClient。)

source

from pprint import pprint
import salt.client
local = salt.client.LocalClient()
pprint( local.cmd_full_return(
    '*', 'test.ping', verbose=True,
    ) )

output

Executing job with jid 20140825131629740741
-------------------------------------------

{'palabras': {'ret': True, 'success': True}}
0

我能做的最好就是从 localClient 执行一个 test.ping

如果返回的结果是 {},我就认为 salt-master 返回了 False。否则,就收到了 True。

撰写回答