Ansible:使用多个Vcenter的vmware并行部署

Ansible:使用多个Vcenter的vmware并行部署,ansible,Ansible,我正在尝试编写剧本,通过Vcenter和Ansible vmware_来宾模块在3台ESXI服务器上创建3个虚拟机 问题是我有3个不同的vCenter,每个vCenter上有3台ESXI主机,playbook必须在所有ESXI主机上并行创建所有vm 我试过使用loop,但loop会一步一步地做 这是我现在的剧本版本 如果有人帮我,我会非常感激:) --- #从模板创建新VM -名称:来自模板的VM 主机:本地主机 收集事实:错误 连接:本地 变量: vcenter_主机名:10.0.0.1 v

我正在尝试编写剧本,通过Vcenter和Ansible vmware_来宾模块在3台ESXI服务器上创建3个虚拟机

问题是我有3个不同的vCenter,每个vCenter上有3台ESXI主机,playbook必须在所有ESXI主机上并行创建所有vm

我试过使用loop,但loop会一步一步地做

这是我现在的剧本版本

如果有人帮我,我会非常感激:)

---
#从模板创建新VM
-名称:来自模板的VM
主机:本地主机
收集事实:错误
连接:本地
变量:
vcenter_主机名:10.0.0.1
vcenter_用户:john.doe
vcenter_pass:Passw0rd
vmtemplate:测试模板
名称:“新VM2”
注:Ansible测试
任务:
-名称:从模板创建虚拟机
vmware_来宾:
验证证书:错误
主机名:“{vcenter_hostname}”
用户名:“{vcenter_user}”
密码:{vcenter_pass}}
esxi_主机名:“{{item.esxhost}”
数据中心:数据中心1
文件夹:模板
名称:“{{name}}”
模板:“{{vmtemplate}}”
磁盘:
-尺寸:100
数据存储:“{item.datastore}}”
等待ip地址:False
国家:现在
注册号码:newvm2
循环:
-{esxhost:'10.0.46.142',datastore:'datastore_XXX'}

-{esxhost:'10.0.46.143',datastore:'datastore_ZZZ'}
您可以通过动态地将每个ESX主机添加到资源清册中来并行创建它们,其外观如下:

- hosts: localhost
  gather_facts: False
  tasks:
    - add_host:
        hostname: '{{item.esxhost}}'
        groups: vms
        esxhost:   '{{ item.esxhost }}'
        datastore: '{{ item.datastore }}'
      loop:
         - {esxhost: '10.0.46.142', datastore: 'Datastore_XXX'}
         - {esxhost: '10.0.46.143', datastore: 'Datastore_ZZZ'}

- name: VM from template
  hosts: vms
  gather_facts: false
  connection: local
  vars:
    vcenter_hostname: 10.0.0.1
    vcenter_user: john.doe
    vcenter_pass: Passw0rd
    vmtemplate: test-teplate
    name: "newvm2"
    notes: Ansible Test
  tasks:
    - name: Create VM from template
      vmware_guest:
        validate_certs: False
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_user }}"
        password: "{{ vcenter_pass }}"
        esxi_hostname: "{{ esxhost }}"
        datacenter: Datacenter1
        folder: templates
        name: "{{ name }}"
        template: "{{ vmtemplate }}"
        disk:
          - size_gb: 100
            datastore: "{{ datastore }}"
        wait_for_ip_address: False
        state: present
      register: newvm2

您可以使用相同的原则同时创建所有9个虚拟机。

我们不能将所有虚拟机都放在清单中,而不是添加主机的内容吗?Playbook不应该有特定于主机的信息,因此它们可以在目录之间移植。我同意,如果可能的话,它应该直接来自目录,但是有一些动态添加主机的用例,例如,当数据来自塔模板的输入时,等等。我不确定这里的用例是什么。我认为这是一个糟糕的用例。最理想的情况是,应该有一个单一的“真实来源”,即库存(保存在版本控制系统中,如Subversion或Git),或者可以生成库存的电子表格或数据库。(在动态清点的情况下,“真相来源”将保存
组\u vars/all
中虚拟机的计数和规格)如果此类信息来自用户输入,则仅适用于一次性虚拟机,但即使在那里,在Tower中创建一个新的清单也很容易。你能展示一下这个剧本中的例子是如何将所有主机放入清单的吗?另外,我需要为vm指定不同的名称。可能吗?