Создайте новую ветку для ваших изменений:
git checkout -b flant/TASKID-your-feature-nameПри добавлении нового функционала следуйте следующим правилам:
Если вы добавляете новый флаг или переменную окружения:
-
Описание флага в
ENVIRONMENT_VARIABLES_AND_FLAGS.md:- Добавьте флаг в соответствующую секцию команды
- Укажите переменную окружения
- Добавьте описание и значение по умолчанию
-
Конфигурация в
config.yaml:- Добавьте соответствующий ключ в секцию команды или в общие настройки
- Укажите значение по умолчанию
-
Обработка флага в
pkg/config/config.go:- Добавьте поле в структуру
Configи/илиCommandConfig - Добавьте загрузку значения через
getValue()в функцииLoadConfig - При необходимости добавьте флаг в
CommandFlagsдля автоматического добавления к команде - При необходимости добавьте валидацию
- Добавьте поле в структуру
-
Использование флага в команде:
- Получайте значение через
config.GetConfig() - Используйте соответствующие методы get* если они доступны
- Получайте значение через
Обязательно опишите всю новую логику в ARCHITECTURE.md:
- Добавьте или обновите алгоритм команды в разделе "Алгоритмы для каждого флага"
- Опишите каждый шаг выполнения
- Укажите используемые API endpoints
- Опишите обработку всех возможных вариантов поведения
- Укажите особенности dry-run режима если команда его поддерживает
- Обновите секцию "Конфигурация" для команды
- Вся обработка флагов и конфигурации должна быть централизована в
pkg/config/ - Используйте существующие утилиты из
pkg/utils/где возможно - Избегайте дублирования кода - выносите общую логику в утилиты
- Все команды должны поддерживать
--dry-runгде это применимо - Логирование должно быть информативным и структурированным
Соберите бинарник:
go build -o osctl cmd/main.goСкопируйте бинарник на мастер-ноду кластера:
scp osctl ИМЯ_НОДЫ-a-ks-master-0:/tmp- В нужном namespace запустите джобу со слипом из существующих osctl кронджоб:
containers:
- command:
- sh
- -c
- sleep 1000000000000000000000
create job --from=cronjobs/* *-test
- Скопируйте новый бинарник в под:
kubectl -n infra-elklogs cp /tmp/osctl <pod-name>:/tmp- Скопируйте конфигурационные файлы:
kubectl -n infra-elklogs cp config.yaml <pod-name>:/tmp
kubectl -n infra-elklogs cp osctlindicesconfig.yaml <pod-name>:/tmp
kubectl -n infra-elklogs cp osctltenants.yaml <pod-name>:/tmp- Проводим прямо из оболочки пода:
kubectl -n infra-elklogs exec -ti <pod-name> -- bash- Перейдите в
/tmp:
cd /tmp- Проверьте команды с
--dry-run:
./osctl <command> --dry-runНапример:
./osctl snapshots --dry-run
./osctl sharding --dry-run
./osctl retention --dry-run- Проверьте работу без
--dry-run(если уверены в безопасности):
./osctl <command>- Проверка списка доступных команд:
./osctl --help - Проверка справки по команде:
./osctl <command> --help - Просмотр логов с детализацией: используйте логирование через logger
После тестирования:
git add .
git commit -m "feat: описание изменений"
git push origin feature/your-feature-nameСоздайте Pull Request с описанием изменений и проверьте:
- ✅ Все новые флаги описаны в
ENVIRONMENT_VARIABLES_AND_FLAGS.md - ✅ Все новые ключи добавлены в
config.yaml - ✅ Вся логика описана в
ARCHITECTURE.md - ✅ Код прошел линтер без ошибок
- ✅ Изменения протестированы в кластере
- ENVIRONMENT_VARIABLES_AND_FLAGS.md - Полный справочник по флагам и переменным окружения
- ARCHITECTURE.md - Подробные алгоритмы и архитектура системы
- README.md - Основная документация проекта