Div
when: var
Div
как то так
Гайрат
В юзерских ролях часто вижу фильтр default('/home' + item.username)
Sergey
Подскажите, в блоках условий в ансибле переменные нужно оборачивать в {{}}
Нет, условия пишутся так, как будто они уже внутри {{}}.
Григорий
Спасибо
Григорий
Если переменной var не существует, {%for i in var%} упадет?
Lamobot
Если переменной var не существует, {%for i in var%} упадет?
var|default([]) Вот так можно попробовать
Григорий
круто, спс лучше чем в ифчик оборачивать
Anonymous
Всем привет, подскажите как извернуться: выполняю команду, допустим mkdir, оболочка говорит, dir already exists и всё печально. Как бы мне так сделать, чтобы команда выполнялась в том случае, если директории нет, а если директория уже есть - делать ничего не будем. handlers моя палочка-выручалочка?
Grek 🇺🇦
ваша палочка выручалочка модуль file
UglyKoyote
ну или шеллом трушно) если уж тянет на башзибл
Div
можно делать связку из stat+file для проверки
Anonymous
ок, плохой пример привёл, допустим это не mkdir, а модулем shell
Anonymous
вот хороший пример: не запускать контейнер, если он уже запущен, а если не запущен - запустить. Наверное так даже будет интереснее.
Григорий
а зачем создавать файлы шелом? это ансибл, говоришь: вот такой файл/папка находятся в таком-то состоянии
Anonymous
Всё всё, с файлами плохой пример.
UglyKoyote
ок, плохой пример привёл, допустим это не mkdir, а модулем shell
тогда баш подключать с правильной последовательностью команд
Anonymous
Понял, спасибо.
Григорий
то же самое с контейнером: такой-то контейнер, существует
Grek 🇺🇦
Вы с праздным интересом, или у вас какой-то конкретный запрос, или на собеседовании спросили?
UglyKoyote
да конечно можно, там ничего сложного. вариантов море
Anonymous
Если хочется bash, то mkdir -p делает то что вам нужно :)
да вот хотелось бы по нормальному сделать, с модулями. Спасибо, я кажется нашёл свой ответ.
Vladimir
А по хорошему, пишите модуль, это не сложно, и нервов сэкономит много)
Lamobot
да вот хотелось бы по нормальному сделать, с модулями. Спасибо, я кажется нашёл свой ответ.
Модули - это file, он делает то что вам нужно. Ну и docker_container, если вам нужно с контейнерами работать.
Anonymous
Спасибо ещё раз, пример с директорией я привёл просто так, он был неудачен.
Grek 🇺🇦
приведите ту задачу которую решаете. а не сферического коня в вакууме тащите
Grek 🇺🇦
и вам помогут. если смогут. а отвечать на гипотетические вопросы - тратить время
Bogdan (SirEdvin)
Хм ... интересно, кто-то знает как в dynamic inventory, через compose закинуть переменные на верхний уровень, а не в подэлемент?
Григорий
оч странный вопрос, в темплейте можно выполнять что-то? т.е. мне например нужно вычитать 5 файлов в переменные, хочу пройти циклом по ним, что-то вроде {% for file in files %} someVar: *тут например cat file|base64* {% endfor%}
Григорий
насколько я представляю тут должно быть что-то вроде {{file| someFunc()}}
Lamobot
насколько я представляю тут должно быть что-то вроде {{file| someFunc()}}
Скорее всего не так. В jinja есть возможность вставлять темплейты. Можно этим попробовать воспользоваться. https://jinja.palletsprojects.com/en/2.11.x/templates/#template-inheritance
Lamobot
насколько я представляю тут должно быть что-то вроде {{file| someFunc()}}
Или вариант проще, перед тем как рендерить темплейт читаете файлы в переменные и в темплейте их используйте.
Lamobot
насколько я представляю тут должно быть что-то вроде {{file| someFunc()}}
Ой, перепутал - инклюды есть. https://jinja.palletsprojects.com/en/2.11.x/templates/#include
Alex
а в курсе кто в centos7/rhel7 с 3м питоном не работает только yum или что то еще?
Alex
- name: Install prerequisite packages become: yes yum: name: “{{ prerequisite_packages }}” state: present vars: ansible_python_interpreter: /usr/bin/python2 так то оно конечно работает, но выглядит криво
George
- name: Bingo 11 debug: when: myvar == 1 vars: myvar: '{{ 1 }}' tags: - bingo11
Vladislav 👻
Вообще, у нас все работает
Alex
оно с 3м питоном не может
Alex
Питон где?
в /usr/bin где ему и место
Vladislav 👻
Или /usr/local/bin
Vladislav 👻
В этом частая проблема как раз, а все из-за криворуких питонистов, да 😬
Alex
дело в отсутствии модуля python3-yum или как там его
Alex
на целевых хостах какой питон юзается?
Alex
ну вот и ответ
Alex
а интересует 3й
Lamobot
- name: Bingo 11 debug: when: myvar == 1 vars: myvar: '{{ 1 }}' tags: - bingo11
А здесь-то чего из серии бинго? просто условие
George
Твоё предсказание? ok/skip/error?
Alex
оно не работает
Alex
by design
Alex
ну точнее yum модуль не будет точно работать, насчет други х модулей не в курсе
Lamobot
George
А объяснить можешь?
Alex
будет ошибка вида fatal: [app_master]: FAILED! => changed=false msg: The Python 2 bindings for rpm are needed for this module. If you require Python 3 support use the `dnf` Ansible module instead.. The Python 2 yum module is needed for this module. If you require Python 3 support use the `dnf` Ansible module instead.
Alex
ну вот запусти теперь - name: Install prerequisite packages become: yes yum: name: mc state: present vars: ansible_python_interpreter: /usr/bin/python3
Alex
узнаешь много нового :D
Lamobot
Lamobot
А объяснить можешь?
Скорее всего строка/число в условии
Alex
я хочу юзать 3й питон
Alex
но не могу
Alex
в контексте 7го centos/rhel
Lamobot
А объяснить можешь?
No magic! Check this: - name: Bingo 11 debug: when: myvar == '1' vars: myvar: '{{ 1 }}' ignore_errors: true
Alex
в интерпрайзе далеко не рип
Alex
и лет 5-7 еще будет жить
Alex
а то и 10. имхо
Alex
мы уже официально поддерживаем 8ку в проде )))
Alex
никто и не ломает. 3й питон там идет из коробки
Alex
а то что не работает только модуль yum (по крайней мере у меня) - вот это странно
Alex
я уже привел пример - что не работает
Vladislav 👻
This module only works on Python 2. If you require Python 3 support see the dnf module.
Alex
и получается из-за одного модуля - я вынужден юзать 2й питон