Pull to refresh
92
0
Андрей Тихонов @tiandrey

DevOps

Send message

Напомните, какой закон нивелирует пункт EULA о том, что дизассемблирование запрещено?

А про это я как раз расписал в описании ресурса типа file: https://habr.com/ru/company/avito/blog/507346/#file, конкретно в параметре source.
Если указывать схему file:, то исходные файлы будут браться с той ноды, на которой запускается паппет-агент. Чтобы брать файлы с паппетсервера, нужно использовать схему puppet:, и использовать правильные пути на самом паппетсервере.
Директория /etc/puppetlabs/code/environments/ubuntu_vdi_test/modules/files/certs не прокатит — нужна поддиректория files внутри какого-нибудь модуля. Например, назовём модуль certs, путь на паппетсервере будет /etc/puppetlabs/code/environments/ubuntu_vdi_test/modules/certs/files/certs; чтобы брать файлы по этому пути — используйте source => 'puppet:///modules/certs/certs' (при условии, что окружение ноды — ubuntu_vdi_test).

Если я правильно понимаю, то ошибка именно из-за дублирования ресурса user { 'deploy': } в старом и новом модуле. Решается эта проблема так:


Есть и другие способы достигнуть идемпотентности при добавлении ресурсов, а именно использование функций defined и ensure_resources...

Если хотя бы один из модулей под вашим управлением — поменяйте название конфликтующего ресурса, добавьте туда название модулей, например (см. мой пример с разными провайдерами для пакета).
Про отслеживание зависимостей — так как в терминологии паппета нет понятия "подмодуль", тут нужно уточнить, речь идёт об отдельных модулях-зависимостях (тогда надо смотреть в metadata.json/Puppetfile/Modulefile), или о ресурсах внутри одного модуля, от которых зависят другие ресурсы внутри этого модуля (вообще паппет показывает, в каком именно месте используется необъявленный ресурс)?

Foreman это такой комбайн, который, насколько мне известно, умеет работать не только с Puppet в качестве бэкэнда.
В случае с Puppet Foreman выступает в роли ENC, про это, как раз, я расскажу в следующей части.

Я вам таки больше скажу — у этих инструментов немного разная область применения, поэтому можно использовать и то, и другое. Мы используем puppet для поддержания конфигурации серверов в нужном состоянии, а ansible используем для разовых заданий (например, поднимаем кластера Ceph именно с помощью ansible).

В нашем случае ситуация достаточно тяжёлая, потому что написано много кода посредственного качества под третий паппет, а в новый (изначально пятый, но к моменту запуска уже шестой) паппет мы хотели не просто перенести старые манифесты, а применять подходы Infrastructure as Code и писать качественный код, покрывая его тестами. Между третьим и шестым паппетом большая разница: как минимум, отличаются парсеры (https://puppet.com/docs/puppet/3.8/experiments_future.html), разные версии hiera (hiera 1 в третьем паппете и hiera 5 в шестом), поэтому мы потихоньку переписываем старые манифесты с нуля и переводим сервера со старого паппета на новый поштучно (ну, или скорее по группам).
Кроме огромного объёма манифестов, которые нам нужно переписать, встала ещё одна проблема: для бэкапов мы используем экспортируемые ресурсы, а для работы экспортируемых ресурсов нужна одна общая PuppetDB. Разные версии паппета совместимы с разными версиями PuppetDB, обратной совместимости нет (во всяком случае, не при такой разнице версий, как у нас), поэтому мы написали прокси для старого паппета, который реализует интерфейс старой PuppetDB и кладёт данные в новую PuppetDB. Ну и плюс были небольшие приседания с сертификатами для того, чтобы в одну и ту же PuppetDB ходили несколько новых паппетсерверов (засада кроется в двусторонней проверке TLS-сертификатов, каждый паппетсервер хочет, чтобы у PuppetDB был сертификат, выпущенный этим же паппетсервером).
Третий момент — сетевая конфигурация, которая хранится в Hiera и должна быть одинакова для сервера вне зависимости от того, под какой версией паппета этот сервер. Здесь просто — вынесли эту Hiera в отдельный репозиторий и подключаем его ко всем паппетсерверам.


В вашем случае проблем, скорее всего, будет меньше: если я правильно понимаю, то парсер четвёртой и шестой версии паппета если и отличается, то не так сильно, во всяком случае, лямбды туда уже завезли, да и окружения используются по умолчанию.
Раз у вас настроен CI/CD — попробуйте залить существующий код под шестой паппет, прогоните тесты, поймёте масштаб бедствий. Если тесты не покажут проблем, то переключайте агенты под новый паппет, прогоняйте в режиме noop, смотрите, бомбанёт что-нибудь или нет.

Спасибо за вопрос, дописал в статью параграф про запуск и дебаг.

ssh <host> 'sudo puppet agent -t --noop'

Повторюсь: hCaptcha работает не на нашей стороне, а на стороне Cloudflare. Мы html-страницу отдаём без всяких блокировок, блокировка происходит в момент обращения к статике (js, css), которая лежит на Cloudflare.
Для отдачи статики мы в Авито используем CDN Cloudflare. Cloudflare работает не только как CDN — у них полноценный стек сервисов от L3 до L7. В том числе у них есть WAF, который на подозрительные запросы отдаёт страницу с капчей (как раз с hCaptcha).
Страница с капчей отдаётся к кодом ответа 403, и фаерволу в приниципе без разницы, какой тип ресурса вы запросили — HTML, JS, CSS или что-то ещё, в случае подозрительного запроса вам в любом случае прилетит HTML.
Почему ваш запрос посчитали подозрительным — всё просто, IP выходных нод TOR'а очень часто помечаются как подозрительные.
Подобные проблемы могут возникнуть на любом сайте, где статический контент отдаётся через CDN, а динамический — нет.
Нашего умысла защищать javascript от ботов и показывать им капчу тут нет, это чисто общая логика Cloudflare.
По поводу актуальности отдачи HTML на запрос JS и прочих ресурсов веб-страницы мы Cloudflare обратную связь передали.
2. Если я правильно понял вопрос, то ответ — RabbitMQ.
Сменить город можно через техподдержку.
Кстати, какие-то цифры были в первой статье про историю картиночного хранилища.
Ответил ниже.
Я бы рад назвать конкретные цифры, показать полные схемы устройства платформы и так далее, но, увы, есть такая вещь, как NDA. В изначальном варианте статья была раза в два больше, но после выпиливания всего, что нельзя выпускать в открытый доступ, получилось вот это вот — обо всём и ни о чём, меня это тоже печалит.

Всё, что можно рассказать, мы рассказываем на разных конференциях и митапах, в статье не просто так ссылки приведены. Про хитрости балансировки, например, я рассказывал на HL Junior 2016 (отдельно слайды без моей рожи тут).

Если хочется узнать больше — приходите к нам работать :)
Вам не кажется логичным написать в техподдержку о проблемах с сайтом?
Будет человеческий фильтр по цене, будет. Мы работаем над этим.
А прямо сейчас можно добавить в URL параметры pmin=минцена и pmax=максцена, и фильтрация по цене таки будет работать.
Мы не используем специализированные решения чисто для хранения данных. Ближе всего к СХД наши картиночные сервера.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity