Контекст:
У меня есть проект с двумя ролями.
Я сократил количество задач до проблемных для лучшего понимания.
Проблема:
Я запускаю задачу из роли 1 на сервере 1 и пытаюсь делегировать задачу виртуализатору vmware из условия в первой задаче роли сервера 1.
И сбой хоста, потому что он хочет выполнить задачу второй роли (Vmware) на сервере server1.
Ошибка:
фатальный: [testhost]: FAILED! => {"reason": "противоречащие операторы действий: хосты,
collect_facts\n\nПохоже, ошибка находится в '/home/ancible/proyects/extend_fs-role/roles/vmwaretaks/tasks/addvmwaredisk.yml': строка 2, столбец 3,
но может быть\nв другом месте файла в зависимости от проблемы с tntax.\n\nСпорная строка выглядит так:\n\n---\n- hosts: localhost\n ^ здесь\n"}
Вот структура:
.
ââ коллекции
âââ требования.yml
✓ README.md
âââ resizefs_hosts.yml
ââ роли
âââ изменение размеров
â âââ по умолчанию
â â  âââ main.yml
- обработчики
â â  âââ main.yml
âââ мета
â â  âââ main.yml
🔸задачи
â  â  âââ main.yml
â â  âââ findfreedisk.yml
🔸тесты
 â  â â â инвентарь
â â  âââ test.yml
âââ варс
âââ main.yml
âââ vmwaretaks
âââ по умолчанию
âââ main.yml
✓ файлы
âââ обработчики
âââ main.yml
âââ мета
âââ main.yml
✓ README.md
🔸задачи
  â  âââ main.yml
  â  âââ addvmwaredisk.yml
✓ шаблоны
тесты
✓ ✓ инвентарь
âââ test.yml
âââ варс
âââ main.yml
Это порядок выполнения в случае, если на хосте не найдется свободный лун:
resizefs_role_hosts.yml -> roles/resizefs/tasks/main.yml -> roles/resizefs/tasks/findfreedisk.yml -> \
роли/vmwaretaks/задачи/main.yml -> роли/vmwaretaks/задачи/addvmwaredisk.yml
Вот как выглядят сборники игр:
$ cat resizefs_role_hosts.yml
---
- хосты: тестовый хост
стать: да
стать_метод: sudo
роли:
- роль: 'роли/изменения размеров'
$ cat roles/resizefs/tasks/main.yml
---
# файл задач для create_fs-test
- import_tasks: findfreedisk.yml
$ cat roles/resizefs/tasks/findfreedisk.yml
- название: Поиск диска без разделов
set_fact:
диски: "/dev/{{outer_item.key}}"
когда:
- не external_item.value.partitions
- не external_item.value.links.ids
- external_item.key - это поиск ("sd")
with_dict: '{{ansible_devices}}'
loop_control:
loop_var: внешний_элемент
уведомлять:
- Format_free_disk
изменено_когда: правда
- name: Печатать имя диска, если доступно
отлаживать:
сообщение:
- "{{диски|по умолчанию('НЕ СВОБОДНЫЙ ДИСК') }} доступны"
# Если диск недоступен, добавьте новый лун от Vmware
- include_role:
имя: vmwaretaks
когда: диски не определены
$ роли кота/vmwaretaks/tasks/main.yml
---
# файл задач для add-new-vmware-lun
- import_tasks: addvmwaredisk.yml
$ cat roles/vmwaretaks/tasks/addvmwaredisk.yml
---
- хосты: локальный
собрать_факты: правда
вары:
vcenter_hostname: 'vcenter.labo.local'
vcenter_username: 'labo.local\ansible'
vcenter_password: "{{vault_pass}}"
target_host: 'ТЕСТ-ХОСТ'
vm_uuid: '4217B33E-014D-E056-0719-45AD3AC1861E'
vm_unit_number: '5'
задачи:
- имя: Добавить диски в виртуальную машину, используя UUID
vmware_guest_disk:
имя хоста: "{{ vcenter_hostname }}"
имя пользователя: "{{ vcenter_username }}"
пароль: "{{ vcenter_password }}"
центр обработки данных: "{{ vcenter_hostname }}"
uuid: "{{ vm_uuid | нижний }}"
валидате_сертс: нет
диск:
- размер_гб: 10
тип: «толстый»
состояние: «настоящее»
autoselect_datastore: да
scsi_controller: '0'
scsi_type: «паравиртуальный»
unit_number: '5'
disk_mode: 'независимый_постоянный'
делегат_к: локальный
Я пытался найти способ сказать, что вторая роль выполняется не на сервере, а в виртуализаторе vmware, но безуспешно.
Если я запускаю addvmwaredisk.yml в качестве плейбука, он работает идеально.
Надеюсь, вы можете помочь!
заранее спасибо!