Files
tf_provider/docs/CHAT_RESUME.md
T
2026-06-30 15:45:24 +04:00

6.2 KiB
Raw Blame History

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
  • Doesnt 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.