Я довольно новичок в 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: