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
А в фактах что собралось?
Это, пожалуй, самый интересный вопрос. А вообще я для себя принял, что в начале плейбука собираются тупо все факты отдельным таском.
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
на убунте тоже работает.
Aleksey
забавно. короче у меня есть стенд из 5 варинтов дистров. дебиан, убунта, фря, рхел, центос. инклуд не работает _только_ на центосе.
Womchik
а на винде?
Aleksey
нету винды
Vlad
забавно. короче у меня есть стенд из 5 варинтов дистров. дебиан, убунта, фря, рхел, центос. инклуд не работает _только_ на центосе.
это не удивительно - там обычно древние питоновские либы. Можно попробовать всё ставить через pip.
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
"{{ hostvars['localhost']['ansible_default_ipv4']['address'] | default('1.1.1.1') }}"
Это не работает из за этого: https://github.com/ansible/ansible/issues/30944
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
а ошибка неверный трейс
Womchik
а свежей версии нет?
Не попадалось
Aleksey
а есть какой нить ansible advanced почитать ? исходники не предлагать
Womchik
тут же много книжек в чатике
Aleksey
там всё про впиливаем apt: name=nginx
Nklya
geerlinguy не?
Aleksey
там уже почитано и bcoca тоже
Nklya
тогда остались исходники))
Andrey
чтобы писать advanced ansible надо его много юзать и костылить
Andrey
а таким людям некогда книжки писать - костыли разваливаются
Womchik
Ansible from beginner to pro?
Dmitry
а таким людям некогда книжки писать - костыли разваливаются
а как напишут, половина депрекейтед и надо все заново переписывать!
Andrey
Artem
Чуваки, а как вы юзерами управляете? Вот есть у меня 3 хоста и 10 юзеров, как мне в рамках одного плея сделать чтобы 3 юзера могли ходить на 1 хост, 3 на второй, 4 на третий? Чото туплю жестко.
Viktor
LDAP
Denis 災 nobody
Artem
ldap-то понятно, но надо ансиблом пока
Artem
Потом лдап сделаю
Andrey
ну это криво, но работает
Artem
хм
Artem
Хотя по идее я могу сделать flatenned листы хосты-юзеры
Serge
чтобы писать advanced ansible надо его много юзать и костылить
У меня advanced Ansible начался с "берём Terraform..."
Serge
when: inventory_hostname in group_names ?
Ну вот типа. А можно миксинами в Pyventory поиграть;)
Serge
Серьезно, коллеги, почему никто Pyventory не пробует? Если будут проблемы, можно у меня спросить всегда, а может и кейс подкинуть на развитие.
Nklya
Nklya
Я не понмаю нафиг бы мне он пригодился. Чем-то он похож на приснопамятный фабрицио. Который превращает докер композ в портянку на питоне
Serge
Я не понмаю нафиг бы мне он пригодился. Чем-то он похож на приснопамятный фабрицио. Который превращает докер композ в портянку на питоне
Например, потому что там есть валидация, обязательные свойства у наследников и всё в одном формате. Неужели только у меня бомбит от хранения сложного графа групп в одном линейном инишнике?
Nklya
Можно в жсоне и ямле если очень хочется
Serge
Можно в жсоне и ямле если очень хочется
Они не теряют линейности от этого.
Nklya
а вычислять что?
Serge
Я прямо нарадоваться не могу. Задал класс-прототип, описал в нём обязательные значения и потом плодишь наследников. Добавил свойство в базовый класс и пока везде не задашь значение, оно не соберётся.
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 вжух