2017-05-10 14 views
0

私のプレイブックはAWSでアプリケーションの複数のインスタンスを作成しています。各インスタンスにカウンタ変数をタグ付けして、各インスタンスのカウントとIDを維持する(インスタンスID他の任意のid)。さて、プロビジョニングが並行して起こるので、私は一貫したカウンタ変数を得ることに失敗しています。 グローバル変数を使用してプレイを増やしてみましたが、setファクトが1回実行されると常に初期値が返されます。 私は、変数をファイルに入れて、すべてのホストに対して読み込み、インクリメントを試みました。これは競合状態につながり、異なるホストに対して同じ値が表示されます。これを行う方法はありますか?同期カウンタ変数を使用する可能性

+1

[連続する整数をホスト名として割り当てるためのループ](http://stackoverflow.com/questions/41628806/ansible-loops-for-assigning-sequential-integers-as-hostnames) –

答えて

0

あなたec2.iniファイルが停止のインスタンスを取得するために

all_instances = True 

を持っていると仮定すると、彼らはすでに意味では、タグ付けされています。

Webサーバ[1]は常にあなたのインベントリの変更まで、同じホストになるだろう。

ただし、依然として必要に応じてインスタンスにタグを付けることができますが、在庫が変更された場合は、新しいインスタンスに一意の番号を付けるのが難しい場合があります。

- name: Loop over webserver instances and tag sequentially 
    ec2_tag: 
    state: present 
    tags: 
     myTag: "webserver{{item}}" 
    resource: "{{ hostvars[groups['webserver'][item|int]]['ec2_id'] }}" 
    with_sequence: start=0 end="{{ groups['webserver']|length - 1 }}" 
    delegate_to: localhost 

N.B:アイテムが文字列であるので、我々は使用する必要があります| グループ[ 'Webサーバ']配列から引っ張っ [アイテムをINT]。

関連する問題