SaltStack执行模块无法正确使用cmd.run

时间:2016-06-30 17:02:09

标签: python grep salt-stack

我正在尝试创建一个salt执行模块,但我在模块中正确使用cmd.run时遇到了问题。

如果我跑(使用无主的奴才):

salt-call cmd.run "cat hey.txt | grep 'hey there'"

我明白了:

[INFO    ] Executing command 'cat hey.txt | grep 'hey there'' in directory '/root'
local:
    hey there

这就是我所期望的,因为它在文件上使用了cat并且对应了相应的行。但是,当我在执行模块中将其作为函数实现时:

def foo():
     return __salt__['cmd.run']("cat hey.txt | grep 'hey there'")

我在同步模块后调用它:

salt-call example.foo

它返回(第二个错误只是打印hey.txt的内容):

[INFO    ] Executing command 'cat hey.txt | grep 'hey there'' in directory '/root'
[ERROR   ] Command 'cat hey.txt | grep 'hey there'' failed with return code: 1
[ERROR   ] output: hey there
stranger
I like your
boots
cat: '|': No such file or directory
cat: grep: No such file or directory
cat: 'hey there': No such file or directory
local:
   hey there
   stranger
   I like your
   boots
   cat: '|': No such file or directory
   cat: grep: No such file or directory
   cat: 'hey there': No such file or directory

因此似乎由于某种原因它没有将grep识别为命令,并且只是试图在命令行上捕获所有内容,但是INFO说命令运行完全一样,就像我直接执行它一样通过调用cmd.run,所以我很困惑为什么会发生这种情况。

1 个答案:

答案 0 :(得分:0)

原因之所以这是因为python_shell允许你使用管道等shell功能,对于模块中的cmd.run默认为False。只需将python_shell = True传递给模块中的cmd.run调用即可解决问题!