#dev #bash #сомнения
Столько философских дум у меня вообще ничего не вызывало. Сидишь пишешь эти портянки на баше, и думаешь - а может нахер его, взять ruby или go и пусть себе дергают system вызовы? Потом думаешь - нет уж, допишу на баше, и абстрагирую. Упарываешься в абстрагирование на баше и понимаешь, что проще написать as is и забить, уж больно не уклюжэ все эти высоко-уровневые абстракции выражаются на баше. Да даже простые абстракции не очень удобно выражать. В общем, хрен знает.
Дописываю уже какую версию своего provise/backup/restore - скрипта для своих маленьких серваков с докером. И все это порой так неуклюже, если честно. Зато работает для меня и моих серваков.
Успокаиваю себе так - это hand crafted development, тут от души и уникально.
Программисты должны хотеть унифицировать, это как бы естественное желание — но баш, блин, это прям испытание воли для унификатора.
Наверное его нужно принять и очень сильно полюбить. После осознания команды test и отказа от if у меня как-то получше пошло.
P.S. - средства провизионинга ака ansible не предлагать, знаю, цель не развернуть, а в чем-то другом ... пока не понял в чем.
Столько философских дум у меня вообще ничего не вызывало. Сидишь пишешь эти портянки на баше, и думаешь - а может нахер его, взять ruby или go и пусть себе дергают system вызовы? Потом думаешь - нет уж, допишу на баше, и абстрагирую. Упарываешься в абстрагирование на баше и понимаешь, что проще написать as is и забить, уж больно не уклюжэ все эти высоко-уровневые абстракции выражаются на баше. Да даже простые абстракции не очень удобно выражать. В общем, хрен знает.
Дописываю уже какую версию своего provise/backup/restore - скрипта для своих маленьких серваков с докером. И все это порой так неуклюже, если честно. Зато работает для меня и моих серваков.
Успокаиваю себе так - это hand crafted development, тут от души и уникально.
Программисты должны хотеть унифицировать, это как бы естественное желание — но баш, блин, это прям испытание воли для унификатора.
Наверное его нужно принять и очень сильно полюбить. После осознания команды test и отказа от if у меня как-то получше пошло.
P.S. - средства провизионинга ака ansible не предлагать, знаю, цель не развернуть, а в чем-то другом ... пока не понял в чем.
#dev #ansible #bash #гештальт_закрыт
После нескольких месяцев борьбы с башем по ночам таки познал этого зверя чуть больше (относительно предыдущего непонимания), и дико рад этому, во многих "программерских ситуациях" теперь можно ощущать себя увереннее, впрочем, это эффект любого обучения и освоения.
Но поддерживать все эти вещи ... короче, я попробовал перевести пару своих хостов, их развертывание, бекапы и восстановление теперь уже на такую связки (уйдя от plain bash + restic): ansible -> bash + jinja2 templates
И о боги, как же проще теперь программировать bash логику с jinja, спасибо ansible.
При этом на хост:
- ansbile генерирует и заливает два скрипта: backup.sh и restore.sh, которые можно просто запустить (там уже все настроено)
- скрипт на бекап добавляется в крон
- после успешного или не успешного бекапа мне приходит уведомление в телегу :)
Так же смог зафигачить playbook с local action'ом: локальная тачка теперь бекапится каждую ночь (если ноутбук работает) с самыми hot данными, и раз в неделю делается archive бекап с всякими фотками/книгами и прочими cold данными.
Итого имеем (на мой вкус):
- закрытый гештальт на тему бекапов, как локальных так и хостовых.
- ansible это круто, и это мега правильно, потому что написов несколько тысяч строк кода на баше (и переписав несколько раз программу) ты приходишь для себя к некому майндсэту готовых паттернов (а баш дает большое разнообразие в выборе этих паттернов, поэтому выносит мозг) и по сути ansible все это заменяет давая тебе нужные reusable блоки.
Немного на тему безопасности:
- Немного подзабил и засвечиваю credentials данные в env переменных в скриптах, так делают все, но это очень плохо. В следующей итерации перепишу на такой способ доступный только в bash:
- файл roles_webserver_tasks_main.yml не только настраивает сервер, но и делает namespace remapping, чтобы ваши контейнеры не имели доступа к руту хоста.
https://gist.github.com/pechorin/ebb3991a118d804b5a7bee20a47e599c
После нескольких месяцев борьбы с башем по ночам таки познал этого зверя чуть больше (относительно предыдущего непонимания), и дико рад этому, во многих "программерских ситуациях" теперь можно ощущать себя увереннее, впрочем, это эффект любого обучения и освоения.
Но поддерживать все эти вещи ... короче, я попробовал перевести пару своих хостов, их развертывание, бекапы и восстановление теперь уже на такую связки (уйдя от plain bash + restic): ansible -> bash + jinja2 templates
И о боги, как же проще теперь программировать bash логику с jinja, спасибо ansible.
При этом на хост:
- ansbile генерирует и заливает два скрипта: backup.sh и restore.sh, которые можно просто запустить (там уже все настроено)
- скрипт на бекап добавляется в крон
- после успешного или не успешного бекапа мне приходит уведомление в телегу :)
Так же смог зафигачить playbook с local action'ом: локальная тачка теперь бекапится каждую ночь (если ноутбук работает) с самыми hot данными, и раз в неделю делается archive бекап с всякими фотками/книгами и прочими cold данными.
Итого имеем (на мой вкус):
- закрытый гештальт на тему бекапов, как локальных так и хостовых.
- ansible это круто, и это мега правильно, потому что написов несколько тысяч строк кода на баше (и переписав несколько раз программу) ты приходишь для себя к некому майндсэту готовых паттернов (а баш дает большое разнообразие в выборе этих паттернов, поэтому выносит мозг) и по сути ansible все это заменяет давая тебе нужные reusable блоки.
Немного на тему безопасности:
- Немного подзабил и засвечиваю credentials данные в env переменных в скриптах, так делают все, но это очень плохо. В следующей итерации перепишу на такой способ доступный только в bash:
restic --password-file=<(echo $backup_storage_password)- файл roles_webserver_tasks_main.yml не только настраивает сервер, но и делает namespace remapping, чтобы ваши контейнеры не имели доступа к руту хоста.
https://gist.github.com/pechorin/ebb3991a118d804b5a7bee20a47e599c
Gist
backup with ansible + restic + rclone (local backup included); server setup for docker with optional namespace remapping
backup with ansible + restic + rclone (local backup included); server setup for docker with optional namespace remapping - backup.sh.j2
👍2
#dev #search
Перевод тут моментами не очень хорош, в плане смысловой передачи и описания последовательности процесса поиска, но важно не это.
Вроде ничего так, что github так подробно делится такими важными внутренними архитектурами и решениями — не каждый корпорат будет таким заниматься 🙂
https://habr.com/ru/company/skillfactory/blog/718350/
Перевод тут моментами не очень хорош, в плане смысловой передачи и описания последовательности процесса поиска, но важно не это.
Вроде ничего так, что github так подробно делится такими важными внутренними архитектурами и решениями — не каждый корпорат будет таким заниматься 🙂
https://habr.com/ru/company/skillfactory/blog/718350/
Хабр
Как работает поиск по коду на Github
От запуска ознакомительной версии нового улучшенного поиска кода год назад до публичной беты , которую мы выпустили на GitHub Universe в прошлом ноябре, появилась масса инноваций и резких изменений в...