
ちょっとした助けが必要です。
shell
以下の例では、モジュールに置き換える必要があります。しかし、パイプでは機能しないcommand
ので混乱しています 。command
それで、このタスクの解決策を教えてください。例:
- name: Get the version
become: true
run_once: true
shell: zypper pa | grep eric-odl | awk -F {'print $4'}
register: odl_version
各コマンドの出力は次のコマンドに依存しているため、このタスクをどのように分割すればよいでしょうか?
答え1
shell
モジュールに交換する必要がありますcommand
。
おそらく、なぜそうするのか、何を達成しようとしているのかについての背景情報をもっと提供できるでしょう。
現時点では、man zypper
あなたが試みているように
パッケージ (pa) [オプション] [リポジトリ]...
利用可能なすべてのパッケージ、または指定されたリポジトリのすべてのパッケージを一覧表示します。 に似ています
zypper search -s -t package
。
最初に何かを始め、その後でさらに進めていくのが好きです。
command
しかし、パイプが機能していないので混乱しています。
そうです、それがその場合であり、意図された動作です。例を参照してください
command
モジュール – ターゲット上でコマンドを実行するコマンドはシェルを介して処理されないため、変数や「 」、「」、「 」、「」、「」、「」、および「 」
$HOSTNAME
などの演算は機能しません。*
<
>
|
;
&
ansible.組み込みシェルこれらの機能が必要な場合はモジュールを使用してください。shell
モジュール – ターゲット上でシェルコマンドを実行するそれはほとんどansible組み込みコマンド
/bin/sh
モジュールではなく、リモート ノード上のシェル ( ) を介してコマンドを実行します。
この課題の解決策を教えてください
「その解決策」というものはありませんが、最も好ましいアプローチから最も好ましくないアプローチまでの次のリストを参照することができます。
- 使用
package_facts
パッケージ情報を事実として取得するためのモジュール - 評価する
zypper
SUSEおよびopenSUSE上のパッケージを管理するためのモジュール - のような andまたはを
zypper
必要としない他の構文でコマンド を使用するgrep
awk
- または独自のカスタムモジュールの作成
- または
script
モジュールを転送した後、リモートノード上でローカルスクリプトを実行する
または、少なくともshell
パイプ付きのコマンド(および現在の例)を使用してください。