Pull to refresh
58
0
Lev Goncharov @ultral

Software Architect

Send message

а lookup выполнится на contorl машине где ansible-playbook Запущен? или на целевой?

не рута, а на кого become делается. если уж точнее

Роли это пример подняться по уровням абстракциям выше. Готового кейса не придумаю. В голову мне с натягом приходит вариант есть роль создания вм подключаемая через include_role куда скармливаются переменные, но это странно

Можно раскрыть мысль про «полное отсутсвие решений»?

Ок, не модули подменяем, а роли. Но здесь тогда привет: правис некий «глобал стейт» и нет возвращаемого значения.

У меня был в практике один проект где был оркестратор инфрой на ruby. Там под капотом дергался shell, и к этому был прикручен самописный тест фржймворк: мы в нем подменяли класс который дергал шел и вставляли моки.

А вот тезис про DI, вы бы не могли развернуть пошире? Например, на псевдокоде/псевдоямле.

например есть задача расширить диск, поправить LVM и создать swap. я бы хотел вместо диска подсунуть образ пустышку и заменить модуль создания lvm

---
- name: create swap
  hosts: test
  inject:
    disk:
      name: /dev/sda
      src: some_image
    module:
      name: lvol
      cmd: return true
  tasks:
    - name: Read device information
      parted:
        device: /dev/sda
        unit: MiB
      register: sda_info
    - name: Extend last partition at /dev/sda
      parted:
        device: "{{ sda_info.partitions | length }}"
        label: gpt
        number: 2
        part_end: "100%"
        resize: true
        state: present
    - name: Create swap logical volume
      lvol:
        vg: VGsystem
        lv: LVswap
        size: 8g
    - name: format swap partition
      command: mkswap /dev/mapper/VGsystem-LVswap
    - name: Run swapon on the swap partition
      command: swapon /dev/mapper/VGsystem-LVswap

с group_vars тоже финт ушами пробовали, но как-то не прижился. через delegated подход позволяет стать ближе к проду, но тогда это очень жестко приколачивает к существющим решениям. мы пока так не готовы и сидим на контейнерах.

вывод у меня напрашивается один с этого - в инфраструктуре не хватате(и не факт что будет) dependency injection, что обрекает тесты быть условными и/или черечур сложными и/или долгими

Мне очень не нравится идея ориентироваться на размер кода в гите при решении "что нужно тестировать". Бывают архиважные проекты из сотни-другой строчек, а бывают вполне себе ленивые помоечки на тысячи строк (про которые известно, что это помоечки), которые едва-едва тестируемы и это ок.

в целом валидно. поэтом и не возвожу это правило в абсолют, это на уровне рекомендаций. ведь ту же помоечку лучше пролинтовать и хотя бы прикрутить молекулу. пусть и с проблемами идемпотентности.

В моём представлении линтеры не являются тестами. Они хороши для того, чтобы затащить в проект наличие CI/CD (когда не знаешь с чего начинать - начинай с линтеров), но первый, основной тест, который нужно написать - это smoke test всего.

линтеры не тесты, но без них не получить быстрой обратной связи прям из в IDE своей не отходя от кассы.

Есть плейбука, которая "конфигурирует"? Сделай её на тестовый сервер с другой инвентори. (та же молекула, или даже прямо поверх второго сервера). Как бы уродливо оно не было, 90% проблем в плейбуках будут пойманы на этом этапе.

обычно молекулу прикручиваем: получаем smoke test, плюс можно не зависеть от тестовых серверов. единственное что в контейнерах есть порой дискомфорт, особенно если настраиваешь контейнеры, трогаешь ядро. приходится какие-то корявые заглушки ставить. вот были бы dependecy injection... зажили бы тогда

Если к ней приделать чуть-чуть инфра-тестов (testinfra) - получится уже вполне себе решение на котором можно долго жить. Тесты ролей имеют смысл только если роли большие и подразумевают переиспользование, по моим наблюдениям в большинстве случаев роли "per project" и спокойно тестируются в составе всего остального, без дополнительной бюрократии вида "отдельная репа для роли со своим CI".

И только если проект разрастается до больших размеров (больших == один человек всего уже не помнит), в этот момент можно думать про тесты для подсистем, просто для упрощения и ускорения процесса работы.

у меня так исторически сложилось, что на большинстве проектов монорепозитории и большинство ролей в одной репе. на каждую роль накидываем молекулу с ansible verifier И рефакторинг/расширение функционала/внесение изменений происходят плавно.

