Ansible 创建虚拟机

Ansible create vm machines

我正在使用 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 模块 vmware_guest 下找到任何可以像 count=5 那样制造 5 台机器的东西。

你应该看看 ansible loop documentation, more specifically how to loop over a range

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

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

引入循环会更改已注册变量的结构,该结构现在将包含每个单独循环 运行 的顶级 results 列表。所以你需要更改下一个调试任务来获取你想要的信息。

解决方案 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') }}"