Oleksandr
а чем отличается развертывание PROD от STAGE?
George
Маленькими особенностями для дебагп ?
George
Взаимосвязями с другими сервисами ?
Aleksey
а чем отличается развертывание PROD от STAGE?
Для STAGE вырезается sensetive data, вырезается и тасуется часть данных в таблицах, дополняется специальными тестовыми данными(например, имена пользователей в UTF-16)
Aleksey
А в остальном отличий от поднятия обычной реплики нет
Aleksey
Да, MySQL
Aleksey
Вынеси отдельно кусок анонимизациии и подготовки данных для тестов и все
Оно так и сделано. Мне другое интересно - пишут-ли люди operation-роли? Как ими управляют? Отделяют-ли (назову условно)Linux deploy-репу от operation-репы? Какие best practices есть именно по operation-ролям в ansible
Timur
Роли подразумевают более-менее простые атомарные состояния, к которым приводит исполнение роли
Aleksey
Тут скорее для плейбуки задача
Ну, оно почти так и получается... В роли есть секции "снять бекап", "переписать бекап", "развернуть бекап", и вконце "готовить STAGE" или "настроить репликацию и засинкать". Но, пологаю, это worst practices
Max
если надо поддерживать несколько систем с различными местами - решаю на месте.
Max
обычно на каждую ansible_os_family создаю каталог. при загрузке в тасках задаю источник с префиксом ос.
Max
т.е. под дэбы ./templates/Debian/etc/nginx/sites-available/bla.conf.j2
Max
но могут быть грабли в разных случаях.
Tadeusz
Вообще, в env зашить можно путь и все
Max
Зачем? Пусть это if решает, конфиг то не сильно другой
- эстетичеэская фиксация - меньше логики - дольше жизнь. но я не фанат. в зависимости от ситуации решаю "в поле"
Max
А зачем тогда темплейты?
а зачем тогда зачем?
Max
Все верно, зачем не нужно.
Tadeusz
Ну каждому свое, да, но мне больше унификация такая нравится
Max
как и коммунизм....
Max
🤣🤣🤣
Max
🙏
Grisha
Ребзя,подскажите плиз как мне сделать сравнение с hostname ? when: "{{ item.value.default_options.target_minion }} == {{ hostname }}"
Grisha
у меня не получается сравнимать с {{ item.value.default_options.target_minion }} с настоящим hostname в самой машине
Max
{{ ansible_nodename }}
Grisha
мне нужно чтобы с файла достались только нужные мне данные, а нужные выглядят так что если hostname совпадает с target_minion
Grisha
- proxysql_mysql_users: login_user: "{{ admin_user }}" login_password: "{{ admin_password }}" username: "{{ item.key }}" password: "{{ item.value.default_options.hash }}" state: present with_dict: "{{ mysql.servers.users }}" when: "{{ item.value.default_options.target_minion }} == {{ ansible_nodename }}"
Grisha
вот так эьто выглядит
Sergey
уууу proxysql
Grisha
« уууу» это плохо?
Tadeusz
Кривые кавычки это плохо
Sergey
у меня вот некоторые модули не работали для ансибла под proxysql, дока говорит одно, линтер говорит другое
Sergey
пришлось некоторые части из конфига все равно забирать
Grisha
там фикс нужно делать в питон скрипте
Timur
- proxysql_mysql_users: login_user: "{{ admin_user }}" login_password: "{{ admin_password }}" username: "{{ item.key }}" password: "{{ item.value.default_options.hash }}" state: present with_dict: "{{ mysql.servers.users }}" when: "{{ item.value.default_options.target_minion }} == {{ ansible_nodename }}"
А если так? - proxysql_mysql_users: login_user: "{{ admin_user }}" login_password: "{{ admin_password }}" username: "{{ item.key }}" password: "{{ item.value.default_options.hash }}" state: present with_dict: "{{ mysql.servers.users }}" when: item.value.default_options.target_minion == inventory_hostname
Timur
Хотя тут принципиально не совсем правильный подход
Grisha
Такое можно запилить, но это не совсем то
Timur
- proxysql_mysql_users: login_user: "{{ admin_user }}" login_password: "{{ admin_password }}" username: "{{ item.key }}" password: "{{ item.value.default_options.hash }}" state: present loop: "{{ mysql.servers.users | selectattr('default_options.target_minion', 'equalto', inventory_hostname) | list }}" вот так логичнее
Oleg
хелп плтз! есть такой код: line: "{{ admvip_ip }} {{ item }}.ms.ycs.io" with_items: - "{{ var }}"
Oleg
var - это список из нескольких серваков, как сделать чо бы каждый сервак из списка был по строчно добавлен в файл, типо такого: 10.10.10.10. server1.ms.ycs.io 10.10.10.10. server2.ms.ycs.io и так далее
Oleg
10.10.10.10 server1.ms.ycs.io вот так*
Oleg
сейчас все в одну строку 10.10.10.10 server1 server2.ms.ycs.io
Oleg
исели использовать фильтр join то домен дописывается к названию сервера,но все равно все в одну строку
Oleg
Что за код? Что за line?
модуль lineinfile...просто выше все норм, проблема только в том, что в одну строку все фигачет
Timur
Скопируйте сюда из плейбуки или роли просто
Timur
И содержание var тоже покажите как выглядит
Oleg
Нормально код дайте
- name: 111 set_fact: list = "{{ item }}" with_inventory_hostnames: - "{{ groups['app'] }}" - "{{ groups['adm'] }}" register: list_all - name: 222 set_fact: var2: "{{ list_all.results | map(attribute='item') | list }}" - name: 333 become: yes lineinfile: path: "/etc/hosts" state: present owner: "root" group: "root" mode: "0644" line: "10.10.10.10 {{ item }}.com" delegate_to: "{{ target_server }}" with_items: - "var1" <---тут 1 сервер и н нормально выполняется (10.10.10.10 server1.com) - "var2" <-----тут несколько (отфильтрованно с помощью фильтра list и в рез-те в одну строку)
Timur
Для начала - объясните, пожалуйста, зачем вам вот такой странный код? - name: 111 set_fact: list = "{{ item }}" with_inventory_hostnames: - "{{ groups['app'] }}" - "{{ groups['adm'] }}" register: list_all - name: 222 set_fact: var2: "{{ list_all.results | map(attribute='item') | list }}"
Timur
Что и зачем вы пытаетесь сделать с его помощью?
Timur
Во-вторых, что вы хотите получить в результате вот этого таска? - name: 333 become: yes lineinfile: path: "/etc/hosts" state: present owner: "root" group: "root" mode: "0644" line: "10.10.10.10 {{ item }}.com" delegate_to: "{{ target_server }}"
Andrey
Все... нервов не хватает понять, подскажите что опять у меня с синтаксисом (5 строк опять) https://gist.github.com/panov-andy/f060137a965f032c9e8e5d5d15f20b2a
Oleg
delegate_to - лишнее, а так модиикатция etc
Timur
delegate_to - лишнее, а так модиикатция etc
Вам нужно добавить в etc/hosts определенный список хостов просто? С одним и тем же IP?
Oleg
ага
Timur
ага
Откуда берется список хостов?
Oleg
Откуда берется список хостов?
из inventory файла, который постоянно изменяется...тч в группах меняется кол-во хостов
Timur
Т.е. просто нужны хостнеймы из определенных групп?
Timur
Что мешает сделать так? - name: 333 become: yes lineinfile: path: "/etc/hosts" state: present owner: "root" group: "root" mode: "0644" line: "10.10.10.10 {{ host_name }}.com" with_inventory_hostnames: - app:adm loop_control: loop_var: host_name
Timur
Где app и adm - имена нужных групп
Oleg
Т.е. просто нужны хостнеймы из определенных групп?
а если одна из групп окажется пустой ?