Могу ли я изменить цель Ansible в полете?

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

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

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

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

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

1 ответ

Решение

Решение проще, чем я думал - используйте 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
Другие вопросы по тегам