2017-10-25 6 views
-2

私は、2つのサーバでマスター/スレーブレプリケーションをセットアップすることを可能にする単純なmariadbロールを持っています。これを行うために、私は自分のインベントリにこのような私の2つのノードを定義する必要があります。この道をマスタ/スレーブ変数を動的に割り当てます。

node1 master=true 
node2 slave=true 

を、私は文は、このVARSで遊んでたときにAnsibleを使用してセットアップマスタ/スレーブレプリケーションのセットアップ1つの役割をすることができます。

- name: Setup master conf 
    template: >- 
    src="templates/master.conf.j2" 
    dest="{{ master_config_file }}" 
    when: 
    - master is defined 

今、私は他のすべてのノードへの動的かつランダムに一つのノードにマスター変数を割り当てることができ、より自動何か、およびスレーブ変数を取得したいと思います。

私は変数とフィルタについていくつかのAnsibleドキュメントを見てきましたが、どれもそれに適応していないようです。私はそれをするために私自身のAnsible変数プラグインを開発しなければならないと思う。

+1

「ランダム」は自動化の敵です。予測可能な冪等規則を定義し、それに従ってください(私はこれが標準的なフィルタ/演算子ででき、開発は必要ないと確信しています)。 –

+0

ランダムには、ノードのリスト内のマスターサーバーをランダムに選択することを意味します。このようにして、私が私のVMをスポーンすると、そのどれも特化されません。私は彼らが自動的に私の最初のAnsibleを専門とするようにしたいと思います。返信いただきありがとうございます。私は、既存のAnatileフィルタをもう一度見直し、必要なものが見つからない場合は実装します。 – Quentin91360

+0

プレイブックを再実行しているのは何ですか? –

答えて

0

facts.dを利用できます。このような何か:

- hosts: all 
    become: yes 
    tasks: 
    - file: 
     path: /etc/ansible/facts.d 
     state: directory 
    - shell: echo '{{ my_facts | to_json }}' > /etc/ansible/facts.d/role.fact 
     args: 
     creates: /etc/ansible/facts.d/role.fact 
     vars: 
     my_facts: 
      is_master: "{{ true if play_hosts.index(inventory_hostname) == 0 else false }}" 
     register: role_fact 
    # refresh facts if fact has been just added 
    - setup: 
     when: role_fact | changed 
    - set_fact: 
     is_master: "{{ ansible_local.role.is_master }}" 
    - debug: 
     var: is_master 

これは、それが存在しない場合は、リモート・ノード上role.factを作成し、それからis_master事実を使用します。その後の実行中にansible_local.role.is_masterが自動的にフェッチされます。

関連する問題