Aleksey
если его нужно как-то поособенному сконфигурировать, очень проектно-специфично, можно конечно создать роль, но роли это нечто большее и более универсальное, чем ты можешь поделиться, использовать в другом проекте
Aleksey
https://github.com/nginxinc/ansible-role-nginx/tree/master/molecule
Aleksey
вот смотрите сколько пришлось написать тестов
Aleksey
это правильная роль nginx от создателей nginx
Aleksey
вот
Aleksey
при том что тестов то на самом деле нет https://github.com/nginxinc/ansible-role-nginx/blob/master/molecule/common/playbooks/template_verify.yml
Aleksey
добавляет оному авторестарт и делает его сервером для 127.0.0.1
а это просто для удобства вынесено в роль, но это не роль)
Aleksey
это просто таскается. это описано кодом. это протестировано.
Aleksey
там выше было про тракторные роли
Aleksey
таже фигня
Андрей
я вот вообще не вижу смысла писать полотна в плейбуках, все переношу в роли
Андрей
ими становится легче и гибче управлять, для меня
Aleksey
я раньше тоже создавал зоопарк из ролей, потом мне это надоело, я стал описывать либо в плейбуке кратко что нужно сделать, либо создавать роль по группе.
Андрей
Значит вы что-то делали не так, если получился зоопарк
Aleksey
вот например playbook который разворачивает докер контейнер с pgbouncer: --- - hosts: db_master become: true any_errors_fatal: true tasks: - name: Run pgbouncer docker_container: name: pgbouncer image: "pgbouncer/pgbouncer" network_mode: host env: DATABASES_HOST: "172.18.0.1" DATABASES_USER: "nginx" DATABASES_PASSWORD: "***" DATABASES_DBNAME: "fc" PGBOUNCER_LISTEN_ADDR: "172.18.0.1" PGBOUNCER_LISTEN_PORT: "5400" DATABASES_POOL_MODE: "transaction" PGBOUNCER_MAX_CLIENT_CONN: "50000" PGBOUNCER_DEFAULT_POOL_SIZE: "100"
Aleksey
я даже не заморачиваюсь с переменными, т.к. они не меняются, если будут меняться, конечно добавлю.
Aleksey
Все просто и понятно
Aleksey
какой смысл для этого создавать роль?
Aleksey
Вот чуть сложнее плейбук, он билдит и заливает статический сайт: --- - hosts: website_public any_errors_fatal: true tasks: - name: Build public site include_role: name=build_site vars: build_site_dir: "../../www/public" - name: Deploy public site synchronize: src: "../../www/public/dist/" dest: "{{openresty_path}}/site/public" delete: no copy_links: yes use_ssh_args: yes become: true  Здесь я заинклудил роль т.к. она общая для нескольких сайтов.
Anna
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html#tag-inheritance
придумала по-другому. Нашла способ в зависимости от тега использовать свои переменные, соответствующие тегу
Aleksey
я вот вообще не вижу смысла писать полотна в плейбуках, все переношу в роли
https://github.com/geerlingguy/ansible-awx-varnish-php-app вот пример репозитория от влиятельного человека, автора книги по ansible
Aleksey
прошу обратить внимание, что директория roles пуста
Aleksey
Он подтягивает публичные роли
Aleksey
а то что проекто-специфичное, он пишет в виде тасков в main плейбуке.
Aleksey
Не подумайте что я хочу что-то доказать, просто хотел подискутировать на эту тему, ну если не интересно, ок.
Sergey
А ссылаться на гирлинггая - такое себе. Аппеляция к авторитетам, так вроде называется?
Sergey
Ну и его роли - не идеал, это тоже общеизвестно.
Anna
зато он рукастый, сантехнику и электрику делает. Крутой.
Anna
Хмык, это нынче подвиг? Я тоже.
да, это подвиг в теперешнее время. Ну вы тоже крутой.
Anna
вот так сделала
Anna
- name: Remove old directory {{ dir[ansible_run_tags[0]].dst }} file: path: '{{ dir[ansible_run_tags[0]].dst }}' state: absent - name: Move build and make permissions on {{ dir[ansible_run_tags[0]].dst }} copy: src: '{{ dir[ansible_run_tags[0]].src }}' dest: '{{ dir[ansible_run_tags[0]].dst }}' directory_mode: 0774 owner: секрет group: nginx mode: 0664
Anna
только как бы не для продакшена у нас. Мы каталог сайта удаляем перед тем как залить новый.
Sergey
да, это подвиг в теперешнее время. Ну вы тоже крутой.
Я не настолько крут, на пьедестал ни к чему, предпочитаю на "ты".
Sergey
Складываешь новый рядом, перекидываешь симлинк.....
Sergey
А Nginx ходит в симлинк.
Anna
а так было сделано. Были ссылки в gitlab ci на плейпуки ansible. Только их много. Там вообще удалялось и копировалось через shell
Anna
а потом тогда уже удалять старый каталог, когда симлинк поменялся?
Sergey
а потом тогда уже удалять старый каталог, когда симлинк поменялся?
Ну да. Есть даже модуль специальный для этого дела, deploy_helper называется.
Anna
плейпуки - хорошее название)) во всяком случае получилось выуживать привязанные к тегу переменные. Они в файле переменных внутри роли.
Anna
спасибо за модуль!
Sergey
🙏🏻
Aleks
Здравствуйте, коллеги. Подскажите, пожалуйста. Нужно создать папку вида /var/web/hostname/. Как вытащить имя хоста?
Aleksey
я за бан
Sergey
😂
Andrey
Интересно а зачем таким ансибл
Andrey
Это же банальный вопрос
Andrey
Аля как запустить плейбук
UglyKoyote
я бы рассказал историю ) но меня тут не любят
UglyKoyote
кастомера спрашиваю - вы ансибл юзаете? нет. у нас никто не умеет
UglyKoyote
я - ок.. кастомер - но у нас есть ансибл плейбуки..
UglyKoyote
я про вопрос - как создать каталог..
UglyKoyote
может он тоже их юзает по факту их наличия, и теперь надо добавить что-то
TT
Automating Network Devices with Ansible - Fedora Magazine https://fedoramagazine.org/automating-network-devices-with-ansible/
Igor
Помогите пожалуйста с джинджей... Есть такой кусок кода: {% if myapp.dns is defined %} "dns": [ {% for dns in myapp.dns %} "{{ dns }}"{% if not loop.last %},{% endif %} {% endfor %} ], {% endif %} Мне нужно что бы он формировал валидный json массив и при достижении последнего значение в лупе не проставлял запятую. Сейчас он почему то выдает: "dns": [ "8.8.8.8", "8.8.4.4" ], Вместо: "dns": [ "8.8.8.8", "8.8.4.4" ], Не пойму где ошибка...
Grek 🇺🇦
не вижу чем вам это не валидный json - структура в [] валидна. и к тому же - желаемый результат и получаемый у вас одинаков по структуре, отличия только визуальные. это точно тот что вы хотите показать?
Igor
не вижу чем вам это не валидный json - структура в [] валидна. и к тому же - желаемый результат и получаемый у вас одинаков по структуре, отличия только визуальные. это точно тот что вы хотите показать?
возможно это и валидно, но у меня просто легаси приложение которое почему то не хочет нормально читать текущий результат, но зато нормально читает такой вариант: "dns": [ "8.8.8.8", "8.8.4.4" ], Поправить такое поведение к сожалению нет возможности вот и приходится мучаться
Grek 🇺🇦
так в чем вопрос - в структуре, или в запятых?
Igor
так в чем вопрос - в структуре, или в запятых?
вопрос, почему вместе переноса строки он ставит пробелы
Igor
убери из шаблона лишнее,хз
что именно здесь лишнее?
Артём
вот они
Igor
вот они
в json они вообще то не лишние
Grek 🇺🇦
Igor
потому что. to_nice_json фильтр попробуйте
ок, работает, только получается проблема что если есть {% if not loop.last %},{% endif %}, то структура опять портится, а это условия нужно чтобы в конце запятая не ставилась. Как это обойти?
Pavel
коллеги приветствую, буксую, не могу решить небольшой вопрос есть группа в инвентори с двумя хостами хочу ip каждого хоста с свою переменную использую конструкцию - name: Gather ip from first ES server set_fact: first_es_server_ip: "{{ ansible_default_ipv4.address }}" delegate_to: "{{ groups['elasticsearch'][0] }}" run_once: yes и аналогично с {{ groups['elasticsearch'][1] }} для второго как итог в обоих переменных адрес первого сервера куда копать?
Pavel
ааа, все просто second_es_server_ip: "{{ hostvars[groups['elasticsearch'][1]]['ansible_default_ipv4']['address'] }}" и все хорошо
Aleksey
коллеги, как бы лучше сделать case на ансибле ? надо сделать ремап значений
Vladislav 👻
Only if
Vladislav 👻
В питоне нет case 🙈
Aleksey
эт я знаю что в питоне нету. думал может в джинже чо есть из хелперов что на первый вглядт не видно
Vladislav 👻
Искал как-то, тоже в ансибл в темплейт хотел впихнуть - не нашел 😔