А такая школа/институт/академия/курсы не подпадают под закон о просветительской деятельности? Или вы прям заморочились и получили лицензию?

предлагаю посмотреть конкретный пример

image


в чем проблемы:


  1. грузчики/водитель выламывают столбики(общедомовое имущество) что бы был заезд. тут наверно автоматически никак, если только запись с регистраторов. Конкретно в этом случае кто-то подал жалобу в ГЖИ, та в УМВД, которое усмотрело преступление или административное правонарушение и выдало КУСП
  2. грузчики отодвигают полусферы заграждающие проезд.
  3. водитель заезжает на тротуарню плитку не предусмотренную для этого, жильцы оставляют жалобы и от управляющего магазина приходит гарантийное письмо восставноить как было.

как это можно купировать в ранней стадии?


  1. предусматривать места разгрузки на стадии планирования магазина — тут уже сложно поменять что-то.
  2. поставить регистраторы/камеры, подключить OCR и распознавать спорные ситуации — если ставить камеры 360 то это дорого, да и всегда можно неудачно встать, что проблемное место не будет видно. да и в конце концов можно приехать на место где уже выломано/подвинуто
  3. по gps отслеживать отклонение от дорог общего пользования или заранее отмеченных красных зон. например отеъхал более чем на Х метров от дороги/красной зоны размеченной оператором, то это повод разобраться зачем и посмотреть видео с регистратора. условно дешево и сердито. есть систематичность и возможно неотвратимость наказания
  4. мониторить обращения граждан(активный гражданин/наш санкт петербург) на предмет недовольства, строить корелляции с водителями на маршруте. в целом дешевое решение, но велика вероятность ложных срабатываний

резюмирая gps + мониторинг обращений может стать маркером для проведения проверки работы конкретного магазина с целью наведения порядка/взятия на контроль

не все так однозначно.


  1. если есть другие пути разгруки то можно заезжать? а если зеазжают потому что удобней?
  2. если других путей подъезда нет, но отмостка проектом не рассчитана на движение грузовой техники, то заезажть можно или нет?

А вы не планируете сделать трекинг нарушений пдд, в частности езду/разгрузку на тротуаре?

У меня процесс выглядит так:


  1. использую github pages для своего сайта со статейками
  2. к себе на сайт пишу черновик RU/ENG(вобще это обычно расшировки выступлений своих)
  3. расскидываю ссылки заинтересованным, правлю.
  4. копирую на хабр как есть. приходится подправлять url картинок и хабракат добавлять

такую схему уже года 3 использую

а как рисовали карту покрытия?

Терраформ экспортит ровно то, что вы указали. Укажите все хосты — будут все.


ansible-playbook -i $(terraform output hosts_list) play_me.yml


Но есть особенность — вы когда используется hosts_list не прлучится забрать host/group inventory vars с диска

Вообще есть еще 3ий вариант интеграции через встроенный host_list inventory plugin https://docs.ansible.com/ansible/latest/collections/ansible/builtin/host_list_inventory.html


  1. Terraform экспортит список хостов
  2. Ansible принимает их через -i списком

А Как начать тестировать Ansible, отрефакторить проект за год и не слететь с катушек не отвечает на этот вопрос? у меня там задумка была показать историю развития:


  • старт, всё круто
  • упс у нас легаси и нам страшно запускать
  • смотрите рефачим и едим слона ложкой
  • ой, у нас всё ок

yep. we continued our journey and migrated Hyper-v -> ESX. funny thing is that for that migration i'd to develop ansible module for ansible vmware collection.

молекулой можно тестить плэйбуки. но это не удобно. делаешь "мета-роль", в которую подсовываешь вместо converge.yml свой плэйбук. шатко, хлипко… я если честно таким образом плэйбуки не тестирую.


Но тут стоит прокомментировать, у меня плэйбуки обычно максимально простые: состоят из нескольких плэев, в которых нет тасков, только инклюд ролей. как итог достаточно тестить отдельные роли, а плэйбуки линтить. но подозреваю


  1. это далеко не каждому сможет подойти
  2. не отменяет проблем с systemd, reboot итд

строго говоря картинка про неприличное слово была немного другая, интересно кто какой смысл из нее возьмет...


картинка

image

строго говоря, корректней считать БЖУ т.к. можно сжечь по минимуму мышц.

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

DevOps, Software Architect
Senior