быть.
Задача: если выключаться кондиционеры, то необходимо корректно погасить все хосты(Linux, windows, esxi, proxmox) перед этим погасить все сервисы, а потом хосты, но сейчас задача просто понять как погасить хосты через ansible semaphore.
По сути сводиться к тому, что пользователь видит, что температура поднялась, нажимает запустить таск и всё, что написано в hosts выключается.
Хосты в изолированной подсети, без доступа к интернету.
Поставил на main_host docker-compose с ansible. Долго не мог понять как получить через вебку доступ к playbooks, в итоге тоже закидываю их в локальную директорию докер-контейнера.
Указываю репозиторий — локальную папку
Environment (Extra variables и Environment variables) оставляю пустыми, не очень понимаю что это
Inventory (указываю static ip адрес- хоста который надо выключить)
собираю task,
указываю имя playbook
---
- name: Выключить хост
hosts: all
become: yes
become_method: sudo
tasks:
- name: Unconditionally shut down the machine with all defaults
community.general.shutdown:
следом указываю Inventory, Repository, Environment
Запускаю, пишет:
8:01:11 PM
Run TaskRunner with template: new_shutdown
8:01:11 PM
Preparing: 56
8:01:11 PM
installing static inventory
8:01:11 PM
No collections/requirements.yml file found. Skip galaxy install process.
8:01:11 PM
No roles/requirements.yml file found. Skip galaxy install process.
8:01:12 PM
8:01:12 PM
PLAY [Выключить хост] **********************************************************
8:01:12 PM
8:01:12 PM
TASK [Gathering Facts] *********************************************************
8:01:16 PM
ok: [192.168.146.132]
8:01:16 PM
8:01:16 PM
TASK [Unconditionally shut down the machine with all defaults] *****************
8:01:17 PM
fatal: [192.168.146.132]: FAILED! => {"changed": false, "msg": "Shutdown command failed. Error was Failed to set wall message, ignoring: Interactive authentication required.\r\nFailed to call ScheduleShutdown in logind, no action will be taken: Interactive authentication required., Shared connection to 192.168.146.132 closed.", "shutdown": false}
8:01:17 PM
8:01:17 PM
PLAY RECAP *********************************************************************
8:01:17 PM
192.168.146.132 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
8:01:17 PM
8:01:17 PM
Running playbook failed: exit status 2
Предполагаю, что он жалуется, что команда делается не под рутом, подскажите как исправить это?
спасибо
Поскольку запускается sudo, то если для юзера ансибла не задан беспарольный доступ к sudo и сам пароль не передан ансиблу явно, то при попытке доступа он дополнительно запрашивает пароль.
Как задать беспарольный доступ? Я в контейнере ансибла сделал ssh-keygen и ssh-copy-id и проверил руками, с ssh user@192.168.146.132 заходит без пароля
это не для SSH а для sudo, похоже
А как указать тогда пароль?
В конфиге sudo поправить ansibleUserName ALL=(ALL) NOPASSWD:ALL
Что не так?
Такой вариант мне кажется крайне небезопасным. нашел пример [all:vars] ansible_sudo_pass=VeryStrongPassword указываю в Inventory, та же ошибка... + в таске указываю учетку в поле Vault Password, все равно тоже самое выводит
Кто бы ещё эту переменную куда-нибудь подставил.
О да, указывать пароль в файлике -- это наиболее безопасно. Для достижения более высокой степени безопасности надо запушить этот файлик в публично доступный репозиторий. Тогда вас точно никто не вломает.
вам нужна переменная ansible_become_password
Так тоже пробовал, все так же ошибка, будто через semaphore он их не видит
Надо разрешать ансибл юзеру на хосте то, что вы хотите сделать, либо через sudoers, либо добавляйте в группу
Такой вариант по умолчанию используется на админских учетках во многих облачных провайдерах. В AWS и Azure, например. Расскажите им, что они небезопасно делают.
Ну, не будут же они рассказывать, что лучше вариантов не нашли....
можно еще с указанием ключа, если такой сгенерирован, через переменную через group_vars, но чаще подписывают в инвентори: ssh_private_key=/путь/до/вашего/ключа только помните, что юзер должен быть в sudoers. а ansible_sudo_pass убрать.
В чем же «небезопасность», расскажете? 🙂
Обсуждают сегодня