diff --git a/doc/progress.md b/doc/progress.md index dd9a023..edaa88e 100644 --- a/doc/progress.md +++ b/doc/progress.md @@ -100,6 +100,7 @@ | # | Компонент | Статус | Заметки | |---|-----------|--------|---------| | 1 | RabbitMQ event triggers | ⏳ | | +| 0 | Изоляция пользователей по namespace | ⏳ | Каждый токен → свой k8s namespace. API: GET /v1/whoami → {namespace}. Провайдер получает ns при Configure(), юзер не видит. Сейчас: хардкод "default" для демо. | | 2 | Облачный auth (nubes.ru token validation) | ⏳ | v1 — статический токен | | 3 | Метрики → Victoria Metrics | ⏳ | | | 4 | Managed PostgreSQL от провайдера | ⏳ | сейчас postgres в k8s | diff --git a/examples/hello-node/main.tf b/examples/hello-node/main.tf index 271f13b..d5843b9 100644 --- a/examples/hello-node/main.tf +++ b/examples/hello-node/main.tf @@ -18,8 +18,7 @@ terraform { } provider "sless" { - endpoint = "https://sless-api.kube5s.ru" - token = "dev-token-change-me" - namespace = "default" + endpoint = "https://sless-api.kube5s.ru" + token = "dev-token-change-me" } diff --git a/examples/notes-python/main.tf b/examples/notes-python/main.tf index 62af59a..82d0415 100644 --- a/examples/notes-python/main.tf +++ b/examples/notes-python/main.tf @@ -27,7 +27,6 @@ terraform { # sless провайдер подключается к API кластера. # В продакшне token следует передавать через TF_VAR или secrets. provider "sless" { - endpoint = "https://sless-api.kube5s.ru" - token = "dev-token-change-me" - namespace = "default" + endpoint = "https://sless-api.kube5s.ru" + token = "dev-token-change-me" } diff --git a/examples/pg-query/main.tf b/examples/pg-query/main.tf index 787cea3..55806cc 100644 --- a/examples/pg-query/main.tf +++ b/examples/pg-query/main.tf @@ -16,7 +16,6 @@ terraform { } provider "sless" { - endpoint = "https://sless-api.kube5s.ru" - token = "dev-token-change-me" - namespace = "default" + endpoint = "https://sless-api.kube5s.ru" + token = "dev-token-change-me" } diff --git a/examples/simple-node/main.tf b/examples/simple-node/main.tf index fc6d96b..8400e2c 100644 --- a/examples/simple-node/main.tf +++ b/examples/simple-node/main.tf @@ -13,8 +13,7 @@ # напишите логику в джоб, а результат передайте через env_vars. # Например: получить токен, версию схемы БД, время деплоя и т.д. # -# namespace задаётся один раз здесь, в блоке provider. -# В ресурсах (sless_function, sless_trigger, sless_job) namespace НЕ указывается. +# namespace захардкодирован внутри провайдера, здесь ничего указывать. terraform { required_providers { @@ -30,7 +29,6 @@ terraform { } provider "sless" { - endpoint = "https://sless-api.kube5s.ru" - token = "dev-token-change-me" - namespace = "default" + endpoint = "https://sless-api.kube5s.ru" + token = "dev-token-change-me" } diff --git a/examples/simple-python/main.tf b/examples/simple-python/main.tf index 90381fa..5aff48e 100644 --- a/examples/simple-python/main.tf +++ b/examples/simple-python/main.tf @@ -12,8 +12,7 @@ # напишите логику в джоб, а результат передайте через env_vars. # Например: получить токен, версию схемы БД, время деплоя и т.д. # -# namespace задаётся один раз здесь, в блоке provider. -# В ресурсах (sless_function, sless_trigger, sless_job) namespace НЕ указывается. +# namespace захардкодирован внутри провайдера, здесь ничего указывать. terraform { required_providers { @@ -29,7 +28,6 @@ terraform { } provider "sless" { - endpoint = "https://sless-api.kube5s.ru" - token = "dev-token-change-me" - namespace = "default" + endpoint = "https://sless-api.kube5s.ru" + token = "dev-token-change-me" } diff --git a/terraform/provider/internal/client/client.go b/terraform/provider/internal/client/client.go index 3d00e0e..f5bea19 100644 --- a/terraform/provider/internal/client/client.go +++ b/terraform/provider/internal/client/client.go @@ -23,16 +23,19 @@ type Client struct { httpClient *http.Client endpoint string token string - Namespace string // берётся из provider {}, пользователь не касается + // Namespace захардкодено = "default". + // TODO: изоляция пользователей — каждый токен привязан к своему namespace, + // провайдер получает его через GET /v1/whoami. Сейчас всё в одном ns для демо. + Namespace string } // New создаёт клиент. endpoint — базовый URL оператора (без trailing slash). -func New(endpoint, token, namespace string) *Client { +func New(endpoint, token string) *Client { return &Client{ httpClient: &http.Client{Timeout: 30 * time.Second}, endpoint: endpoint, token: token, - Namespace: namespace, + Namespace: "default", } } diff --git a/terraform/provider/internal/provider/provider.go b/terraform/provider/internal/provider/provider.go index b3a2803..3528966 100644 --- a/terraform/provider/internal/provider/provider.go +++ b/terraform/provider/internal/provider/provider.go @@ -28,9 +28,8 @@ type SlessProvider struct { // SlessProviderModel — конфигурация блока provider {} в .tf файле. type SlessProviderModel struct { - Endpoint types.String `tfsdk:"endpoint"` - Token types.String `tfsdk:"token"` - Namespace types.String `tfsdk:"namespace"` + Endpoint types.String `tfsdk:"endpoint"` + Token types.String `tfsdk:"token"` } // New возвращает фабрику провайдера — точная копия паттерна nubes. @@ -57,12 +56,6 @@ func (p *SlessProvider) Schema(_ context.Context, _ provider.SchemaRequest, resp Optional: true, Sensitive: true, }, - // namespace — окружение/проект в кластере. Задаётся один раз здесь. - // В ресурсах (sless_function, sless_trigger, sless_job) namespace НЕ указывается. - "namespace": schema.StringAttribute{ - MarkdownDescription: "Пространство имён (окружение). Задаётся один раз для всех ресурсов.", - Required: true, - }, }, } } @@ -94,9 +87,7 @@ func (p *SlessProvider) Configure(ctx context.Context, req provider.ConfigureReq } } - namespace := config.Namespace.ValueString() - - c := client.New(endpoint, token, namespace) + c := client.New(endpoint, token) resp.ResourceData = c resp.DataSourceData = c } diff --git a/terraform/provider/internal/resources/function_resource.go b/terraform/provider/internal/resources/function_resource.go index ed1718b..c090f87 100644 --- a/terraform/provider/internal/resources/function_resource.go +++ b/terraform/provider/internal/resources/function_resource.go @@ -25,7 +25,6 @@ import ( "github.com/hashicorp/terraform-plugin-framework-validators/int64validator" "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" - "github.com/hashicorp/terraform-plugin-framework/attr" "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" @@ -323,12 +322,7 @@ func mapToStringMap(ctx context.Context, m types.Map) (map[string]string, diag.D result := make(map[string]string, len(elements)) var diags diag.Diagnostics for k, v := range elements { - sv, ok := v.(attr.Value) - if !ok { - diags.AddError("env_vars conversion", fmt.Sprintf("unexpected type for key %q", k)) - continue - } - strVal, ok := sv.(types.String) + strVal, ok := v.(types.String) if !ok { diags.AddError("env_vars conversion", fmt.Sprintf("value for key %q is not a string", k)) continue