Ansible目标特定主机(不是delegate_to)

时间:2016-10-17 07:21:19

标签: ansible

我的游戏中有3个主机。

[机器]

  • MACHINEA
  • 到machineB
  • 机C

MongoDB在这些服务器上运行。其中一个服务器可以是Mongo的MasterDB。

因此,这些机器中的每一台都可以成为“主人”。这是通过设置机器是否为主机的事实来确定的,在此示例中仅针对MachineA:

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

这也适用于MachineB和MachineC。

实现的任务:仅在主机上运行命令,主机具有" MasterHost"。 我尝试了delegate_to模块,但delegate_to也使用了另外两台机器:

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

我想在我的playbook中定位主控器,并且只在主控器上运行命令,而不是在shell中通过--limit选项运行。

2 个答案:

答案 0 :(得分:0)

假设运行命令以检查主机是否是主机并不昂贵,您可以不设置特定事实:

- 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"

在所有主机上运行播放,只有主控播放器才会运行some task

答案 1 :(得分:0)

最终,这是我的答案。对不起第一篇文章,仍然在学习如何发表一篇好文章。日冰

  - 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"

感谢您帮助我并指出了正确的方向。