Как стать автором
Обновить

Комментарии 31

Кроме прочих полезностей было интересно почитать критику IaC-подхода, было очень интересно, спасибо большое. И да, меня охватывает все больший ужас, когда вижу людей, которые принимают Ansible за простой инструмент, который можно вот так просто взять и юзать его роли, стянутые с Galaxy (особенно этим страдают кодеры, т.к. у них особо-то и времени и подчас желания нет разбираться с Ansible). Насчет Terraform и его state тоже не в бровь, а в глаз сказано. Я недавно создал описание инфраструктуры для провайдера vcd и выбрал для хранения state-файлов функциональность GitLab. Очень потом было прикольно, когда Hashicorp изменили url к vcd провйдеру и мне пришлось мало того, что переписывать все файлы versions.tf, лезть в каждый state по GitLab API дабы заменить эти пути внутри файлов состояний и т.п. Хотя в целом хранить в приватном локальном репозитории GitLab файлы состояний terraform мне кажется более разумным, чем у чужих дядей в облаках.
НЛО прилетело и опубликовало эту надпись здесь
нельзя запустить terraform снаружи для дебага (привет PR-driven development)

и не нужно — правильно делают, что не дают. А то стейт сломаете и приплыли.

НЛО прилетело и опубликовало эту надпись здесь
Ещё одна интересная особенность Terrafrom — он ломается на очень больших файлах состояний. Поэтому мы стараемся разбить его на маленькие независимые разделы по функциональности, и у каждого свой файл в s3 + dynamodb.

И второе верно подмечено. Терраформ = BreakingChanges'R'Us (ВсёЛомающиеОбновленияЭтоМы).
Мне нужно обновить файл, если он в ожидаемом состоянии, иначе пропустить этот хост. Является ли антипаттерном проверка файла простым сравнением md5 с ожидаемым или всё-таки нет?
Как лучше в таком случае поступить?

Это не совсем о "паттернах". То, что вы говорите звучит, как странная бизнес-логика. Теоретически, такие проверки не вызовут ужаса у читающего код (уже 50% успеха), но и восторга все эти when тоже не вызывают. Идеальным вариантом было бы иметь модуль, который и проверит, и обновит, и в коде будет понятно читающему о чём речь.

Спасибо! Т.е. сама идея проверять файл на ожидаемое значение означает не очень хорошую бизнес-логику по какой-то причине.

А почему такая проверка может быть не очень хорошей идеей?

Я бы написал так:


- copy:
    content: 'This is a required content'
    dest: /path/to/file
  register: file_copy_result

- meta: end_host
  when: not file_copy_result.changed

Однако скорее всего в логике "пропустить хост если файл уже имеет правильное содержимое" кроется ошибка. Предположим если содержимое неверное, то вы ещё хотите сделать A,B,C,D. И в какой-то момент при запуске плейбука он ломается на действии B. Вы устраняете проблему, вновь запускаете плейбук, а уже всё, файл в нужном состоянии и C,D выполнены не будут.

У нас в продакшене есть такой паттерн — делать dist-upgrade и ребутать (если пендится) хост при провизе, но никогда не делать этого в продакшене.


Выглядит это просто (пишу псевдокодом)


- setup
- end_host
  when: ansible_local.tier == production
- dist-upgrade
- reboot
- file: dest=/etc/ansible/tier.fact content=production

И всё. Как только отработала, второй раз не будет. (Что как раз и требуется, чтобы неожиданно не ребутать продакшен. У ops команды своя техника апдейтов для уже запущенных систем).
Интересно!
Цель плейбуки привести файл в нужное состояние.
Верно ли я понимаю, что лучшим методом будет копировать этот файл из репы безусловно на хост, перезаписывая если такой уже есть?

НЛО прилетело и опубликовало эту надпись здесь
Не понял претензии, шаред стейт и локи есть из коробки (s3 + dynamodb например).

гы ) в приватной инфре, если ты не хочешь отдавать стейт файл наружу (а он содержит сенситив данные, так-то), то s3 и dynamodb нет. А базовый S3 ( если речь, скажем, про минио) — локов нет. Короче, Хашикорп — молодцы, тут спору нет, смогли терраформом заморочить голову потребителю, но по факту — использование этого крутого (он действительно крутой) инструментарий — это как бег с препятствиями. ЗАЧЕМ? Если все то же самое можно сделать в 100 раз проще?

НЛО прилетело и опубликовало эту надпись здесь
Терраформ по крайней мере не прибит гвоздями к конкретному провайдеру/стеку.

это звучит смешно, потому что обещания очень большие, но чтобы сделать реально кросс-клауд — что на ансибле, что на терраформе придётся писать свои роли/модули, которые инкапсулируют в себя специфику конкретного провайдера. 1:1
Я уж не говорю о том, что между разными провайдерами тупо может не быть соответствующих похожих примитивов


http, consul и тд…

эм, там тоже блокировки не везде, а без них — терраформом попросту опасно пользоваться. Хотя можно административно в пайплайне вызова TF что-то накостылить самому, но это точно не совсем production использование )))


Если вы про cloudformation/heat так там свои грабли есть

у каждого инструмента есть свои недостатки )))

НЛО прилетело и опубликовало эту надпись здесь
я имею ввиду ситуацию если у меня часть инфры в GCP, часть в амазоне, часть akamai, а часть это просто алерты в NewRelic то я все это покрываю терраформом и единым вокрфлоу.

я накидывал коллегам… а чего не https://www.pulumi.com например?


я вам перечислил те где есть.

my bad, consul — да, есть, но его тащить надо, а http — там извращаться со своей разработкой.

НЛО прилетело и опубликовало эту надпись здесь

Ни слова про saltstack плаки плаки… А штука крутая… Хотя и порог входа сильно выше, чем у ансибла, НО ЭТО И ХОРОШО (!), как это парадоксально и ни было


Касательно Tower — очень интересно было бы сравнить его с Rundeck, Polemarch, StackStorm — что там еще модно?

До недавнего прошлого я много работал с saltstack. Может быть сейчас он и стал лучше, но 2 года назад много что приводило меня в уныние, я уже писал об этом на хабре.

А сейчас у вас какой configuration management ?

puppet. И это тоже мягко говоря не идеальное решение.
я сменил работу, на новом месте используют puppet.
Презентация… ну почти Шредингера) от amarao и не от amarao одновременно)

Это транскрипт моей презентации примерно полуторалетней давности. С тех пор меня убедили, что у роли есть параметры (не переменные), так что передать в роль параметры без wtf'а таки можно. Получить ответ назад — нельзя.

Если не переменные, то как?

В документации это очень плохо объяснено, но можно вот так:


roles:
  - role: setup_foobar
    param1: value1
    foo: bar

Т.е. без vars прямо в словаре, описывающем вызыв роли.

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

надо у amarao спросить

Я думаю, потому что порог входа в salt сильно выше.
Ну, и недостатки у него тоже есть ( начиная от невнятной, но достаточно подробной документации. А особо доставляет неудачность терминологии. Это стейт, то — стейт, и это тоже. Но по факту — все разные сущности

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории