2015-11-05 12 views
5

私はwith_items:と似たようなものを探していますが、そのファイルをプレイブックファイルに含めるのではなく、ファイルからアイテムのリストを取得します。ファイル内の各行を安全な方法でループするにはどうすればよいですか?

私はこれをどのようにしてできるのですか?

+0

あなたのリストのための変数を別々のファイルに作成し、 'with_items'で変数を使用するのはなぜですか? – frank

+0

私は、1行に1つのテキストファイルが必要であることを明確に述べました。このファイルは外部で生成されるので、*なぜ*必要なのですか? – sorin

+1

私は自分の答えを削除しました。小さな誤解 – frank

答えて

7

あなたは

item 1 
item 2 
item 3 

のようなファイルがあり、これらはitems.Simply register.Andがwith_itemsために、この変数を使用して使用して変数にファイルの内容を取得し、インストールしたいとしましょう。ファイルに1行に1つの項目があることを確認します。

--- 
- hosts: your-host 
    remote_user: your-remote_user 
    tasks: 
    - name: get the file contents 
    command: cat /path/to/your/file 
    register: my_items 
    - name: install these items 
    pip: name:{{item}} 
    with_items: my_items.stdout_lines 
+0

' stdout_lines'キーを使う準備ができました –

+0

ありがとうございました。それでも、私はもう簡単なアプローチを見つけることができました: 'with_lines' – sorin

+2

@vp_arth、チップをありがとう、答えを更新しました。 – frank

14

私は簡単な代替手段を見つけることができた:

- debug: msg="{{item}}" 
    with_lines: cat files/branches.txt 
+4

リモートでコマンドを実行すると動作しません:http://docs.ansible.com/ansible/playbooks_loops.html#iterating-over-the-results-of-a-program-execution – Fadi

2

私は誰もansible Lookupsを述べていないことを驚いて、私はそれが正確に何をしたいと思います。

それはあなたがあなたの脚本で使用したい けど(脚本内 からファイル、パイプCSVのRedis 、ローカル制御マシンからなどがない含めたくない内容を読み取り

ほとんどの場合、これらのコンテンツはあなたのローカルマシン上のあなたのプレイブックのそばにあるので、それは重要です)、それは不可能なループで動作します。ここ

--- 
- hosts: localhost 
    gather_facts: no 
    tasks: 
    - name: Loop over lines in a file 
     debug: 
     var: item 
     with_lines: cat "./files/lines" 

with_linesコードhereを参照してください、lines検索がどのように動作するかを確認するために、実際にライン・ルックアップとループで、それはちょうどあなたがそれを与える任意のコマンドを実行します(そう、あなたはそれをエコーのような任意のものを与えることができ、猫など)、に分割して出力し、それを返します。

包括的なリストを得るには、多くの強力な検索があります。lookup plugins folderをチェックしてください。

+0

これは、リモートでコマンドを実行する:http://docs.ansible.com/ansible/playbooks_loops.html#iterating-over-the-results-of-a-program-execution – Fadi

関連する問題