コマンドラインで ansible を使用してアドホック コマンドを実行する場合、ワイルドカードは非常に便利です。ファイルがすべてのシステムに存在するかどうかを確認します。
私も苦労しました:$ ansible production -a "ls /mypath/*xxx*"
しかし、それを bash -c '...' でラップすると動作します:$ ansible production -a "bash -c 'ls /mypath/*xxx*'"
このように定義されたタスクは、トリックを行います:
- name: Move internal directories and files
command: bash -c 'mv /tmp/parent-dir/* /opt/destination/'
Larsks が書いたように、キーは register
を使用することです 、しかし、コードは現在の ansible バージョンでは機能していませんでした。これが修正されたものです:
- shell: ls -d solr*
register: dir_name
- command: chdir={{ item }} some_command
with_items: dir_name.stdout_lines
いいえ、chdir=
たとえば、 command
へのパラメーター モジュールはワイルドカードをサポートしていません。
ls
の出力を格納するレジスタ変数を使用して、目的を達成できます。 コマンド:
- shell: ls -d solr*
register: dir_name
- command: some_command
args:
chdir: "{{ dir_name.stdout }}"
しかし、率直に言って、これは醜い解決策です。実際のディレクトリ名だけを使用する方がよいでしょう。ホストによって異なる場合は、ホスト変数を使用して適切に設定できます。