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') }}"
我正在使用 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') }}"