Files
fission-console/doc/progress.md
T

142 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-hello``hello 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.