Denis 災 nobody
опять поломали? )
Danila
А в фактах что собралось?
Aleksey
ещё веселее.
TASK [nginx : debug] **
ok: [node1] => {
"ansible_distribution": "CentOS"
}
TASK [nginx : include_tasks] **
fatal: [node1]: FAILED! => {
"reason": "'ansible_distribution' is undefined"
}
Sergey
А в фактах что собралось?
Это, пожалуй, самый интересный вопрос.
А вообще я для себя принял, что в начале плейбука собираются тупо все факты отдельным таском.
Danila
Sergey
Aleksey
импорт не будет работать тут.
Aleksey
ибо у меня переменная времени выполнения
Sergey
https://docs.ansible.com/ansible/2.4/include_tasks_module.html
Sergey
хм. не очень понятно, чойта он взъелся на тебя.
Sergey
хотя кстати что-то подобное видел у коллеги, когда внутри инклюженных тасков переменные не раскрывались, а вот такой дрянью и оставались - штукой в скобках.
Sergey
во, нашёл
Sergey
https://github.com/ansible/ansible/issues/9533
Sergey
https://github.com/ansible/ansible/issues/10020
Sergey
в двух словах - оно так НЕ работает, и не будет, это не баг, это фича
Womchik
в ansible for devops вроде это явно было написано
Aleksey
парни у меня эти инклуды там с рождения....
Aleksey
победа заключается в том что если нода на дебиане инклуд страбатывает. а если на центосе нет
Aleksey
TASK [nginx : debug] **
ok: [node1] => {
"os/Debian/main.yml": "VARIABLE IS NOT DEFINED!"
}
TASK [nginx : include] **
included: cut/roles/nginx/tasks/os/Debian/main.yml for node1
те же таски.
Aleksey
на убунте тоже работает.
Serge
Aleksey
забавно. короче у меня есть стенд из 5 варинтов дистров.
дебиан, убунта, фря, рхел, центос.
инклуд не работает _только_ на центосе.
Womchik
а на винде?
Aleksey
нету винды
Vlad
Alf 🙀
Aleksey
на рхеле и центосе "ansible_python_version": "2.7.5",
Maxim
python version = 2.7.10 последняя жеж)
Albert
"{{ hostvars['localhost']['ansible_default_ipv4']['address'] | default('1.1.1.1') }}"
Aleksey
"ansible_python_version": "2.7.9", дебиан
Albert
Albert
Что можете предложить?
Albert
Мне надо просто default ip прописать если его нет в факте
Maxim
не запускать "{{ hostvars['localhost']['ansible_default_ipv4']['address'] | default('1.1.1.1') }}" ?
Maxim
тупая шутка...
Aleksey
раскурил.
Danila
чочо было?
Sergey
Мне надо просто default ip прописать если его нет в факте
{{ ("RABBITMQ_NODE_IP_ADDRESS=" ~ rabbitmq_instance_address) if rabbitmq_instance_address is defined else "RABBITMQ_NODE_IP_ADDRESS=" ~ ( ansible_all_ipv4_addresses | ipaddr(env_network) | ipaddr(1) | first) }}
Aleksey
- include_tasks: "os/{{ ansible_distribution }}/main.yml"
там внутри есть
- import_tasks: "firewall.yml"
Aleksey
очевидно нарушение логики.
Aleksey
внутри динамически подключаемого метода появился статический модуль
Aleksey
а ошибка неверный трейс
Andrey
Womchik
Aleksey
а есть какой нить ansible advanced почитать ? исходники не предлагать
Womchik
тут же много книжек в чатике
Aleksey
там всё про впиливаем apt: name=nginx
Nklya
geerlinguy не?
Aleksey
там уже почитано и bcoca тоже
Nklya
тогда остались исходники))
Andrey
чтобы писать advanced ansible надо его много юзать и костылить
Andrey
а таким людям некогда книжки писать - костыли разваливаются
Womchik
Ansible from beginner to pro?
Andrey
Andrey
Artem
Чуваки, а как вы юзерами управляете? Вот есть у меня 3 хоста и 10 юзеров, как мне в рамках одного плея сделать чтобы 3 юзера могли ходить на 1 хост, 3 на второй, 4 на третий? Чото туплю жестко.
Viktor
LDAP
Denis 災 nobody
Denis 災 nobody
Artem
ldap-то понятно, но надо ансиблом пока
Artem
Потом лдап сделаю
Andrey
Andrey
ну это криво, но работает
Alexander
Artem
хм
Artem
Хотя по идее я могу сделать flatenned листы хосты-юзеры
Serge
Серьезно, коллеги, почему никто Pyventory не пробует? Если будут проблемы, можно у меня спросить всегда, а может и кейс подкинуть на развитие.
Nklya
Nklya
Я не понмаю нафиг бы мне он пригодился.
Чем-то он похож на приснопамятный фабрицио.
Который превращает докер композ в портянку на питоне
Serge
Nklya
Можно в жсоне и ямле если очень хочется
Serge
Nklya
а вычислять что?
Serge
Я прямо нарадоваться не могу. Задал класс-прототип, описал в нём обязательные значения и потом плодишь наследников. Добавил свойство в базовый класс и пока везде не задашь значение, оно не соберётся.
Serge
а еще круче вот так:
class Service(Asset):
service_name = NotImplemented
host = '{service_name}.{domain}'
class Env(Asset):
domain = NotImplemented
class Staging(Env):
domain = 'staging.example.com'
class MyService(Service):
service_name = 'awesome'
class MyServiceStaging(MyService, Staging):
pass
вжух