我想使用 Ansible 从模板创建 Linux 虚拟机,然后运行 Ansible 来配置该框。模板只是一个基本安装,没有其他任何东西。构建虚拟机后,下一个任务应该是配置新创建的虚拟机。
我的问题是关于主机的。虚拟机尚未创建,那么我应该针对哪个主机运行此脚本?如果我使用 vcenter 作为主机,则它将无法配置虚拟机。但是,如果我使用主机的 IP,Ansible 将找不到它,因为它尚未创建。
对此最好的方法是什么?
- hosts: ???????
tasks:
- name: Clone a virtual machine from Linux template and customize
vmware_guest:
hostname: "{{ vcenter_host }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_pass }}"
validate_certs: no
datacenter: "{{ datacenter }}"
state: present
#folder: /DC1/vm
template: "{{ template }}"
name: "{{ vm_name }}"
cluster: "{{ cluster }}"
networks:
- name: VM Network
ip: 192.168.10.11
netmask: 255.255.255.0
wait_for_ip_address: True
customization:
domain: "{{ guest_domain }}"
dns_servers:
- 8.9.9.9
- 7.8.8.9
delegate_to: localhost
- name: configure VM
答案1
您可以在游戏过程中将新的 VM 添加到库存中,并使用 wait_for 来确保 VM 已准备就绪:
---
- hosts: localhost
vars:
vm: ubuntutest
tasks:
- name: Clone a virtual machine from Linux template and customize
vmware_guest:
... etc
- add_host:
name: "{{ vm }}"
groups: examplegroup
somecustomvar: wowamazing
- wait_for:
host: "{{ vm }}"
port: 22
delay: 3
timeout: 320
state: started
- hosts: examplegroup
tasks:
- debug:
msg: "it works!!"
看https://docs.ansible.com/ansible/latest/modules/add_host_module.html了解详情。