Я запускаю виртуальные машины KVM на железных хостах. Чтобы раскрутить новые виртуальные машины, я бы:

  1. virt-clone шаблона
  2. virt-sysprep клон, чтобы внести некоторые основные изменения
  3. Запустите клонированную ВМ
  4. Используйте Ansible для дальнейшей настройки

В настоящее время первые 3 шага выполняются с использованием 1 скрипта Ansible, а последний - с другим. Первый скрипт действует на голом железном хосте, а второй - на виртуальной машине.

У меня вопрос, это может быть выполнено в 1 сценарий? Одна возможность состоит в том, чтобы изменить имя inventory_hostname в полете в игровой книге, чтобы выбрать виртуальную машину после шага 3 Тем не менее, я считаю, что это невозможно.

Есть лучший способ сделать это? Заранее спасибо!

1 ответ1

0

Решение проще, чем я думал - используйте delegate_to . В моей роли Ansible некоторые задачи были направлены на физический хост, на котором запущена виртуальная машина. Остальные были нацелены на виртуальный хост.

В этом примере один скрипт создает виртуальную машину на «голом железе», а затем подготавливает ее. delegate_to выполняет команду virt-clone на металлическом хосте виртуальной машины.

- 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .