да возможно дойду как-нибудь, жалко что проект загнулся, вокруг ansible уж слишком большая инфра образовалась -- с наскока такое не перепишешь (да и не нужно, для инстурмента автоматизации: гибкость > скорость)
насчет скорости да, но даже несмотря на это разница в скорости будет существенная: я в качестве PoC переписывал модуль для ansible на Rust (slurp, который просто читает содержимое файла и кодирует в base64), вот ссыль https://debops.ru/ru/posts/crates_ansible_module/ tldr: - для маленького файла модуль на питоне 0.21s, на расте 0.03s - для большого файла модуль на питоне 23.41s, на расте 16.87s (тк питон дергает Сишную библиотеку)
все равно очень много времени утекает на ssh, выполнение модуля и т.д плюсом в ansible нет тру многопоточности (привет GIL)
процесс самого скрипта не убивается же, так что скрипт будет подъедать память за счет рекурсии (каждая новая итерация будет выделять новый стек фрейм до переполнения), в идеале переписать на цикл (while/for)
с timeout в 30 мин может никогда и не крашнется, нужно поделить максимальный выделенный размер под программу (по дефолту вроде 8 МБ) и поделить на то, сколько памяти добавляет за полчаса
вот такой минмальный вариант
#!/bin/bash
# Функция для проверки неактивного времени пользователя
check_idle_time() {
# Получаем текущее неактивное время пользователя в миллисекундах
# idle_time=$(xprintidle)
# Проверяем, если время бездействия пользователя превышает 5 секунд (5000 миллисекунд)
# if (( idle_time > 120000 )); then
# Вызываем функцию перезапуска страницы киоска
# restart_kiosk
# fi
# Запускаем функцию снова через 1 секунду
# sleep 1800
sleep 0.001
check_idle_time
}
# Запускаем функцию проверки неактивного времени пользователя
check_idle_time
упал у меня через 53 секунды
$ time bash check.sh
Segmentation fault (core dumped)
real 0m53.987s
user 0m27.786s
sys 0m18.364s
для удаления у большинства модулей есть state: absent, в ci можно туда сделать переменную, которая будет либо present, либо absent, но если речь идет о создании виртуалок, то лучше дергать модуль терраформа/тофу
ансибл не хранит state как терраформ, модули на лету проверяют состояние
да возможно дойду как-нибудь, жалко что проект загнулся, вокруг ansible уж слишком большая инфра образовалась -- с наскока такое не перепишешь (да и не нужно, для инстурмента автоматизации: гибкость > скорость)
насчет скорости да, но даже несмотря на это разница в скорости будет существенная: я в качестве PoC переписывал модуль для ansible на Rust (slurp, который просто читает содержимое файла и кодирует в base64), вот ссыль https://debops.ru/ru/posts/crates_ansible_module/
tldr:
- для маленького файла модуль на питоне 0.21s, на расте 0.03s
- для большого файла модуль на питоне 23.41s, на расте 16.87s (тк питон дергает Сишную библиотеку)
все равно очень много времени утекает на ssh, выполнение модуля и т.д
плюсом в ansible нет тру многопоточности (привет GIL)
автор (Михаэль Дехан/Michael DeHaan), кстати, пытался дважды переписать ansible: сначала проект opsmop https://github.com/opsmop/opsmop, потом jetporche https://github.com/jetporch/jetporch
но оба проекта забросил (а на jetporche были надежды, интересно как бы быстро работал ansible на rust'е)
к слову, ansible под капотом использует этот же sshpass для подключений ssh по паролю (ansible_ssh_pass), используйте ключи
процесс самого скрипта не убивается же, так что скрипт будет подъедать память за счет рекурсии (каждая новая итерация будет выделять новый стек фрейм до переполнения), в идеале переписать на цикл (while/for)
с timeout в 30 мин может никогда и не крашнется, нужно поделить максимальный выделенный размер под программу (по дефолту вроде 8 МБ) и поделить на то, сколько памяти добавляет за полчаса
вот такой минмальный вариант
упал у меня через 53 секунды
ансибл — круто, но часть статьи явно нейронкой написана:
1. Сейчас мало кто пишет роли, лучше сразу писать коллекцию, гораздо больше преимуществ:
роли можно декомпозировать по смыслу
можно нормально писать плагины (libraries очень криво работает)
будет работать FQCN
туда же можно напихать готовые плейбуки и тесты
2. Инвентори лучше писать в YAML
3. ansible-vault хорошо, но для больших проектов hashicorp vault лучше)
для удаления у большинства модулей есть
state: absent
, в ci можно туда сделать переменную, которая будет либоpresent
, либоabsent
, но если речь идет о создании виртуалок, то лучше дергать модуль терраформа/тофуансибл не хранит state как терраформ, модули на лету проверяют состояние
познал ООПполучил Орден Октябрьской Звезды