# Universal Provider Work Summary (Detailed) ## 1) Repository & Workspace - Workspace root: `/home/naeel/terra` - Active generator project: `/home/naeel/terra/nubes_provider_gen` - Shared Terraform test config (the one you requested): `/home/naeel/terra/test_persistent/main.tf` - Provider dev override for this shared config: `/home/naeel/terra/test_persistent/dev_override.tfrc` ## 2) What Was Built / Changed (High Level) ### Universal generator-based provider (Go) We implemented a generator that reads YAML specs in `resources_yaml` and produces Go resources in `internal/resources_gen`, plus a resource registry. ### Exporter (auto YAML generation) Created/extended exporter tool to pull CFS params and outputs from API: - Path: `/home/naeel/terra/nubes_provider_gen/tools/export_yaml/main.go` - Exports full `create` and `modify` params (cfsParams) - Added outputs extraction from `state/out` - Handles non-string `defaultValue` - Resolves `svcOperationId` via instance details and operations history - Doesn’t fail if `modify` op is absent (for resources that have no modify) ### Generator updates - Path: `/home/naeel/terra/nubes_provider_gen/tools/gen/main.go` - Added `outputs` to YAML schema and generated resource schema - Added output fetch during Create/Read/Update (uses `GetInstanceOutputs`) - If outputs fetch fails, outputs are set to `null` (avoid unknowns) - Improved `attrNameFromCode` to avoid `resource_c_p_u` / `allow_no_s_s_l` style - Required params with defaults now become optional+computed in schema ### Core client updates - Path: `/home/naeel/terra/nubes_provider_gen/internal/core/client.go` - Added `GetInstanceOutputs()` to fetch `state.out` for computed outputs ### Documentation - Added MAYDO section in `/home/naeel/terra/docs/ai_universal_provider_gen.md` for future enhancements ## 3) Key Files (Current) - Generator: `/home/naeel/terra/nubes_provider_gen/tools/gen/main.go` - Exporter: `/home/naeel/terra/nubes_provider_gen/tools/export_yaml/main.go` - Core client: `/home/naeel/terra/nubes_provider_gen/internal/core/client.go` - YAML specs: `/home/naeel/terra/nubes_provider_gen/resources_yaml/*.yaml` - Generated resources: `/home/naeel/terra/nubes_provider_gen/internal/resources_gen/*` - Shared Terraform test config: `/home/naeel/terra/test_persistent/main.tf` - Dev override: `/home/naeel/terra/test_persistent/dev_override.tfrc` ## 4) Exported YAML Specs (Current) ### Dummy - File: `/home/naeel/terra/nubes_provider_gen/resources_yaml/dummy.yaml` - `create` and `modify` params exported - `outputs` are **absent** (API returns `state.out = null` for dummy) ### Bucket (S3 bucket) - File: `/home/naeel/terra/nubes_provider_gen/resources_yaml/bucket.yaml` - `modify` is empty (API does not expose modify op for that instance) - `outputs` are **absent** (API returns `state.out = null`) ### Postgres - File: `/home/naeel/terra/nubes_provider_gen/resources_yaml/postgres.yaml` - CFS params exported, outputs include: - `externalConnect`, `internalConnect`, `monitoring` (all as string) - `resourceDisk` type conflict fixed (kept as string for both create/modify) ## 5) Shared Terraform Test Config (as requested) File: `/home/naeel/terra/test_persistent/main.tf` Contains **dummy + bucket + postgres**. Current content: - `nubes_dummy.test_bolt`: - display_name = `Terraform-Test-Bolvanka-20260201-01` - resource_realm = `dummy` - delete_mode = `suspend` - resume_if_exists = `true` - `nubes_bucket.test_bucket`: - display_name = `tf-bucket-gen-20260201-02` - delete_mode = `delete` - resume_if_exists = `false` - `nubes_postgres.test_pg`: - display_name = `tf-postgres-20260201-03` - delete_mode = `state_only` - resume_if_exists = `false` - other required params from exported YAML **Dev override** now points to generator build: `/home/naeel/terra/test_persistent/dev_override.tfrc` → `"terrareg.kube5s.ru/nubes/nubes" = "/home/naeel/terra/nubes_provider_gen"` ## 6) Tokens & Auth Handling Rule: on new access_token, save to `/home/naeel/terra/HH-MM-SS.token` (expiry time). Saved tokens so far: - `/home/naeel/terra/11-53-16.token` (old) - `/home/naeel/terra/15-20-50.token` (old) - `/home/naeel/terra/15-23-19.token` (old) - `/home/naeel/terra/15-25-59.token` (latest) Important: - `/home/naeel/terra/test_persistent/terraform.tfvars` was updated to use the latest token from `15-25-59.token`. - `/user` endpoint returns 200 with the latest token (so token is valid). ## 7) Test Runs / Current State ### Dummy & Bucket - Dummy created successfully (id: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`). - Bucket created successfully (id: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`). ### Postgres - Postgres resource is **not in Terraform state** (it was removed with `terraform state rm`). - New create was attempted with display_name `tf-postgres-20260201-03` but apply was **cancelled** by user. - Last error before name change: duplicate display name (400). Now fixed with new display_name. ### TLS timeouts Occasional TLS handshake timeouts when creating resources. Retrying apply usually works. ## 8) Known Issues / Fixes Applied - **Outputs**: provider now sets outputs to `null` if `state/out` is missing/unavailable, preventing “unknown after apply” errors. - **Attribute names**: fixed to avoid `resource_c_p_u` or `allow_no_s_s_l`. - **Required + default**: required params with defaults are optional+computed in schema. - **Bucket delete**: fails if instance not fully created. Fixed by waiting and retrying destroy. ## 9) What To Do Next (Continuation Steps) 1) Rebuild provider (if not already): - `cd /home/naeel/terra/nubes_provider_gen` - `go run ./tools/gen` - `go build -o terraform-provider-nubes` 2) Ensure token in `/home/naeel/terra/test_persistent/terraform.tfvars` is valid. 3) Apply from shared config: - `cd /home/naeel/terra/test_persistent` - `TF_CLI_CONFIG_FILE=./dev_override.tfrc terraform apply -auto-approve` 4) If TLS timeouts occur, re-run `terraform apply`. 5) If Postgres creation fails due to name conflict, change `display_name` to a new unique value. ## 10) Notes on Outputs - For dummy & bucket: `state.out` is null, so YAML does not list outputs. - For postgres: outputs are present in YAML; provider sets them to `null` when not returned yet. --- If you want a shorter summary or specific error fixes, tell me what to focus on.