Full
Народ, как подружить package и delegate_to: localhost?
Вот кусок:
- name: Install needed packages
package:
name: xorriso
state: present
delegate_to: localhost
become: true
Ругается так:
Could not detect which package manager to use. Try gathering facts or setting the "use" option.
Сбор фактов не меняет ничего, т.к. факты собираются с целевого хоста, а задача делегирована локалхосту.
Специально использовал package чтоб не привязываться к пакетному менеджеру.
Div
добавьте сбор фактов с локалхост перед вызовом.
Ждун
setup модуль и делегируй на локалхост
Ruslan
Коллеги, подскажите плз, уже второй день бьюсь с решение, пока остановился на этом...
Нужно превратить это
"new_ip": {
"1.1.1.1.160/22": "r.petrov",
"1.1.1.1.161/22": "r.petrov",
}
}
вот в это)
"new_ip": {
"r.petrov": ["1.1.1.1.160/22", "1.1.1.1.161/22"]
}
реально ансимблом это сделать?
}
Full
Сделал так:
- name: Gather facts on localhost
setup:
delegate_to: localhost
- name: Install needed packages
package:
name: xorriso
state: present
delegate_to: localhost
become: true
Результат тот-же.
Причем, первый шаг заканчивается корректно.
Вспомнил про delegate_facts, добавил на первом шаге. Теперь поехало как надо.
Спасибо.
🏳️ Phil
Немного странный вопрос, попробую пояснить. Я хочу создавать виртуалки у разных провайдеров. Через ansible. Через их распрекрасные API. Но у них или нет или кривые модули ansible. Есть какая-нибудь практика работы через curl и составление запросов методами ansible? Например мне резко нужны vscale и netangels
Vlad
Лучше на питоне написать модуль. Мне было лень и я написал простой скрипт для vscale https://github.com/vadikgo/kubespray-vscale/blob/master/start_vscale.py
🏳️ Phil
Igor
а почему не терраформ?
🏳️ Phil
таррачто?
Gleb
таррачто?
https://www.terraform.io/docs/providers/type/major-index.html
Igor
https://github.com/burkostya/terraform-provider-vscale
🏳️ Phil
Gleb
Отделение Bereke Bank
Gleb
с другой стороны если ты сделаешь модулей для ансибла и с сообществом поделишься то будет прекрасно
🏳️ Phil
🏳️ Phil
Vlad
Можно упростить задачу и впихнуть создание сервера в скрипт динамического инвентори. Это-же просто исполняемый скрипт. Его можно и на go написать.
Gleb
Чем это лучше ansible?
ничем кроме того что именно для задачи которую ты описал может быть больше готовых "модулей", я не вижу проблемы сделать что угодно с помощью ансибла, вопрос скорее сколько времени есть на задачу
Отделение Bereke Bank
Чем это лучше ansible?
Как ты и сказал - модулей нет или они кривые
Через uri - можно. Но с амазоном без бутылки не обойтись
Писать свой - заебешься
🏳️ Phil
🏳️ Phil
🏳️ Phil
🏳️ Phil
Но мысль интересная, спасибо
🏳️ Phil
Создание через ansible один хрен костыль
Gleb
из терраформа кстати можно вызывать ансибл дальше если уже надо внутри виртуалку настроить
Gleb
🏳️ Phil
🏳️ Phil
Sergey
Gleb
Наших - кого? Я.блока?
для яоблака аренадатовцы сделали немного https://github.com/arenadata/ansible-module-yandex-cloud/blob/master/README.md
Gleb
и динамик инвертори я с гитхаба брал
Grek 🇺🇦
Vscale это же selectel, у них же есть модули для ансибла
Grek 🇺🇦
В блоге у себя писали статьи
🏳️ Phil
ну так скажем, я не готов их отлаживать
🏳️ Phil
Сходу не завелось
🏳️ Phil
Мне легче новый написать. Один фиг доку читаю
Sergey
🏳️ Phil
Не пойму, лучше делать инвентори плагин или скрипт? Вообще разницы не вижу
Vlad
Сделать скрипт-инвентори возвращающий json и скормить его как файл инвентори
🏳️ Phil
Угу
manefesto
manefesto
Terraform для инфраструктуры, ansible для провижена. Для всего свои инструменты
🏳️ Phil
Да, я уже понял. Спасибо за терраформ. Я согласен. Пока правда не готов окунуться, но это прямо следующим шагом
David
почему так нельзя удалить файл ? в pkg_check_bin.stdout_lines путь к файлу есть
Sergey
Sergey
Странно, да?
David
🧐
Sergey
Сделай debug и убедись лично
David
да вот сделал и убедился
Egor
А подскажите пожалуйста с таким вопросом.
Имеется два inventory. И есть необходимость запустить playbook с inventory и одним хост из другого inventory. К примеру этим хостом является мониторинг сервер.
И вопрос как то можно ли указать через тот же CLI путь только к hosts.yml файлу из другого инвентори или необходимо дублировать? Практики по данному поводу не нашел.
Отметил что когда через ключ -i указываешь путь к hosts.yml файлу, то он так же вычитывает его inventory.
Vladislav 👻
Два ключа -i, но есть тонкости, рекомендую сначало проверить, как соберется инвентори через ansible-inventory
Vladislav 👻
Проблемы могут быть с одинаковыми названиями хостов/групп
Vladislav 👻
Если будет совпадение, то будут применяться переменные из последнего инвентори, т.е. в данном случае второго
Egor
Да, так и пробовалось, но там есть общие переменные. К примеру inventory с именем: production, staging.
Вот просто есть ли методы, когда можно загрузить список хостов из hosts.yml?
Vladislav 👻
Отдельный инвентори только вроде
Egor
Но просто одну к примеру виртуальную машину выносить в отдельный inventory где мне нужен лишь грубо говоря ip-address че то смотрится не очень.
Пробовал делать мягкие ссылки, проблему решало, но я так понимаю это очень не красиво.
Lamobot
Egor
Вы имеете виду за дублирование в двух инвентори?
Egor
Просто он находится в отдельной категории. Проблема в том, если указывается два ключа i. И второй ключ я пытаюсь указать именно на файл типо -i inventory/production/hosts.yml то он хватает еще все переменные из этого inventory не только файл hosts.yml
Vladislav 👻
Нельзя взять хосты без переменных
Vladislav 👻
Только отдельный инвентори
Egor
Что бы больше описать, была взять такая структура:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html
inventories/
production/
hosts # inventory file for production servers
group_vars/
group1.yml # here we assign variables to particular groups
group2.yml
host_vars/
hostname1.yml # here we assign variables to particular systems
hostname2.yml
staging/
hosts # inventory file for staging environment
group_vars/
group1.yml # here we assign variables to particular groups
group2.yml
host_vars/
stagehost1.yml # here we assign variables to particular systems
stagehost2.yml
Yuriy
доброе утро
товарищи девопсы подскажите пожалуйста как можно достичь идемпотентности плейбука который устанавливает MySql.
Суть проблемы в том что при установке и первоначальной настройке задается пароль рута (mysql), но при повторном запуске эти инструкции уже будет выдавать ошибку. Похоже что при первоначальной установке нужно где то создавать какие то флаги/файлы... как кто делает в практике?,
какой вариант по бест практикс?
Egor
Через модуль ansible задаете пароль root?
Yuriy
да так и делаю
- name: Set the root password
become: true
mysql_user:
name: root
password: "{{ mysql_root_password }}"
тут все в норме,
но если он уже был установлен, то эта задача вывалится с ошибкой
Dr. L.S.Dee
Предварительно попробовать законнектиться с этим паролем? Прокатило — значит, не задаем.
Egor
Можно попробовать выставить дополнительно два поля:
login_user: root
login_password: "{{ mysql_root_password }}"
Для авторизации второй раз.
Единственное не знаю, не ругнется ли он в первый раз на такое, но попробовать думаю можно.