Рейтинг:1

почему ansible не распознает машины vcenter windows?

флаг uz

Я довольно новичок в Ansible, поэтому я мог неправильно настроить что-то
[У меня есть контейнер Docker, в котором работает служба Ansible.
У меня есть репозиторий Ansible, содержащий файлы Ansible (это репозиторий .Git).

Моя воля состояла в том, чтобы автоматически возвращать каждую лабораторию на сервере vCenter к определенному моментальному снимку
Итак, я (с помощью ansible-roles-explained-with-examples guide):

  • Создал роль с ansible-галактика init имя команды vcenter (см. дерево каталогов ниже)
  • Создал несколько файлов задач vcenter внутри задачи папку (см. дерево каталогов ниже). Вот пример poweroff.yml файл задания:
- name: установить состояние виртуальной машины на poweroff
  сообщество.vmware.vmware_guest_powerstate:
    имя хоста: "{{ vcenter_hostname }}"
    имя пользователя: "{{ vcenter_username }}"
    пароль: "{{ vcenter_password }}"
    папка: "/{{ datacenter_name }}/{{ папка }}"
    # имя: "{{ guest_name }}"
    имя: "{{ ansible_hostname }}"
    валидате_сертс: нет
    состояние: выключено
  делегат_к: локальный
  зарегистрироваться: развернуть
  • Предоставленные учетные данные vCenter в vcenter\vars\main.yml файл, например:
# файл vars для vcenter
vcenter_hostname: vcenter.foo.com
vcenter_username: [email protected]
vcenter_password: f#0$o#1$0o
имя_центра_данных: FOO_Fighters
# имя_хранилища_данных: 
имя_кластера: FOO
папка: '/FOO/PRODUCT/DOMAIN.COM/' 
  • Включены задания в задачи\main.yml файл с импорт-задача ключ, вот так:
---
# файл задач для roles/vcenter
- import_tasks: poweroff.yml
# - import_tasks: poweron.yml
# - import_tasks: revert.yml
# - import_tasks: shutdown.yml
  • Создал all.yml внутри папки group_vars в библиотеке инвентаризации (я не знаю, является ли это профессиональным способом сделать это), которая включает все детали winrm, например:
---
#Сведения о протоколе WinRM
ansible_user: ДОМЕН\пользователь
ansible_password: f#0$o#1$0o
ansible_connection: winrm
доступный_порт: 5985
ansible_winrm_scheme: http
ansible_winrm_server_cert_validation: игнорировать
ansible_winrm_transport: ntlm
ansible_winrm_read_timeout_sec: 60
ansible_winrm_operation_timeout_sec: 58
  • Создал revert_lab.yml playbook, который включает в себя роль, как это
---
- имя: восстановить локальную лабораторию
  хозяева: все
  роли:
  - центр

Мой ansible.cfg вот так:

[по умолчанию]
инвентарь = /ansible/inventories
roles_path = ./roles:..~/ansible/roles

Я выполнил playbook, чтобы вернуть все машины в лаборатории:

ansible-playbook playbooks/revert_vcenter_lab.yml -i inventory/test/onpremis/domain.com/lab_r.yml

Ошибка, которую я получил, была:

ЗАДАНИЕ [Сбор фактов] *************************************************** ******************************************************* ******************************************************* ***
[ПРЕДУПРЕЖДЕНИЕ]: ошибка при сборе фактов о winrm: вы не можете вызвать метод для выражения с нулевым значением. В строке:15 символ:17 + ...
$ansibleFacts.ansible_win_rm_certificate_expires = $_.Not ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + Информация о категории:  
InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull в <ScriptBlock>, <Нет файла>: строка 15 в <ScriptBlock>, <Нет файла>: строка  
13
хорошо: [vm1.domain.com]
хорошо: [vm2.domain.com]
хорошо: [vm3.domain.com]
хорошо: [vm4.domain.com]
хорошо: [vm5.domain.com]
хорошо: [vm6.domain.com]
хорошо: [vm7.domain.com]
хорошо: [vm8.domain.com]

ЗАДАЧА [vcenter : Установите состояние виртуальной машины для отключения питания] **************************************** ******************************************************* *********************
фатальный: [vm1.domain.com -> localhost]: FAILED! => {"changed": false, "msg": "Невозможно установить состояние питания для несуществующей виртуальной машины: "VM1""}
фатальный: [vm2.domain.com -> localhost]: FAILED! => {"changed": false, "msg": "Невозможно установить состояние питания для несуществующей виртуальной машины: "VM2""}
фатальный: [vm3.domain.com -> localhost]: FAILED! => {"changed": false, "msg": "Невозможно установить состояние питания для несуществующей виртуальной машины: "VM3""}
фатальный: [vm4.domain.com -> localhost]: FAILED! => {"changed": false, "msg": "Невозможно установить состояние питания для несуществующей виртуальной машины: "VM4""}
фатальный: [vm5.domain.com -> localhost]: FAILED! => {"changed": false, "msg": "Невозможно установить состояние питания для несуществующей виртуальной машины: "VM5""}
фатальный: [vm6.domain.com -> localhost]: FAILED! => {"changed": false, "msg": "Невозможно установить состояние питания для несуществующей виртуальной машины: "VM6""}
фатальный: [vm7.domain.com -> localhost]: FAILED! => {"changed": false, "msg": "Невозможно установить состояние питания для несуществующей виртуальной машины: "VM7""}
фатальный: [vm8.domain.com -> localhost]: FAILED! => {"changed": false, "msg": "Невозможно установить состояние питания для несуществующей виртуальной машины: "VM8""}

ОБЗОР ИГРЫ ******************************************************* ******************************************************* ******************************************************* ************
vm1.domain.com : ok=1 изменено=0 недостижимо=0 не удалось=1 пропущено=0 спасено=0 проигнорировано=0
vm2.domain.com : ok=1 изменено=0 недостижимо=0 не удалось=1 пропущено=0 спасено=0 проигнорировано=0
vm3.domain.com : ok=1 изменено=0 недостижимо=0 не удалось=1 пропущено=0 спасено=0 проигнорировано=0
vm4.domain.com : ok=1 изменено=0 недостижимо=0 не удалось=1 пропущено=0 спасено=0 проигнорировано=0
vm5.domain.com : ok=1 изменено=0 недостижимо=0 не удалось=1 пропущено=0 спасено=0 проигнорировано=0
vm6.domain.com : ok=1 изменено=0 недостижимо=0 не удалось=1 пропущено=0 спасено=0 проигнорировано=0
vm7.domain.com : ok=1 изменено=0 недостижимо=0 не удалось=1 пропущено=0 спасено=0 проигнорировано=0
vm8.domain.com : ok=1 изменено=0 недостижимо=0 не удалось=1 пропущено=0 спасено=0 проигнорировано=0

а) Как мне избавиться от Ошибка при сборе фактов о winrm ошибка? (Похоже, что playbook не распознает all.yml файл с победой, но зачем?)
б) Как исправить ошибку «Невозможно установить состояние питания для несуществующей виртуальной машины...»? (Мы видим, что playbook обращается к машинам через fqdns, упомянутые в файле lab_r.yml (из библиотеки инвентаризации), но ошибка связана с именем машины, отображаемым на платформе vCenter...)

