Aleksey
если его нужно как-то поособенному сконфигурировать, очень проектно-специфично, можно конечно создать роль, но роли это нечто большее и более универсальное, чем ты можешь поделиться, использовать в другом проекте
Aleksey
https://github.com/nginxinc/ansible-role-nginx/tree/master/molecule
Aleksey
Aleksey
вот смотрите сколько пришлось написать тестов
Aleksey
это правильная роль nginx от создателей nginx
Aleksey
вот
Aleksey
при том что тестов то на самом деле нет https://github.com/nginxinc/ansible-role-nginx/blob/master/molecule/common/playbooks/template_verify.yml
Aleksey
Aleksey
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
 Здесь я заинклудил роль т.к. она общая для нескольких сайтов.
Aleksey
прошу обратить внимание, что директория roles пуста
Aleksey
Он подтягивает публичные роли
Aleksey
а то что проекто-специфичное, он пишет в виде тасков в main плейбуке.
Aleksey
Не подумайте что я хочу что-то доказать, просто хотел подискутировать на эту тему, ну если не интересно, ок.
Sergey
Sergey
А ссылаться на гирлинггая - такое себе. Аппеляция к авторитетам, так вроде называется?
Sergey
Ну и его роли - не идеал, это тоже общеизвестно.
Anna
зато он рукастый, сантехнику и электрику делает. Крутой.
Sergey
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
а потом тогда уже удалять старый каталог, когда симлинк поменялся?
Anna
плейпуки - хорошее название)) во всяком случае получилось выуживать привязанные к тегу переменные. Они в файле переменных внутри роли.
Anna
спасибо за модуль!
Sergey
🙏🏻
Aleks
Здравствуйте, коллеги. Подскажите, пожалуйста. Нужно создать папку вида /var/web/hostname/. Как вытащить имя хоста?
Alex
Кирилл
Aleksey
я за бан
Sergey
😂
Andrey
Интересно а зачем таким ансибл
Andrey
Это же банальный вопрос
Andrey
Аля как запустить плейбук
UglyKoyote
я бы рассказал историю ) но меня тут не любят
NM
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 - структура в [] валидна.
и к тому же - желаемый результат и получаемый у вас одинаков по структуре, отличия только визуальные. это точно тот что вы хотите показать?
Grek 🇺🇦
так в чем вопрос - в структуре, или в запятых?
Артём
Igor
Артём
Igor
в json они вообще то не лишние
Grek 🇺🇦
Igor
потому что.
to_nice_json фильтр попробуйте
ок, работает, только получается проблема что если есть {% if not loop.last %},{% endif %}, то структура опять портится, а это условия нужно чтобы в конце запятая не ставилась. Как это обойти?
Anton V.
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 👻
Искал как-то, тоже в ансибл в темплейт хотел впихнуть - не нашел 😔