これを解決するには、EC2 インスタンスを作成するときに、各 EC2 インスタンスにタグとして番号を割り当てます。次に、ファイルを作成するときにそのタグを参照しmyid
ます。以下は、簡潔にするためにすべての重要でないフィールドを省略して EC2 インスタンスを作成するために使用したタスクです。
- name: Launch EC2 instance(s)
with_sequence: count="{{ instance_count }}"
ec2:
instance_tags:
number: "{{ item }}"
次に、これらのサーバーに ZooKeeper をインストールするときに、動的インベントリを使用してタグ付けされたすべてのサーバーを取得し、ファイル内のタグzookeeper
を使用します。number
myid
- name: Render and copy myid file
copy: >
content={{ ec2_tag_number }}
dest=/etc/zookeeper/conf/myid
注: EC2 インスタンスを作成するときは、モジュール内のフィールドではwith_sequence
なく使用する必要がありました。そうしないと、タグをキャプチャするためのインデックスがありません。count
ec2
Playbook で現在のクラスターにノードを追加できるようにしたい場合は、タグ付けされた EC2 インスタンスの数を照会し、zookeeper
それを反復インデックスに追加できます。何もない場合は 0 になるので、通常はこれで問題current_instance_count
ありません。
- name: Determine how many instances currently exist
shell: echo "{{ groups['tag_zookeeper'] | length }}"
register: current_instance_count
- name: Launch EC2 instance(s)
with_sequence: count="{{ instance_count }}"
ec2:
instance_tags:
number: "{{ item|int + current_instance_count.stdout|int }}"