Posso alterar o alvo Ansible durante o vôo?

0

Eu executo máquinas virtuais KVM em hosts bare metal. Para girar novas VMs, gostaria de:

  1. virt-clone um modelo
  2. virt-sysprep o clone para fazer algumas mudanças básicas
  3. Iniciar a VM clonada
  4. Use o Ansible para configuração adicional

Atualmente, as 3 primeiras etapas são feitas usando um script Ansible e a última etapa é feita com outro. O primeiro script atua no host bare metal e o segundo script atua na VM.

Minha pergunta é: isso pode ser feito em um script? Uma possibilidade é alterar o inventory_hostname em andamento em uma cartilha para segmentar a VM após a Etapa 3. Entretanto, acredito que isso não seja possível.

Existe uma maneira melhor de fazer isso? Obrigado antecipadamente!

    
por Eugene Chow 08.08.2017 / 11:34

1 resposta

0

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
    
por 17.08.2017 / 04:02