是否有一个平衡的概念可以跨多个主机创建虚拟机?

时间:2018-11-05 11:30:10

标签: ansible

我有两个主机,我想创建四个虚拟机。 ansible中是否有一个平衡的概念,它将在每个主机上按如下方式创建两个虚拟机?

主机1:VM1,VM3,...

主机2:VM2,VM4,...

我知道我可以指定在其上创建VM的主机,但这有点严格,因为我可能会添加更多的主机和更多的虚拟机,并且如果可能的话,我希望使用动态解决方案。

我能管理的最好的是:

    with_items:
##    - "{{ groups.production }}"
    - prod-test1
    delegate_to: "{{ groups['control'][1] }}"

这远非理想,因为它需要硬引用主机组成员和虚拟机项目。

1 个答案:

答案 0 :(得分:0)

没有通用的概念可以做这样的事情,但是存在可能的解决方案。有点难看,但这对我有用。鉴于以下清单hosts

[control]
server1
server2
server3

[production]
vm1
vm2
vm3
vm4

和一本剧本play.yml

---
- hosts: all
  gather_facts: False

  tasks:
  - name: Just loop through a group
    debug:
      msg: 'VM is {{inventory_hostname}} target is {{ansible_host}}'
    delegate_to: '{{ groups["control"][play_hosts.index(inventory_hostname) % groups["control"]|length] }}'
ansible-playbook -i hosts play.yml -l production执行的

得到以下结果:

PLAY [all] *********************************************************************

TASK [Just loop through a group] ***********************************************
ok: [vm1 -> server1] => {
    "msg": "VM is vm1 target is server1"
}
ok: [vm2 -> server2] => {
    "msg": "VM is vm2 target is server2"
}
ok: [vm3 -> server3] => {
    "msg": "VM is vm3 target is server3"
}
ok: [vm4 -> server1] => {
    "msg": "VM is vm4 target is server1"
}

PLAY RECAP *********************************************************************
vm1                        : ok=1    changed=0    unreachable=0    failed=0
vm2                        : ok=1    changed=0    unreachable=0    failed=0
vm3                        : ok=1    changed=0    unreachable=0    failed=0
vm4                        : ok=1    changed=0    unreachable=0    failed=0

我认为这就是您想要的。您只需要用所需的操作替换debug任务即可。

其他ansible documentation中讨论了其他负载平衡和滚动升级方案。