A solução é mais simples do que eu pensava - use delegate_to
. Na minha função Ansible, algumas das tarefas foram direcionadas para o host físico que executa a VM. O restante foi direcionado ao host virtual.
Neste exemplo, um único script cria a VM no bare-metal e provisiona a própria VM. delegate_to
executa o comando virt-clone
no host de metal da VM.
- name: Clone template's KVM definition
command: virt-clone -o {{ template_name }} -n {{ clone_name }} -f {{ clone_lvm }}
delegate_to: "{{ metal_host }}"
- name: "Wait for VM to bootup"
local_action: wait_for host="{{ ansible_host }}" port=22 timeout=60
- name: Gather facts for first time
setup:
- name: Install packages
apt:
name: auditd,ntp,apache2
state: present