All streams
Search
Write a publication
Pull to refresh
4
0

User

Send message

да возможно дойду как-нибудь, жалко что проект загнулся, вокруг 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 МБ) и поделить на то, сколько памяти добавляет за полчаса

вот такой минмальный вариант

#!/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


ансибл — круто, но часть статьи явно нейронкой написана:

1. Сейчас мало кто пишет роли, лучше сразу писать коллекцию, гораздо больше преимуществ:

  • роли можно декомпозировать по смыслу 

  • можно нормально писать плагины (libraries очень криво работает)

  • будет работать FQCN

  • туда же можно напихать готовые плейбуки и тесты

2. Инвентори лучше писать в YAML

3. ansible-vault хорошо, но для больших проектов hashicorp vault лучше)

для удаления у большинства модулей есть state: absent, в ci можно туда сделать переменную, которая будет либо present, либо absent, но если речь идет о создании виртуалок, то лучше дергать модуль терраформа/тофу

ансибл не хранит state как терраформ, модули на лету проверяют состояние

познал ООП получил Орден Октябрьской Звезды

Information

Rating
6,326-th
Registered
Activity