134 lines
6.2 KiB
Markdown
134 lines
6.2 KiB
Markdown
# 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.
|