Удаление происходит раз в час, первое удаление всех подходящих снимков будет через 1 час после запуска сервера.
== Обзор ==
Применять может только пользователь с доступом ServerOperations.
Удаление происходит раз в 24 часа (данное время можно задать при запуске сервера опцией <code>--snapshots-cleanup-period</code>, либо в конфигурационном файле, либо переменной окружения <code>SVACER_CLEANUP_SNAPSHOTS_PERIOD</code>), первое удаление всех подходящих снимков будет через указанное время после запуска сервера.
'''Принцип работы:''' происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление и заносится отметка в таблицу удаленных снимков.{{Note|text=Если снимок не задан в запрещенных к удалению, то он будет удаляться по минимальному времени, среди всех подходящих для него правил.}}
Применять может только пользователь с доступом '''ServerOperations'''.
=== Добавление нового правила удаления ===
'''Принцип работы:''' происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление и заносится отметка в таблицу удаленных снимков. Также информация о удалении через cleanup вносится в системный журнал.
<code>svacer server cleanup add-rule --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name> --time <nowiki><time></nowiki></code>
== Добавление нового правила удаления ==
Где:
* project — проект в котором искать снимки для удаления
* branch — ветка в которой искать снимки для удаления
* snapshot — снимки которые удалять
* time — время сколько должно пройти после создания снимка, чтобы его удалить, задается в формате Go Duration (например 33h5m). По умолчанию 720 часов (30 дней)
Флаги для проекта, ветки и снимка можно задавать как имя либо как ID, также в имени может быть знак *, который равен "любому количеству любых символов". Если данные флаги не заданы, то автоматически подставляется * (любой проект, ветка, снимок).
=== Параметры ===
=== Добавление запрета на удаление ===
* <code>--project</code> — проект, в котором искать снимки для удаления ('''обязательный''', используйте <code>"*"</code> для всех проектов)
<code>svacer server cleanup add-prohibition --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name></code>
* <code>--branch</code> — ветка, в которой искать снимки для удаления ('''обязательный''', используйте <code>"*"</code> для всех веток)
* <code>--snapshot</code> — снимок, который удалять ('''обязательный''', используйте <code>"*"</code> для всех снимков)
* <code>--keep-time</code> — время, которое должно пройти после создания '''(НЕ импорта)''' снимка, чтобы его удалить. Задается в формате Go Duration (например <code>33h5m</code>, <code>720h</code>). По умолчанию '''720 часов''' (30 дней). '''Игнорируется, если <code>--max-snapshots > 0</code>'''
* <code>--max-snapshots</code> — верхняя граница по количеству снимков в ветке. При значении = 0 данное правило не работает. При значении > 0 '''игнорирует''' '''<code>--keep-time</code>'''. По умолчанию 0
=== Логика работы <code>--max-snapshots</code> ===
Флаги работают аналогично с <code>svacer server cleanup add-rule</code>
'''MAX устанавливает верхнюю границу по количеству снимков в ветке:'''
=== Удаление правила ===
* Считает '''все''' снимки в ветке (total) если хотя бы один из снимков подходит под <code>project\branch\snapshot</code>
* Если <code>total > MAX</code>, удаляет <code>(total - MAX)</code> самых старых снимков
* Удаляет '''только''' снимки, подходящие под паттерн <code>project\branch\snapshot</code>
* При <code>MAX = 0</code> данное правило не работает
'''Примеры:'''
Пример 1: Только TIME
10 снимков в ветке, 5 старше 24h
Правило: --keep-time 24h --max-snapshots 0
Результат: Удалит 5 старых снимков (>24h), останется 5
Пример 2: Только MAX
10 снимков в ветке
Правило: --max-snapshots 5
Результат: Удалит 5 самых старых, оставит 5 новейших
Пример 3: MAX игнорирует TIME
10 снимков, 5 старше 24h, 5 новых <24h
Правило: --keep-time 24h --max-snapshots 8
Результат:
TIME игнорируется. Применяется ТОЛЬКО MAX
Удалит 2 самых старых и останется 8 (MAX)
Пример 4: Scoped правило с MAX
10 снимков: 6 nightly-*, 4 regular-*
Правило: --snapshot "nightly-*" --max-snapshots 8
Результат:
total = 10 > MAX=8, нужно удалить 2
Удалит 2 самых старых ТОЛЬКО из nightly-*
Останется: 4 nightly-* + 4 regular-* = 8 снимков
=== Шаблоны и паттерны ===
Флаги <code>--project</code>, <code>--branch</code>, <code>--snapshot</code> можно задавать как:
'''1. Имя или ID:'''
--project "MyProject"
--project "550e8400-e29b-41d4-a716-446655440000" # UUID проекта
'''2. <code>*</code> (любое количество любых символов):'''
--project "Dev*" # DevProject, Development
--branch "*test*" # test, my-test, testing
--snapshot "nightly-*"
'''3. Регулярные выражения (с префиксом <code>re:</code>):'''
Данное правило выбирает все ветки, кроме <code>main</code>.
<code>svacer server cleanup delete --user admin --password admin --id 878d1d1a-db1a-42a4-9557-ef568f68cd3e</code>
Revision as of 14:53, 30 June 2025
Автоматическое удаление снимков
Удаление происходит раз в час, первое удаление всех подходящих снимков будет через 1 час после запуска сервера.
Применять может только пользователь с доступом ServerOperations.
Принцип работы: происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление и заносится отметка в таблицу удаленных снимков.
Если снимок не задан в запрещенных к удалению, то он будет удаляться по минимальному времени, среди всех подходящих для него правил.
Добавление нового правила удаления
svacer server cleanup add-rule --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name> --time <time>
Где:
project — проект в котором искать снимки для удаления
branch — ветка в которой искать снимки для удаления
snapshot — снимки которые удалять
time — время сколько должно пройти после создания снимка, чтобы его удалить, задается в формате Go Duration (например 33h5m). По умолчанию 720 часов (30 дней)
Флаги для проекта, ветки и снимка можно задавать как имя либо как ID, также в имени может быть знак *, который равен "любому количеству любых символов". Если данные флаги не заданы, то автоматически подставляется * (любой проект, ветка, снимок).
Добавление запрета на удаление
svacer server cleanup add-prohibition --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name>
Флаги работают аналогично с svacer server cleanup add-rule
Удаление правила
svacer server cleanup delete --id <config id>
Где:
id — id конфигурации из разрешенных к удалению или запрещенных к удалению
Вывести таблицу
svacer server cleanup list --type <rule|prohibition|log> --format <table|json>
Где:
type — тип таблицы, которую нужно вывести
rule — таблица удаляемых снимков
prohibition — таблица запрещенных к удалению
log — таблица удаленных снимков
format — формат вывода: table — таблица (человекочитаемый вывод), json