Files
fission-console/doc/progress.md
T

8.9 KiB
Raw Blame History

Progress Log

2026-04-14

План перед работой

  • Зафиксировать, что REST /v2/* недоступен в текущем кластере Fission v1.22.1 и MVP идет через Kubernetes CRD API.
  • Реализовать первый рабочий Terraform ресурс fission_environment.
  • Добавить минимальный CRUD в клиент для CRD environments.fission.io.
  • Проверить сборку go build ./....

Факт выполнения

  • Обновлен план в doc/CODEX_PLAN.md: путь реализации переведен на CRD API.
  • Создан каркас провайдера и заготовки ресурсов.
  • Реализован рабочий fission_environment:
    • schema (name, image, version, poolsize, namespace, id, uid)
    • Configure() с получением клиента из provider
    • Create/Read/Update/Delete через Kubernetes CRD environments.fission.io
  • В internal/client/client.go добавлены методы:
    • CreateEnvironment / GetEnvironment / UpdateEnvironment / DeleteEnvironment
    • IsNotFound для обработки удаления/дрейфа state
  • Проверка go build ./... проходит успешно.

Следующий шаг

  • Реализовать fission_package (zip/base64 -> spec.source.literal) через CRD packages.fission.io.

Обновление этапа (fission_package)

  • Реализован CRUD в internal/client/client.go для packages.fission.io:
    • CreatePackage
    • GetPackage
    • UpdatePackage
    • DeletePackage
  • Реализован ресурс fission_package в internal/resources/package_resource.go:
    • schema: name, environment, source_dir, code_path, code_hash, build_command, namespace, computed id, uid, build_status, build_log
    • валидация источника кода: задан ровно один из source_dir или code_path
    • упаковка source_dir в zip и кодирование base64 в spec.source.literal
    • Create/Read/Update/Delete через Kubernetes CRD API
  • Проверка сборки: go build ./... успешно.

Следующий шаг

  • Реализовать fission_function через CRD functions.fission.io.

Обновление этапа (fission_function)

  • Реализован CRUD в internal/client/client.go для functions.fission.io:
    • CreateFunction
    • GetFunction
    • UpdateFunction
    • DeleteFunction
  • Реализован ресурс fission_function в internal/resources/function_resource.go:
    • schema: name, environment, package_name, entrypoint, namespace, computed id, uid
    • Configure/Create/Read/Update/Delete
    • маппинг в CRD Function (spec.environment, spec.package.packageref, spec.package.functionName)
  • Проверка сборки: go build ./... успешно.

Следующий шаг

  • Реализовать fission_http_trigger через CRD httptriggers.fission.io.

Обновление этапа (fission_http_trigger)

  • Реализован CRUD в internal/client/client.go для httptriggers.fission.io:
    • CreateHTTPTrigger
    • GetHTTPTrigger
    • UpdateHTTPTrigger
    • DeleteHTTPTrigger
  • Реализован ресурс fission_http_trigger в internal/resources/http_trigger_resource.go:
    • schema: name, function, url, methods, create_ingress, host, namespace, computed id, uid
    • Configure/Create/Read/Update/Delete
    • маппинг в CRD HTTPTrigger (spec.relativeurl, spec.methods, spec.functionref, spec.createingress)
  • Проверка сборки: go build ./... успешно.

Следующий шаг

  • Добавить пример examples/hello-python/main.tf и выполнить smoke Terraform apply.

Обновление этапа (пример Terraform)

  • Создан пример examples/hello-python/main.tf с использованием ресурсов:
    • fission_environment
    • fission_package
    • fission_function
    • fission_http_trigger
  • Добавлен код функции examples/hello-python/code/main.py.

Следующий шаг

  • Подготовить локальную установку бинарника провайдера для terraform init и выполнить smoke terraform apply.

Обновление этапа (smoke Terraform apply)

  • Собран бинарник провайдера и подключен через Terraform dev_overrides.
  • Прогнан terraform plan для examples/hello-python: план успешен, 4 ресурса к созданию.
  • Прогнан terraform apply и выполнена функциональная проверка.

Исправленные баги по факту smoke:

  • fission_package: после Create computed-поля (build_status, build_log) могли оставаться unknown.
    • Исправлено формирование state в unstructuredToPackageModel.
  • fission_function: CRD требовал обязательный spec.InvokeStrategy.
    • Добавлен InvokeStrategy в payload функции.
  • fission_http_trigger: несогласованность state (create_ingress null -> false).
    • В schema добавлены Computed + Default(false) для create_ingress.
    • Для methods добавлен Computed.

Дополнительно:

  • Для текущего python MVP fission_package переведен на spec.deployment.literal (как у рабочего CLI-пакета).
  • Проверка endpoint после apply:
    • GET /tf-hello -> hello from fission via terraform.

Следующий шаг

  • Добавить README по запуску dev override и оговорить ограничения текущего MVP (source_dir ожидает main.py).

Обновление этапа (README)

  • Добавлен README.md в корень репозитория.
  • Описаны:
    • список реализованных ресурсов MVP
    • запуск через Terraform dev override
    • текущие ограничения MVP

Обновление этапа (import + тесты)

  • Добавлена поддержка terraform import для всех 4 ресурсов:
    • fission_environment
    • fission_package
    • fission_function
    • fission_http_trigger
  • Формат import ID: namespace/name.
  • Добавлены unit-тесты в terraform/provider/internal/resources/*_test.go:
    • парсинг import ID
    • конвертация model <-> unstructured
    • валидация package source
    • базовая проверка HTTP trigger round-trip
  • Прогон валидации:
    • go test ./... — успешно
    • smoke terraform plan/apply — успешно
    • endpoint GET /tf-hellohello from fission via terraform

Следующий шаг

  • Добавить acceptance-тесты с опциональным запуском по env-флагу.

Обновление этапа (acceptance тест)

  • Добавлен acceptance-тест terraform/provider/internal/client/client_acceptance_test.go.
  • Тест выполняет живой CRUD в кластере для цепочки:
    • Environment -> Package -> Function -> HTTPTrigger
  • Запуск теста:
    • ACCEPTANCE_TEST=1 KUBECONFIG=/home/naeel/.kube/config go test ./internal/client -run TestAcceptanceFissionCRUD -v
  • Результат: PASS.

Следующий шаг

  • Расширить acceptance-тест проверкой реального HTTP-вызова функции через ingress.

Обновление этапа (много функций + суровая нагрузка)

  • Добавлен examples/stress-suite:
    • функции: fast, cpu, json
    • маршруты: /stress/fast, /stress/cpu, /stress/json
    • Terraform-конфиг на 10 ресурсов (env + 3 package + 3 function + 3 trigger)
  • Добавлен скрипт examples/stress-suite/scripts/load_test.sh для параллельной нагрузки.
  • Реальный прогон после донастройки:
    • 900 запросов на endpoint
    • 90 параллелизм
    • итог: 100% success на всех трех endpoint-ах.

Следующий шаг

  • Добавить в acceptance-тест проверку HTTP latency/perf budget и порогов SLO.

Обновление этапа (JS/Go source support)

  • В fission_package расширена поддержка source_dir:
    • main.py
    • main.js
    • main.go
  • Добавлены unit-тесты на выбор JS/Go исходников в package_resource_test.go.
  • Прогон go test ./... — успешно.

Следующий шаг

  • Добавить отдельные Terraform примеры для Node.js и Go функций.