使用Salt的LocalClient,如何在test.ping命令中实现相同结果或指定'-v'参数?
通过命令行界面(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。