2016-06-30 20 views
1

Ich versuche, ein Salzausführungsmodul zu erstellen, und ich habe Probleme, cmd.run korrekt im Modul zu verwenden.SaltStack-Ausführungsmodul kann cmd.run nicht korrekt verwenden

Wenn ich laufen (masterless Günstling verwenden):

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

ich:

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

das ist, was ich erwarten würde, wie diese Katze auf die Datei verwendet und greps die entsprechende Zeile. Allerdings, wenn ich dies als eine Funktion in meinem Ausführungsmodul implementieren:

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

und ich nenne es nach dem Modul Synchronisierung:

salt-call example.foo 

es gibt (den zweiten Fehler gerade druckt den Inhalt 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 

so scheint es, als ob aus irgendeinem Grund ist es nicht das grep als Befehl zu erkennen und versucht, nur zu Katze alles auf der Kommandozeile, aber die INFO sagt der comm und wurde genau so ausgeführt, als ob ich es direkt durch Aufruf von cmd.run gemacht hätte, also bin ich verwirrt darüber, warum das passiert.

+1

Sie können Ihre eigene Frage beantworten und akzeptieren, um anderen zu helfen, die dieselbe Frage wie Sie stellen können :) –

Antwort

0

Der Grund dafür ist, weil python_shell, mit dem Sie Shell-Features wie Pipes verwenden können, defaults auf False für cmd.run in einem Modul. Einfach python_shell = True übergeben an cmd.run Aufrufe im Modul löst das Problem!