Skip to content

Latest commit

 

History

History
174 lines (118 loc) · 6.35 KB

File metadata and controls

174 lines (118 loc) · 6.35 KB

Как вносить изменения и вариант тестирования

Процесс разработки

1. Создание новой ветки

Создайте новую ветку для ваших изменений:

git checkout -b flant/TASKID-your-feature-name

2. Внесение изменений в код

При добавлении нового функционала следуйте следующим правилам:

2.1. Добавление новых флагов

Если вы добавляете новый флаг или переменную окружения:

  1. Описание флага в ENVIRONMENT_VARIABLES_AND_FLAGS.md:

    • Добавьте флаг в соответствующую секцию команды
    • Укажите переменную окружения
    • Добавьте описание и значение по умолчанию
  2. Конфигурация в config.yaml:

    • Добавьте соответствующий ключ в секцию команды или в общие настройки
    • Укажите значение по умолчанию
  3. Обработка флага в pkg/config/config.go:

    • Добавьте поле в структуру Config и/или CommandConfig
    • Добавьте загрузку значения через getValue() в функции LoadConfig
    • При необходимости добавьте флаг в CommandFlags для автоматического добавления к команде
    • При необходимости добавьте валидацию
  4. Использование флага в команде:

    • Получайте значение через config.GetConfig()
    • Используйте соответствующие методы get* если они доступны

2.2. Описание логики в ARCHITECTURE.md

Обязательно опишите всю новую логику в ARCHITECTURE.md:

  • Добавьте или обновите алгоритм команды в разделе "Алгоритмы для каждого флага"
  • Опишите каждый шаг выполнения
  • Укажите используемые API endpoints
  • Опишите обработку всех возможных вариантов поведения
  • Укажите особенности dry-run режима если команда его поддерживает
  • Обновите секцию "Конфигурация" для команды

2.3. Общие принципы

  • Вся обработка флагов и конфигурации должна быть централизована в pkg/config/
  • Используйте существующие утилиты из pkg/utils/ где возможно
  • Избегайте дублирования кода - выносите общую логику в утилиты
  • Все команды должны поддерживать --dry-run где это применимо
  • Логирование должно быть информативным и структурированным

3. Билд и перенос в кластер

3.1. Сборка бинарника

Соберите бинарник:

go build -o osctl cmd/main.go

3.2. Перенос в кластер

Скопируйте бинарник на мастер-ноду кластера:

scp osctl ИМЯ_НОДЫ-a-ks-master-0:/tmp

4. Тестирование в кластере

4.1. Подготовка деплоймента

  1. В нужном namespace запустите джобу со слипом из существующих osctl кронджоб:
          containers:
          - command:
            - sh
            - -c
            - sleep 1000000000000000000000

create job --from=cronjobs/*  *-test

4.2. Копирование файлов в под

  1. Скопируйте новый бинарник в под:
kubectl -n infra-elklogs cp /tmp/osctl <pod-name>:/tmp
  1. Скопируйте конфигурационные файлы:
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

4.3. Тестирование

  1. Проводим прямо из оболочки пода:
kubectl -n infra-elklogs exec -ti <pod-name> -- bash
  1. Перейдите в /tmp:
cd /tmp
  1. Проверьте команды с --dry-run:
./osctl <command> --dry-run

Например:

./osctl snapshots --dry-run
./osctl sharding --dry-run
./osctl retention --dry-run
  1. Проверьте работу без --dry-run (если уверены в безопасности):
./osctl <command>

4.4. Полезные команды

  • Проверка списка доступных команд: ./osctl --help
  • Проверка справки по команде: ./osctl <command> --help
  • Просмотр логов с детализацией: используйте логирование через logger

5. Коммит и push

После тестирования:

git add .
git commit -m "feat: описание изменений"
git push origin feature/your-feature-name

6. Создание Pull Request

Создайте Pull Request с описанием изменений и проверьте:

  • ✅ Все новые флаги описаны в ENVIRONMENT_VARIABLES_AND_FLAGS.md
  • ✅ Все новые ключи добавлены в config.yaml
  • ✅ Вся логика описана в ARCHITECTURE.md
  • ✅ Код прошел линтер без ошибок
  • ✅ Изменения протестированы в кластере

Полезные ссылки

  • ENVIRONMENT_VARIABLES_AND_FLAGS.md - Полный справочник по флагам и переменным окружения
  • ARCHITECTURE.md - Подробные алгоритмы и архитектура системы
  • README.md - Основная документация проекта