2017-10-25 4 views
-2

두 개의 서버에서 마스터/슬레이브 복제를 설정할 수있는 간단한 mariadb 역할을 가지고 있습니다. ,마스터 역할/슬레이브 변수를 동적으로 할당합니다.

node1 master=true 
node2 slave=true 

이 방법을 내가 설정 문이 바르와 함께 연주 할 때 Ansible를 사용하여 설정 마스터/슬레이브 복제 한 역할을 할 수 있습니다 :이 작업을 수행하기 위해, 나는 이런 식으로 내 인벤토리에 제 2 개 노드를 정의해야합니다.

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

지금, 나는 다른 모든 노드에 동적으로 무작위로 하나 개의 노드에 마스터 변수를 지정할 수 있습니다 더 자동 뭔가 및 슬레이브 변수를 좀하고 싶습니다.

변수와 필터에 관한 몇 가지 유능한 문서를 보았지만 그 중 어느 것도 적응되지 않는 것으로 보입니다. 나는 그것을하기 위해 내 자신의 Anabilities 변수 플러그인을 개발해야한다고 생각한다.

+1

"무작위"는 자동화의 적입니다. 예측 가능한 멱등 원 규칙을 정의하고 따르십시오 (표준 필터/연산자로 수행 할 수 있고 개발이 필요 없다고 확신합니다). –

+0

무작위로 말하자면, 노드 목록에서 임의로 마스터 서버를 선택하는 것입니다. 이렇게하면 VM을 생성 할 때 그 중 아무 것도 특화되지 않습니다. 나는 그들에게 자동적으로 첫 번째 Ansible run을 전문화 해주기를 바란다. 답장을 보내 주셔서 감사 드리며, 기존의 Ansible 필터를 다시 살펴보고 내가 원하는 것을 찾지 못하면 구현할 것입니다. – Quentin91360

+0

그리고 무슨 플레이 북을 재실행하고 있습니까? –

답변

0

facts.d을 사용할 수 있습니다. 이런 식으로 뭔가 : 이것은이없는 경우 원격 노드에 role.fact를 만들고 그것에서 is_master 사실을 사용합니다

- 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 

. 연속 실행 중에 ansible_local.role.is_master이 자동으로 가져옵니다.