2015-11-05 23 views

答えて

15

with_*ルーピングメカニズムはすべて残念ながらローカルルックアップですので、Ansibleでこれを行うには本当にクリーンな方法はありません。デザインによるリモート操作は、接続や在庫などを扱う必要があるため、タスクに囲まなければなりません。

あなたができることは、ホストにシェルリングして出力を登録し、stdout_lines部分出力の

だから、簡単な例は、このようなものになることがあります。これは、リモートホスト(例えば、host.example.com)に接続/path/下のすべてのファイル名を取得し、Ansibleのホストに戻ってコピーする

- name : get files in /path/ 
    shell : ls /path/* 
    register: path_files 

- name: fetch these back to the local Ansible host for backup purposes 
    fetch: 
    src : /path/"{{item}}" 
    dest: /path/to/backups/ 
    with_items: "{{ path_files.stdout_lines }}" 

パス:/path/host.example.com/

- name: get all managed vhosts 
    shell: find /etc/nginx/sites-enabled/ -type f -name \*-managed.conf 
    register: nginx_managed_virtual_hosts 

- name: delete all managed nginx virtual hosts 
    file: 
    path: "{{ item }}" 
    state: absent 
    with_items: "{{ nginx_managed_virtual_hosts.stdout_lines }}" 

あなたは、特定の持つすべてのファイルを見つけるためにそれを使用することができます:ls /path/*を使用して

+0

あなたの経験上、これを行うとWindowsとLinuxの間の行末に問題がありますか?例えば。いくつかの 'with_items'は' dir/b'からstdoutをコピーして空白にしますか? – Nick

2

はので、ここですべてのnginxのは、仮想ホストを管理し、削除しfindといくつかの簡単な正規表現を使用した例ですが、私のために動作しませんでした拡張子またはその他の任意の組み合わせ。たとえば、ディレクトリ内のすべてのファイルを取得するには:find /etc/nginx/sites-enabled/ -type f

関連する問題