add: documentation

This commit is contained in:
“Naeel”
2026-06-30 15:45:24 +04:00
parent 540c1f7293
commit ca276d200f
1055 changed files with 47294 additions and 0 deletions
+133
View File
@@ -0,0 +1,133 @@
# 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.