2017-01-10 3 views
1

group_namesから最初の不可能なホスト名を見つける方法がわかりません。あなたはそれをどうやるのか、親切に私にアドバイスできますか?グループの最初のホスト名

ホスト

[webservers] 
server1 
server2 
server3 

[webserver-el7] 
server4 
server5 
server6 

と私は問題があることを、各ホストグループ

playbook1.yml

- name: deploy app 
    hosts: webservers 
    serial: 8 
    roles: 
    - roles1 

playbook2.yml

- name: deploy app 
    hosts: webservers-el7 
    serial: 8 
    roles: 
    - roles1 

のための2つの異なる脚本を持っています私 各グループの最初のホストに委任タスクを持っています。以前私はWebサーバグループを使用するので、私は、各グループの最初のものを選択することができますどのように、私は2つの異なるGROUP_NAMESをお持ちの場合は

- name: syncing web files to {{ version_dir }} 
    synchronize: 
    src: "{{ build_dir }}" 
    dest: "{{ version_dir }}" 
    rsync_timeout: 60 
    delegate_to: "{{ groups.webservers | first }}" 

以下のタスクを使用して、はるかに簡単でしたか?よりダイナミックにすることができます

答えて

2

現在のプレイの最初のホストを同期元のマスターホストにしたい場合は、別の方法をお勧めします:play_hostsまたはansible_play_hostsのいずれかを使用してください(Ansibleバージョンに応じて)変数。 magic variablesを参照してください。
のようにdelegate_to: "{{ play_hosts | first }}"

hosts: webservers-el7をAnsibleにするとwebservers-el7はこちらのパターンです。このパターンと一致するようにホストを検索し、Playにフィードします。あなたはwebservers-el*も書いているかもしれません。プレイ中には、あなたに言う変数がありません"私はグループwebserver-el7のホストでこのPlayを実行しています..."group_namesgroupsの魔法の変数を分析するだけの推測作業を行うことができます。しかし、あなたがいくつかのグループに1つのホストを持っている場合、これは不器用になります。ただ一つのグループ内のホストのために

、あなたが試すことがあります。groups[group_names | first] | first

+0

ちょうどプレイホストを試してみましたが、私はシリアルの展開を使用していなかった場合を除き、それは完璧に動作します。私はマスターホストを使用して同期しますが、次のシリアルプレイでは最初のplay_hostsが再び変更されます。現在、私のホストは単一のグループにしか属しません。 group_namesから最初のホスト名を取得する方法を知っていますか?私はすでにいくつかの変数を試しましたが、まだ運がありません。 – AlamHo

+0

例を使って答えを更新しました。また、Ansible 2.2+を 'ansible_play_hosts'と一緒に使うことも考えられます - それはそれぞれのシリアル実行の完全なリストを含んでいます。 –

+0

ニース。それは本当にうまくいく。 ansible_play_hostsも機能します。あなたの可能な専門知識のおかげで多くの – AlamHo

関連する問題