かまたま日記3

プログラミングメイン、たまに日常

Ansibleでパイプを使いたい場合はshellモジュールを使う

AnsibleにはCommandモジュールShellモジュールがあるのですが、commandモジュールは安全な代わりに一つのコマンドしか実行できません。|;なんかを使って複数のコマンドを同時に実行したい場合はShellモジュールを使いましょう。

Commandの場合はパイプ以降が解釈されてないのかechoの出力として表示されます。

% ansible node1 -i ./hosts -m command -a 'echo "Hello World" | cut -d" " -f 1'
node1 | success | rc=0 >>
Hello World | cut -d  -f 1

Shellの場合はちゃんと想定通りの結果が返ります。

% ansible node1 -i ./hosts -m shell -a 'echo "Hello World" | cut -d" " -f 1'
node1 | success | rc=0 >>
Hello