我有两个主机,我想创建四个虚拟机。 ansible中是否有一个平衡的概念,它将在每个主机上按如下方式创建两个虚拟机?
主机1:VM1,VM3,...
主机2:VM2,VM4,...
我知道我可以指定在其上创建VM的主机,但这有点严格,因为我可能会添加更多的主机和更多的虚拟机,并且如果可能的话,我希望使用动态解决方案。
我能管理的最好的是:
with_items:
## - "{{ groups.production }}"
- prod-test1
delegate_to: "{{ groups['control'][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中讨论了其他负载平衡和滚动升级方案。