Sergey
мегрировать буду стак свой, ансибл сломанны и меняется по 10 раз на дню
Ты поэтому пришёл в чат ансибла и об этом рассказываешь?
#Rλatan
бударажу воображение просто :) тихо тут пока
Sergey
Вообще ночь. Но раз тихо - можешь пока правила почитать: https://tnt4brain.github.io/proansible/. Есть такой пункт "За что можно получить RO или бан", там ещё есть подпункт 7: «Рассказы о том, почему Ansible ‐ плохо, а <X> ‐ хорошо. Для этого есть чаты про <X>» Это единственное предупреждение перед санкциями.
#Rλatan
ок, надеюсь не все живут в одном часовом поясе. За привалa спасибо глянул, когда из мертвой группы по Ансибл перешел в эту. для тех кто не спит и готов к обсуждению: есть ли более надежные переменные определюящие релиз или версию ОС? например на Debian Wheezy/Jessie/Buster: ansible_distribution_release = Wheezy/Jessie/Buster так что можно определить переменные в vars/debian/wheezy{jessie,buster}.yml но так не выйдет на Fedora ansible_distribution_release = пустая перменная и выходит нужно тянуть еще одну ansible_distribution_version и определять vars/fedora/28{29,30,31}.yml что не совсем удобно если нужно унифицировать подгружение переменных в tasks/main - name: "main | include distrubution specific variables" include_vars: "{{ current.distname }}/{{ current.distrelease }}.yml" defaults/main.yml --- current: osfamily: "{{ ansible_os_family|lower }}" distname: "{{ ansible_distribution|lower }}" distrelease: "{{ ansible_distribution_release }}" distversion: "{{ ansible_distribution_version }}" arch: "{{ ansible_architecture }}" domain: "{{ cfg.resolve.domain|default('localdomain', true) }}" user: "{{ ansible_user }}" users: "{{ cfg.users|default(ansible_user, true) }}"
Timur
ок, надеюсь не все живут в одном часовом поясе. За привалa спасибо глянул, когда из мертвой группы по Ансибл перешел в эту. для тех кто не спит и готов к обсуждению: есть ли более надежные переменные определюящие релиз или версию ОС? например на Debian Wheezy/Jessie/Buster: ansible_distribution_release = Wheezy/Jessie/Buster так что можно определить переменные в vars/debian/wheezy{jessie,buster}.yml но так не выйдет на Fedora ansible_distribution_release = пустая перменная и выходит нужно тянуть еще одну ansible_distribution_version и определять vars/fedora/28{29,30,31}.yml что не совсем удобно если нужно унифицировать подгружение переменных в tasks/main - name: "main | include distrubution specific variables" include_vars: "{{ current.distname }}/{{ current.distrelease }}.yml" defaults/main.yml --- current: osfamily: "{{ ansible_os_family|lower }}" distname: "{{ ansible_distribution|lower }}" distrelease: "{{ ansible_distribution_release }}" distversion: "{{ ansible_distribution_version }}" arch: "{{ ansible_architecture }}" domain: "{{ cfg.resolve.domain|default('localdomain', true) }}" user: "{{ ansible_user }}" users: "{{ cfg.users|default(ansible_user, true) }}"
Тут несколько раз приводилось решение для такого
Timur
- name: Load a variable file based on the OS type, or a default if not found include_vars: '{{ platform_vars }}' with_first_found: - '{{ ansible_os_family }}.yml' - '{{ ansible_distribution }}.yml' - default.yml loop_control: loop_var: platform_vars
#Rλatan
Не используйте переменные роли в vars, которые хотите менять в плейбуке или инвентаре
да словарь переопределяется. Если добваить словарь "верхнего уровня" то все звучно склеивается вместе https://gist.github.com/Hellseher/f0908e296fb94681f8c1761130c659a0
#Rλatan
- name: Load a variable file based on the OS type, or a default if not found include_vars: '{{ platform_vars }}' with_first_found: - '{{ ansible_os_family }}.yml' - '{{ ansible_distribution }}.yml' - default.yml loop_control: loop_var: platform_vars
вроде ты подскзывал в дргой группу похожу модель, а если обе перменные определенны и в них конфликтные пакеты?
GithubReleases
ansible/ansible tagged: v2.9.4 Link: https://github.com/ansible/ansible/releases/tag/v2.9.4 Release notes: New release v2.9.4
Sergey
Значит, тебе решать, какие пакеты из пакетов должны быть установлены. И в целом я с Тимуром согласен: не надо так делать, как ты делаешь. Реальный мир тебе тут же показывает несостоятельность подхода твоим же контрпримером.
#Rλatan
немного багнутый with_first_found https://github.com/ansible/ansible/issues/23392 а так хочется one task to rule them all в котором будет переменная определенная в зависимости от текущей ос-версии мы поддерживам стак дистрибутивов от Дебиан Етч (4.0) до Бастера (10.0) для себя пишу на Федора другие разрабы на Арче и Гиксе а плейбук нужен единый с одной логикой - увы не моя это прихоть а тербования в команде, идет перегон провизионного стека написанного полностью на Баше и работающего более 10 лет без поломок но имеющего свои ограничения, ансибл хоть и поломанный по дизайну, дает больше гибкости как ни крути
#Rλatan
- name: "main | include distribution specific variables" include_vars: "{{ lookup('first_found', params) }}" vars: params: files: - "{{ current.distname }}/{{ current.distversion }}.yml" - "{{ current.distname }}/{{ current.distrelease }}.yml" paths: - 'vars' как то так выходит
#Rλatan
https://github.com/ansible/ansible/blob/3dbf89e8aeb80eb2d1484b1cb63458e4bb12795a/lib/ansible/plugins/lookup/first_found.py
#Rλatan
где вот сорс для with_first_found https://github.com/ansible/ansible/search?p=6&q=with_first_found&unscoped_q=with_first_found не нашел =/
Sergey
может, плохо искал? https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/lookup/first_found.py
Sergey
ну вообще-то это оно и есть, если на примеры посмотришь в тексте
Sergey
т.к. эти все legacy with-штуки были переписаны на lookup-плагины
#Rλatan
да там вроде с 2.5 втухали `loop`и поошли все переписывать) грубо говоря новая версия with_first_found формы lookup('first_found', var_dict['files']['path']) ?
Sergey
кароч я хз, что ты имел в виду, вот твой фрагмент: https://github.com/ansible/ansible/blob/devel/lib/ansible/executor/task_executor.py#L191
*sm1Ly
ребят, ансибл умеет где-то ключи хранить, как эту штуку зовут?
*sm1Ly
vault? Ну это не ансибла же
он вроде так и зовется ansible-vault.
Andrey
он вроде так и зовется ansible-vault.
Нет, это которая шифрует мастер ключом, а то что я говорю, это как сервис хранения ключей
Andrey
Хашикорпа
*sm1Ly
ааааа, точняк, спасибо
*sm1Ly
вот его я и искал. вроде и salt его умеет. спасибо еще раз
Andrey
вот его я и искал. вроде и salt его умеет. спасибо еще раз
Не за что, хотя в кубере было бы проще, секретами...
*sm1Ly
Не за что, хотя в кубере было бы проще, секретами...
у меня тут мясо из линуксов и виндов)
Andrey
Чем эти все scm
*sm1Ly
Сочувствую
а я то себе как сочувствую)
Andrey
а я то себе как сочувствую)
Ну а че тогда не собирать каким-нибудь гитлабом и хранить ключи там, чем заморачиваться
Andrey
И прикручивать волт
Andrey
там доступы к биржам. нельзя.
Они там могут быть с галочкой Protected Variable
*sm1Ly
Они там могут быть с галочкой Protected Variable
я вот чего нашел, по идее подойдет: https://fabianlee.org/2016/10/18/saltstack-keeping-salt-pillar-data-encrypted-using-gpg/
Andrey
я вот чего нашел, по идее подойдет: https://fabianlee.org/2016/10/18/saltstack-keeping-salt-pillar-data-encrypted-using-gpg/
Ну это такая же фигня как у ансибла, с той лишь разницей, что придется пароль синхронный класть на ноду. Я бы лучше хашикорп покурил, чтобы руками не создавать и иметь одно место хранения
Dmitriy
Всем привет. А важен ли для ansible pearl на хосте ? Особенно на этапе сбора фактов
Ждун
питон важен
Dmitriy
питон знаю, с ним проблем нет, соответствует. ДУмал может перл....ладно, спасибо, буду дульше копать.
Dmitry
Доброго дня Есть плейбук, есть группа хостов, на некоторых он отрабатывает без проблем, на некоторых выдает Platform linux on host is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. зашел, проверил, указал в хостах питоновский интерпритатор- не помогло(2.4.3) сверил установленные либы- одинаковые. проверил which python, одинаковый. Что я делаю не так ?
Ну в целом по этой ссылке всё английским по белому рассказано. При текущем дефолте (auto_legacy) ansible берёт ОС, дистрибутив и версию, затем смотрит в своей таблице, где на этой платформе должен находиться python. Если в таблице указано что-то отличное от /usr/bin/python, но при этом на сервере есть симлинк и/или бинарник /usr/bin/python, то он зачем-то (видимо для обеспечения совместимости) использует /usr/bin/python, но кидает warning о том, что так вскоре делать не будет. Можно уже сейчас переключиться на режим auto, тогда будет будет использоваться питон из внутренней таблицы, если там есть соответствующая запись, а если записи нет - только тогда будет предпринята попытка его найти.
Dmitriy
Ну в целом по этой ссылке всё английским по белому рассказано. При текущем дефолте (auto_legacy) ansible берёт ОС, дистрибутив и версию, затем смотрит в своей таблице, где на этой платформе должен находиться python. Если в таблице указано что-то отличное от /usr/bin/python, но при этом на сервере есть симлинк и/или бинарник /usr/bin/python, то он зачем-то (видимо для обеспечения совместимости) использует /usr/bin/python, но кидает warning о том, что так вскоре делать не будет. Можно уже сейчас переключиться на режим auto, тогда будет будет использоваться питон из внутренней таблицы, если там есть соответствующая запись, а если записи нет - только тогда будет предпринята попытка его найти.
ну, я прочел, в моем случае(с учетом что на части хостов работает корректно) подходит вариант в хостфайле прописать ansible_python_interpreter= и путь к питону, но это не помогло. Собственно это не warning, а error
Dmitry
ну, я прочел, в моем случае(с учетом что на части хостов работает корректно) подходит вариант в хостфайле прописать ansible_python_interpreter= и путь к питону, но это не помогло. Собственно это не warning, а error
ansible_python_interpreter= - а что дальше-то? если просто = и дальше в этой строке нет, то того мало, нужно было один из режимов по ссылке выбрать и указать
Dmitriy
ansible_python_interpreter= - а что дальше-то? если просто = и дальше в этой строке нет, то того мало, нужно было один из режимов по ссылке выбрать и указать
путь к питону, то что мне выдает whereis python на рабочем хосте. Проверяю наличие и возможность запуска на нерабочем и профита нет, увы
Dmitry
путь к питону, то что мне выдает whereis python на рабочем хосте. Проверяю наличие и возможность запуска на нерабочем и профита нет, увы
C учётом Setting a specific path completely disables automatic interpreter discovery, такое поведение, похоже, может быть только если как-то не так (куда-то не туда) прописать.
Dmitry
собственно ошибка не отличается, что с этим параметром, что без него
а значит ansible не видит этот параметр. а это может быть только если как-то не так (куда-то не туда) прописать. 🙂 Похоже, проще выложить то, что получилось на какой-нибудь pastebin
Dmitriy
хотя что то меня терзают сомнения что я что то делаю не так....
Aleksey
@tgadiev удалось хаюзать ansible verifyir в молекуле ?
Dmitry
Дык, собственно в /etc/nsible/hosts прописал адрес_хоста ansible_python_interpreter=/usr/bin/python. Или вы не про это?
Про это. Вроде похоже на правильное объявление. Тогда я всё, у меня идеи закончились. Разве что можно попробовать запустить ansible на всю группу, где этому хосту задан путь, а не конкретно этот хост. Возможно текущий вариант запуска делает так, что данные из группы не используются. Если так, то можно прописать либо глобально, в том же inventory или в конфиге, либо вроде ещё можно в host_vars и group_vars. Ну и через переменные окружения
Lev
@tgadiev удалось хаюзать ansible verifyir в молекуле ?
Мы в парк родей пользуем. Но тесты смешные выходят
Владислав
Как работает map в ansible? Не могу нагуглить внятной документации, умеет ли он мапить все фильтры или только определенный список? В частности хочется чего то типа: hosts_ip | map('http://%s', 'format') upd без regex_replace
Aleksey
Мы в парк родей пользуем. Но тесты смешные выходят
удалось сделать тесты что бы не падали после первого косяка а доходили до конца?
Aleksey
хочу конструкцию в стиле tasks: - name: Init fail counts set_fact: fail_count=0 - name: Example assertion ignore_errors: yes register: {% if filed %} fail_count+=1 {% else %} pass {% endif %} assert: that: false
Lamobot
Как работает map в ansible? Не могу нагуглить внятной документации, умеет ли он мапить все фильтры или только определенный список? В частности хочется чего то типа: hosts_ip | map('http://%s', 'format') upd без regex_replace
По-моему, фильтр format не для такого использования https://jinja.palletsprojects.com/en/2.10.x/templates/#format Чтобы добавить в начало всех строк в листе тут были посты
Lamobot
GOOD: {{ hosts | map(‘regex_replace’, ‘^(.*)$’, ‘https://\1’) | list }} вот это считается хорошим судя по документации
Lamobot
Ну это частность, вопрос тут был скорее о работе мапа.
map применяет фильтр ко всем элементам
Lamobot
не совсем ясно чем это лучше format, честно говоря
Тем что это работает, а format в вашем варианте не будет работать :)
Владислав
Тем что это работает, а format в вашем варианте не будет работать :)
Ну это да, собственно я через regex_replace и сделал
Александр
Подскажите пожалуйста, как проверить наличие определённой строки в файле (кроме как shell: grep ... file). Мне нужен сам факт её наличия. Правка не нужна.
Александр
https://stackoverflow.com/a/43872222
я это видел, но почему-то не присмотрелся вниматочно. Спасибо!
Aleksey
чот я смотрю сейчас ансиблу что бы быть проверятором не очень то хватает модулей.
Aleksey
ps -efww | grep process-name но нет. модуль pids не отдает ничего кроме pid