# 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-флагу.