2014-01-12 32 views
1

我写在Python中SaltStack API的一个小程序,我得到一个错误使用Python和saltstack错误

import salt.client 
SnakeInSalt = salt.client.LocalClient() 
SnakeInSalt.cmd('*',test.ping) 

错误:

python test.py 
Traceback (most recent call last): 
File "test.py", line 4, in <module> 
SnakeInSalt.cmd('*',test.ping) 
NameError: name 'test' is not defined 

如果我从命令运行salt行,它的工作

> sudo salt '*' test.ping 

> [sudo] password for z: 

> z-ThinkPad: 
> True 

回答

1

我可以认为这不再是你需要回答的问题吗? (我还是要去回答它)

当你运行你正在运行内置在模块测试功能名为ping的sudo salt '*' test.ping。要查看可用模块列表,请使用sudo salt '*' sys.list_modules test。您可以通过输入salt '*' sys.list_funtions test来查看该模块中的功能列表。命令sudo salt '*' test.ping应该适用于世界上的每个salt设置,而不是测试您编写的任何自定义状态或模块。

你的是,因为你使用了错误的语法和你打电话的CMD模块代替测试模块打破。你的代码应该是这样的:

import salt.client 
SnakeInSalt = salt.client.LocalClient() 
SnakeInSalt.cmd('*', 'test.ping') 

唯一的区别是,test.ping需要加上引号(双或单)括起来。您可以参考https://docs.saltstack.com/en/latest/ref/clients/#salt.client.LocalClient.cmd查看可用于.cmd()的所有参数。你缺乏的是知识,cmd需要第二个参数fun(函数的简写)需要是一个字符串。这不会为你转换,所以你需要用引号包围它。

您也可以参考https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.test.html#salt.modules.test.ping看到由测试模块的ping功能需要什么样的参数。 扰流警报 ......答案是没有,但看起来你已经知道了。

干杯!

+0

无论如何回答他们。 99%的眼睛来自非提问者(OP) – Drew