2016-10-17 5 views
-1

私のプレイには3つのホストがあります。可能なターゲット固有のホスト(delegate_toではない)

[マシン]

  • マシンA
  • マシンB
  • MachineC

MongoDBは、これらのサーバー上で実行されます。また、これらのサーバーの1つはMongoのMasterDBになることができます。

したがって、これらのマシンのそれぞれは「マスター」になることができます。これは、マシンがマスターである場合のみ、マシンAが目標とされ、この例では、事実を設定することによって決定されます。また、これはマシンBとMachineCのために行われる

- name: check if master 
    shell: 'shell command to check if master' 
    set_fact: MasterHost="machineA" 
    when: 'shell command to check if master'.stdout == "true" 

ミッションを達成する: "MasterHost"という事実を持つマスターマシン上でのみコマンドを実行する。 私はdelegate_toモジュールを試してみましたが、delegate_toは、2台の他のマシンを使用しています:

- name: some task 
    copy: src=/tmp/test.txt dest=/tmp/test.txt 
    delegate_to: "{{ MasterHost }}" 

私は私の脚本でマスターにそれをターゲットとだけ--limitを介してマスタ上ではなく、シェルでコマンドを実行したいですオプション。ある

- name: check if master 
    shell: 'shell command to check if master' 
    register: master_check 

- name: some task 
    copy: src=/tmp/test.txt dest=/tmp/test.txt 
    when: master_check.stdout == "true" 

を実行し、すべてのホスト上の遊びとのみ1:ホストがマスターであるかどうかを確認するには、コマンドの実行を想定し

+0

'shell'と' set_fact'はモジュールなので、最初のタスクには構文エラーがあります。あなたの2番目のタスクの目的は完全に不明です。 master.stdout == "true" 'のようなときは必要ないようですが、あなたが望むものを指定しない限り、それは推測ゲームです。 – techraf

+0

これは基本的な例であり、構文エラーはさておきました。 私はMasterHostでコマンドを実行し、プレイ中の他のホストを除外したいと考えています。 – Kevin

答えて

0

あなたが特定の事実を設定せずに行くことができ、コストのかかるではありませんマスターはsome taskを実行します。

+0

答えをありがとう。 – Kevin

+0

...まだstackoverflowに慣れていて、正しくコメントしたり、編集したりする方法もあります。 とにかく、私のために働いたのは 'code'run_onceを使うことでした:true – Kevin

+1

@Kevin' run_once'と 'delegate_to'は間違った道です。 @ demienfrancoisのアドバイスを使用してください。 –

0

最終的にはこれが私の答えでした。初めての投稿には申し訳ありませんが、まだ良い投稿をする方法を学んでいます。 Hihi

- name: Check which host is master 
    shell: mongo --quiet --eval 'db.isMaster().ismaster' 
    register: mongoMaster 

    - name: Set fact for mongoMasterr 
    set_fact: MongoMasterHost="{{ item }}" 
    with_items: "{{ groups['HOSTS'] }}" 
    when: mongoMaster.stdout == "true" 

    - name: Copy local backup.tgz to master /var/lib/mongodb/backup 
    copy: src=/tmp/backup.tgz dest=/var/lib/backup/backup.tgz 
    when: mongoMaster.stdout == "true" 

私を正しい方向に向けて助けてくれてありがとう。

関連する問題