私は以下のことをどのようにして達成することができますか?私はサーバーのリスト内で複数の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
を更新する:ここ
あなたの例で 'groups ['app']'とは何ですか?実行可能なサーバのリストでタスクを実行するには、プレイの 'hosts:'パラメータを使用します。異なるパラメータで同じタスクを実行するには、タスクのパラメータに 'with_items:'と '{{item}}'プレースホルダを使用します。ネストされたループが必要な場合(たとえば、ファイル内のいくつかの異なるアプリケーションに対して複数の異なる行を変更する場合)、 'with_nested:' [docs](http://docs.ansible.com/ansible/playbooks_loops.html#nested-loops) 。いずれの場合でも、タスクの名前(あなたの例では 'lineinfile')は常に1回だけ指定されます。 –
@constantinSuvorov 'groups [app]'ではなく 'hosts'にすることができます。私はいくつかの同様のタスク*をサーバーのリストで実行したいです。私は 'with_nested'を使って運が得られませんでしたが、この場合の例を挙げられますか? –
'lineinfile'はアンチパターンです。 'template'を考慮する必要があります。 – tedder42