Ansible创建虚拟机

Ansible创建虚拟机,ansible,ansible-2.x,Ansible,Ansible 2.x,我正在使用ansible 2.9.2。我有一个剧本,它可以从模板在vcenter中创建虚拟机: --- - hosts: localhost connection: local vars: vars_files: - vars.yml tasks: - vmware_guest: datacenter: "abcd" hostname: "{{ server }}" username: "{{ use

我正在使用ansible 2.9.2。我有一个剧本,它可以从模板在vcenter中创建虚拟机:

---
- hosts: localhost
  connection: local
  vars:
  vars_files:
            - vars.yml
  tasks:
    - vmware_guest:
        datacenter: "abcd"
        hostname: "{{ server }}"
        username: "{{ user  }}"
        password: "{{ pass }}"
        template: "{{ template }}"
        validate_certs: False
        folder: test
        datastore: "{{ datastore }}"
        esxi_hostname: "{{ esxi }}"
        validate_certs: no
        state: "{{ state }}"
        name: "{{ name }}{{ansible_date_time.epoch}}{{999| random}}"
      register: output
    - debug:
            msg: "{{ output.instance | json_query('hw_eth0.ipaddresses') }}"
我正在使用一个API并发送curl请求来运行这个剧本。有没有办法让它运行5次?
我在ansible module
vmware\u guest
下没有找到任何可以像
count=5
那样制造5台机器的东西。

您应该看看

按照上面的文档,我们可以修改您的第一个任务,如下所示。我在您的实例名称中集成了范围计数器,以适应您的确切需要

    - vmware_guest:
        datacenter: "abcd"
        hostname: "{{ server }}"
        username: "{{ user  }}"
        password: "{{ pass }}"
        template: "{{ template }}"
        validate_certs: False
        folder: test
        datastore: "{{ datastore }}"
        esxi_hostname: "{{ esxi }}"
        validate_certs: no
        state: "{{ state }}"
        name: "{{ name }}{{ item }}{{ansible_date_time.epoch}}{{999| random}}"
      register: output
      loop: "{{ range(1, 6) | list }}"
引入循环会改变已注册var的结构,该结构现在将包含每个循环运行的顶级
结果
列表。因此,您需要更改下一个调试任务以获得所需的信息

解决方案1:像以前一样循环每个结果和输出:

    - debug:
        msg: "{{ item.instance | json_query('hw_eth0.ipaddresses') }}"
      loop: "{{ output.results }}"
解决方案2:通过修改jmespath查询一次获取所有信息。请注意,由于我没有您的数据结构,因此无法测试下面的代码,因此可能需要进行一些调整

    - debug:
        msg: "{{ output.results | json_query('[].instance.hw_eth0.ipaddresses') }}"