1

我正在用 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
4

1 回答 1

1

我可以假设这不再是您需要回答的问题吗?(无论如何我都会回答)

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

你的坏了,因为你使用了错误的语法并且你调用了 cmd 模块而不是 test 模块。您的代码应如下所示:

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 函数需要哪些参数测试模块。 剧透警报......答案是否定的,但看起来你已经知道了。

干杯!

于 2016-01-07T18:37:02.650 回答