212 lines
10 KiB
Markdown
212 lines
10 KiB
Markdown
# Thinking Log
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
Дата: 2026-04-14
|
||
|
||
---
|
||
|
||
## План (до действий)
|
||
1. Проверить реальное состояние кода после scaffold и внешних правок.
|
||
2. Зафиксировать документацию этапа до изменений в коде.
|
||
3. Реализовать первый рабочий ресурс `fission_environment` как базовую вертикаль (provider -> client -> resource CRUD).
|
||
4. Скомпилировать проект и поправить ошибки.
|
||
5. Обновить документацию по факту и закоммитить этап.
|
||
|
||
## Результат (после предыдущих действий)
|
||
- Подтверждено, что REST `/v2/*` в текущей установке недоступен.
|
||
- План реализации переключен на Kubernetes CRD API.
|
||
- Создан и собран каркас провайдера.
|
||
- Сейчас выполняется реализация первого рабочего ресурса.
|
||
|
||
---
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
|
||
## План (до действий, этап 2)
|
||
1. Реализовать CRUD методы клиента для `environments.fission.io`.
|
||
2. Реализовать полный lifecycle ресурса `fission_environment`.
|
||
3. Проверить сборку и привести код к чистому состоянию.
|
||
4. Зафиксировать результат в документации.
|
||
|
||
## Результат (после действий, этап 2)
|
||
- В `internal/client/client.go` реализованы методы CRUD для Environment CRD.
|
||
- В `internal/resources/environment_resource.go` реализован полноценный ресурс:
|
||
- schema атрибутов
|
||
- Configure/Create/Read/Update/Delete
|
||
- преобразование model <-> unstructured
|
||
- Сборка `go build ./...` успешна.
|
||
- Этап готов к коммиту и переходу к `fission_package`.
|
||
|
||
---
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
|
||
## План (до действий, этап 3)
|
||
1. Реализовать CRUD методы клиента для `packages.fission.io`.
|
||
2. Реализовать ресурс `fission_package` с загрузкой кода из `source_dir` или `code_path`.
|
||
3. Проверить сборку.
|
||
4. Обновить документацию и зафиксировать этап.
|
||
|
||
## Результат (после действий, этап 3)
|
||
- В `internal/client/client.go` добавлены методы CRUD для Package CRD.
|
||
- В `internal/resources/package_resource.go` реализован рабочий ресурс `fission_package`:
|
||
- schema ресурса
|
||
- проверка источника кода (ровно один из `source_dir`/`code_path`)
|
||
- упаковка директории в zip
|
||
- base64 в `spec.source.literal`
|
||
- Create/Read/Update/Delete через CRD API
|
||
- Сборка `go build ./...` успешна.
|
||
- Следующий этап: `fission_function`.
|
||
|
||
---
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
|
||
## План (до действий, этап 4)
|
||
1. Реализовать CRUD методы клиента для `functions.fission.io`.
|
||
2. Реализовать ресурс `fission_function`.
|
||
3. Проверить сборку.
|
||
4. Обновить документацию этапа.
|
||
|
||
## Результат (после действий, этап 4)
|
||
- В `internal/client/client.go` добавлены методы CRUD для Function CRD.
|
||
- В `internal/resources/function_resource.go` реализован рабочий ресурс `fission_function`:
|
||
- schema с обязательными `name`, `environment`, `package_name`, `entrypoint`
|
||
- Configure/Create/Read/Update/Delete
|
||
- преобразование terraform model <-> CRD payload
|
||
- Сборка `go build ./...` успешна.
|
||
- Следующий этап: `fission_http_trigger`.
|
||
|
||
---
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
|
||
## План (до действий, этап 5)
|
||
1. Реализовать CRUD методы клиента для `httptriggers.fission.io`.
|
||
2. Реализовать ресурс `fission_http_trigger`.
|
||
3. Проверить сборку.
|
||
4. Обновить документацию этапа.
|
||
|
||
## Результат (после действий, этап 5)
|
||
- В `internal/client/client.go` добавлены методы CRUD для HTTPTrigger CRD.
|
||
- В `internal/resources/http_trigger_resource.go` реализован рабочий ресурс `fission_http_trigger`:
|
||
- schema с `name`, `function`, `url`, `methods`, `create_ingress`, `host`
|
||
- Configure/Create/Read/Update/Delete
|
||
- преобразование terraform model <-> CRD payload
|
||
- Сборка `go build ./...` успешна.
|
||
- Следующий этап: пример Terraform и smoke apply.
|
||
|
||
---
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
|
||
## План (до действий, этап 6)
|
||
1. Добавить пример Terraform под текущий набор реализованных ресурсов.
|
||
2. Добавить простой код функции для примера.
|
||
3. Зафиксировать изменения в документации.
|
||
|
||
## Результат (после действий, этап 6)
|
||
- Создан `examples/hello-python/main.tf`.
|
||
- Создан `examples/hello-python/code/main.py`.
|
||
- Пример покрывает цепочку Environment -> Package -> Function -> HTTPTrigger.
|
||
- Следующий этап: установить бинарник провайдера в локальный plugin cache и прогнать smoke `terraform init/plan/apply`.
|
||
|
||
---
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
|
||
## План (до действий, этап 7)
|
||
1. Выполнить smoke `terraform plan/apply` с dev override.
|
||
2. Проверить рабочий HTTP endpoint функции.
|
||
3. Зафиксировать найденные дефекты провайдера и исправить их.
|
||
|
||
## Результат (после действий, этап 7)
|
||
- Выполнен `terraform plan` для `examples/hello-python`.
|
||
- Выполнен `terraform apply`.
|
||
- Найдены и исправлены дефекты:
|
||
- `fission_package`: computed-поля могли оставаться unknown после Create.
|
||
- `fission_function`: отсутствовал обязательный `spec.InvokeStrategy`.
|
||
- `fission_http_trigger`: несогласованность состояния для `create_ingress`.
|
||
- После фиксов выполнен повторный apply и проверка endpoint:
|
||
- `https://fission.kube5s.ru/tf-hello` -> `hello from fission via terraform`.
|
||
- MVP-цепочка ресурсов работает end-to-end на кластере.
|
||
|
||
---
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
|
||
## План (до действий, этап 8)
|
||
1. Добавить поддержку `terraform import` для всех реализованных ресурсов.
|
||
2. Добавить unit-тесты на критичную логику конвертации и валидации.
|
||
3. Прогнать `go test` и повторный smoke `terraform plan/apply`.
|
||
|
||
## Результат (после действий, этап 8)
|
||
- Добавлен общий helper парсинга import ID (`namespace/name`).
|
||
- Добавлен `ImportState` для ресурсов Environment/Package/Function/HTTPTrigger.
|
||
- Добавлены unit-тесты для `internal/resources`.
|
||
- Прогон `go test ./...` успешен.
|
||
- Повторный `terraform apply` успешен.
|
||
- Финальная проверка endpoint:
|
||
- `GET /tf-hello` -> `hello from fission via terraform`.
|
||
|
||
---
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
|
||
## План (до действий, этап 9)
|
||
1. Добавить acceptance-тест для реального CRUD через `internal/client`.
|
||
2. Прогнать unit + acceptance тесты.
|
||
3. Зафиксировать результат в документации.
|
||
|
||
## Результат (после действий, этап 9)
|
||
- Добавлен `internal/client/client_acceptance_test.go`.
|
||
- Unit-тесты: PASS.
|
||
- Acceptance-тест `TestAcceptanceFissionCRUD`: PASS.
|
||
- Тест создает и удаляет Environment/Package/Function/HTTPTrigger в реальном кластере.
|
||
|
||
---
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
|
||
## План (до действий, этап 10)
|
||
1. Добавить набор из нескольких функций для нагрузочного сценария.
|
||
2. Развернуть их через Terraform.
|
||
3. Прогнать суровую параллельную нагрузку и добиться стабильного результата.
|
||
|
||
## Результат (после действий, этап 10)
|
||
- Добавлен `examples/stress-suite` с 3 функциями (`fast`, `cpu`, `json`).
|
||
- Добавлен `load_test.sh` для массовых параллельных вызовов.
|
||
- Начальный прогон выявил просадку на `cpu/json`, после чего:
|
||
- увеличен `poolsize` environment до `10`
|
||
- облегчена `cpu` функция
|
||
- добавлен retry в нагрузочном скрипте и breakdown fail-кодов
|
||
- Финальный прогон `900x90`:
|
||
- fast: 100%
|
||
- cpu: 100%
|
||
- json: 100%
|
||
|
||
---
|
||
|
||
Агент: GitHub Copilot
|
||
Модель: GPT-5.3-Codex
|
||
|
||
## План (до действий, этап 11)
|
||
1. Убрать Python-only ограничение в `fission_package.source_dir`.
|
||
2. Добавить поддержку JS/Go исходников на уровне package loader.
|
||
3. Закрыть изменения unit-тестами.
|
||
|
||
## Результат (после действий, этап 11)
|
||
- `fission_package` теперь поддерживает `main.py`, `main.js`, `main.go` в `source_dir`.
|
||
- Добавлены unit-тесты для JS/Go веток `loadPackageLiteral`.
|
||
- `go test ./...` проходит.
|