2016-06-30 17 views
1

塩実行モジュールを作成しようとしていて、モジュール内でcmd.runを正しく使用するのに問題があります。SaltStack実行モジュールが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 

これはファイルに猫を使用し、該当する行をgrepするとして、私が期待するものです。しかし、ときに私は関数としての私の実行モジュールでこれを実装する:

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

と私はモジュールを同期した後、それを呼び出す:

salt-call example.foo 

それは(2番目のエラーがちょうどちょっとの内容を印刷している返します.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を認識しておらず、単にコマンドライン上の猫のすべてにしようとしているかのように見えますが、情報COMMを語ります私はcmd.runを呼び出すことによって直接行ったのとまったく同じように実行されていたので、なぜこれが起こっているのか混乱しています。

+1

あなた自身の質問に答えることができ、あなたと同じ質問に遭遇する可能性のある他の人を助けることができます:) –

答えて

0

これは、パイプなどのシェル機能を使用できるpython_shellが、モジュールのcmd.runに対してデフォルトでFalseに設定されているためです。モジュールのcmd.run呼び出しにpython_shell = Trueを渡すだけで問題は解決します!

関連する問題