Рейтинг:-1

Как установить состояние машины: включить с помощью задачи community.vmware.vmware_guest_powerstate?

флаг uz

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

Моя воля состояла в том, чтобы автоматически вернуть каждую лабораторию (лаборатория состоит из 8 vms, 5 Windows Server 2016 и 3 Windows 10. DC включает политику для включения winrm на этих машинах) на сервере vCenter к определенному моментальному снимку. Но сначала я пытаюсь: один раз выключить машины лаборатории, когда они включены, и один раз включать машины лаборатории, когда они выключены

Итак, я (с помощью ansible-roles-explained-with-examples guide):

  • Создал роль с ansible-галактика init имя команды vcenter (см. дерево каталогов ниже)
  • Создал несколько файлов задач vcenter внутри задачи папку (см. дерево каталогов ниже). Вот пример poweroff.yml и poweron.yml файлы задач:
- name: установить состояние виртуальной машины на poweroff
  сообщество.vmware.vmware_guest_powerstate:
    имя хоста: "{{ vcenter_hostname }}"
    имя пользователя: "{{ vcenter_username }}"
    пароль: "{{ vcenter_password }}"
    папка: "/{{ datacenter_name }}/vm/{{ папка }}"
    имя: "{{ ansible_hostname }}"
    # имя: "{{ guest_name }}"
    валидате_сертс: нет
    состояние: выключено
    сила: да
  делегат_к: локальный
  зарегистрироваться: развернуть
- имя: установить состояние виртуальной машины для включения с использованием MoID
  сообщество.vmware.vmware_guest_powerstate:
    имя хоста: "{{ vcenter_hostname }}"
    имя пользователя: "{{ vcenter_username }}"
    пароль: "{{ vcenter_password }}"
    папка: "/{{ datacenter_name }}/vm/{{ папка }}"
    имя: "{{ ansible_hostname }}"
    # мод: вм-42
    валидате_сертс: нет
    состояние: включено
  делегат_к: локальный
  зарегистрироваться: развернуть
  • Предоставленные учетные данные 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, чтобы выключить все машины в лаборатории, затем я «включил» задачу poweron в роли, например:

---
# файл задач для roles/vcenter
# - import_tasks: poweroff.yml
- import_tasks: poweron.yml
# - import_tasks: revert.yml
# - import_tasks: shutdown.yml

Теперь, когда все компьютеры лаборатории отключены, при выполнении playbook выдается следующая ошибка:

