我正在使用Python中的SaltStack API编写一个小程序,我收到错误
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
答案 0 :(得分:1)
我可以假设这不再是您需要回答的问题吗? (无论如何我都会回答)
当您运行sudo salt '*' test.ping
时,您正在模块测试中运行名为ping的内置函数。要查看可用模块列表,请使用sudo salt '*' sys.list_modules test
。您可以通过键入salt '*' sys.list_funtions test
来查看该模块中的功能列表。命令sudo salt '*' test.ping
应该适用于世界上的每个盐设置,而不是对您编写的任何自定义状态或模块的测试。
您的错误是因为您使用了错误的语法并且您正在调用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函数所需的参数。 剧透警报 ......答案是否定的,但看起来你已经知道了。
干杯!