Anonymous
аминь
Nick
завтра на techleadconf буду вещать про рефакторинг инфраструктуры в целом и в частности затрону тему ansible в разрезе его тестирования. на графиках история 2 проектов в монорепах * синяя линия - шкала справа, SLOC для YML * закрашенная область - stacked граф для кол-во ролей/плэйбуков покрытых молекулой, этакий code coverage. шкала слева по моим субъективным наблюдениям если у вас всё ОЧЕНЬ плохо если: * 2000 строк YML и нет линтинга * 4000 строк YML и не запускаете молекулу или что-нибудь другое для проверки что оно запускается и идемпотентно. * 8000 строк и нет e2e\integration тестов. есть кому чего добавить, дабы опровергунть мои циферы?
Честно говоря - не очень понятно что тут опровергать. С линтером лучше чем без линтера. С тестами лучше чем без тестов. Больше тестов - лучше чем меньше тестов. Как это завязано на количество строк - хз. Есть ресурсы на тестирование - тестируй. Нет - не тестируй.
Nick
Доклада самого не видел. Может поэтому не всё понял
Anonymous
Хех
Lev
пока нет видео, в течение недели наверно расшировку в виде статейки накатаю. в целом там не только про ansible было. а цифры из скрина тут пролезать будут http://www.goncharov.xyz/it/ansible-testing-ru.html
Anonymous
Кошмары в снах и т. д.
Lev
cd ansible-repo cloc .
Lev
я на двух проектах с примерно 8-9к строк ямликов построил графики по кол-во тестируемых/ролей и сделал разбивку по типу тестов.
Lev
мне интересно посмотреть не на моих проектах, а на других. типа сравнить
Anonymous
Эх, да, есть такое
Lev
а вот надо или нет, про это было в выстулпение на техлидконфе. типа вычиленил паттерн из разных проектов где бывал и там появилась идея тестирования инфраструктуры норм тема. вот слайды https://cloud.mail.ru/public/2z4x/5BBSYWaKU тезисно: 1. Инфраструктура стремится с хаосу. 2. Agreements as Сode внедрять(,) нельзя(,) забить. 3. Ручной труд -> Механизация -> Автоматизация. 4. Инфраструктуру можно и нужно рефакторить. Но не всегда. 5. Тесты на инфраструктуру удешевляют/ускоряют ее изменения. 6. Используй IaC testing pyramid. Не откладывай не потом! расшировка позже будет
Nick
Отличная статья
Anonymous
Ну, вот все рады! Всем хорошо!
Nick
Мы пока тесты не тестируем. Но уже запретили мержи в мастер без пройденного теста линтера
Nick
Плюс там ещё простенькие проверки на наличие хоть какой-то документации
Lev
Плюс там ещё простенькие проверки на наличие хоть какой-то документации
моно репо? много реп? можно пайплайн/флоу глянуть где-нибудь?
Nick
Какой ещё синк?
Anonymous
Вопрос какой?
Anonymous
Ден, это точно мимо
Anonymous
Вот это замечательное решение!
Nick
Год назад: пуш в мастер. Шаг 1: обязательный пр Шаг 2: обязательный апрув перед мерджем в мастер Шаг 3: включаем фишку что коммит в заапрувленый ПР скидывает все апрувы Шаг 4: запрет мерджа без зелёного билда. На шаг 4 вышли где-то в ноябре
Nick
Каждый день
Anonymous
Это по умолчанию у всех
Nick
Это меня спросили про пр и мр как сделано
Nick
Почитай доклад Льва - тоже не сразу всё было. Это норма. Всегда есть долг, трейдоффы
Nick
моно репо? много реп? можно пайплайн/флоу глянуть где-нибудь?
Нет там никакого флоу. Тимсити запускает линтер. Если ошибок нет - ставит зелёную галочку на коммит
Nick
Бывает такое. Видишь как люди героически преодолевают то, что ты уже десять лет назад раздуплил. И у тебя вскипает конечно.
Tadeusz
идите в лс, войны диванные
да, это я
Мне казалось, тебя вчера уже банили, не?
Anonymous
не веришь в реабилитацию?
Pavel
Коллеги добрый день, подскажите правильное направление мысли. Есть задача массового создания DNS записей используя win_dns_record Как источник данных JSON файл я так понимаю надо отфильтровать JSON в словарь? или как то по другому? отдельное поле прекрасно вытаскивается через from_json | json_query('*.ip_address')
inqfen
Изменять его, передавать в модули etc
Anonymous
Изменять его, передавать в модули etc
ага, тут я спрошу как и получу долгую паузу
Anonymous
фигасе, прям удивил
Aleksey
по сути это требование yml превратить в ини. спасибо, потерплю)
Pavel
прошу прощения. а вопрос в чем?
вопрос простой, как собрать словарь из фильтра по JSON
Anonymous
изи пизи же
Anonymous
нет?
Pavel
и в чем проблема?
в непонимании как это сделать
Pavel
как что сделать?
из большого JSON по фильтру вытащить ключ - значение в словарь
Anonymous
и где проблема то?
Pavel
или можно сразу JSON d дщщз
Pavel
и где проблема то?
не понимаю как это сделать, топчусь на месте
Pavel
спасибо, повторю завтра,если сегодня не добью сам
Anonymous
не понимаю как это сделать, топчусь на месте
ansible-playbook release.yml --extra-vars "@some_file.json" нет?
Anonymous
https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html нет?
Anonymous
https://jmespath.org/ нет?
Anonymous
не понимаю как это сделать, топчусь на месте
вагон и тележка по фильтрам для json
Anonymous
из большого JSON по фильтру вытащить ключ - значение в словарь
извращенцы используют Jinja2. более интересно https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#json-query-filter
Pavel
@ipv176 спасибо первый вариант первым пришел в голову, но не понимаю как обратиться последовательно к массиву "store_1" : {"name": "", "ip": "" }, "store_2" : {"name": "", "ip": "" }, ...... "store_n" : {"name": "", "ip": "" } т.е. я не знаю что в значении сторе *name и *ip
Anonymous
ссылки выше. на https://jmespath.org/ есть примеры. можно онлайн потыкать запросы
Anonymous
проще json query
Pavel
спасибо коллеги
Anonymous
не за что
Lev
Нет там никакого флоу. Тимсити запускает линтер. Если ошибок нет - ставит зелёную галочку на коммит
Ну почему. Вполне себе флоу. Сколько времяни билд занимает? Как долго ревью? Сколько апруаов для апрува мерджа надо?
Lev
Это по умолчанию у всех
Ну хз. Я такую штуку три раза внедрял. И это нормально. Может на новых проектах по другому, я как то больше авгиевы конюшни разбираю
Lev
спасибо! замечательно! лишь с Avoid hashes dictionaries, use flat structure не согласен. излишее ограничение
Это настоятельная рекомендация, а не строгий запрет. У нас роли надо комбинировать и перекрывать что-то. Отсюда вылезло что хэши зло для нас
Sergey
Подскажите плиз есть вот такая конструкция и нужно добавлять дополнительную секцю только для первого элемента, но она добавляется ко всем последующим {% for config_file in k8s_configure_application_config_files %} {{ config_file | regex_search("([^\/]+$)")}}: | {% for item in k8s_configure_application_configuration[config_file] | dictsort(true) %} {{ item[0] }} = {{ item[1] }} {% endfor %}{{ '\n' }} {%- if config_file | first %} # Additional application properties for registration to Consul spring.application.name = {{ application_name }} spring.cloud.consul.discovery.acl-token = spring.cloud.consul.host = ${NODE_IP} spring.cloud.consul.discovery.prefer-ip-address = true spring.cloud.consul.discovery.tags = {{ deploy_environment }} {% endif %} {% endfor %}
Sergey
и это логично так как первый элемент есть )))
Sergey
может как то фильтром еще
Sergey
# Additional application properties for registration to Consul spring.application.name = {{ application_name }} spring.cloud.consul.discovery.acl-token = spring.cloud.consul.host = ${NODE_IP} spring.cloud.consul.discovery.prefer-ip-address = true spring.cloud.consul.discovery.tags = {{ deploy_environment }}
Sergey
только для первого элемента из config_file
Sergey
а он получается копирует эту секцию для всех
Lamobot
config_file | first всегда выдаёт первый элемент из списка config_file - это не условие :)
Lamobot
loop.index попробуйте