Мой репозиторий:

С:.
ââââансибль
✓ ansible.cfg
ââââзапасы
â–––тест
â â ââââоблако
â â â–––на территории
✓ ✓ ✓ ✓ ✓ ✓ ✓ домен.com
â â â lab_j.yml
â â â lab_r.yml
â â ââââgroup_vars
â â all.yml
ââââplaybooks
✓ ✓ revert_lab.yml
ââââроли
â ââââvcenter
ââââзадачи
â â main.yml
✓ poweroff.yml
✓ poweron.yml
â â revert.yml
❏ shutdown.yml
â ââââварс
✓ main.yml

Мой инвентарь lab_r.yml - это частичная схема

---
все:
  дети:
    корень:
      дети:
        центр:
          дети:
            серверы приложений:
              хосты:
                vm1.домен.com:
            qсерверы:
              хосты:
                vm2.домен.com:
            серверы баз данных:
              хосты:
                vm3.домен.com:
Рейтинг:2
флаг in

Из документации это не очень очевидно, но строка /вм/ отсутствует в вашем пути к папке.

- name: установить состояние виртуальной машины на poweroff
  сообщество.vmware.vmware_guest_powerstate:
    папка: "/{{ datacenter_name }}/vm/{{ папка }}"
    имя: "{{ ansible_hostname }}"

Я предполагаю, что это необходимо, чтобы различать другие ресурсы в центре обработки данных, хранилищах данных, хостах и ​​т. д.

флаг uz
Во-первых, я добавил ```--verbos``` в команду playbook, она просто добавила эту строку: ```Использование /ansible/ansible.cfg в качестве файла конфигурации``` для вывода перед ```PLAY`` ` строки все остальное остается прежним. Кроме того, я выполнил ваше предложение - добавил строку ```/vm/``` - вывод и ошибки остались прежними (как в основном посте). Более того, я не понимаю, почему ```ansible_hostname``` работает, а ```guest_name``` не работает...?
флаг uz
Я не решил вопрос а, но решил вопрос б, установив ```папку: "/{{ datacenter_name }}/"```
флаг in
Это не поможет вам, если у вас есть более одной виртуальной машины с одинаковым именем в разных папках.
флаг uz
еще один факт, который я обнаружил: если я выполняю задачу poweroff.yml в своей лаборатории - машина успешно выключается.Когда я выполняю задачу poweron.yml в своей выключенной лаборатории, я получаю фатальную ошибку: [srraalabrst1.r10.local]: НЕДОСТУПНО! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm1.domain.com', port=5985): превышено максимальное количество попыток с URL-адресом: /wsman (вызвано NewConnectionError(': Не удалось установить новое соединение: [Errno 111] Отказано в соединении',))", "unreachable": true}```
флаг in
Скорее всего, вы пытаетесь выполнить следующую задачу слишком быстро после включения виртуальной машины. Вы можете настроить ansible, чтобы повторить это, но вы должны задать новый вопрос об этом.
флаг uz
Кроме того, с вашей помощью я обнаружил с помощью ```--verbos```, что папка действительно идет с ```/vm/```: ```"hw_folder": "/FOO/vm/PRODUCT/ DOMAIN.COM/```. Я установил файл vars.yml с этим путем и параметры ```folder``` также с ```/vm/```. Вывод остается прежним. Откроется новый вопрос для этого Спасибо @Gerald.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.