2016-06-24 29 views
0

私は以下のことをどのようにして達成することができますか?私はサーバーのリスト内で複数のlineinfileを実行したい。with_itemsで複数のlineinfileコマンドを実行

私は次の操作を行う場合は、ansibleは私が無駄に巣with_itemsしようとしたので繰り返さlineinfile

- name: ensure /etc/environment is correct 
    tags: env 
    with_items: "{{ hosts }}" 
    lineinfile: dest=/etc/environment regexp=^PROFILE=line=PROFILE={{prof}} 
    lineinfile: dest=/etc/environment regexp=^OTHER=line=OTHER={{other}} 

を訴えます。に動的グループとネストされたループを使用:

- hosts: server1, server2 
    tasks: 
    - lineinfile: dest=/tmp/testfile regexp={{item.regex}} line={{item.replace_with}} 
     with_items: 
     - regex: ^PROFILE= 
      replace_with: PROFILE=my_new_profile 
     - regex: ^OTHER= 
      replace_with: OTHER=my_new_other 

を更新する:ここ

+0

あなたの例で 'groups ['app']'とは何ですか?実行可能なサーバのリストでタスクを実行するには、プレイの 'hosts:'パラメータを使用します。異なるパラメータで同じタスクを実行するには、タスクのパラメータに 'with_items:'と '{{item}}'プレースホルダを使用します。ネストされたループが必要な場合(たとえば、ファイル内のいくつかの異なるアプリケーションに対して複数の異なる行を変更する場合)、 'with_nested:' [docs](http://docs.ansible.com/ansible/playbooks_loops.html#nested-loops) 。いずれの場合でも、タスクの名前(あなたの例では 'lineinfile')は常に1回だけ指定されます。 –

+0

@constantinSuvorov 'groups [app]'ではなく 'hosts'にすることができます。私はいくつかの同様のタスク*をサーバーのリストで実行したいです。私は 'with_nested'を使って運が得られませんでしたが、この場合の例を挙げられますか? –

+0

'lineinfile'はアンチパターンです。 'template'を考慮する必要があります。 – tedder42

答えて

2

は、ファイル/ tmp/testfileこれは、PROFILE my_new_profileに設定され、server1とserver2の両方にmy_new_otherために設定された他があることを確認する例ハンドブックでありますtestfile_host1とtestfile_host2という2つのファイルを作成します。このファイルは、前の演習で作成したmy_dynamic_groupグループのすべてのサーバーに存在します。

- hosts: localhost 
    tasks: 
    - add_host: name={{ item }} groups=my_dynamic_group 
     with_items: 
     - server1 
     - server2 

- hosts: my_dynamic_group 
    tasks: 
    - lineinfile: dest=/tmp/testfile_{{ item[0] }} regexp={{item[1].regex}} line={{item[1].replace_with}} create=yes 
     with_nested: 
     - [ 'host1', 'host2' ] 
     - [ 
      { regex: '^PROFILE=', replace_with: 'PROFILE=my_new_profile' }, 
      { regex: '^OTHER=', replace_with: 'OTHER=my_new_other' } 
      ] 
+0

既に異なる{{{hosts}} 'を使用しているため、これを使用できません。 –

+0

あなたが何を意味しているのかよく分かりませんが、私はダイナミックグループとネストされたループの例。 –

関連する問題