ИГРАТЬ [вернуть vmware vcenter lab] ************************************************* ******
ЗАДАНИЕ [Сбор фактов] *************************************************** ****************
фатальный: [vm1.domain.com]: НЕДОСТУПНО! => {"изменено": false, "msg": "ntlm: 
HTTPConnectionPool(host='vm1.domain.com', port=5985): превышено максимальное количество попыток с URL-адресом: /wsman (вызвано NewConnectionError('<объект urllib3.connection.HTTPConnection по адресу 0x7fb7ae4908d0>): не удалось установить новое соединение: [ Errno 111] Соединение отклонено',))", "недостижимо": true}
фатальный: [vm2.domain.com]: НЕДОСТУПНО! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm2.domain.com', port=5985): превышено максимальное количество попыток с URL-адресом: /wsman (вызвано NewConnectionError('<urllib3. Объект connection.HTTPConnection по адресу 0x7fb7ae487b00>: не удалось установить новое соединение: [Errno 111] Отказано в соединении',))", "unreachable": true}
фатальный: [vm3.domain.com]: НЕДОСТУПНО! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm3.domain.com', port=5985): превышено максимальное количество попыток с URL-адресом: /wsman (вызвано NewConnectionError('<urllib3. Объект connection.HTTPConnection по адресу 0x7fb7ae48acc0>: не удалось установить новое соединение: [Errno 111] Отказано в соединении',))", "unreachable": true}
фатальный: [vm4.domain.com]: НЕДОСТУПНО! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm4.domain.com', port=5985): превышено максимальное количество попыток с URL-адресом: /wsman (вызвано NewConnectionError('<urllib3. Объект connection.HTTPConnection по адресу 0x7fb7ae48de80>: не удалось установить новое соединение: [Errno 111] Отказано в соединении',))", "unreachable": true}
фатальный: [vm5.domain.com]: НЕДОСТУПНО! => {"изменено": false, "msg": "ntlm: 
HTTPConnectionPool(host='vm5.domain.com', port=5985): превышено максимальное количество попыток с URL-адресом: /wsman (вызвано NewConnectionError('<объект urllib3.connection.HTTPConnection по адресу 0x7fb7ae41f080>): не удалось установить новое соединение: [ Errno 111] Соединение отклонено',))", "недостижимо": true}
фатальный: [vm6.domain.com]: НЕДОСТУПНО! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm6.domain.com', port=5985): превышено максимальное количество попыток с URL-адресом: /wsman (вызвано NewConnectionError('<urllib3. Объект connection.HTTPConnection по адресу 0x7fb7ae41d7f0>: не удалось установить новое соединение: [Errno 111] Отказано в соединении',))", "unreachable": true}
фатальный: [vm7.domain.com]: НЕДОСТУПНО! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm7.domain.com', port=5985): превышено максимальное количество попыток с URL-адресом: /wsman (вызвано NewConnectionError('<urllib3. Объект connection.HTTPConnection по адресу 0x7fb7ae428048>: не удалось установить новое соединение: [Errno 111] Отказано в соединении',))", "unreachable": true}
фатальный: [vm8.domain.com]: НЕДОСТУПНО! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm8.domain.com', port=5985): превышено максимальное количество попыток с URL-адресом: /wsman (вызвано NewConnectionError('<urllib3. Объект connection.HTTPConnection по адресу 0x7fb7ae425588>: не удалось установить новое соединение: [Errno 111] Отказано в соединении',))", "unreachable": true}

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

Почему задача poweroff работает нормально, а poweron - нет? Как я могу решить эту проблему?

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

С:.
ââââансибль
✓ 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:
флаг in
Является ли машина, на которой вы запускаете ansible playbooks, машиной Windows, настроенной для WinRM? Я предполагаю, что ansible пытается подключиться с помощью WinRM к локальному хосту, поскольку вы настроили это в `all.yml`, что не удается. localhost должен быть настроен с помощью `ansible_connection: local`. это должно быть по умолчанию, когда localhost явно не указан в инвентаре, но кто знает...
Zeitounator avatar
флаг fr
Вам не нужно объявлять `localhost` в своем инвентаре: это [неявно](https://docs.ansible.com/ansible/latest/inventory/implicit_localhost.html), и вы обычно хотите, чтобы он оставался таким, поэтому он не соответствует цели группы «все». Между тем, как сообщается в ссылке на документ, он по-прежнему читает vars из `group_vars/all.yml`, что является проблемой, о которой сообщил @GeraldSchneider выше. Просто переместите файл в `group_vars/center.yml`, чтобы значения применялись только к соответствующей группе.
флаг uz
@Zeitounator, поясните, пожалуйста, почему ansible не читает файл ```roles\vcenter\vars\main.yml```, содержащий сведения о доступе к vCenter?
флаг uz
@GeraldSchneider измените на ```ansible_connection: local``` и запустите playbook, чтобы получить следующие результаты: ЗАДАЧА [Сбор фактов] все машины распознаны, затем выполнение задачи показывает следующую ошибку для всего списка машин: ``` "msg": "Невозможно установить состояние питания для несуществующей виртуальной машины: 'ansible'"```
Zeitounator avatar
флаг fr
Ваш вмс выключен. В этом случае вам нужно отключить сбор фактов в вашей игре (с `gather_facts: false,`), иначе ansible попытается подключиться к ним, чтобы получить информацию, прежде чем вы сыграете задачу, которая их включает.
флаг uz
@Zeitounator, я установил игру с ```gather_facts: false```. все те же результаты - вмс отключены. Измените ```ansible_connection``` на ```local``` результаты: ```"msg": "Задача включает параметр с неопределенной переменной. Ошибка: 'ansible_hostname'...```
Zeitounator avatar
флаг fr
Это не тот результат... теперь вы получаете сообщение об ошибке, потому что пытаетесь использовать переменную, которая определяется только при сборе фактов... что невозможно, потому что ваш виртуальный компьютер выключен. Вам нужно найти решение, чтобы получить имя машины без подключения к виртуальной машине.
флаг uz
@ Zeitounator, я пытался. В файл ```lab_r.yml``` я добавил дополнительную переменную ```vm_name``` с именами машин типа этого: ```vm_name: VM1``` под каждым полем fqdn (как вы можете видеть на пример в посте). В задаче ```poweron.yml``` я меняю ```name: {{ vm_name }}```. Я установил игру с помощью ```gather_facts: no```.После выполнения я получил: ```"msg": "Невозможно установить состояние питания для несуществующей виртуальной машины: "VM1""```
Zeitounator avatar
флаг fr
Вы, кажется, больше заинтересованы в болтовне о своем сеансе отладки, чем в попытках решить вашу проблему. Вы ожидаете, что люди, читающие это, узнают, какое имя у вашей виртуальной машины внутри вашей установки vmware? Никто не может догадаться из вашего фактического сообщения, поскольку вы не сказали нам, как вы создали vms и из каких переменных. Используйте реально существующее имя, и оно будет включено. Удачи.
Рейтинг:0
флаг uz

Проблема была решена:
я установил папка ключевое значение для "/{{ datacenter_name }}/"
я добавляю включить задача к дополнительной задаче как возвращаться - смысл включить задача работала для меня, только если она была частью последовательности задач
К сожалению, включить задача не работала для меня как отдельная задача

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

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