From ab85c386c75b1821b3000b169ca3ee6aa58988f8 Mon Sep 17 00:00:00 2001 From: Piyush Kumar Date: Wed, 29 May 2024 11:34:27 +0530 Subject: [PATCH 1/2] Add import mres implementation --- .tools/nvim/__http__/console/mres.graphql.yml | 19 + .../internal/app/graph/generated/generated.go | 405 +++++++++++++++++- .../internal/app/graph/schema.graphqls | 3 +- .../internal/app/graph/schema.resolvers.go | 16 +- .../managedresource.graphqls | 3 + apps/console/internal/domain/api.go | 3 +- apps/console/internal/domain/environment.go | 46 +- apps/console/internal/domain/mres.go | 137 +++++- apps/console/internal/entities/mres.go | 8 +- apps/infra/internal/app/grpc-server.go | 23 + .../container-registry.pb.go | 4 +- .../container-registry_grpc.pb.go | 2 +- grpc-interfaces/infra.proto | 15 + grpc-interfaces/infra/infra.pb.go | 251 +++++++++-- grpc-interfaces/infra/infra_grpc.pb.go | 47 +- .../kloudlite.io/rpc/accounts/accounts.pb.go | 4 +- .../rpc/accounts/accounts_grpc.pb.go | 2 +- .../kloudlite.io/rpc/agent/kubeagent.pb.go | 4 +- .../rpc/agent/kubeagent_grpc.pb.go | 2 +- .../kloudlite.io/rpc/auth/auth.pb.go | 4 +- .../kloudlite.io/rpc/auth/auth_grpc.pb.go | 2 +- grpc-interfaces/kloudlite.io/rpc/ci/ci.pb.go | 4 +- .../kloudlite.io/rpc/ci/ci_grpc.pb.go | 2 +- .../kloudlite.io/rpc/comms/comms.pb.go | 4 +- .../kloudlite.io/rpc/comms/comms_grpc.pb.go | 2 +- .../kloudlite.io/rpc/console/console.pb.go | 4 +- .../rpc/console/console_grpc.pb.go | 2 +- .../kloudlite.io/rpc/dns/dns.pb.go | 4 +- .../kloudlite.io/rpc/dns/dns_grpc.pb.go | 2 +- .../rpc/finance/finance-infra.pb.go | 4 +- .../rpc/finance/finance-infra_grpc.pb.go | 2 +- .../kloudlite.io/rpc/finance/finance.pb.go | 4 +- .../rpc/finance/finance_grpc.pb.go | 2 +- .../kloudlite.io/rpc/iam/iam.pb.go | 4 +- .../kloudlite.io/rpc/iam/iam_grpc.pb.go | 2 +- .../kloudlite.io/rpc/jseval/jseval.pb.go | 4 +- .../kloudlite.io/rpc/jseval/jseval_grpc.pb.go | 2 +- .../message-office-internal.pb.go | 4 +- .../message-office-internal_grpc.pb.go | 2 +- 39 files changed, 916 insertions(+), 138 deletions(-) diff --git a/.tools/nvim/__http__/console/mres.graphql.yml b/.tools/nvim/__http__/console/mres.graphql.yml index 6c84e1130..cbc1ef564 100644 --- a/.tools/nvim/__http__/console/mres.graphql.yml +++ b/.tools/nvim/__http__/console/mres.graphql.yml @@ -83,6 +83,25 @@ variables: --- +label: Import Managed Resource +query: |+ + mutation Core_importManagedResource($envName: String!, $msvcName: String!, $mresName: String!) { + core_importManagedResource(envName: $envName, msvcName: $msvcName, mresName: $mresName) { + id + mresRef + accountName + isImported + } + } +variables: + { + "envName": "test-env", + "msvcName": "test-msvc", + "mresName": "test-mres" + } + +--- + label: Get ManagedService query: |+ query Core_getManagedResource($namespace: String!, $name: String!) { diff --git a/apps/console/internal/app/graph/generated/generated.go b/apps/console/internal/app/graph/generated/generated.go index f7df0da48..7fb72933c 100644 --- a/apps/console/internal/app/graph/generated/generated.go +++ b/apps/console/internal/app/graph/generated/generated.go @@ -640,9 +640,12 @@ type ComplexityRoot struct { Enabled func(childComplexity int) int EnvironmentName func(childComplexity int) int Id func(childComplexity int) int + IsImported func(childComplexity int) int Kind func(childComplexity int) int LastUpdatedBy func(childComplexity int) int + ManagedServiceName func(childComplexity int) int MarkedForDeletion func(childComplexity int) int + MresRef func(childComplexity int) int ObjectMeta func(childComplexity int) int RecordVersion func(childComplexity int) int Spec func(childComplexity int) int @@ -699,7 +702,7 @@ type ComplexityRoot struct { CoreCreateEnvironment func(childComplexity int, env entities.Environment) int CoreCreateExternalApp func(childComplexity int, envName string, externalApp entities.ExternalApp) int CoreCreateImagePullSecret func(childComplexity int, pullSecret entities.ImagePullSecret) int - CoreCreateManagedResource func(childComplexity int, envName string, mres entities.ManagedResource) int + CoreCreateManagedResource func(childComplexity int, envName *string, msvcName string, mres entities.ManagedResource) int CoreCreateRouter func(childComplexity int, envName string, router entities.Router) int CoreCreateSecret func(childComplexity int, envName string, secret entities.Secret) int CoreCreateVPNDevice func(childComplexity int, vpnDevice entities.ConsoleVPNDevice) int @@ -712,6 +715,7 @@ type ComplexityRoot struct { CoreDeleteRouter func(childComplexity int, envName string, routerName string) int CoreDeleteSecret func(childComplexity int, envName string, secretName string) int CoreDeleteVPNDevice func(childComplexity int, deviceName string) int + CoreImportManagedResource func(childComplexity int, envName string, msvcName string, mresName string) int CoreInterceptApp func(childComplexity int, envName string, appname string, deviceName string, intercept bool, portMappings []*v1.AppInterceptPortMappings) int CoreInterceptExternalApp func(childComplexity int, envName string, externalAppName string, deviceName string, intercept bool, portMappings []*v1.AppInterceptPortMappings) int CoreUpdateApp func(childComplexity int, envName string, app entities.App) int @@ -971,7 +975,8 @@ type MutationResolver interface { CoreCreateRouter(ctx context.Context, envName string, router entities.Router) (*entities.Router, error) CoreUpdateRouter(ctx context.Context, envName string, router entities.Router) (*entities.Router, error) CoreDeleteRouter(ctx context.Context, envName string, routerName string) (bool, error) - CoreCreateManagedResource(ctx context.Context, envName string, mres entities.ManagedResource) (*entities.ManagedResource, error) + CoreCreateManagedResource(ctx context.Context, envName *string, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) + CoreImportManagedResource(ctx context.Context, envName string, msvcName string, mresName string) (*entities.ManagedResource, error) CoreUpdateManagedResource(ctx context.Context, envName string, mres entities.ManagedResource) (*entities.ManagedResource, error) CoreDeleteManagedResource(ctx context.Context, envName string, mresName string) (bool, error) CoreCreateVPNDevice(ctx context.Context, vpnDevice entities.ConsoleVPNDevice) (*entities.ConsoleVPNDevice, error) @@ -3543,6 +3548,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.ManagedResource.Id(childComplexity), true + case "ManagedResource.isImported": + if e.complexity.ManagedResource.IsImported == nil { + break + } + + return e.complexity.ManagedResource.IsImported(childComplexity), true + case "ManagedResource.kind": if e.complexity.ManagedResource.Kind == nil { break @@ -3557,6 +3569,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.ManagedResource.LastUpdatedBy(childComplexity), true + case "ManagedResource.managedServiceName": + if e.complexity.ManagedResource.ManagedServiceName == nil { + break + } + + return e.complexity.ManagedResource.ManagedServiceName(childComplexity), true + case "ManagedResource.markedForDeletion": if e.complexity.ManagedResource.MarkedForDeletion == nil { break @@ -3564,6 +3583,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.ManagedResource.MarkedForDeletion(childComplexity), true + case "ManagedResource.mresRef": + if e.complexity.ManagedResource.MresRef == nil { + break + } + + return e.complexity.ManagedResource.MresRef(childComplexity), true + case "ManagedResource.metadata": if e.complexity.ManagedResource.ObjectMeta == nil { break @@ -3849,7 +3875,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Mutation.CoreCreateManagedResource(childComplexity, args["envName"].(string), args["mres"].(entities.ManagedResource)), true + return e.complexity.Mutation.CoreCreateManagedResource(childComplexity, args["envName"].(*string), args["msvcName"].(string), args["mres"].(entities.ManagedResource)), true case "Mutation.core_createRouter": if e.complexity.Mutation.CoreCreateRouter == nil { @@ -3995,6 +4021,18 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Mutation.CoreDeleteVPNDevice(childComplexity, args["deviceName"].(string)), true + case "Mutation.core_importManagedResource": + if e.complexity.Mutation.CoreImportManagedResource == nil { + break + } + + args, err := ec.field_Mutation_core_importManagedResource_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Mutation.CoreImportManagedResource(childComplexity, args["envName"].(string), args["msvcName"].(string), args["mresName"].(string)), true + case "Mutation.core_interceptApp": if e.complexity.Mutation.CoreInterceptApp == nil { break @@ -5346,7 +5384,8 @@ type Mutation { core_updateRouter(envName: String!, router: RouterIn!): Router @isLoggedInAndVerified @hasAccount core_deleteRouter(envName: String!, routerName: String!): Boolean! @isLoggedInAndVerified @hasAccount - core_createManagedResource(envName: String!, mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount + core_createManagedResource(envName: String, msvcName: String! ,mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount + core_importManagedResource(envName: String!, msvcName: String! ,mresName: String!): ManagedResource @isLoggedInAndVerified @hasAccount core_updateManagedResource(envName: String!, mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount core_deleteManagedResource(envName: String!, mresName: String!): Boolean! @isLoggedInAndVerified @hasAccount @@ -6407,10 +6446,13 @@ input ImagePullSecretIn { enabled: Boolean environmentName: String! id: ID! + isImported: Boolean! kind: String lastUpdatedBy: Github__com___kloudlite___api___common__CreatedOrUpdatedBy! + managedServiceName: String! markedForDeletion: Boolean metadata: Metadata @goField(name: "objectMeta") + mresRef: String! recordVersion: Int! spec: Github__com___kloudlite___operator___apis___crds___v1__ManagedResourceSpec! status: Github__com___kloudlite___operator___pkg___operator__Status @@ -6839,24 +6881,33 @@ func (ec *executionContext) field_Mutation_core_createImagePullSecret_args(ctx c func (ec *executionContext) field_Mutation_core_createManagedResource_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 string + var arg0 *string if tmp, ok := rawArgs["envName"]; ok { ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("envName")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) + arg0, err = ec.unmarshalOString2ᚖstring(ctx, tmp) if err != nil { return nil, err } } args["envName"] = arg0 - var arg1 entities.ManagedResource + var arg1 string + if tmp, ok := rawArgs["msvcName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("msvcName")) + arg1, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["msvcName"] = arg1 + var arg2 entities.ManagedResource if tmp, ok := rawArgs["mres"]; ok { ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("mres")) - arg1, err = ec.unmarshalNManagedResourceIn2githubᚗcomᚋkloudliteᚋapiᚋappsᚋconsoleᚋinternalᚋentitiesᚐManagedResource(ctx, tmp) + arg2, err = ec.unmarshalNManagedResourceIn2githubᚗcomᚋkloudliteᚋapiᚋappsᚋconsoleᚋinternalᚋentitiesᚐManagedResource(ctx, tmp) if err != nil { return nil, err } } - args["mres"] = arg1 + args["mres"] = arg2 return args, nil } @@ -7112,6 +7163,39 @@ func (ec *executionContext) field_Mutation_core_deleteVPNDevice_args(ctx context return args, nil } +func (ec *executionContext) field_Mutation_core_importManagedResource_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 string + if tmp, ok := rawArgs["envName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("envName")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["envName"] = arg0 + var arg1 string + if tmp, ok := rawArgs["msvcName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("msvcName")) + arg1, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["msvcName"] = arg1 + var arg2 string + if tmp, ok := rawArgs["mresName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("mresName")) + arg2, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["mresName"] = arg2 + return args, nil +} + func (ec *executionContext) field_Mutation_core_interceptApp_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} @@ -24235,6 +24319,50 @@ func (ec *executionContext) fieldContext_ManagedResource_id(ctx context.Context, return fc, nil } +func (ec *executionContext) _ManagedResource_isImported(ctx context.Context, field graphql.CollectedField, obj *entities.ManagedResource) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_ManagedResource_isImported(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.IsImported, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_ManagedResource_isImported(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "ManagedResource", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _ManagedResource_kind(ctx context.Context, field graphql.CollectedField, obj *entities.ManagedResource) (ret graphql.Marshaler) { fc, err := ec.fieldContext_ManagedResource_kind(ctx, field) if err != nil { @@ -24328,6 +24456,50 @@ func (ec *executionContext) fieldContext_ManagedResource_lastUpdatedBy(ctx conte return fc, nil } +func (ec *executionContext) _ManagedResource_managedServiceName(ctx context.Context, field graphql.CollectedField, obj *entities.ManagedResource) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_ManagedResource_managedServiceName(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.ManagedServiceName, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_ManagedResource_managedServiceName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "ManagedResource", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _ManagedResource_markedForDeletion(ctx context.Context, field graphql.CollectedField, obj *entities.ManagedResource) (ret graphql.Marshaler) { fc, err := ec.fieldContext_ManagedResource_markedForDeletion(ctx, field) if err != nil { @@ -24426,6 +24598,50 @@ func (ec *executionContext) fieldContext_ManagedResource_metadata(ctx context.Co return fc, nil } +func (ec *executionContext) _ManagedResource_mresRef(ctx context.Context, field graphql.CollectedField, obj *entities.ManagedResource) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_ManagedResource_mresRef(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.MresRef, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_ManagedResource_mresRef(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "ManagedResource", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _ManagedResource_recordVersion(ctx context.Context, field graphql.CollectedField, obj *entities.ManagedResource) (ret graphql.Marshaler) { fc, err := ec.fieldContext_ManagedResource_recordVersion(ctx, field) if err != nil { @@ -24835,14 +25051,20 @@ func (ec *executionContext) fieldContext_ManagedResourceEdge_node(ctx context.Co return ec.fieldContext_ManagedResource_environmentName(ctx, field) case "id": return ec.fieldContext_ManagedResource_id(ctx, field) + case "isImported": + return ec.fieldContext_ManagedResource_isImported(ctx, field) case "kind": return ec.fieldContext_ManagedResource_kind(ctx, field) case "lastUpdatedBy": return ec.fieldContext_ManagedResource_lastUpdatedBy(ctx, field) + case "managedServiceName": + return ec.fieldContext_ManagedResource_managedServiceName(ctx, field) case "markedForDeletion": return ec.fieldContext_ManagedResource_markedForDeletion(ctx, field) case "metadata": return ec.fieldContext_ManagedResource_metadata(ctx, field) + case "mresRef": + return ec.fieldContext_ManagedResource_mresRef(ctx, field) case "recordVersion": return ec.fieldContext_ManagedResource_recordVersion(ctx, field) case "spec": @@ -28194,7 +28416,7 @@ func (ec *executionContext) _Mutation_core_createManagedResource(ctx context.Con resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { directive0 := func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().CoreCreateManagedResource(rctx, fc.Args["envName"].(string), fc.Args["mres"].(entities.ManagedResource)) + return ec.resolvers.Mutation().CoreCreateManagedResource(rctx, fc.Args["envName"].(*string), fc.Args["msvcName"].(string), fc.Args["mres"].(entities.ManagedResource)) } directive1 := func(ctx context.Context) (interface{}, error) { if ec.directives.IsLoggedInAndVerified == nil { @@ -28257,14 +28479,20 @@ func (ec *executionContext) fieldContext_Mutation_core_createManagedResource(ctx return ec.fieldContext_ManagedResource_environmentName(ctx, field) case "id": return ec.fieldContext_ManagedResource_id(ctx, field) + case "isImported": + return ec.fieldContext_ManagedResource_isImported(ctx, field) case "kind": return ec.fieldContext_ManagedResource_kind(ctx, field) case "lastUpdatedBy": return ec.fieldContext_ManagedResource_lastUpdatedBy(ctx, field) + case "managedServiceName": + return ec.fieldContext_ManagedResource_managedServiceName(ctx, field) case "markedForDeletion": return ec.fieldContext_ManagedResource_markedForDeletion(ctx, field) case "metadata": return ec.fieldContext_ManagedResource_metadata(ctx, field) + case "mresRef": + return ec.fieldContext_ManagedResource_mresRef(ctx, field) case "recordVersion": return ec.fieldContext_ManagedResource_recordVersion(ctx, field) case "spec": @@ -28295,6 +28523,128 @@ func (ec *executionContext) fieldContext_Mutation_core_createManagedResource(ctx return fc, nil } +func (ec *executionContext) _Mutation_core_importManagedResource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_core_importManagedResource(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + directive0 := func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().CoreImportManagedResource(rctx, fc.Args["envName"].(string), fc.Args["msvcName"].(string), fc.Args["mresName"].(string)) + } + directive1 := func(ctx context.Context) (interface{}, error) { + if ec.directives.IsLoggedInAndVerified == nil { + return nil, errors.New("directive isLoggedInAndVerified is not implemented") + } + return ec.directives.IsLoggedInAndVerified(ctx, nil, directive0) + } + directive2 := func(ctx context.Context) (interface{}, error) { + if ec.directives.HasAccount == nil { + return nil, errors.New("directive hasAccount is not implemented") + } + return ec.directives.HasAccount(ctx, nil, directive1) + } + + tmp, err := directive2(rctx) + if err != nil { + return nil, graphql.ErrorOnPath(ctx, err) + } + if tmp == nil { + return nil, nil + } + if data, ok := tmp.(*entities.ManagedResource); ok { + return data, nil + } + return nil, fmt.Errorf(`unexpected type %T from directive, should be *github.com/kloudlite/api/apps/console/internal/entities.ManagedResource`, tmp) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*entities.ManagedResource) + fc.Result = res + return ec.marshalOManagedResource2ᚖgithubᚗcomᚋkloudliteᚋapiᚋappsᚋconsoleᚋinternalᚋentitiesᚐManagedResource(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_core_importManagedResource(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "accountName": + return ec.fieldContext_ManagedResource_accountName(ctx, field) + case "apiVersion": + return ec.fieldContext_ManagedResource_apiVersion(ctx, field) + case "createdBy": + return ec.fieldContext_ManagedResource_createdBy(ctx, field) + case "creationTime": + return ec.fieldContext_ManagedResource_creationTime(ctx, field) + case "displayName": + return ec.fieldContext_ManagedResource_displayName(ctx, field) + case "enabled": + return ec.fieldContext_ManagedResource_enabled(ctx, field) + case "environmentName": + return ec.fieldContext_ManagedResource_environmentName(ctx, field) + case "id": + return ec.fieldContext_ManagedResource_id(ctx, field) + case "isImported": + return ec.fieldContext_ManagedResource_isImported(ctx, field) + case "kind": + return ec.fieldContext_ManagedResource_kind(ctx, field) + case "lastUpdatedBy": + return ec.fieldContext_ManagedResource_lastUpdatedBy(ctx, field) + case "managedServiceName": + return ec.fieldContext_ManagedResource_managedServiceName(ctx, field) + case "markedForDeletion": + return ec.fieldContext_ManagedResource_markedForDeletion(ctx, field) + case "metadata": + return ec.fieldContext_ManagedResource_metadata(ctx, field) + case "mresRef": + return ec.fieldContext_ManagedResource_mresRef(ctx, field) + case "recordVersion": + return ec.fieldContext_ManagedResource_recordVersion(ctx, field) + case "spec": + return ec.fieldContext_ManagedResource_spec(ctx, field) + case "status": + return ec.fieldContext_ManagedResource_status(ctx, field) + case "syncedOutputSecretRef": + return ec.fieldContext_ManagedResource_syncedOutputSecretRef(ctx, field) + case "syncStatus": + return ec.fieldContext_ManagedResource_syncStatus(ctx, field) + case "updateTime": + return ec.fieldContext_ManagedResource_updateTime(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ManagedResource", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_core_importManagedResource_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + func (ec *executionContext) _Mutation_core_updateManagedResource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { fc, err := ec.fieldContext_Mutation_core_updateManagedResource(ctx, field) if err != nil { @@ -28373,14 +28723,20 @@ func (ec *executionContext) fieldContext_Mutation_core_updateManagedResource(ctx return ec.fieldContext_ManagedResource_environmentName(ctx, field) case "id": return ec.fieldContext_ManagedResource_id(ctx, field) + case "isImported": + return ec.fieldContext_ManagedResource_isImported(ctx, field) case "kind": return ec.fieldContext_ManagedResource_kind(ctx, field) case "lastUpdatedBy": return ec.fieldContext_ManagedResource_lastUpdatedBy(ctx, field) + case "managedServiceName": + return ec.fieldContext_ManagedResource_managedServiceName(ctx, field) case "markedForDeletion": return ec.fieldContext_ManagedResource_markedForDeletion(ctx, field) case "metadata": return ec.fieldContext_ManagedResource_metadata(ctx, field) + case "mresRef": + return ec.fieldContext_ManagedResource_mresRef(ctx, field) case "recordVersion": return ec.fieldContext_ManagedResource_recordVersion(ctx, field) case "spec": @@ -32024,14 +32380,20 @@ func (ec *executionContext) fieldContext_Query_core_getManagedResource(ctx conte return ec.fieldContext_ManagedResource_environmentName(ctx, field) case "id": return ec.fieldContext_ManagedResource_id(ctx, field) + case "isImported": + return ec.fieldContext_ManagedResource_isImported(ctx, field) case "kind": return ec.fieldContext_ManagedResource_kind(ctx, field) case "lastUpdatedBy": return ec.fieldContext_ManagedResource_lastUpdatedBy(ctx, field) + case "managedServiceName": + return ec.fieldContext_ManagedResource_managedServiceName(ctx, field) case "markedForDeletion": return ec.fieldContext_ManagedResource_markedForDeletion(ctx, field) case "metadata": return ec.fieldContext_ManagedResource_metadata(ctx, field) + case "mresRef": + return ec.fieldContext_ManagedResource_mresRef(ctx, field) case "recordVersion": return ec.fieldContext_ManagedResource_recordVersion(ctx, field) case "spec": @@ -45629,6 +45991,11 @@ func (ec *executionContext) _ManagedResource(ctx context.Context, sel ast.Select if out.Values[i] == graphql.Null { atomic.AddUint32(&out.Invalids, 1) } + case "isImported": + out.Values[i] = ec._ManagedResource_isImported(ctx, field, obj) + if out.Values[i] == graphql.Null { + atomic.AddUint32(&out.Invalids, 1) + } case "kind": out.Values[i] = ec._ManagedResource_kind(ctx, field, obj) case "lastUpdatedBy": @@ -45636,10 +46003,20 @@ func (ec *executionContext) _ManagedResource(ctx context.Context, sel ast.Select if out.Values[i] == graphql.Null { atomic.AddUint32(&out.Invalids, 1) } + case "managedServiceName": + out.Values[i] = ec._ManagedResource_managedServiceName(ctx, field, obj) + if out.Values[i] == graphql.Null { + atomic.AddUint32(&out.Invalids, 1) + } case "markedForDeletion": out.Values[i] = ec._ManagedResource_markedForDeletion(ctx, field, obj) case "metadata": out.Values[i] = ec._ManagedResource_metadata(ctx, field, obj) + case "mresRef": + out.Values[i] = ec._ManagedResource_mresRef(ctx, field, obj) + if out.Values[i] == graphql.Null { + atomic.AddUint32(&out.Invalids, 1) + } case "recordVersion": out.Values[i] = ec._ManagedResource_recordVersion(ctx, field, obj) if out.Values[i] == graphql.Null { @@ -46340,6 +46717,10 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { return ec._Mutation_core_createManagedResource(ctx, field) }) + case "core_importManagedResource": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_core_importManagedResource(ctx, field) + }) case "core_updateManagedResource": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { return ec._Mutation_core_updateManagedResource(ctx, field) @@ -50281,7 +50662,7 @@ func (ec *executionContext) marshalNfederation__Scope2ᚕᚕstringᚄ(ctx contex return ret } -func (ec *executionContext) unmarshalOAny2interface(ctx context.Context, v interface{}) (any, error) { +func (ec *executionContext) unmarshalOAny2interface(ctx context.Context, v interface{}) (interface{}, error) { if v == nil { return nil, nil } @@ -50289,7 +50670,7 @@ func (ec *executionContext) unmarshalOAny2interface(ctx context.Context, v inter return res, graphql.ErrorOnPath(ctx, err) } -func (ec *executionContext) marshalOAny2interface(ctx context.Context, sel ast.SelectionSet, v any) graphql.Marshaler { +func (ec *executionContext) marshalOAny2interface(ctx context.Context, sel ast.SelectionSet, v interface{}) graphql.Marshaler { if v == nil { return graphql.Null } diff --git a/apps/console/internal/app/graph/schema.graphqls b/apps/console/internal/app/graph/schema.graphqls index 1f0421e62..e84b137a8 100644 --- a/apps/console/internal/app/graph/schema.graphqls +++ b/apps/console/internal/app/graph/schema.graphqls @@ -178,7 +178,8 @@ type Mutation { core_updateRouter(envName: String!, router: RouterIn!): Router @isLoggedInAndVerified @hasAccount core_deleteRouter(envName: String!, routerName: String!): Boolean! @isLoggedInAndVerified @hasAccount - core_createManagedResource(envName: String!, mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount + core_createManagedResource(envName: String, msvcName: String! ,mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount + core_importManagedResource(envName: String!, msvcName: String! ,mresName: String!): ManagedResource @isLoggedInAndVerified @hasAccount core_updateManagedResource(envName: String!, mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount core_deleteManagedResource(envName: String!, mresName: String!): Boolean! @isLoggedInAndVerified @hasAccount diff --git a/apps/console/internal/app/graph/schema.resolvers.go b/apps/console/internal/app/graph/schema.resolvers.go index 584b428f6..8a887f95c 100644 --- a/apps/console/internal/app/graph/schema.resolvers.go +++ b/apps/console/internal/app/graph/schema.resolvers.go @@ -7,6 +7,7 @@ package graph import ( "context" "fmt" + "github.com/kloudlite/api/pkg/errors" "github.com/kloudlite/api/apps/console/internal/app/graph/generated" @@ -16,7 +17,7 @@ import ( fn "github.com/kloudlite/api/pkg/functions" "github.com/kloudlite/api/pkg/repos" v11 "github.com/kloudlite/operator/apis/crds/v1" - "github.com/kloudlite/operator/apis/wireguard/v1" + v1 "github.com/kloudlite/operator/apis/wireguard/v1" ) // Build is the resolver for the build field. @@ -283,12 +284,21 @@ func (r *mutationResolver) CoreDeleteRouter(ctx context.Context, envName string, } // CoreCreateManagedResource is the resolver for the core_createManagedResource field. -func (r *mutationResolver) CoreCreateManagedResource(ctx context.Context, envName string, mres entities.ManagedResource) (*entities.ManagedResource, error) { +func (r *mutationResolver) CoreCreateManagedResource(ctx context.Context, envName *string, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) { + cc, err := toConsoleContext(ctx) + if err != nil { + return nil, errors.NewE(err) + } + return r.Domain.CreateManagedResource(cc, msvcName, mres) +} + +// CoreImportManagedResource is the resolver for the core_importManagedResource field. +func (r *mutationResolver) CoreImportManagedResource(ctx context.Context, envName string, msvcName string, mresName string) (*entities.ManagedResource, error) { cc, err := toConsoleContext(ctx) if err != nil { return nil, errors.NewE(err) } - return r.Domain.CreateManagedResource(newResourceContext(cc, envName), mres) + return r.Domain.ImportManagedResource(newResourceContext(cc, envName), msvcName, mresName) } // CoreUpdateManagedResource is the resolver for the core_updateManagedResource field. diff --git a/apps/console/internal/app/graph/struct-to-graphql/managedresource.graphqls b/apps/console/internal/app/graph/struct-to-graphql/managedresource.graphqls index 57a85b5f5..9737e0d36 100644 --- a/apps/console/internal/app/graph/struct-to-graphql/managedresource.graphqls +++ b/apps/console/internal/app/graph/struct-to-graphql/managedresource.graphqls @@ -7,10 +7,13 @@ type ManagedResource @shareable { enabled: Boolean environmentName: String! id: ID! + isImported: Boolean! kind: String lastUpdatedBy: Github__com___kloudlite___api___common__CreatedOrUpdatedBy! + managedServiceName: String! markedForDeletion: Boolean metadata: Metadata @goField(name: "objectMeta") + mresRef: String! recordVersion: Int! spec: Github__com___kloudlite___operator___apis___crds___v1__ManagedResourceSpec! status: Github__com___kloudlite___operator___pkg___operator__Status diff --git a/apps/console/internal/domain/api.go b/apps/console/internal/domain/api.go index 9608ade49..9f4cce0d6 100644 --- a/apps/console/internal/domain/api.go +++ b/apps/console/internal/domain/api.go @@ -206,7 +206,8 @@ type Domain interface { GetManagedResourceOutputKeys(ctx ResourceContext, name string) ([]string, error) GetManagedResourceOutputKVs(ctx ResourceContext, keyrefs []ManagedResourceKeyRef) ([]*ManagedResourceKeyValueRef, error) - CreateManagedResource(ctx ResourceContext, mres entities.ManagedResource) (*entities.ManagedResource, error) + CreateManagedResource(ctx ConsoleContext, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) + ImportManagedResource(ctx ResourceContext, msvcName string, mresName string) (*entities.ManagedResource, error) UpdateManagedResource(ctx ResourceContext, mres entities.ManagedResource) (*entities.ManagedResource, error) DeleteManagedResource(ctx ResourceContext, name string) error diff --git a/apps/console/internal/domain/environment.go b/apps/console/internal/domain/environment.go index ffd5641b5..8cf3e2d77 100644 --- a/apps/console/internal/domain/environment.go +++ b/apps/console/internal/domain/environment.go @@ -327,13 +327,13 @@ func (d *domain) CloneEnvironment(ctx ConsoleContext, sourceEnvName string, dest if err != nil { return nil, errors.NewE(err) } - managedResources, err := d.mresRepo.Find(ctx, repos.Query{ - Filter: filters, - Sort: nil, - }) - if err != nil { - return nil, errors.NewE(err) - } + // managedResources, err := d.mresRepo.Find(ctx, repos.Query{ + // Filter: filters, + // Sort: nil, + // }) + // if err != nil { + // return nil, errors.NewE(err) + // } resourceMetadata := func(dn string) common.ResourceMetadata { return common.ResourceMetadata{ @@ -423,22 +423,22 @@ func (d *domain) CloneEnvironment(ctx ConsoleContext, sourceEnvName string, dest } } - for i := range managedResources { - spec := managedResources[i].Spec - if _, err := d.createAndApplyManagedResource(resCtx, &entities.ManagedResource{ - ManagedResource: crdsv1.ManagedResource{ - TypeMeta: managedResources[i].TypeMeta, - ObjectMeta: objectMeta(managedResources[i].ObjectMeta, destEnv.Spec.TargetNamespace), - Spec: spec, - Enabled: managedResources[i].Enabled, - }, - AccountName: ctx.AccountName, - EnvironmentName: destEnv.Name, - ResourceMetadata: resourceMetadata(managedResources[i].DisplayName), - }); err != nil { - return nil, err - } - } + // for i := range managedResources { + // spec := managedResources[i].Spec + // if _, err := d.createAndApplyManagedResource(resCtx, &entities.ManagedResource{ + // ManagedResource: crdsv1.ManagedResource{ + // TypeMeta: managedResources[i].TypeMeta, + // ObjectMeta: objectMeta(managedResources[i].ObjectMeta, destEnv.Spec.TargetNamespace), + // Spec: spec, + // Enabled: managedResources[i].Enabled, + // }, + // AccountName: ctx.AccountName, + // EnvironmentName: destEnv.Name, + // ResourceMetadata: resourceMetadata(managedResources[i].DisplayName), + // }); err != nil { + // return nil, err + // } + // } if err := d.syncImagePullSecretsToEnvironment(ctx, destinationEnvName); err != nil { return nil, err diff --git a/apps/console/internal/domain/mres.go b/apps/console/internal/domain/mres.go index 7fe1397e1..0f36cd9f0 100644 --- a/apps/console/internal/domain/mres.go +++ b/apps/console/internal/domain/mres.go @@ -7,11 +7,12 @@ import ( fc "github.com/kloudlite/api/apps/console/internal/entities/field-constants" "github.com/kloudlite/api/common" "github.com/kloudlite/api/common/fields" + "github.com/kloudlite/api/grpc-interfaces/infra" "github.com/kloudlite/api/pkg/errors" + fn "github.com/kloudlite/api/pkg/functions" "github.com/kloudlite/api/pkg/repos" t "github.com/kloudlite/api/pkg/types" "github.com/kloudlite/operator/operators/resource-watcher/types" - fn "github.com/kloudlite/operator/pkg/functions" ) // query @@ -25,6 +26,16 @@ func (d *domain) ListManagedResources(ctx ResourceContext, search map[string]rep return d.mresRepo.FindPaginated(ctx, d.mresRepo.MergeMatchFilters(filters, search), pq) } +func (d *domain) listImportedMres(ctx ResourceContext, mresName string) ([]*entities.ManagedResource, error) { + + filter := repos.Filter{ + fields.AccountName: ctx.AccountName, + "mresRef": mresName, + } + + return d.mresRepo.Find(ctx, repos.Query{Filter: filter}) +} + func (d *domain) findMRes(ctx ResourceContext, name string) (*entities.ManagedResource, error) { mres, err := d.mresRepo.FindOne( ctx, @@ -121,8 +132,17 @@ func (d *domain) GetManagedResourceOutputKeys(ctx ResourceContext, name string) // mutations -func (d *domain) CreateManagedResource(ctx ResourceContext, mres entities.ManagedResource) (*entities.ManagedResource, error) { - if err := d.canMutateResourcesInEnvironment(ctx); err != nil { +func (d *domain) CreateManagedResource(ctx ConsoleContext, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) { + + msvcOut, err := d.infraClient.GetClusterManagedService(ctx, &infra.GetClusterManagedServiceIn{ + UserId: string(ctx.UserId), + UserName: ctx.UserName, + UserEmail: ctx.UserEmail, + AccountName: ctx.AccountName, + MsvcName: msvcName, + }) + + if err != nil { return nil, errors.NewE(err) } @@ -130,12 +150,7 @@ func (d *domain) CreateManagedResource(ctx ResourceContext, mres entities.Manage return nil, errors.New(".spec.resourceTemplate.apiVersion, and .spec.resourceTemplate.kind must be set") } - env, err := d.findEnvironment(ctx.ConsoleContext, ctx.EnvironmentName) - if err != nil { - return nil, errors.NewE(err) - } - - mres.Namespace = env.Spec.TargetNamespace + mres.Namespace = msvcOut.TargetNamespace mres.EnsureGVK() if err := d.k8sClient.ValidateObject(ctx, &mres.ManagedResource); err != nil { @@ -152,9 +167,46 @@ func (d *domain) CreateManagedResource(ctx ResourceContext, mres entities.Manage mres.LastUpdatedBy = mres.CreatedBy mres.AccountName = ctx.AccountName - mres.EnvironmentName = ctx.EnvironmentName + mres.EnvironmentName = "" + mres.ManagedServiceName = msvcName + mres.IsImported = false - return d.createAndApplyManagedResource(ctx, &mres) + return d.createAndApplyManagedResource(ctx, msvcOut.ClusterName, &mres) +} + +func (d *domain) ImportManagedResource(ctx ResourceContext, msvcName string, mresName string) (*entities.ManagedResource, error) { + + exMres, err := d.findMRes(ctx, mresName) + if err != nil { + return nil, errors.NewE(err) + } + + exMres.EnsureGVK() + if err := d.k8sClient.ValidateObject(ctx, exMres); err != nil { + return nil, errors.NewE(err) + } + + fmt.Println("xmres", exMres.SyncedOutputSecretRef) + + exMres.IncrementRecordVersion() + + exMres.Id = "imp-" + exMres.Id + exMres.Name = "imp-" + exMres.Name + + exMres.CreatedBy = common.CreatedOrUpdatedBy{ + UserId: ctx.UserId, + UserName: ctx.UserName, + UserEmail: ctx.UserEmail, + } + exMres.LastUpdatedBy = exMres.CreatedBy + + exMres.AccountName = ctx.AccountName + exMres.EnvironmentName = ctx.EnvironmentName + exMres.ManagedServiceName = msvcName + exMres.IsImported = true + exMres.MresRef = mresName + + return d.importAndApplyManagedResourceSecret(ctx, exMres) } func genMresResourceName(envName string, mresName string) string { @@ -165,14 +217,11 @@ func genMresCredentialsSecretName(name string) string { return fmt.Sprintf("mres-%s-creds", name) } -func (d *domain) createAndApplyManagedResource(ctx ResourceContext, mres *entities.ManagedResource) (*entities.ManagedResource, error) { - mres.Spec.ResourceNamePrefix = fn.New(genMresResourceName(ctx.EnvironmentName, mres.Name)) +func (d *domain) createAndApplyManagedResource(ctx ConsoleContext, clusterName string, mres *entities.ManagedResource) (*entities.ManagedResource, error) { + // mres.Spec.ResourceNamePrefix = fn.New(genMresResourceName(ctx.EnvironmentName, mres.Name)) + mres.Spec.ResourceNamePrefix = nil mres.SyncStatus = t.GenSyncStatus(t.SyncActionApply, 0) - if _, err := d.upsertEnvironmentResourceMapping(ctx, mres); err != nil { - return nil, errors.NewE(err) - } - m, err := d.mresRepo.Create(ctx, mres) if err != nil { if d.mresRepo.ErrAlreadyExists(err) { @@ -182,15 +231,60 @@ func (d *domain) createAndApplyManagedResource(ctx ResourceContext, mres *entiti return nil, errors.NewE(err) } - d.resourceEventPublisher.PublishResourceEvent(ctx, entities.ResourceTypeManagedResource, m.Name, PublishAdd) + d.resourceEventPublisher.PublishConsoleEvent(ctx, entities.ResourceTypeManagedResource, m.Name, PublishAdd) - if err := d.applyK8sResource(ctx, ctx.EnvironmentName, &m.ManagedResource, m.RecordVersion); err != nil { + if err := d.applyK8sResourceOnCluster(ctx, clusterName, &m.ManagedResource, m.RecordVersion); err != nil { return m, errors.NewE(err) } return m, nil } +func (d *domain) importAndApplyManagedResourceSecret(ctx ResourceContext, mres *entities.ManagedResource) (*entities.ManagedResource, error) { + mres.Spec.ResourceNamePrefix = fn.New(genMresResourceName(ctx.EnvironmentName, mres.Name)) + mres.SyncStatus = t.GenSyncStatus(t.SyncActionApply, 0) + fmt.Println("env", ctx.EnvironmentName) + mres.SyncedOutputSecretRef.Namespace = d.getEnvironmentTargetNamespace(ctx.EnvironmentName) + + if _, err := d.upsertEnvironmentResourceMapping(ctx, mres); err != nil { + return nil, errors.NewE(err) + } + + nImpMres, err := d.mresRepo.Create(ctx, mres) + if err != nil { + return nil, errors.NewE(err) + } + + d.resourceEventPublisher.PublishResourceEvent(ctx, entities.ResourceTypeManagedResource, nImpMres.Name, PublishAdd) + + if err := d.applyK8sResource(ctx, ctx.EnvironmentName, nImpMres.SyncedOutputSecretRef, nImpMres.RecordVersion); err != nil { + return nImpMres, errors.NewE(err) + } + + return nImpMres, nil +} + +func (d *domain) applyMresSecretsToEnvironment(ctx ResourceContext, envName string, mres *entities.ManagedResource) error { + mres.SyncedOutputSecretRef.Namespace = d.getEnvironmentTargetNamespace(envName) + return d.applyK8sResource(ctx, envName, mres.SyncedOutputSecretRef, mres.RecordVersion) +} + +func (d *domain) applyMresSecrets(ctx ResourceContext, mres *entities.ManagedResource) error { + + listImportedMres, err := d.listImportedMres(ctx, mres.Name) + if err != nil { + return nil + } + + for _, mres := range listImportedMres { + err := d.applyMresSecretsToEnvironment(ctx, mres.EnvironmentName, mres) + if err != nil { + return errors.NewE(err) + } + } + return nil +} + func (d *domain) UpdateManagedResource(ctx ResourceContext, mres entities.ManagedResource) (*entities.ManagedResource, error) { if err := d.canReadResourcesInEnvironment(ctx); err != nil { return nil, errors.NewE(err) @@ -335,6 +429,11 @@ func (d *domain) OnManagedResourceUpdateMessage(ctx ResourceContext, mres entiti } } + err = d.applyMresSecrets(ctx, &mres) + if err != nil { + return errors.NewE(err) + } + return nil } diff --git a/apps/console/internal/entities/mres.go b/apps/console/internal/entities/mres.go index 827785d7b..c3524ac3b 100644 --- a/apps/console/internal/entities/mres.go +++ b/apps/console/internal/entities/mres.go @@ -14,13 +14,17 @@ type ManagedResource struct { repos.BaseEntity `json:",inline" graphql:"noinput"` crdsv1.ManagedResource `json:",inline"` - AccountName string `json:"accountName" graphql:"noinput"` - EnvironmentName string `json:"environmentName" graphql:"noinput"` + AccountName string `json:"accountName" graphql:"noinput"` + EnvironmentName string `json:"environmentName" graphql:"noinput"` + ManagedServiceName string `json:"managedServiceName" graphql:"noinput"` SyncedOutputSecretRef *corev1.Secret `json:"syncedOutputSecretRef" graphql:"noinput"` common.ResourceMetadata `json:",inline"` SyncStatus t.SyncStatus `json:"syncStatus" graphql:"noinput"` + + IsImported bool `json:"isImported" graphql:"noinput"` + MresRef string `json:"mresRef" graphql:"noinput"` } func (m *ManagedResource) GetDisplayName() string { diff --git a/apps/infra/internal/app/grpc-server.go b/apps/infra/internal/app/grpc-server.go index b98491cc0..0083a11e7 100644 --- a/apps/infra/internal/app/grpc-server.go +++ b/apps/infra/internal/app/grpc-server.go @@ -128,6 +128,29 @@ func (g *grpcServer) ClusterExists(ctx context.Context, in *infra.ClusterExistsI return &infra.ClusterExistsOut{Exists: true}, nil } +func (g *grpcServer) GetClusterManagedService(ctx context.Context, in *infra.GetClusterManagedServiceIn) (*infra.GetClusterManagedServiceOut, error) { + infraCtx := domain.InfraContext{ + Context: ctx, + UserId: repos.ID(in.UserId), + UserEmail: in.UserEmail, + UserName: in.UserName, + AccountName: in.AccountName, + } + msvc, err := g.d.GetClusterManagedService(infraCtx, in.MsvcName) + if err != nil { + return nil, errors.NewE(err) + } + + if msvc == nil { + return nil, errors.Newf("cluster managed service %s not found", in.MsvcName) + } + + return &infra.GetClusterManagedServiceOut{ + TargetNamespace: msvc.Spec.TargetNamespace, + ClusterName: msvc.ClusterName, + }, nil +} + func newGrpcServer(d domain.Domain, kcli k8s.Client) infra.InfraServer { return &grpcServer{ d: d, diff --git a/grpc-interfaces/container_registry/container-registry.pb.go b/grpc-interfaces/container_registry/container-registry.pb.go index 175101792..a8821afc3 100644 --- a/grpc-interfaces/container_registry/container-registry.pb.go +++ b/grpc-interfaces/container_registry/container-registry.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: container-registry.proto package container_registry diff --git a/grpc-interfaces/container_registry/container-registry_grpc.pb.go b/grpc-interfaces/container_registry/container-registry_grpc.pb.go index 2a4c83aa0..8fb22e4c6 100644 --- a/grpc-interfaces/container_registry/container-registry_grpc.pb.go +++ b/grpc-interfaces/container_registry/container-registry_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: container-registry.proto package container_registry diff --git a/grpc-interfaces/infra.proto b/grpc-interfaces/infra.proto index 7a7d00b2a..efaa0d0df 100644 --- a/grpc-interfaces/infra.proto +++ b/grpc-interfaces/infra.proto @@ -7,6 +7,7 @@ service Infra { rpc GetNodepool(GetNodepoolIn) returns (GetNodepoolOut); rpc ClusterExists(ClusterExistsIn) returns (ClusterExistsOut); rpc GetClusterKubeconfig(GetClusterIn) returns (GetClusterKubeconfigOut); + rpc GetClusterManagedService(GetClusterManagedServiceIn) returns (GetClusterManagedServiceOut); } message GetClusterIn { @@ -57,3 +58,17 @@ message ClusterExistsOut { message GetClusterKubeconfigOut { bytes kubeconfig = 1; } + +message GetClusterManagedServiceIn { + string userId = 1; + string userName = 2; + string userEmail = 3; + + string accountName = 4; + string msvcName = 5; +} + +message GetClusterManagedServiceOut { + string targetNamespace = 1; + string clusterName = 2; +} diff --git a/grpc-interfaces/infra/infra.pb.go b/grpc-interfaces/infra/infra.pb.go index 9438a1a62..44a7a93b1 100644 --- a/grpc-interfaces/infra/infra.pb.go +++ b/grpc-interfaces/infra/infra.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: infra.proto package infra @@ -485,6 +485,140 @@ func (x *GetClusterKubeconfigOut) GetKubeconfig() []byte { return nil } +type GetClusterManagedServiceIn struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` + UserName string `protobuf:"bytes,2,opt,name=userName,proto3" json:"userName,omitempty"` + UserEmail string `protobuf:"bytes,3,opt,name=userEmail,proto3" json:"userEmail,omitempty"` + AccountName string `protobuf:"bytes,4,opt,name=accountName,proto3" json:"accountName,omitempty"` + MsvcName string `protobuf:"bytes,5,opt,name=msvcName,proto3" json:"msvcName,omitempty"` +} + +func (x *GetClusterManagedServiceIn) Reset() { + *x = GetClusterManagedServiceIn{} + if protoimpl.UnsafeEnabled { + mi := &file_infra_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetClusterManagedServiceIn) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetClusterManagedServiceIn) ProtoMessage() {} + +func (x *GetClusterManagedServiceIn) ProtoReflect() protoreflect.Message { + mi := &file_infra_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetClusterManagedServiceIn.ProtoReflect.Descriptor instead. +func (*GetClusterManagedServiceIn) Descriptor() ([]byte, []int) { + return file_infra_proto_rawDescGZIP(), []int{7} +} + +func (x *GetClusterManagedServiceIn) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *GetClusterManagedServiceIn) GetUserName() string { + if x != nil { + return x.UserName + } + return "" +} + +func (x *GetClusterManagedServiceIn) GetUserEmail() string { + if x != nil { + return x.UserEmail + } + return "" +} + +func (x *GetClusterManagedServiceIn) GetAccountName() string { + if x != nil { + return x.AccountName + } + return "" +} + +func (x *GetClusterManagedServiceIn) GetMsvcName() string { + if x != nil { + return x.MsvcName + } + return "" +} + +type GetClusterManagedServiceOut struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TargetNamespace string `protobuf:"bytes,1,opt,name=targetNamespace,proto3" json:"targetNamespace,omitempty"` + ClusterName string `protobuf:"bytes,2,opt,name=clusterName,proto3" json:"clusterName,omitempty"` +} + +func (x *GetClusterManagedServiceOut) Reset() { + *x = GetClusterManagedServiceOut{} + if protoimpl.UnsafeEnabled { + mi := &file_infra_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetClusterManagedServiceOut) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetClusterManagedServiceOut) ProtoMessage() {} + +func (x *GetClusterManagedServiceOut) ProtoReflect() protoreflect.Message { + mi := &file_infra_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetClusterManagedServiceOut.ProtoReflect.Descriptor instead. +func (*GetClusterManagedServiceOut) Descriptor() ([]byte, []int) { + return file_infra_proto_rawDescGZIP(), []int{8} +} + +func (x *GetClusterManagedServiceOut) GetTargetNamespace() string { + if x != nil { + return x.TargetNamespace + } + return "" +} + +func (x *GetClusterManagedServiceOut) GetClusterName() string { + if x != nil { + return x.ClusterName + } + return "" +} + var File_infra_proto protoreflect.FileDescriptor var file_infra_proto_rawDesc = []byte{ @@ -545,22 +679,45 @@ var file_infra_proto_rawDesc = []byte{ 0x73, 0x74, 0x65, 0x72, 0x4b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x75, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x32, 0xdb, 0x01, 0x0a, 0x05, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x12, 0x2b, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x1a, 0x0e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x12, 0x2e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0x0e, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, - 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x1a, 0x0f, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, - 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x34, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x10, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x49, 0x6e, 0x1a, 0x11, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x12, 0x3f, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4b, 0x75, 0x62, 0x65, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0d, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x6e, 0x1a, 0x18, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x75, 0x74, 0x42, - 0x09, 0x5a, 0x07, 0x2e, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x67, 0x22, 0xac, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, + 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x73, 0x76, 0x63, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x73, 0x76, 0x63, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0x69, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x75, 0x74, 0x12, + 0x28, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x32, 0xb2, 0x02, 0x0a, 0x05, + 0x49, 0x6e, 0x66, 0x72, 0x61, 0x12, 0x2b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x6e, 0x1a, 0x0e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4f, + 0x75, 0x74, 0x12, 0x2e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x70, 0x6f, 0x6f, + 0x6c, 0x12, 0x0e, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x49, + 0x6e, 0x1a, 0x0f, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x4f, + 0x75, 0x74, 0x12, 0x34, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x12, 0x10, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x49, 0x6e, 0x1a, 0x11, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, + 0x78, 0x69, 0x73, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x12, 0x3f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x0d, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x1a, + 0x18, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4b, 0x75, 0x62, 0x65, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x75, 0x74, 0x12, 0x55, 0x0a, 0x18, 0x47, 0x65, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1b, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x6e, 0x1a, 0x1c, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x75, 0x74, + 0x42, 0x09, 0x5a, 0x07, 0x2e, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -575,27 +732,31 @@ func file_infra_proto_rawDescGZIP() []byte { return file_infra_proto_rawDescData } -var file_infra_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_infra_proto_msgTypes = make([]protoimpl.MessageInfo, 9) var file_infra_proto_goTypes = []interface{}{ - (*GetClusterIn)(nil), // 0: GetClusterIn - (*GetClusterOut)(nil), // 1: GetClusterOut - (*GetNodepoolIn)(nil), // 2: GetNodepoolIn - (*GetNodepoolOut)(nil), // 3: GetNodepoolOut - (*ClusterExistsIn)(nil), // 4: ClusterExistsIn - (*ClusterExistsOut)(nil), // 5: ClusterExistsOut - (*GetClusterKubeconfigOut)(nil), // 6: GetClusterKubeconfigOut + (*GetClusterIn)(nil), // 0: GetClusterIn + (*GetClusterOut)(nil), // 1: GetClusterOut + (*GetNodepoolIn)(nil), // 2: GetNodepoolIn + (*GetNodepoolOut)(nil), // 3: GetNodepoolOut + (*ClusterExistsIn)(nil), // 4: ClusterExistsIn + (*ClusterExistsOut)(nil), // 5: ClusterExistsOut + (*GetClusterKubeconfigOut)(nil), // 6: GetClusterKubeconfigOut + (*GetClusterManagedServiceIn)(nil), // 7: GetClusterManagedServiceIn + (*GetClusterManagedServiceOut)(nil), // 8: GetClusterManagedServiceOut } var file_infra_proto_depIdxs = []int32{ 0, // 0: Infra.GetCluster:input_type -> GetClusterIn 2, // 1: Infra.GetNodepool:input_type -> GetNodepoolIn 4, // 2: Infra.ClusterExists:input_type -> ClusterExistsIn 0, // 3: Infra.GetClusterKubeconfig:input_type -> GetClusterIn - 1, // 4: Infra.GetCluster:output_type -> GetClusterOut - 3, // 5: Infra.GetNodepool:output_type -> GetNodepoolOut - 5, // 6: Infra.ClusterExists:output_type -> ClusterExistsOut - 6, // 7: Infra.GetClusterKubeconfig:output_type -> GetClusterKubeconfigOut - 4, // [4:8] is the sub-list for method output_type - 0, // [0:4] is the sub-list for method input_type + 7, // 4: Infra.GetClusterManagedService:input_type -> GetClusterManagedServiceIn + 1, // 5: Infra.GetCluster:output_type -> GetClusterOut + 3, // 6: Infra.GetNodepool:output_type -> GetNodepoolOut + 5, // 7: Infra.ClusterExists:output_type -> ClusterExistsOut + 6, // 8: Infra.GetClusterKubeconfig:output_type -> GetClusterKubeconfigOut + 8, // 9: Infra.GetClusterManagedService:output_type -> GetClusterManagedServiceOut + 5, // [5:10] is the sub-list for method output_type + 0, // [0:5] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -691,6 +852,30 @@ func file_infra_proto_init() { return nil } } + file_infra_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetClusterManagedServiceIn); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_infra_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetClusterManagedServiceOut); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -698,7 +883,7 @@ func file_infra_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_infra_proto_rawDesc, NumEnums: 0, - NumMessages: 7, + NumMessages: 9, NumExtensions: 0, NumServices: 1, }, diff --git a/grpc-interfaces/infra/infra_grpc.pb.go b/grpc-interfaces/infra/infra_grpc.pb.go index 3dafa3396..8037fd5d3 100644 --- a/grpc-interfaces/infra/infra_grpc.pb.go +++ b/grpc-interfaces/infra/infra_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: infra.proto package infra @@ -19,10 +19,11 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - Infra_GetCluster_FullMethodName = "/Infra/GetCluster" - Infra_GetNodepool_FullMethodName = "/Infra/GetNodepool" - Infra_ClusterExists_FullMethodName = "/Infra/ClusterExists" - Infra_GetClusterKubeconfig_FullMethodName = "/Infra/GetClusterKubeconfig" + Infra_GetCluster_FullMethodName = "/Infra/GetCluster" + Infra_GetNodepool_FullMethodName = "/Infra/GetNodepool" + Infra_ClusterExists_FullMethodName = "/Infra/ClusterExists" + Infra_GetClusterKubeconfig_FullMethodName = "/Infra/GetClusterKubeconfig" + Infra_GetClusterManagedService_FullMethodName = "/Infra/GetClusterManagedService" ) // InfraClient is the client API for Infra service. @@ -33,6 +34,7 @@ type InfraClient interface { GetNodepool(ctx context.Context, in *GetNodepoolIn, opts ...grpc.CallOption) (*GetNodepoolOut, error) ClusterExists(ctx context.Context, in *ClusterExistsIn, opts ...grpc.CallOption) (*ClusterExistsOut, error) GetClusterKubeconfig(ctx context.Context, in *GetClusterIn, opts ...grpc.CallOption) (*GetClusterKubeconfigOut, error) + GetClusterManagedService(ctx context.Context, in *GetClusterManagedServiceIn, opts ...grpc.CallOption) (*GetClusterManagedServiceOut, error) } type infraClient struct { @@ -79,6 +81,15 @@ func (c *infraClient) GetClusterKubeconfig(ctx context.Context, in *GetClusterIn return out, nil } +func (c *infraClient) GetClusterManagedService(ctx context.Context, in *GetClusterManagedServiceIn, opts ...grpc.CallOption) (*GetClusterManagedServiceOut, error) { + out := new(GetClusterManagedServiceOut) + err := c.cc.Invoke(ctx, Infra_GetClusterManagedService_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // InfraServer is the server API for Infra service. // All implementations must embed UnimplementedInfraServer // for forward compatibility @@ -87,6 +98,7 @@ type InfraServer interface { GetNodepool(context.Context, *GetNodepoolIn) (*GetNodepoolOut, error) ClusterExists(context.Context, *ClusterExistsIn) (*ClusterExistsOut, error) GetClusterKubeconfig(context.Context, *GetClusterIn) (*GetClusterKubeconfigOut, error) + GetClusterManagedService(context.Context, *GetClusterManagedServiceIn) (*GetClusterManagedServiceOut, error) mustEmbedUnimplementedInfraServer() } @@ -106,6 +118,9 @@ func (UnimplementedInfraServer) ClusterExists(context.Context, *ClusterExistsIn) func (UnimplementedInfraServer) GetClusterKubeconfig(context.Context, *GetClusterIn) (*GetClusterKubeconfigOut, error) { return nil, status.Errorf(codes.Unimplemented, "method GetClusterKubeconfig not implemented") } +func (UnimplementedInfraServer) GetClusterManagedService(context.Context, *GetClusterManagedServiceIn) (*GetClusterManagedServiceOut, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetClusterManagedService not implemented") +} func (UnimplementedInfraServer) mustEmbedUnimplementedInfraServer() {} // UnsafeInfraServer may be embedded to opt out of forward compatibility for this service. @@ -191,6 +206,24 @@ func _Infra_GetClusterKubeconfig_Handler(srv interface{}, ctx context.Context, d return interceptor(ctx, in, info, handler) } +func _Infra_GetClusterManagedService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetClusterManagedServiceIn) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InfraServer).GetClusterManagedService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Infra_GetClusterManagedService_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InfraServer).GetClusterManagedService(ctx, req.(*GetClusterManagedServiceIn)) + } + return interceptor(ctx, in, info, handler) +} + // Infra_ServiceDesc is the grpc.ServiceDesc for Infra service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -214,6 +247,10 @@ var Infra_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetClusterKubeconfig", Handler: _Infra_GetClusterKubeconfig_Handler, }, + { + MethodName: "GetClusterManagedService", + Handler: _Infra_GetClusterManagedService_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "infra.proto", diff --git a/grpc-interfaces/kloudlite.io/rpc/accounts/accounts.pb.go b/grpc-interfaces/kloudlite.io/rpc/accounts/accounts.pb.go index e1536d1e0..c6d644e94 100644 --- a/grpc-interfaces/kloudlite.io/rpc/accounts/accounts.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/accounts/accounts.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: accounts.proto package accounts diff --git a/grpc-interfaces/kloudlite.io/rpc/accounts/accounts_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/accounts/accounts_grpc.pb.go index 7760e10f8..a4de4119b 100644 --- a/grpc-interfaces/kloudlite.io/rpc/accounts/accounts_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/accounts/accounts_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: accounts.proto package accounts diff --git a/grpc-interfaces/kloudlite.io/rpc/agent/kubeagent.pb.go b/grpc-interfaces/kloudlite.io/rpc/agent/kubeagent.pb.go index 4674a6ef7..7c009bf62 100644 --- a/grpc-interfaces/kloudlite.io/rpc/agent/kubeagent.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/agent/kubeagent.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: kubeagent.proto package agent diff --git a/grpc-interfaces/kloudlite.io/rpc/agent/kubeagent_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/agent/kubeagent_grpc.pb.go index 3df005d82..3725a40fd 100644 --- a/grpc-interfaces/kloudlite.io/rpc/agent/kubeagent_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/agent/kubeagent_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: kubeagent.proto package agent diff --git a/grpc-interfaces/kloudlite.io/rpc/auth/auth.pb.go b/grpc-interfaces/kloudlite.io/rpc/auth/auth.pb.go index f0e5c0269..89b4dc39e 100644 --- a/grpc-interfaces/kloudlite.io/rpc/auth/auth.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/auth/auth.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: auth.proto package auth diff --git a/grpc-interfaces/kloudlite.io/rpc/auth/auth_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/auth/auth_grpc.pb.go index 1499fd687..af9c72f75 100644 --- a/grpc-interfaces/kloudlite.io/rpc/auth/auth_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/auth/auth_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: auth.proto package auth diff --git a/grpc-interfaces/kloudlite.io/rpc/ci/ci.pb.go b/grpc-interfaces/kloudlite.io/rpc/ci/ci.pb.go index 025bc59cc..62616d755 100644 --- a/grpc-interfaces/kloudlite.io/rpc/ci/ci.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/ci/ci.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: ci.proto package ci diff --git a/grpc-interfaces/kloudlite.io/rpc/ci/ci_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/ci/ci_grpc.pb.go index 233961e9e..0aedd94e5 100644 --- a/grpc-interfaces/kloudlite.io/rpc/ci/ci_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/ci/ci_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: ci.proto package ci diff --git a/grpc-interfaces/kloudlite.io/rpc/comms/comms.pb.go b/grpc-interfaces/kloudlite.io/rpc/comms/comms.pb.go index cfec65dd9..ec9b83f84 100644 --- a/grpc-interfaces/kloudlite.io/rpc/comms/comms.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/comms/comms.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: comms.proto package comms diff --git a/grpc-interfaces/kloudlite.io/rpc/comms/comms_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/comms/comms_grpc.pb.go index 72c1ccbe9..0067d7c6f 100644 --- a/grpc-interfaces/kloudlite.io/rpc/comms/comms_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/comms/comms_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: comms.proto package comms diff --git a/grpc-interfaces/kloudlite.io/rpc/console/console.pb.go b/grpc-interfaces/kloudlite.io/rpc/console/console.pb.go index 35af46990..ca479337d 100644 --- a/grpc-interfaces/kloudlite.io/rpc/console/console.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/console/console.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: console.proto package console diff --git a/grpc-interfaces/kloudlite.io/rpc/console/console_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/console/console_grpc.pb.go index b03f53d33..0f934663e 100644 --- a/grpc-interfaces/kloudlite.io/rpc/console/console_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/console/console_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: console.proto package console diff --git a/grpc-interfaces/kloudlite.io/rpc/dns/dns.pb.go b/grpc-interfaces/kloudlite.io/rpc/dns/dns.pb.go index f2f91c9c6..9fc1dfbb7 100644 --- a/grpc-interfaces/kloudlite.io/rpc/dns/dns.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/dns/dns.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: dns.proto package dns diff --git a/grpc-interfaces/kloudlite.io/rpc/dns/dns_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/dns/dns_grpc.pb.go index 12acea557..acc392189 100644 --- a/grpc-interfaces/kloudlite.io/rpc/dns/dns_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/dns/dns_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: dns.proto package dns diff --git a/grpc-interfaces/kloudlite.io/rpc/finance/finance-infra.pb.go b/grpc-interfaces/kloudlite.io/rpc/finance/finance-infra.pb.go index b96664c87..ecc2b8d6f 100644 --- a/grpc-interfaces/kloudlite.io/rpc/finance/finance-infra.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/finance/finance-infra.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: finance-infra.proto package finance diff --git a/grpc-interfaces/kloudlite.io/rpc/finance/finance-infra_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/finance/finance-infra_grpc.pb.go index cc270869b..4676aacbb 100644 --- a/grpc-interfaces/kloudlite.io/rpc/finance/finance-infra_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/finance/finance-infra_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: finance-infra.proto package finance diff --git a/grpc-interfaces/kloudlite.io/rpc/finance/finance.pb.go b/grpc-interfaces/kloudlite.io/rpc/finance/finance.pb.go index ed766b86c..7fc903ff5 100644 --- a/grpc-interfaces/kloudlite.io/rpc/finance/finance.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/finance/finance.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: finance.proto package finance diff --git a/grpc-interfaces/kloudlite.io/rpc/finance/finance_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/finance/finance_grpc.pb.go index 6d2911fc0..d8408dafc 100644 --- a/grpc-interfaces/kloudlite.io/rpc/finance/finance_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/finance/finance_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: finance.proto package finance diff --git a/grpc-interfaces/kloudlite.io/rpc/iam/iam.pb.go b/grpc-interfaces/kloudlite.io/rpc/iam/iam.pb.go index b713e006e..8dce9a886 100644 --- a/grpc-interfaces/kloudlite.io/rpc/iam/iam.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/iam/iam.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: iam.proto package iam diff --git a/grpc-interfaces/kloudlite.io/rpc/iam/iam_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/iam/iam_grpc.pb.go index cf37c6f23..2b6874922 100644 --- a/grpc-interfaces/kloudlite.io/rpc/iam/iam_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/iam/iam_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: iam.proto package iam diff --git a/grpc-interfaces/kloudlite.io/rpc/jseval/jseval.pb.go b/grpc-interfaces/kloudlite.io/rpc/jseval/jseval.pb.go index 31ae4803a..4f76eb62f 100644 --- a/grpc-interfaces/kloudlite.io/rpc/jseval/jseval.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/jseval/jseval.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: jseval.proto package jseval diff --git a/grpc-interfaces/kloudlite.io/rpc/jseval/jseval_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/jseval/jseval_grpc.pb.go index da41427c8..c94abaa7a 100644 --- a/grpc-interfaces/kloudlite.io/rpc/jseval/jseval_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/jseval/jseval_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: jseval.proto package jseval diff --git a/grpc-interfaces/kloudlite.io/rpc/message-office-internal/message-office-internal.pb.go b/grpc-interfaces/kloudlite.io/rpc/message-office-internal/message-office-internal.pb.go index ed7bfdfdf..932d8eccd 100644 --- a/grpc-interfaces/kloudlite.io/rpc/message-office-internal/message-office-internal.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/message-office-internal/message-office-internal.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.25.2 +// protoc-gen-go v1.32.0 +// protoc v5.26.1 // source: message-office-internal.proto package message_office_internal diff --git a/grpc-interfaces/kloudlite.io/rpc/message-office-internal/message-office-internal_grpc.pb.go b/grpc-interfaces/kloudlite.io/rpc/message-office-internal/message-office-internal_grpc.pb.go index c03f924a9..aee1c0ff5 100644 --- a/grpc-interfaces/kloudlite.io/rpc/message-office-internal/message-office-internal_grpc.pb.go +++ b/grpc-interfaces/kloudlite.io/rpc/message-office-internal/message-office-internal_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: message-office-internal.proto package message_office_internal From a593f7ada72c4a14abd376a5e914840695aaf7e2 Mon Sep 17 00:00:00 2001 From: Piyush Kumar Date: Thu, 30 May 2024 15:17:46 +0530 Subject: [PATCH 2/2] fix(console/managed resource): - refactor managed resource to create inside managed service - implement import managed resource inside environment --- .tools/nvim/__http__/console/mres.graphql.yml | 155 ++-- .../internal/app/graph/generated/generated.go | 759 +++++++++++++++--- .../internal/app/graph/resolver-utils.go | 4 + .../internal/app/graph/schema.graphqls | 19 +- .../internal/app/graph/schema.resolvers.go | 97 ++- .../managedresource.graphqls | 1 + .../internal/app/process-error-on-apply.go | 12 +- .../internal/app/process-resource-updates.go | 12 +- apps/console/internal/domain/api.go | 49 +- apps/console/internal/domain/domain.go | 25 +- apps/console/internal/domain/environment.go | 31 - apps/console/internal/domain/mres.go | 244 ++++-- .../field-constants/generated_constants.go | 3 + apps/console/internal/entities/mres.go | 1 + apps/iam/internal/app/action-role-binding.go | 7 + apps/iam/types/types.go | 7 + 16 files changed, 1078 insertions(+), 348 deletions(-) diff --git a/.tools/nvim/__http__/console/mres.graphql.yml b/.tools/nvim/__http__/console/mres.graphql.yml index cbc1ef564..e63469727 100644 --- a/.tools/nvim/__http__/console/mres.graphql.yml +++ b/.tools/nvim/__http__/console/mres.graphql.yml @@ -7,68 +7,51 @@ global: label: List Managed Resources query: |+ #graphql - query Core_listManagedResources($projectName: String!, $envName: String!) { - core_listManagedResources(projectName: $projectName, envName: $envName) { + query Core_listManagedResources($msvcName: String!) { + core_listManagedResources(msvcName: $msvcName) { edges { node { accountName - spec { - # resourceName - resourceTemplate { - msvcRef { - apiVersion - kind - name - namespace - } - } - } - status { - isReady - } - metadata { - annotations - } - syncStatus { - state - recordVersion - } + displayName + enabled + environmentName } } } } variables: - projectName: "{{.projectName}}" - envName: "{{.environmentName}}" + msvcName: "msvc-one" --- label: Create Managed Resource query: |+ #graphql - mutation Core_createManagedResource($projectName: String!, $envName: String!, $mres: ManagedResourceIn!) { - core_createManagedResource(projectName: $projectName, envName: $envName, mres: $mres) { + mutation Core_createManagedResource($msvcName: String!, $mres: ManagedResourceIn!) { + core_createManagedResource(msvcName: $msvcName, mres: $mres) { + id + apiVersion + accountName + mresRef spec { - # resourceName resourceTemplate { apiVersion kind msvcRef { - apiVersion - kind name namespace + clusterName } - spec } } } } variables: - projectName: "{{.projectName}}" - envName: "{{.environmentName}}" + # projectName: "{{.projectName}}" + # envName: "{{.environmentName}}" + msvcName: "msvc-one" mres: - displayName: "Test Managed Resource" + displayName: "test mres" metadata: - name: "{{.name}}" + name: "test-mres" spec: resourceTemplate: apiVersion: mongodb.msvc.kloudlite.io/v1 @@ -76,48 +59,24 @@ variables: msvcRef: apiVersion: mongodb.msvc.kloudlite.io/v1 kind: StandaloneService - name: sample - namespace: "{{.projectNamespace}}" + name: "msvc-one" + namespace: "cmsvc-msvc-one" + clusterName: "test-cluster1" spec: {} # resourceName: "sample" --- -label: Import Managed Resource +label: Get Managed resource query: |+ - mutation Core_importManagedResource($envName: String!, $msvcName: String!, $mresName: String!) { - core_importManagedResource(envName: $envName, msvcName: $msvcName, mresName: $mresName) { + query Core_getManagedResource($msvcName: String!, $name: String!) { + core_getManagedResource(msvcName: $msvcName, name: $name) { id - mresRef - accountName - isImported } } variables: - { - "envName": "test-env", - "msvcName": "test-msvc", - "mresName": "test-mres" - } - ---- - -label: Get ManagedService -query: |+ - query Core_getManagedResource($namespace: String!, $name: String!) { - core_getManagedResource(namespace: $namespace, name: $name) { - metadata { - name - } - kind - spec { - inputs - } - } - } -variables: - name: '{{.name}}' - namespace: '{{.namespace}}' + msvcName: 'msvc-one' + name: 'test-mres' --- @@ -157,6 +116,67 @@ variables: --- +label: Import Managed Resource +query: |+ + mutation Core_importManagedResource($envName: String!, $msvcName: String!, $mresName: String!) { + core_importManagedResource(envName: $envName, msvcName: $msvcName, mresName: $mresName) { + id + mresRef + accountName + isImported + } + } +variables: + { + "envName": "test-env", + "msvcName": "msvc-one", + "mresName": "test-mres" + } + +--- + +label: Delete Imported ManagedResource +query: |+ + mutation Core_deleteImportedManagedResource($envName: String!, $mresName: String!) { + core_deleteImportedManagedResource(envName: $envName, mresName: $mresName) + } +variables: + envName: 'test-env' + mresName: "test-mres" + +--- + +label: get Imported ManagedResource +query: |+ + query Core_getImportedManagedResource($envName: String!, $name: String!) { + core_getImportedManagedResource(envName: $envName, name: $name) { + id + } + } +variables: + envName: 'test-env' + name: "test-mres" + +--- + +label: List Imported ManagedResource +query: |+ + query Core_listImportedManagedResources($envName: String!) { + core_listImportedManagedResources(envName: $envName) { + totalCount + edges { + node { + environmentName + id + } + } + } + } +variables: + envName: 'test-env' + +--- + label: Get Managed Resource Output Keys query: |+ #graphql mutation Core_deleteManagedResource($projectName: String!, $envName: String!, $mresName: String!) { @@ -184,7 +204,6 @@ query: |+ #graphql variables: # projectName: "{{.projectName}}" # envName: "{{.envName}}" - projectName: "demo-project" # envName: "public-environment" projectName: "demo-project" envName: "private-environment" diff --git a/apps/console/internal/app/graph/generated/generated.go b/apps/console/internal/app/graph/generated/generated.go index 7fb72933c..f1500197d 100644 --- a/apps/console/internal/app/graph/generated/generated.go +++ b/apps/console/internal/app/graph/generated/generated.go @@ -634,6 +634,7 @@ type ComplexityRoot struct { ManagedResource struct { APIVersion func(childComplexity int) int AccountName func(childComplexity int) int + ClusterName func(childComplexity int) int CreatedBy func(childComplexity int) int CreationTime func(childComplexity int) int DisplayName func(childComplexity int) int @@ -696,41 +697,42 @@ type ComplexityRoot struct { } Mutation struct { - CoreCloneEnvironment func(childComplexity int, sourceEnvName string, destinationEnvName string, displayName string, environmentRoutingMode v1.EnvironmentRoutingMode) int - CoreCreateApp func(childComplexity int, envName string, app entities.App) int - CoreCreateConfig func(childComplexity int, envName string, config entities.Config) int - CoreCreateEnvironment func(childComplexity int, env entities.Environment) int - CoreCreateExternalApp func(childComplexity int, envName string, externalApp entities.ExternalApp) int - CoreCreateImagePullSecret func(childComplexity int, pullSecret entities.ImagePullSecret) int - CoreCreateManagedResource func(childComplexity int, envName *string, msvcName string, mres entities.ManagedResource) int - CoreCreateRouter func(childComplexity int, envName string, router entities.Router) int - CoreCreateSecret func(childComplexity int, envName string, secret entities.Secret) int - CoreCreateVPNDevice func(childComplexity int, vpnDevice entities.ConsoleVPNDevice) int - CoreDeleteApp func(childComplexity int, envName string, appName string) int - CoreDeleteConfig func(childComplexity int, envName string, configName string) int - CoreDeleteEnvironment func(childComplexity int, envName string) int - CoreDeleteExternalApp func(childComplexity int, envName string, externalAppName string) int - CoreDeleteImagePullSecret func(childComplexity int, name string) int - CoreDeleteManagedResource func(childComplexity int, envName string, mresName string) int - CoreDeleteRouter func(childComplexity int, envName string, routerName string) int - CoreDeleteSecret func(childComplexity int, envName string, secretName string) int - CoreDeleteVPNDevice func(childComplexity int, deviceName string) int - CoreImportManagedResource func(childComplexity int, envName string, msvcName string, mresName string) int - CoreInterceptApp func(childComplexity int, envName string, appname string, deviceName string, intercept bool, portMappings []*v1.AppInterceptPortMappings) int - CoreInterceptExternalApp func(childComplexity int, envName string, externalAppName string, deviceName string, intercept bool, portMappings []*v1.AppInterceptPortMappings) int - CoreUpdateApp func(childComplexity int, envName string, app entities.App) int - CoreUpdateConfig func(childComplexity int, envName string, config entities.Config) int - CoreUpdateEnvironment func(childComplexity int, env entities.Environment) int - CoreUpdateExternalApp func(childComplexity int, envName string, externalApp entities.ExternalApp) int - CoreUpdateImagePullSecret func(childComplexity int, pullSecret entities.ImagePullSecret) int - CoreUpdateManagedResource func(childComplexity int, envName string, mres entities.ManagedResource) int - CoreUpdateRouter func(childComplexity int, envName string, router entities.Router) int - CoreUpdateSecret func(childComplexity int, envName string, secret entities.Secret) int - CoreUpdateVPNDevice func(childComplexity int, vpnDevice entities.ConsoleVPNDevice) int - CoreUpdateVPNDeviceEnv func(childComplexity int, deviceName string, envName string) int - CoreUpdateVPNDevicePorts func(childComplexity int, deviceName string, ports []*v11.Port) int - CoreUpdateVpnClusterName func(childComplexity int, deviceName string, clusterName string) int - CoreUpdateVpnDeviceNs func(childComplexity int, deviceName string, ns string) int + CoreCloneEnvironment func(childComplexity int, sourceEnvName string, destinationEnvName string, displayName string, environmentRoutingMode v1.EnvironmentRoutingMode) int + CoreCreateApp func(childComplexity int, envName string, app entities.App) int + CoreCreateConfig func(childComplexity int, envName string, config entities.Config) int + CoreCreateEnvironment func(childComplexity int, env entities.Environment) int + CoreCreateExternalApp func(childComplexity int, envName string, externalApp entities.ExternalApp) int + CoreCreateImagePullSecret func(childComplexity int, pullSecret entities.ImagePullSecret) int + CoreCreateManagedResource func(childComplexity int, msvcName string, mres entities.ManagedResource) int + CoreCreateRouter func(childComplexity int, envName string, router entities.Router) int + CoreCreateSecret func(childComplexity int, envName string, secret entities.Secret) int + CoreCreateVPNDevice func(childComplexity int, vpnDevice entities.ConsoleVPNDevice) int + CoreDeleteApp func(childComplexity int, envName string, appName string) int + CoreDeleteConfig func(childComplexity int, envName string, configName string) int + CoreDeleteEnvironment func(childComplexity int, envName string) int + CoreDeleteExternalApp func(childComplexity int, envName string, externalAppName string) int + CoreDeleteImagePullSecret func(childComplexity int, name string) int + CoreDeleteImportedManagedResource func(childComplexity int, envName string, mresName string) int + CoreDeleteManagedResource func(childComplexity int, msvcName string, mresName string) int + CoreDeleteRouter func(childComplexity int, envName string, routerName string) int + CoreDeleteSecret func(childComplexity int, envName string, secretName string) int + CoreDeleteVPNDevice func(childComplexity int, deviceName string) int + CoreImportManagedResource func(childComplexity int, envName string, msvcName string, mresName string) int + CoreInterceptApp func(childComplexity int, envName string, appname string, deviceName string, intercept bool, portMappings []*v1.AppInterceptPortMappings) int + CoreInterceptExternalApp func(childComplexity int, envName string, externalAppName string, deviceName string, intercept bool, portMappings []*v1.AppInterceptPortMappings) int + CoreUpdateApp func(childComplexity int, envName string, app entities.App) int + CoreUpdateConfig func(childComplexity int, envName string, config entities.Config) int + CoreUpdateEnvironment func(childComplexity int, env entities.Environment) int + CoreUpdateExternalApp func(childComplexity int, envName string, externalApp entities.ExternalApp) int + CoreUpdateImagePullSecret func(childComplexity int, pullSecret entities.ImagePullSecret) int + CoreUpdateManagedResource func(childComplexity int, msvcName string, mres entities.ManagedResource) int + CoreUpdateRouter func(childComplexity int, envName string, router entities.Router) int + CoreUpdateSecret func(childComplexity int, envName string, secret entities.Secret) int + CoreUpdateVPNDevice func(childComplexity int, vpnDevice entities.ConsoleVPNDevice) int + CoreUpdateVPNDeviceEnv func(childComplexity int, deviceName string, envName string) int + CoreUpdateVPNDevicePorts func(childComplexity int, deviceName string, ports []*v11.Port) int + CoreUpdateVpnClusterName func(childComplexity int, deviceName string, clusterName string) int + CoreUpdateVpnDeviceNs func(childComplexity int, deviceName string, ns string) int } PageInfo struct { @@ -753,9 +755,10 @@ type ComplexityRoot struct { CoreGetEnvironment func(childComplexity int, name string) int CoreGetExternalApp func(childComplexity int, envName string, name string) int CoreGetImagePullSecret func(childComplexity int, name string) int - CoreGetManagedResouceOutputKeyValues func(childComplexity int, envName string, keyrefs []*domain.ManagedResourceKeyRef) int - CoreGetManagedResouceOutputKeys func(childComplexity int, envName string, name string) int - CoreGetManagedResource func(childComplexity int, envName string, name string) int + CoreGetImportedManagedResource func(childComplexity int, envName string, name string) int + CoreGetManagedResouceOutputKeyValues func(childComplexity int, msvcName string, keyrefs []*domain.ManagedResourceKeyRef) int + CoreGetManagedResouceOutputKeys func(childComplexity int, msvcName string, name string) int + CoreGetManagedResource func(childComplexity int, msvcName string, name string) int CoreGetRouter func(childComplexity int, envName string, name string) int CoreGetSecret func(childComplexity int, envName string, name string) int CoreGetSecretValues func(childComplexity int, envName string, queries []*domain.SecretKeyRef) int @@ -765,7 +768,8 @@ type ComplexityRoot struct { CoreListEnvironments func(childComplexity int, search *model.SearchEnvironments, pq *repos.CursorPagination) int CoreListExternalApps func(childComplexity int, envName string, search *model.SearchExternalApps, pq *repos.CursorPagination) int CoreListImagePullSecrets func(childComplexity int, search *model.SearchImagePullSecrets, pq *repos.CursorPagination) int - CoreListManagedResources func(childComplexity int, envName string, search *model.SearchManagedResources, pq *repos.CursorPagination) int + CoreListImportedManagedResources func(childComplexity int, envName string, search *model.SearchManagedResources, pq *repos.CursorPagination) int + CoreListManagedResources func(childComplexity int, msvcName string, search *model.SearchManagedResources, pq *repos.CursorPagination) int CoreListRouters func(childComplexity int, envName string, search *model.SearchRouters, pq *repos.CursorPagination) int CoreListSecrets func(childComplexity int, envName string, search *model.SearchSecrets, pq *repos.CursorPagination) int CoreListVPNDevices func(childComplexity int, search *model.CoreSearchVPNDevices, pq *repos.CursorPagination) int @@ -776,7 +780,7 @@ type ComplexityRoot struct { CoreResyncEnvironment func(childComplexity int, name string) int CoreResyncExternalApp func(childComplexity int, envName string, name string) int CoreResyncImagePullSecret func(childComplexity int, name string) int - CoreResyncManagedResource func(childComplexity int, envName string, name string) int + CoreResyncManagedResource func(childComplexity int, msvcName string, name string) int CoreResyncRouter func(childComplexity int, envName string, name string) int CoreResyncSecret func(childComplexity int, envName string, name string) int __resolve__service func(childComplexity int) int @@ -975,10 +979,11 @@ type MutationResolver interface { CoreCreateRouter(ctx context.Context, envName string, router entities.Router) (*entities.Router, error) CoreUpdateRouter(ctx context.Context, envName string, router entities.Router) (*entities.Router, error) CoreDeleteRouter(ctx context.Context, envName string, routerName string) (bool, error) - CoreCreateManagedResource(ctx context.Context, envName *string, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) + CoreCreateManagedResource(ctx context.Context, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) + CoreUpdateManagedResource(ctx context.Context, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) + CoreDeleteManagedResource(ctx context.Context, msvcName string, mresName string) (bool, error) CoreImportManagedResource(ctx context.Context, envName string, msvcName string, mresName string) (*entities.ManagedResource, error) - CoreUpdateManagedResource(ctx context.Context, envName string, mres entities.ManagedResource) (*entities.ManagedResource, error) - CoreDeleteManagedResource(ctx context.Context, envName string, mresName string) (bool, error) + CoreDeleteImportedManagedResource(ctx context.Context, envName string, mresName string) (bool, error) CoreCreateVPNDevice(ctx context.Context, vpnDevice entities.ConsoleVPNDevice) (*entities.ConsoleVPNDevice, error) CoreUpdateVPNDevice(ctx context.Context, vpnDevice entities.ConsoleVPNDevice) (*entities.ConsoleVPNDevice, error) CoreUpdateVPNDevicePorts(ctx context.Context, deviceName string, ports []*v11.Port) (bool, error) @@ -1013,11 +1018,13 @@ type QueryResolver interface { CoreListRouters(ctx context.Context, envName string, search *model.SearchRouters, pq *repos.CursorPagination) (*model.RouterPaginatedRecords, error) CoreGetRouter(ctx context.Context, envName string, name string) (*entities.Router, error) CoreResyncRouter(ctx context.Context, envName string, name string) (bool, error) - CoreGetManagedResouceOutputKeys(ctx context.Context, envName string, name string) ([]string, error) - CoreGetManagedResouceOutputKeyValues(ctx context.Context, envName string, keyrefs []*domain.ManagedResourceKeyRef) ([]*domain.ManagedResourceKeyValueRef, error) - CoreListManagedResources(ctx context.Context, envName string, search *model.SearchManagedResources, pq *repos.CursorPagination) (*model.ManagedResourcePaginatedRecords, error) - CoreGetManagedResource(ctx context.Context, envName string, name string) (*entities.ManagedResource, error) - CoreResyncManagedResource(ctx context.Context, envName string, name string) (bool, error) + CoreGetManagedResouceOutputKeys(ctx context.Context, msvcName string, name string) ([]string, error) + CoreGetManagedResouceOutputKeyValues(ctx context.Context, msvcName string, keyrefs []*domain.ManagedResourceKeyRef) ([]*domain.ManagedResourceKeyValueRef, error) + CoreListManagedResources(ctx context.Context, msvcName string, search *model.SearchManagedResources, pq *repos.CursorPagination) (*model.ManagedResourcePaginatedRecords, error) + CoreGetManagedResource(ctx context.Context, msvcName string, name string) (*entities.ManagedResource, error) + CoreResyncManagedResource(ctx context.Context, msvcName string, name string) (bool, error) + CoreListImportedManagedResources(ctx context.Context, envName string, search *model.SearchManagedResources, pq *repos.CursorPagination) (*model.ManagedResourcePaginatedRecords, error) + CoreGetImportedManagedResource(ctx context.Context, envName string, name string) (*entities.ManagedResource, error) CoreListVPNDevices(ctx context.Context, search *model.CoreSearchVPNDevices, pq *repos.CursorPagination) (*model.ConsoleVPNDevicePaginatedRecords, error) CoreListVPNDevicesForUser(ctx context.Context) ([]*entities.ConsoleVPNDevice, error) CoreGetVPNDevice(ctx context.Context, name string) (*entities.ConsoleVPNDevice, error) @@ -3506,6 +3513,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.ManagedResource.AccountName(childComplexity), true + case "ManagedResource.clusterName": + if e.complexity.ManagedResource.ClusterName == nil { + break + } + + return e.complexity.ManagedResource.ClusterName(childComplexity), true + case "ManagedResource.createdBy": if e.complexity.ManagedResource.CreatedBy == nil { break @@ -3875,7 +3889,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Mutation.CoreCreateManagedResource(childComplexity, args["envName"].(*string), args["msvcName"].(string), args["mres"].(entities.ManagedResource)), true + return e.complexity.Mutation.CoreCreateManagedResource(childComplexity, args["msvcName"].(string), args["mres"].(entities.ManagedResource)), true case "Mutation.core_createRouter": if e.complexity.Mutation.CoreCreateRouter == nil { @@ -3973,6 +3987,18 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Mutation.CoreDeleteImagePullSecret(childComplexity, args["name"].(string)), true + case "Mutation.core_deleteImportedManagedResource": + if e.complexity.Mutation.CoreDeleteImportedManagedResource == nil { + break + } + + args, err := ec.field_Mutation_core_deleteImportedManagedResource_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Mutation.CoreDeleteImportedManagedResource(childComplexity, args["envName"].(string), args["mresName"].(string)), true + case "Mutation.core_deleteManagedResource": if e.complexity.Mutation.CoreDeleteManagedResource == nil { break @@ -3983,7 +4009,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Mutation.CoreDeleteManagedResource(childComplexity, args["envName"].(string), args["mresName"].(string)), true + return e.complexity.Mutation.CoreDeleteManagedResource(childComplexity, args["msvcName"].(string), args["mresName"].(string)), true case "Mutation.core_deleteRouter": if e.complexity.Mutation.CoreDeleteRouter == nil { @@ -4127,7 +4153,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Mutation.CoreUpdateManagedResource(childComplexity, args["envName"].(string), args["mres"].(entities.ManagedResource)), true + return e.complexity.Mutation.CoreUpdateManagedResource(childComplexity, args["msvcName"].(string), args["mres"].(entities.ManagedResource)), true case "Mutation.core_updateRouter": if e.complexity.Mutation.CoreUpdateRouter == nil { @@ -4339,6 +4365,18 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Query.CoreGetImagePullSecret(childComplexity, args["name"].(string)), true + case "Query.core_getImportedManagedResource": + if e.complexity.Query.CoreGetImportedManagedResource == nil { + break + } + + args, err := ec.field_Query_core_getImportedManagedResource_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Query.CoreGetImportedManagedResource(childComplexity, args["envName"].(string), args["name"].(string)), true + case "Query.core_getManagedResouceOutputKeyValues": if e.complexity.Query.CoreGetManagedResouceOutputKeyValues == nil { break @@ -4349,7 +4387,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Query.CoreGetManagedResouceOutputKeyValues(childComplexity, args["envName"].(string), args["keyrefs"].([]*domain.ManagedResourceKeyRef)), true + return e.complexity.Query.CoreGetManagedResouceOutputKeyValues(childComplexity, args["msvcName"].(string), args["keyrefs"].([]*domain.ManagedResourceKeyRef)), true case "Query.core_getManagedResouceOutputKeys": if e.complexity.Query.CoreGetManagedResouceOutputKeys == nil { @@ -4361,7 +4399,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Query.CoreGetManagedResouceOutputKeys(childComplexity, args["envName"].(string), args["name"].(string)), true + return e.complexity.Query.CoreGetManagedResouceOutputKeys(childComplexity, args["msvcName"].(string), args["name"].(string)), true case "Query.core_getManagedResource": if e.complexity.Query.CoreGetManagedResource == nil { @@ -4373,7 +4411,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Query.CoreGetManagedResource(childComplexity, args["envName"].(string), args["name"].(string)), true + return e.complexity.Query.CoreGetManagedResource(childComplexity, args["msvcName"].(string), args["name"].(string)), true case "Query.core_getRouter": if e.complexity.Query.CoreGetRouter == nil { @@ -4483,6 +4521,18 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Query.CoreListImagePullSecrets(childComplexity, args["search"].(*model.SearchImagePullSecrets), args["pq"].(*repos.CursorPagination)), true + case "Query.core_listImportedManagedResources": + if e.complexity.Query.CoreListImportedManagedResources == nil { + break + } + + args, err := ec.field_Query_core_listImportedManagedResources_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Query.CoreListImportedManagedResources(childComplexity, args["envName"].(string), args["search"].(*model.SearchManagedResources), args["pq"].(*repos.CursorPagination)), true + case "Query.core_listManagedResources": if e.complexity.Query.CoreListManagedResources == nil { break @@ -4493,7 +4543,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Query.CoreListManagedResources(childComplexity, args["envName"].(string), args["search"].(*model.SearchManagedResources), args["pq"].(*repos.CursorPagination)), true + return e.complexity.Query.CoreListManagedResources(childComplexity, args["msvcName"].(string), args["search"].(*model.SearchManagedResources), args["pq"].(*repos.CursorPagination)), true case "Query.core_listRouters": if e.complexity.Query.CoreListRouters == nil { @@ -4620,7 +4670,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Query.CoreResyncManagedResource(childComplexity, args["envName"].(string), args["name"].(string)), true + return e.complexity.Query.CoreResyncManagedResource(childComplexity, args["msvcName"].(string), args["name"].(string)), true case "Query.core_resyncRouter": if e.complexity.Query.CoreResyncRouter == nil { @@ -5331,11 +5381,13 @@ type Query { core_getRouter(envName: String!, name: String!): Router @isLoggedInAndVerified @hasAccount core_resyncRouter(envName: String!, name: String!): Boolean! @isLoggedInAndVerified @hasAccount - core_getManagedResouceOutputKeys(envName: String!, name: String!): [String!]! @isLoggedInAndVerified @hasAccount - core_getManagedResouceOutputKeyValues(envName: String!, keyrefs: [ManagedResourceKeyRefIn]): [ManagedResourceKeyValueRef!]! @isLoggedInAndVerified @hasAccount - core_listManagedResources(envName: String!, search: SearchManagedResources, pq: CursorPaginationIn): ManagedResourcePaginatedRecords @isLoggedInAndVerified @hasAccount - core_getManagedResource(envName: String!, name: String!): ManagedResource @isLoggedInAndVerified @hasAccount - core_resyncManagedResource(envName: String!, name: String!): Boolean! @isLoggedInAndVerified @hasAccount + core_getManagedResouceOutputKeys(msvcName: String!, name: String!): [String!]! @isLoggedInAndVerified @hasAccount + core_getManagedResouceOutputKeyValues(msvcName: String!, keyrefs: [ManagedResourceKeyRefIn]): [ManagedResourceKeyValueRef!]! @isLoggedInAndVerified @hasAccount + core_listManagedResources(msvcName: String! ,search: SearchManagedResources, pq: CursorPaginationIn): ManagedResourcePaginatedRecords @isLoggedInAndVerified @hasAccount + core_getManagedResource(msvcName: String!, name: String!): ManagedResource @isLoggedInAndVerified @hasAccount + core_resyncManagedResource(msvcName: String!, name: String!): Boolean! @isLoggedInAndVerified @hasAccount + core_listImportedManagedResources(envName: String! ,search: SearchManagedResources, pq: CursorPaginationIn): ManagedResourcePaginatedRecords @isLoggedInAndVerified @hasAccount + core_getImportedManagedResource(envName: String!, name: String!): ManagedResource @isLoggedInAndVerified @hasAccount # core_listProjectManagedServices(search: SearchProjectManagedService, pq: CursorPaginationIn): ProjectManagedServicePaginatedRecords @isLoggedInAndVerified @hasAccount # core_getProjectManagedService( name: String!): ProjectManagedService @isLoggedInAndVerified @hasAccount @@ -5384,10 +5436,11 @@ type Mutation { core_updateRouter(envName: String!, router: RouterIn!): Router @isLoggedInAndVerified @hasAccount core_deleteRouter(envName: String!, routerName: String!): Boolean! @isLoggedInAndVerified @hasAccount - core_createManagedResource(envName: String, msvcName: String! ,mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount + core_createManagedResource(msvcName: String! ,mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount + core_updateManagedResource(msvcName: String!, mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount + core_deleteManagedResource(msvcName: String!, mresName: String!): Boolean! @isLoggedInAndVerified @hasAccount core_importManagedResource(envName: String!, msvcName: String! ,mresName: String!): ManagedResource @isLoggedInAndVerified @hasAccount - core_updateManagedResource(envName: String!, mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount - core_deleteManagedResource(envName: String!, mresName: String!): Boolean! @isLoggedInAndVerified @hasAccount + core_deleteImportedManagedResource(envName: String!, mresName: String!): Boolean! @isLoggedInAndVerified @hasAccount # core_createProjectManagedService(pmsvc: ProjectManagedServiceIn!): ProjectManagedService @isLoggedInAndVerified @hasAccount # core_updateProjectManagedService(pmsvc: ProjectManagedServiceIn!): ProjectManagedService @isLoggedInAndVerified @hasAccount @@ -6440,6 +6493,7 @@ input ImagePullSecretIn { {Name: "../struct-to-graphql/managedresource.graphqls", Input: `type ManagedResource @shareable { accountName: String! apiVersion: String + clusterName: String! createdBy: Github__com___kloudlite___api___common__CreatedOrUpdatedBy! creationTime: Date! displayName: String! @@ -6881,33 +6935,24 @@ func (ec *executionContext) field_Mutation_core_createImagePullSecret_args(ctx c func (ec *executionContext) field_Mutation_core_createManagedResource_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 *string - if tmp, ok := rawArgs["envName"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("envName")) - arg0, err = ec.unmarshalOString2ᚖstring(ctx, tmp) - if err != nil { - return nil, err - } - } - args["envName"] = arg0 - var arg1 string + var arg0 string if tmp, ok := rawArgs["msvcName"]; ok { ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("msvcName")) - arg1, err = ec.unmarshalNString2string(ctx, tmp) + arg0, err = ec.unmarshalNString2string(ctx, tmp) if err != nil { return nil, err } } - args["msvcName"] = arg1 - var arg2 entities.ManagedResource + args["msvcName"] = arg0 + var arg1 entities.ManagedResource if tmp, ok := rawArgs["mres"]; ok { ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("mres")) - arg2, err = ec.unmarshalNManagedResourceIn2githubᚗcomᚋkloudliteᚋapiᚋappsᚋconsoleᚋinternalᚋentitiesᚐManagedResource(ctx, tmp) + arg1, err = ec.unmarshalNManagedResourceIn2githubᚗcomᚋkloudliteᚋapiᚋappsᚋconsoleᚋinternalᚋentitiesᚐManagedResource(ctx, tmp) if err != nil { return nil, err } } - args["mres"] = arg2 + args["mres"] = arg1 return args, nil } @@ -7076,7 +7121,7 @@ func (ec *executionContext) field_Mutation_core_deleteImagePullSecret_args(ctx c return args, nil } -func (ec *executionContext) field_Mutation_core_deleteManagedResource_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { +func (ec *executionContext) field_Mutation_core_deleteImportedManagedResource_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} var arg0 string @@ -7100,6 +7145,30 @@ func (ec *executionContext) field_Mutation_core_deleteManagedResource_args(ctx c return args, nil } +func (ec *executionContext) field_Mutation_core_deleteManagedResource_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 string + if tmp, ok := rawArgs["msvcName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("msvcName")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["msvcName"] = arg0 + var arg1 string + if tmp, ok := rawArgs["mresName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("mresName")) + arg1, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["mresName"] = arg1 + return args, nil +} + func (ec *executionContext) field_Mutation_core_deleteRouter_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} @@ -7404,14 +7473,14 @@ func (ec *executionContext) field_Mutation_core_updateManagedResource_args(ctx c var err error args := map[string]interface{}{} var arg0 string - if tmp, ok := rawArgs["envName"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("envName")) + if tmp, ok := rawArgs["msvcName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("msvcName")) arg0, err = ec.unmarshalNString2string(ctx, tmp) if err != nil { return nil, err } } - args["envName"] = arg0 + args["msvcName"] = arg0 var arg1 entities.ManagedResource if tmp, ok := rawArgs["mres"]; ok { ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("mres")) @@ -7772,7 +7841,7 @@ func (ec *executionContext) field_Query_core_getImagePullSecret_args(ctx context return args, nil } -func (ec *executionContext) field_Query_core_getManagedResouceOutputKeyValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { +func (ec *executionContext) field_Query_core_getImportedManagedResource_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} var arg0 string @@ -7784,6 +7853,30 @@ func (ec *executionContext) field_Query_core_getManagedResouceOutputKeyValues_ar } } args["envName"] = arg0 + var arg1 string + if tmp, ok := rawArgs["name"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) + arg1, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["name"] = arg1 + return args, nil +} + +func (ec *executionContext) field_Query_core_getManagedResouceOutputKeyValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 string + if tmp, ok := rawArgs["msvcName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("msvcName")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["msvcName"] = arg0 var arg1 []*domain.ManagedResourceKeyRef if tmp, ok := rawArgs["keyrefs"]; ok { ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("keyrefs")) @@ -7800,14 +7893,14 @@ func (ec *executionContext) field_Query_core_getManagedResouceOutputKeys_args(ct var err error args := map[string]interface{}{} var arg0 string - if tmp, ok := rawArgs["envName"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("envName")) + if tmp, ok := rawArgs["msvcName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("msvcName")) arg0, err = ec.unmarshalNString2string(ctx, tmp) if err != nil { return nil, err } } - args["envName"] = arg0 + args["msvcName"] = arg0 var arg1 string if tmp, ok := rawArgs["name"]; ok { ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) @@ -7824,14 +7917,14 @@ func (ec *executionContext) field_Query_core_getManagedResource_args(ctx context var err error args := map[string]interface{}{} var arg0 string - if tmp, ok := rawArgs["envName"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("envName")) + if tmp, ok := rawArgs["msvcName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("msvcName")) arg0, err = ec.unmarshalNString2string(ctx, tmp) if err != nil { return nil, err } } - args["envName"] = arg0 + args["msvcName"] = arg0 var arg1 string if tmp, ok := rawArgs["name"]; ok { ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) @@ -8078,7 +8171,7 @@ func (ec *executionContext) field_Query_core_listImagePullSecrets_args(ctx conte return args, nil } -func (ec *executionContext) field_Query_core_listManagedResources_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { +func (ec *executionContext) field_Query_core_listImportedManagedResources_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} var arg0 string @@ -8111,6 +8204,39 @@ func (ec *executionContext) field_Query_core_listManagedResources_args(ctx conte return args, nil } +func (ec *executionContext) field_Query_core_listManagedResources_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 string + if tmp, ok := rawArgs["msvcName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("msvcName")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["msvcName"] = arg0 + var arg1 *model.SearchManagedResources + if tmp, ok := rawArgs["search"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("search")) + arg1, err = ec.unmarshalOSearchManagedResources2ᚖgithubᚗcomᚋkloudliteᚋapiᚋappsᚋconsoleᚋinternalᚋappᚋgraphᚋmodelᚐSearchManagedResources(ctx, tmp) + if err != nil { + return nil, err + } + } + args["search"] = arg1 + var arg2 *repos.CursorPagination + if tmp, ok := rawArgs["pq"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pq")) + arg2, err = ec.unmarshalOCursorPaginationIn2ᚖgithubᚗcomᚋkloudliteᚋapiᚋpkgᚋreposᚐCursorPagination(ctx, tmp) + if err != nil { + return nil, err + } + } + args["pq"] = arg2 + return args, nil +} + func (ec *executionContext) field_Query_core_listRouters_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} @@ -8331,14 +8457,14 @@ func (ec *executionContext) field_Query_core_resyncManagedResource_args(ctx cont var err error args := map[string]interface{}{} var arg0 string - if tmp, ok := rawArgs["envName"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("envName")) + if tmp, ok := rawArgs["msvcName"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("msvcName")) arg0, err = ec.unmarshalNString2string(ctx, tmp) if err != nil { return nil, err } } - args["envName"] = arg0 + args["msvcName"] = arg0 var arg1 string if tmp, ok := rawArgs["name"]; ok { ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) @@ -24050,6 +24176,50 @@ func (ec *executionContext) fieldContext_ManagedResource_apiVersion(ctx context. return fc, nil } +func (ec *executionContext) _ManagedResource_clusterName(ctx context.Context, field graphql.CollectedField, obj *entities.ManagedResource) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_ManagedResource_clusterName(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.ClusterName, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_ManagedResource_clusterName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "ManagedResource", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _ManagedResource_createdBy(ctx context.Context, field graphql.CollectedField, obj *entities.ManagedResource) (ret graphql.Marshaler) { fc, err := ec.fieldContext_ManagedResource_createdBy(ctx, field) if err != nil { @@ -25039,6 +25209,8 @@ func (ec *executionContext) fieldContext_ManagedResourceEdge_node(ctx context.Co return ec.fieldContext_ManagedResource_accountName(ctx, field) case "apiVersion": return ec.fieldContext_ManagedResource_apiVersion(ctx, field) + case "clusterName": + return ec.fieldContext_ManagedResource_clusterName(ctx, field) case "createdBy": return ec.fieldContext_ManagedResource_createdBy(ctx, field) case "creationTime": @@ -28416,7 +28588,7 @@ func (ec *executionContext) _Mutation_core_createManagedResource(ctx context.Con resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { directive0 := func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().CoreCreateManagedResource(rctx, fc.Args["envName"].(*string), fc.Args["msvcName"].(string), fc.Args["mres"].(entities.ManagedResource)) + return ec.resolvers.Mutation().CoreCreateManagedResource(rctx, fc.Args["msvcName"].(string), fc.Args["mres"].(entities.ManagedResource)) } directive1 := func(ctx context.Context) (interface{}, error) { if ec.directives.IsLoggedInAndVerified == nil { @@ -28467,6 +28639,8 @@ func (ec *executionContext) fieldContext_Mutation_core_createManagedResource(ctx return ec.fieldContext_ManagedResource_accountName(ctx, field) case "apiVersion": return ec.fieldContext_ManagedResource_apiVersion(ctx, field) + case "clusterName": + return ec.fieldContext_ManagedResource_clusterName(ctx, field) case "createdBy": return ec.fieldContext_ManagedResource_createdBy(ctx, field) case "creationTime": @@ -28523,8 +28697,8 @@ func (ec *executionContext) fieldContext_Mutation_core_createManagedResource(ctx return fc, nil } -func (ec *executionContext) _Mutation_core_importManagedResource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_core_importManagedResource(ctx, field) +func (ec *executionContext) _Mutation_core_updateManagedResource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_core_updateManagedResource(ctx, field) if err != nil { return graphql.Null } @@ -28538,7 +28712,7 @@ func (ec *executionContext) _Mutation_core_importManagedResource(ctx context.Con resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { directive0 := func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().CoreImportManagedResource(rctx, fc.Args["envName"].(string), fc.Args["msvcName"].(string), fc.Args["mresName"].(string)) + return ec.resolvers.Mutation().CoreUpdateManagedResource(rctx, fc.Args["msvcName"].(string), fc.Args["mres"].(entities.ManagedResource)) } directive1 := func(ctx context.Context) (interface{}, error) { if ec.directives.IsLoggedInAndVerified == nil { @@ -28577,7 +28751,7 @@ func (ec *executionContext) _Mutation_core_importManagedResource(ctx context.Con return ec.marshalOManagedResource2ᚖgithubᚗcomᚋkloudliteᚋapiᚋappsᚋconsoleᚋinternalᚋentitiesᚐManagedResource(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_core_importManagedResource(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_core_updateManagedResource(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", Field: field, @@ -28589,6 +28763,8 @@ func (ec *executionContext) fieldContext_Mutation_core_importManagedResource(ctx return ec.fieldContext_ManagedResource_accountName(ctx, field) case "apiVersion": return ec.fieldContext_ManagedResource_apiVersion(ctx, field) + case "clusterName": + return ec.fieldContext_ManagedResource_clusterName(ctx, field) case "createdBy": return ec.fieldContext_ManagedResource_createdBy(ctx, field) case "creationTime": @@ -28638,15 +28814,96 @@ func (ec *executionContext) fieldContext_Mutation_core_importManagedResource(ctx } }() ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_core_importManagedResource_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + if fc.Args, err = ec.field_Mutation_core_updateManagedResource_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { ec.Error(ctx, err) return fc, err } return fc, nil } -func (ec *executionContext) _Mutation_core_updateManagedResource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_core_updateManagedResource(ctx, field) +func (ec *executionContext) _Mutation_core_deleteManagedResource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_core_deleteManagedResource(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + directive0 := func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().CoreDeleteManagedResource(rctx, fc.Args["msvcName"].(string), fc.Args["mresName"].(string)) + } + directive1 := func(ctx context.Context) (interface{}, error) { + if ec.directives.IsLoggedInAndVerified == nil { + return nil, errors.New("directive isLoggedInAndVerified is not implemented") + } + return ec.directives.IsLoggedInAndVerified(ctx, nil, directive0) + } + directive2 := func(ctx context.Context) (interface{}, error) { + if ec.directives.HasAccount == nil { + return nil, errors.New("directive hasAccount is not implemented") + } + return ec.directives.HasAccount(ctx, nil, directive1) + } + + tmp, err := directive2(rctx) + if err != nil { + return nil, graphql.ErrorOnPath(ctx, err) + } + if tmp == nil { + return nil, nil + } + if data, ok := tmp.(bool); ok { + return data, nil + } + return nil, fmt.Errorf(`unexpected type %T from directive, should be bool`, tmp) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_core_deleteManagedResource(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_core_deleteManagedResource_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_core_importManagedResource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_core_importManagedResource(ctx, field) if err != nil { return graphql.Null } @@ -28660,7 +28917,7 @@ func (ec *executionContext) _Mutation_core_updateManagedResource(ctx context.Con resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { directive0 := func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().CoreUpdateManagedResource(rctx, fc.Args["envName"].(string), fc.Args["mres"].(entities.ManagedResource)) + return ec.resolvers.Mutation().CoreImportManagedResource(rctx, fc.Args["envName"].(string), fc.Args["msvcName"].(string), fc.Args["mresName"].(string)) } directive1 := func(ctx context.Context) (interface{}, error) { if ec.directives.IsLoggedInAndVerified == nil { @@ -28699,7 +28956,7 @@ func (ec *executionContext) _Mutation_core_updateManagedResource(ctx context.Con return ec.marshalOManagedResource2ᚖgithubᚗcomᚋkloudliteᚋapiᚋappsᚋconsoleᚋinternalᚋentitiesᚐManagedResource(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_core_updateManagedResource(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_core_importManagedResource(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", Field: field, @@ -28711,6 +28968,8 @@ func (ec *executionContext) fieldContext_Mutation_core_updateManagedResource(ctx return ec.fieldContext_ManagedResource_accountName(ctx, field) case "apiVersion": return ec.fieldContext_ManagedResource_apiVersion(ctx, field) + case "clusterName": + return ec.fieldContext_ManagedResource_clusterName(ctx, field) case "createdBy": return ec.fieldContext_ManagedResource_createdBy(ctx, field) case "creationTime": @@ -28760,15 +29019,15 @@ func (ec *executionContext) fieldContext_Mutation_core_updateManagedResource(ctx } }() ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_core_updateManagedResource_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + if fc.Args, err = ec.field_Mutation_core_importManagedResource_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { ec.Error(ctx, err) return fc, err } return fc, nil } -func (ec *executionContext) _Mutation_core_deleteManagedResource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_core_deleteManagedResource(ctx, field) +func (ec *executionContext) _Mutation_core_deleteImportedManagedResource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_core_deleteImportedManagedResource(ctx, field) if err != nil { return graphql.Null } @@ -28782,7 +29041,7 @@ func (ec *executionContext) _Mutation_core_deleteManagedResource(ctx context.Con resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { directive0 := func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().CoreDeleteManagedResource(rctx, fc.Args["envName"].(string), fc.Args["mresName"].(string)) + return ec.resolvers.Mutation().CoreDeleteImportedManagedResource(rctx, fc.Args["envName"].(string), fc.Args["mresName"].(string)) } directive1 := func(ctx context.Context) (interface{}, error) { if ec.directives.IsLoggedInAndVerified == nil { @@ -28824,7 +29083,7 @@ func (ec *executionContext) _Mutation_core_deleteManagedResource(ctx context.Con return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_core_deleteManagedResource(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_core_deleteImportedManagedResource(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", Field: field, @@ -28841,7 +29100,7 @@ func (ec *executionContext) fieldContext_Mutation_core_deleteManagedResource(ctx } }() ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_core_deleteManagedResource_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + if fc.Args, err = ec.field_Mutation_core_deleteImportedManagedResource_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { ec.Error(ctx, err) return fc, err } @@ -32061,7 +32320,7 @@ func (ec *executionContext) _Query_core_getManagedResouceOutputKeys(ctx context. resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { directive0 := func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().CoreGetManagedResouceOutputKeys(rctx, fc.Args["envName"].(string), fc.Args["name"].(string)) + return ec.resolvers.Query().CoreGetManagedResouceOutputKeys(rctx, fc.Args["msvcName"].(string), fc.Args["name"].(string)) } directive1 := func(ctx context.Context) (interface{}, error) { if ec.directives.IsLoggedInAndVerified == nil { @@ -32142,7 +32401,7 @@ func (ec *executionContext) _Query_core_getManagedResouceOutputKeyValues(ctx con resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { directive0 := func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().CoreGetManagedResouceOutputKeyValues(rctx, fc.Args["envName"].(string), fc.Args["keyrefs"].([]*domain.ManagedResourceKeyRef)) + return ec.resolvers.Query().CoreGetManagedResouceOutputKeyValues(rctx, fc.Args["msvcName"].(string), fc.Args["keyrefs"].([]*domain.ManagedResourceKeyRef)) } directive1 := func(ctx context.Context) (interface{}, error) { if ec.directives.IsLoggedInAndVerified == nil { @@ -32231,7 +32490,7 @@ func (ec *executionContext) _Query_core_listManagedResources(ctx context.Context resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { directive0 := func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().CoreListManagedResources(rctx, fc.Args["envName"].(string), fc.Args["search"].(*model.SearchManagedResources), fc.Args["pq"].(*repos.CursorPagination)) + return ec.resolvers.Query().CoreListManagedResources(rctx, fc.Args["msvcName"].(string), fc.Args["search"].(*model.SearchManagedResources), fc.Args["pq"].(*repos.CursorPagination)) } directive1 := func(ctx context.Context) (interface{}, error) { if ec.directives.IsLoggedInAndVerified == nil { @@ -32317,7 +32576,7 @@ func (ec *executionContext) _Query_core_getManagedResource(ctx context.Context, resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { directive0 := func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().CoreGetManagedResource(rctx, fc.Args["envName"].(string), fc.Args["name"].(string)) + return ec.resolvers.Query().CoreGetManagedResource(rctx, fc.Args["msvcName"].(string), fc.Args["name"].(string)) } directive1 := func(ctx context.Context) (interface{}, error) { if ec.directives.IsLoggedInAndVerified == nil { @@ -32368,6 +32627,8 @@ func (ec *executionContext) fieldContext_Query_core_getManagedResource(ctx conte return ec.fieldContext_ManagedResource_accountName(ctx, field) case "apiVersion": return ec.fieldContext_ManagedResource_apiVersion(ctx, field) + case "clusterName": + return ec.fieldContext_ManagedResource_clusterName(ctx, field) case "createdBy": return ec.fieldContext_ManagedResource_createdBy(ctx, field) case "creationTime": @@ -32439,7 +32700,7 @@ func (ec *executionContext) _Query_core_resyncManagedResource(ctx context.Contex resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { directive0 := func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().CoreResyncManagedResource(rctx, fc.Args["envName"].(string), fc.Args["name"].(string)) + return ec.resolvers.Query().CoreResyncManagedResource(rctx, fc.Args["msvcName"].(string), fc.Args["name"].(string)) } directive1 := func(ctx context.Context) (interface{}, error) { if ec.directives.IsLoggedInAndVerified == nil { @@ -32505,6 +32766,216 @@ func (ec *executionContext) fieldContext_Query_core_resyncManagedResource(ctx co return fc, nil } +func (ec *executionContext) _Query_core_listImportedManagedResources(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Query_core_listImportedManagedResources(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + directive0 := func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Query().CoreListImportedManagedResources(rctx, fc.Args["envName"].(string), fc.Args["search"].(*model.SearchManagedResources), fc.Args["pq"].(*repos.CursorPagination)) + } + directive1 := func(ctx context.Context) (interface{}, error) { + if ec.directives.IsLoggedInAndVerified == nil { + return nil, errors.New("directive isLoggedInAndVerified is not implemented") + } + return ec.directives.IsLoggedInAndVerified(ctx, nil, directive0) + } + directive2 := func(ctx context.Context) (interface{}, error) { + if ec.directives.HasAccount == nil { + return nil, errors.New("directive hasAccount is not implemented") + } + return ec.directives.HasAccount(ctx, nil, directive1) + } + + tmp, err := directive2(rctx) + if err != nil { + return nil, graphql.ErrorOnPath(ctx, err) + } + if tmp == nil { + return nil, nil + } + if data, ok := tmp.(*model.ManagedResourcePaginatedRecords); ok { + return data, nil + } + return nil, fmt.Errorf(`unexpected type %T from directive, should be *github.com/kloudlite/api/apps/console/internal/app/graph/model.ManagedResourcePaginatedRecords`, tmp) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*model.ManagedResourcePaginatedRecords) + fc.Result = res + return ec.marshalOManagedResourcePaginatedRecords2ᚖgithubᚗcomᚋkloudliteᚋapiᚋappsᚋconsoleᚋinternalᚋappᚋgraphᚋmodelᚐManagedResourcePaginatedRecords(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Query_core_listImportedManagedResources(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Query", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "edges": + return ec.fieldContext_ManagedResourcePaginatedRecords_edges(ctx, field) + case "pageInfo": + return ec.fieldContext_ManagedResourcePaginatedRecords_pageInfo(ctx, field) + case "totalCount": + return ec.fieldContext_ManagedResourcePaginatedRecords_totalCount(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ManagedResourcePaginatedRecords", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Query_core_listImportedManagedResources_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Query_core_getImportedManagedResource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Query_core_getImportedManagedResource(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + directive0 := func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Query().CoreGetImportedManagedResource(rctx, fc.Args["envName"].(string), fc.Args["name"].(string)) + } + directive1 := func(ctx context.Context) (interface{}, error) { + if ec.directives.IsLoggedInAndVerified == nil { + return nil, errors.New("directive isLoggedInAndVerified is not implemented") + } + return ec.directives.IsLoggedInAndVerified(ctx, nil, directive0) + } + directive2 := func(ctx context.Context) (interface{}, error) { + if ec.directives.HasAccount == nil { + return nil, errors.New("directive hasAccount is not implemented") + } + return ec.directives.HasAccount(ctx, nil, directive1) + } + + tmp, err := directive2(rctx) + if err != nil { + return nil, graphql.ErrorOnPath(ctx, err) + } + if tmp == nil { + return nil, nil + } + if data, ok := tmp.(*entities.ManagedResource); ok { + return data, nil + } + return nil, fmt.Errorf(`unexpected type %T from directive, should be *github.com/kloudlite/api/apps/console/internal/entities.ManagedResource`, tmp) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*entities.ManagedResource) + fc.Result = res + return ec.marshalOManagedResource2ᚖgithubᚗcomᚋkloudliteᚋapiᚋappsᚋconsoleᚋinternalᚋentitiesᚐManagedResource(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Query_core_getImportedManagedResource(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Query", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "accountName": + return ec.fieldContext_ManagedResource_accountName(ctx, field) + case "apiVersion": + return ec.fieldContext_ManagedResource_apiVersion(ctx, field) + case "clusterName": + return ec.fieldContext_ManagedResource_clusterName(ctx, field) + case "createdBy": + return ec.fieldContext_ManagedResource_createdBy(ctx, field) + case "creationTime": + return ec.fieldContext_ManagedResource_creationTime(ctx, field) + case "displayName": + return ec.fieldContext_ManagedResource_displayName(ctx, field) + case "enabled": + return ec.fieldContext_ManagedResource_enabled(ctx, field) + case "environmentName": + return ec.fieldContext_ManagedResource_environmentName(ctx, field) + case "id": + return ec.fieldContext_ManagedResource_id(ctx, field) + case "isImported": + return ec.fieldContext_ManagedResource_isImported(ctx, field) + case "kind": + return ec.fieldContext_ManagedResource_kind(ctx, field) + case "lastUpdatedBy": + return ec.fieldContext_ManagedResource_lastUpdatedBy(ctx, field) + case "managedServiceName": + return ec.fieldContext_ManagedResource_managedServiceName(ctx, field) + case "markedForDeletion": + return ec.fieldContext_ManagedResource_markedForDeletion(ctx, field) + case "metadata": + return ec.fieldContext_ManagedResource_metadata(ctx, field) + case "mresRef": + return ec.fieldContext_ManagedResource_mresRef(ctx, field) + case "recordVersion": + return ec.fieldContext_ManagedResource_recordVersion(ctx, field) + case "spec": + return ec.fieldContext_ManagedResource_spec(ctx, field) + case "status": + return ec.fieldContext_ManagedResource_status(ctx, field) + case "syncedOutputSecretRef": + return ec.fieldContext_ManagedResource_syncedOutputSecretRef(ctx, field) + case "syncStatus": + return ec.fieldContext_ManagedResource_syncStatus(ctx, field) + case "updateTime": + return ec.fieldContext_ManagedResource_updateTime(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ManagedResource", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Query_core_getImportedManagedResource_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + func (ec *executionContext) _Query_core_listVPNDevices(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { fc, err := ec.fieldContext_Query_core_listVPNDevices(ctx, field) if err != nil { @@ -45933,6 +46404,11 @@ func (ec *executionContext) _ManagedResource(ctx context.Context, sel ast.Select } case "apiVersion": out.Values[i] = ec._ManagedResource_apiVersion(ctx, field, obj) + case "clusterName": + out.Values[i] = ec._ManagedResource_clusterName(ctx, field, obj) + if out.Values[i] == graphql.Null { + atomic.AddUint32(&out.Invalids, 1) + } case "createdBy": out.Values[i] = ec._ManagedResource_createdBy(ctx, field, obj) if out.Values[i] == graphql.Null { @@ -46717,10 +47193,6 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { return ec._Mutation_core_createManagedResource(ctx, field) }) - case "core_importManagedResource": - out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_core_importManagedResource(ctx, field) - }) case "core_updateManagedResource": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { return ec._Mutation_core_updateManagedResource(ctx, field) @@ -46732,6 +47204,17 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) if out.Values[i] == graphql.Null { out.Invalids++ } + case "core_importManagedResource": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_core_importManagedResource(ctx, field) + }) + case "core_deleteImportedManagedResource": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_core_deleteImportedManagedResource(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } case "core_createVPNDevice": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { return ec._Mutation_core_createVPNDevice(ctx, field) @@ -47502,6 +47985,44 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) } + out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return rrm(innerCtx) }) + case "core_listImportedManagedResources": + field := field + + innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + } + }() + res = ec._Query_core_listImportedManagedResources(ctx, field) + return res + } + + rrm := func(ctx context.Context) graphql.Marshaler { + return ec.OperationContext.RootResolverMiddleware(ctx, + func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) + } + + out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return rrm(innerCtx) }) + case "core_getImportedManagedResource": + field := field + + innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + } + }() + res = ec._Query_core_getImportedManagedResource(ctx, field) + return res + } + + rrm := func(ctx context.Context) graphql.Marshaler { + return ec.OperationContext.RootResolverMiddleware(ctx, + func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) + } + out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return rrm(innerCtx) }) case "core_listVPNDevices": field := field diff --git a/apps/console/internal/app/graph/resolver-utils.go b/apps/console/internal/app/graph/resolver-utils.go index 595c869a7..1e08936c9 100644 --- a/apps/console/internal/app/graph/resolver-utils.go +++ b/apps/console/internal/app/graph/resolver-utils.go @@ -102,3 +102,7 @@ var ( func newResourceContext(ctx domain.ConsoleContext, environmentName string) domain.ResourceContext { return domain.ResourceContext{ConsoleContext: ctx, EnvironmentName: environmentName} } + +func newMresContext(ctx domain.ConsoleContext, msvcName string) domain.ManagedResourceContext { + return domain.ManagedResourceContext{ConsoleContext: ctx, ManagedServiceName: msvcName} +} diff --git a/apps/console/internal/app/graph/schema.graphqls b/apps/console/internal/app/graph/schema.graphqls index e84b137a8..208fa7342 100644 --- a/apps/console/internal/app/graph/schema.graphqls +++ b/apps/console/internal/app/graph/schema.graphqls @@ -125,11 +125,13 @@ type Query { core_getRouter(envName: String!, name: String!): Router @isLoggedInAndVerified @hasAccount core_resyncRouter(envName: String!, name: String!): Boolean! @isLoggedInAndVerified @hasAccount - core_getManagedResouceOutputKeys(envName: String!, name: String!): [String!]! @isLoggedInAndVerified @hasAccount - core_getManagedResouceOutputKeyValues(envName: String!, keyrefs: [ManagedResourceKeyRefIn]): [ManagedResourceKeyValueRef!]! @isLoggedInAndVerified @hasAccount - core_listManagedResources(envName: String!, search: SearchManagedResources, pq: CursorPaginationIn): ManagedResourcePaginatedRecords @isLoggedInAndVerified @hasAccount - core_getManagedResource(envName: String!, name: String!): ManagedResource @isLoggedInAndVerified @hasAccount - core_resyncManagedResource(envName: String!, name: String!): Boolean! @isLoggedInAndVerified @hasAccount + core_getManagedResouceOutputKeys(msvcName: String!, name: String!): [String!]! @isLoggedInAndVerified @hasAccount + core_getManagedResouceOutputKeyValues(msvcName: String!, keyrefs: [ManagedResourceKeyRefIn]): [ManagedResourceKeyValueRef!]! @isLoggedInAndVerified @hasAccount + core_listManagedResources(msvcName: String! ,search: SearchManagedResources, pq: CursorPaginationIn): ManagedResourcePaginatedRecords @isLoggedInAndVerified @hasAccount + core_getManagedResource(msvcName: String!, name: String!): ManagedResource @isLoggedInAndVerified @hasAccount + core_resyncManagedResource(msvcName: String!, name: String!): Boolean! @isLoggedInAndVerified @hasAccount + core_listImportedManagedResources(envName: String! ,search: SearchManagedResources, pq: CursorPaginationIn): ManagedResourcePaginatedRecords @isLoggedInAndVerified @hasAccount + core_getImportedManagedResource(envName: String!, name: String!): ManagedResource @isLoggedInAndVerified @hasAccount # core_listProjectManagedServices(search: SearchProjectManagedService, pq: CursorPaginationIn): ProjectManagedServicePaginatedRecords @isLoggedInAndVerified @hasAccount # core_getProjectManagedService( name: String!): ProjectManagedService @isLoggedInAndVerified @hasAccount @@ -178,10 +180,11 @@ type Mutation { core_updateRouter(envName: String!, router: RouterIn!): Router @isLoggedInAndVerified @hasAccount core_deleteRouter(envName: String!, routerName: String!): Boolean! @isLoggedInAndVerified @hasAccount - core_createManagedResource(envName: String, msvcName: String! ,mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount + core_createManagedResource(msvcName: String! ,mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount + core_updateManagedResource(msvcName: String!, mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount + core_deleteManagedResource(msvcName: String!, mresName: String!): Boolean! @isLoggedInAndVerified @hasAccount core_importManagedResource(envName: String!, msvcName: String! ,mresName: String!): ManagedResource @isLoggedInAndVerified @hasAccount - core_updateManagedResource(envName: String!, mres: ManagedResourceIn!): ManagedResource @isLoggedInAndVerified @hasAccount - core_deleteManagedResource(envName: String!, mresName: String!): Boolean! @isLoggedInAndVerified @hasAccount + core_deleteImportedManagedResource(envName: String!, mresName: String!): Boolean! @isLoggedInAndVerified @hasAccount # core_createProjectManagedService(pmsvc: ProjectManagedServiceIn!): ProjectManagedService @isLoggedInAndVerified @hasAccount # core_updateProjectManagedService(pmsvc: ProjectManagedServiceIn!): ProjectManagedService @isLoggedInAndVerified @hasAccount diff --git a/apps/console/internal/app/graph/schema.resolvers.go b/apps/console/internal/app/graph/schema.resolvers.go index 8a887f95c..9d80dd1cc 100644 --- a/apps/console/internal/app/graph/schema.resolvers.go +++ b/apps/console/internal/app/graph/schema.resolvers.go @@ -7,7 +7,6 @@ package graph import ( "context" "fmt" - "github.com/kloudlite/api/pkg/errors" "github.com/kloudlite/api/apps/console/internal/app/graph/generated" @@ -17,7 +16,7 @@ import ( fn "github.com/kloudlite/api/pkg/functions" "github.com/kloudlite/api/pkg/repos" v11 "github.com/kloudlite/operator/apis/crds/v1" - v1 "github.com/kloudlite/operator/apis/wireguard/v1" + "github.com/kloudlite/operator/apis/wireguard/v1" ) // Build is the resolver for the build field. @@ -284,39 +283,51 @@ func (r *mutationResolver) CoreDeleteRouter(ctx context.Context, envName string, } // CoreCreateManagedResource is the resolver for the core_createManagedResource field. -func (r *mutationResolver) CoreCreateManagedResource(ctx context.Context, envName *string, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) { +func (r *mutationResolver) CoreCreateManagedResource(ctx context.Context, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) { cc, err := toConsoleContext(ctx) if err != nil { return nil, errors.NewE(err) } - return r.Domain.CreateManagedResource(cc, msvcName, mres) + return r.Domain.CreateManagedResource(newMresContext(cc, msvcName), mres) } -// CoreImportManagedResource is the resolver for the core_importManagedResource field. -func (r *mutationResolver) CoreImportManagedResource(ctx context.Context, envName string, msvcName string, mresName string) (*entities.ManagedResource, error) { +// CoreUpdateManagedResource is the resolver for the core_updateManagedResource field. +func (r *mutationResolver) CoreUpdateManagedResource(ctx context.Context, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) { cc, err := toConsoleContext(ctx) if err != nil { return nil, errors.NewE(err) } - return r.Domain.ImportManagedResource(newResourceContext(cc, envName), msvcName, mresName) + return r.Domain.UpdateManagedResource(newMresContext(cc, msvcName), mres) } -// CoreUpdateManagedResource is the resolver for the core_updateManagedResource field. -func (r *mutationResolver) CoreUpdateManagedResource(ctx context.Context, envName string, mres entities.ManagedResource) (*entities.ManagedResource, error) { +// CoreDeleteManagedResource is the resolver for the core_deleteManagedResource field. +func (r *mutationResolver) CoreDeleteManagedResource(ctx context.Context, msvcName string, mresName string) (bool, error) { + cc, err := toConsoleContext(ctx) + if err != nil { + return false, errors.NewE(err) + } + if err := r.Domain.DeleteManagedResource(newMresContext(cc, msvcName), mresName); err != nil { + return false, errors.NewE(err) + } + return true, nil +} + +// CoreImportManagedResource is the resolver for the core_importManagedResource field. +func (r *mutationResolver) CoreImportManagedResource(ctx context.Context, envName string, msvcName string, mresName string) (*entities.ManagedResource, error) { cc, err := toConsoleContext(ctx) if err != nil { return nil, errors.NewE(err) } - return r.Domain.UpdateManagedResource(newResourceContext(cc, envName), mres) + return r.Domain.ImportManagedResource(newMresContext(cc, msvcName), mresName, envName) } -// CoreDeleteManagedResource is the resolver for the core_deleteManagedResource field. -func (r *mutationResolver) CoreDeleteManagedResource(ctx context.Context, envName string, mresName string) (bool, error) { +// CoreDeleteImportedManagedResource is the resolver for the core_deleteImportedManagedResource field. +func (r *mutationResolver) CoreDeleteImportedManagedResource(ctx context.Context, envName string, mresName string) (bool, error) { cc, err := toConsoleContext(ctx) if err != nil { return false, errors.NewE(err) } - if err := r.Domain.DeleteManagedResource(newResourceContext(cc, envName), mresName); err != nil { + if err := r.Domain.DeleteImportedManagedResource(newResourceContext(cc, envName), mresName); err != nil { return false, errors.NewE(err) } return true, nil @@ -807,16 +818,16 @@ func (r *queryResolver) CoreResyncRouter(ctx context.Context, envName string, na } // CoreGetManagedResouceOutputKeys is the resolver for the core_getManagedResouceOutputKeys field. -func (r *queryResolver) CoreGetManagedResouceOutputKeys(ctx context.Context, envName string, name string) ([]string, error) { +func (r *queryResolver) CoreGetManagedResouceOutputKeys(ctx context.Context, msvcName string, name string) ([]string, error) { cc, err := toConsoleContext(ctx) if err != nil { return nil, errors.NewE(err) } - return r.Domain.GetManagedResourceOutputKeys(newResourceContext(cc, envName), name) + return r.Domain.GetManagedResourceOutputKeys(newMresContext(cc, msvcName), name) } // CoreGetManagedResouceOutputKeyValues is the resolver for the core_getManagedResouceOutputKeyValues field. -func (r *queryResolver) CoreGetManagedResouceOutputKeyValues(ctx context.Context, envName string, keyrefs []*domain.ManagedResourceKeyRef) ([]*domain.ManagedResourceKeyValueRef, error) { +func (r *queryResolver) CoreGetManagedResouceOutputKeyValues(ctx context.Context, msvcName string, keyrefs []*domain.ManagedResourceKeyRef) ([]*domain.ManagedResourceKeyValueRef, error) { cc, err := toConsoleContext(ctx) if err != nil { return nil, errors.NewE(err) @@ -827,11 +838,11 @@ func (r *queryResolver) CoreGetManagedResouceOutputKeyValues(ctx context.Context m[i] = *keyrefs[i] } - return r.Domain.GetManagedResourceOutputKVs(newResourceContext(cc, envName), m) + return r.Domain.GetManagedResourceOutputKVs(newMresContext(cc, msvcName), m) } // CoreListManagedResources is the resolver for the core_listManagedResources field. -func (r *queryResolver) CoreListManagedResources(ctx context.Context, envName string, search *model.SearchManagedResources, pq *repos.CursorPagination) (*model.ManagedResourcePaginatedRecords, error) { +func (r *queryResolver) CoreListManagedResources(ctx context.Context, msvcName string, search *model.SearchManagedResources, pq *repos.CursorPagination) (*model.ManagedResourcePaginatedRecords, error) { cc, err := toConsoleContext(ctx) if err != nil { return nil, errors.NewE(err) @@ -853,7 +864,7 @@ func (r *queryResolver) CoreListManagedResources(ctx context.Context, envName st } } - pmsvcs, err := r.Domain.ListManagedResources(newResourceContext(cc, envName), filter, fn.DefaultIfNil(pq, repos.DefaultCursorPagination)) + pmsvcs, err := r.Domain.ListManagedResources(newMresContext(cc, msvcName), filter, fn.DefaultIfNil(pq, repos.DefaultCursorPagination)) if err != nil { return nil, errors.NewE(err) } @@ -862,26 +873,66 @@ func (r *queryResolver) CoreListManagedResources(ctx context.Context, envName st } // CoreGetManagedResource is the resolver for the core_getManagedResource field. -func (r *queryResolver) CoreGetManagedResource(ctx context.Context, envName string, name string) (*entities.ManagedResource, error) { +func (r *queryResolver) CoreGetManagedResource(ctx context.Context, msvcName string, name string) (*entities.ManagedResource, error) { cc, err := toConsoleContext(ctx) if err != nil { return nil, errors.NewE(err) } - return r.Domain.GetManagedResource(newResourceContext(cc, envName), name) + return r.Domain.GetManagedResource(newMresContext(cc, msvcName), name) } // CoreResyncManagedResource is the resolver for the core_resyncManagedResource field. -func (r *queryResolver) CoreResyncManagedResource(ctx context.Context, envName string, name string) (bool, error) { +func (r *queryResolver) CoreResyncManagedResource(ctx context.Context, msvcName string, name string) (bool, error) { cc, err := toConsoleContext(ctx) if err != nil { return false, errors.NewE(err) } - if err := r.Domain.ResyncManagedResource(newResourceContext(cc, envName), name); err != nil { + if err := r.Domain.ResyncManagedResource(cc, msvcName, name); err != nil { return false, errors.NewE(err) } return true, nil } +// CoreListImportedManagedResources is the resolver for the core_listImportedManagedResources field. +func (r *queryResolver) CoreListImportedManagedResources(ctx context.Context, envName string, search *model.SearchManagedResources, pq *repos.CursorPagination) (*model.ManagedResourcePaginatedRecords, error) { + cc, err := toConsoleContext(ctx) + if err != nil { + return nil, errors.NewE(err) + } + filter := map[string]repos.MatchFilter{} + if search != nil { + if search.Text != nil { + filter["metadata.name"] = *search.Text + } + if search.IsReady != nil { + filter["status.isReady"] = *search.IsReady + } + if search.MarkedForDeletion != nil { + filter["markedForDeletion"] = *search.MarkedForDeletion + } + + if search.ManagedServiceName != nil { + filter["spec.msvcRef.name"] = *search.ManagedServiceName + } + } + + pmsvcs, err := r.Domain.ListImportedManagedResources(newResourceContext(cc, envName), filter, fn.DefaultIfNil(pq, repos.DefaultCursorPagination)) + if err != nil { + return nil, errors.NewE(err) + } + + return fn.JsonConvertP[model.ManagedResourcePaginatedRecords](pmsvcs) +} + +// CoreGetImportedManagedResource is the resolver for the core_getImportedManagedResource field. +func (r *queryResolver) CoreGetImportedManagedResource(ctx context.Context, envName string, name string) (*entities.ManagedResource, error) { + cc, err := toConsoleContext(ctx) + if err != nil { + return nil, errors.NewE(err) + } + return r.Domain.GetImportedManagedResource(newResourceContext(cc, envName), name) +} + // CoreListVPNDevices is the resolver for the core_listVPNDevices field. func (r *queryResolver) CoreListVPNDevices(ctx context.Context, search *model.CoreSearchVPNDevices, pq *repos.CursorPagination) (*model.ConsoleVPNDevicePaginatedRecords, error) { filter := map[string]repos.MatchFilter{} diff --git a/apps/console/internal/app/graph/struct-to-graphql/managedresource.graphqls b/apps/console/internal/app/graph/struct-to-graphql/managedresource.graphqls index 9737e0d36..02f0e85e4 100644 --- a/apps/console/internal/app/graph/struct-to-graphql/managedresource.graphqls +++ b/apps/console/internal/app/graph/struct-to-graphql/managedresource.graphqls @@ -1,6 +1,7 @@ type ManagedResource @shareable { accountName: String! apiVersion: String + clusterName: String! createdBy: Github__com___kloudlite___api___common__CreatedOrUpdatedBy! creationTime: Date! displayName: String! diff --git a/apps/console/internal/app/process-error-on-apply.go b/apps/console/internal/app/process-error-on-apply.go index e63c7b9f0..3ddacc234 100644 --- a/apps/console/internal/app/process-error-on-apply.go +++ b/apps/console/internal/app/process-error-on-apply.go @@ -219,10 +219,10 @@ func ProcessErrorOnApply(consumer ErrorOnApplyConsumer, d domain.Domain, logger } case managedResourceGVK.String(): { - rctx, err := getEnvironmentResourceContext(dctx, entities.ResourceTypeManagedResource, em.ClusterName, obj) - if err != nil { - return errors.NewE(err) - } + //rctx, err := getEnvironmentResourceContext(dctx, entities.ResourceTypeManagedResource, em.ClusterName, obj) + //if err != nil { + // return errors.NewE(err) + //} mres, err := fn.JsonConvert[entities.ManagedResource](obj.Object) if err != nil { @@ -230,9 +230,9 @@ func ProcessErrorOnApply(consumer ErrorOnApplyConsumer, d domain.Domain, logger } if errObj.Action == t.ActionApply { - return d.OnManagedResourceApplyError(rctx, errObj.Error, obj.GetName(), opts) + return d.OnManagedResourceApplyError(dctx, errObj.Error, mres.ManagedResource.Spec.ResourceTemplate.MsvcRef.Name, obj.GetName(), opts) } - return d.OnManagedResourceDeleteMessage(rctx, mres) + return d.OnManagedResourceDeleteMessage(dctx, mres.ManagedResource.Spec.ResourceTemplate.MsvcRef.Name, mres) } default: diff --git a/apps/console/internal/app/process-resource-updates.go b/apps/console/internal/app/process-resource-updates.go index 1c2637d02..741bc27f6 100644 --- a/apps/console/internal/app/process-resource-updates.go +++ b/apps/console/internal/app/process-resource-updates.go @@ -311,10 +311,10 @@ func ProcessResourceUpdates(consumer ResourceUpdateConsumer, d domain.Domain, lo return errors.NewE(err) } - rctx, err := getResourceContext(dctx, entities.ResourceTypeManagedResource, ru.ClusterName, obj) - if err != nil { - return errors.NewE(err) - } + //rctx, err := getResourceContext(dctx, entities.ResourceTypeManagedResource, ru.ClusterName, obj) + //if err != nil { + // return errors.NewE(err) + //} if v, ok := rwu.Object[types.KeyManagedResSecret]; ok { s, err := fn.JsonConvertP[corev1.Secret](v) @@ -328,9 +328,9 @@ func ProcessResourceUpdates(consumer ResourceUpdateConsumer, d domain.Domain, lo } if resStatus == types.ResourceStatusDeleted { - return d.OnManagedResourceDeleteMessage(rctx, mres) + return d.OnManagedResourceDeleteMessage(dctx, mres.ManagedResource.Spec.ResourceTemplate.MsvcRef.Name, mres) } - return d.OnManagedResourceUpdateMessage(rctx, mres, resStatus, opts) + return d.OnManagedResourceUpdateMessage(dctx, mres.ManagedResource.Spec.ResourceTemplate.MsvcRef.Name, mres, resStatus, opts) } } diff --git a/apps/console/internal/domain/api.go b/apps/console/internal/domain/api.go index 9f4cce0d6..aa9011617 100644 --- a/apps/console/internal/domain/api.go +++ b/apps/console/internal/domain/api.go @@ -2,6 +2,7 @@ package domain import ( "context" + fc "github.com/kloudlite/api/apps/console/internal/entities/field-constants" "time" "github.com/kloudlite/api/common/fields" @@ -46,6 +47,18 @@ type ResourceContext struct { EnvironmentName string } +type ManagedResourceContext struct { + ConsoleContext + ManagedServiceName string +} + +func (m ManagedResourceContext) MresDBFilters() repos.Filter { + return repos.Filter{ + fields.AccountName: m.AccountName, + fc.ManagedResourceManagedServiceName: m.ManagedServiceName, + } +} + func (r ResourceContext) DBFilters() repos.Filter { return repos.Filter{ fields.AccountName: r.AccountName, @@ -68,6 +81,13 @@ func NewConsoleContext(parent context.Context, userId repos.ID, accountName stri } } +func NewManagedResourceContext(ctx ConsoleContext, msvcName string) ManagedResourceContext { + return ManagedResourceContext{ + ConsoleContext: ctx, + ManagedServiceName: msvcName, + } +} + type CheckNameAvailabilityOutput struct { Result bool `json:"result"` SuggestedNames []string `json:"suggestedNames,omitempty"` @@ -200,22 +220,27 @@ type Domain interface { ResyncRouter(ctx ResourceContext, name string) error - ListManagedResources(ctx ResourceContext, search map[string]repos.MatchFilter, pq repos.CursorPagination) (*repos.PaginatedRecord[*entities.ManagedResource], error) - GetManagedResource(ctx ResourceContext, name string) (*entities.ManagedResource, error) + ListManagedResources(ctx ManagedResourceContext, search map[string]repos.MatchFilter, pq repos.CursorPagination) (*repos.PaginatedRecord[*entities.ManagedResource], error) + GetManagedResource(ctx ManagedResourceContext, name string) (*entities.ManagedResource, error) + + ListImportedManagedResources(ctx ResourceContext, search map[string]repos.MatchFilter, pq repos.CursorPagination) (*repos.PaginatedRecord[*entities.ManagedResource], error) + GetImportedManagedResource(ctx ResourceContext, name string) (*entities.ManagedResource, error) + + GetManagedResourceOutputKeys(ctx ManagedResourceContext, name string) ([]string, error) + GetManagedResourceOutputKVs(ctx ManagedResourceContext, keyrefs []ManagedResourceKeyRef) ([]*ManagedResourceKeyValueRef, error) - GetManagedResourceOutputKeys(ctx ResourceContext, name string) ([]string, error) - GetManagedResourceOutputKVs(ctx ResourceContext, keyrefs []ManagedResourceKeyRef) ([]*ManagedResourceKeyValueRef, error) + CreateManagedResource(ctx ManagedResourceContext, mres entities.ManagedResource) (*entities.ManagedResource, error) + UpdateManagedResource(ctx ManagedResourceContext, mres entities.ManagedResource) (*entities.ManagedResource, error) + DeleteManagedResource(ctx ManagedResourceContext, name string) error - CreateManagedResource(ctx ConsoleContext, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) - ImportManagedResource(ctx ResourceContext, msvcName string, mresName string) (*entities.ManagedResource, error) - UpdateManagedResource(ctx ResourceContext, mres entities.ManagedResource) (*entities.ManagedResource, error) - DeleteManagedResource(ctx ResourceContext, name string) error + ImportManagedResource(ctx ManagedResourceContext, mresName string, envName string) (*entities.ManagedResource, error) + DeleteImportedManagedResource(ctx ResourceContext, mresName string) error - OnManagedResourceApplyError(ctx ResourceContext, errMsg string, name string, opts UpdateAndDeleteOpts) error - OnManagedResourceDeleteMessage(ctx ResourceContext, mres entities.ManagedResource) error - OnManagedResourceUpdateMessage(ctx ResourceContext, mres entities.ManagedResource, status types.ResourceStatus, opts UpdateAndDeleteOpts) error + OnManagedResourceApplyError(ctx ConsoleContext, errMsg string, msvcName string, name string, opts UpdateAndDeleteOpts) error + OnManagedResourceDeleteMessage(ctx ConsoleContext, msvcName string, mres entities.ManagedResource) error + OnManagedResourceUpdateMessage(ctx ConsoleContext, msvcName string, mres entities.ManagedResource, status types.ResourceStatus, opts UpdateAndDeleteOpts) error - ResyncManagedResource(ctx ResourceContext, name string) error + ResyncManagedResource(ctx ConsoleContext, msvcName string, name string) error /// External Apps ListExternalApps(ctx ResourceContext, search map[string]repos.MatchFilter, pq repos.CursorPagination) (*repos.PaginatedRecord[*entities.ExternalApp], error) diff --git a/apps/console/internal/domain/domain.go b/apps/console/internal/domain/domain.go index 267e419f7..e861b92f1 100644 --- a/apps/console/internal/domain/domain.go +++ b/apps/console/internal/domain/domain.go @@ -46,9 +46,6 @@ type domain struct { iamClient iam.IAMClient infraClient infra.InfraClient - // projectRepo repos.DbRepo[*entities.Project] - // pmsRepo repos.DbRepo[*entities.ProjectManagedService] - environmentRepo repos.DbRepo[*entities.Environment] vpnDeviceRepo repos.DbRepo[*entities.ConsoleVPNDevice] @@ -304,6 +301,23 @@ func (d *domain) resyncK8sResource(ctx K8sContext, environmentName string, actio } } +func (d *domain) resyncK8sResourceToCluster(ctx K8sContext, clusterName string, action types.SyncAction, obj client.Object, rv int) error { + switch action { + case types.SyncActionApply: + { + return d.applyK8sResourceOnCluster(ctx, clusterName, obj, rv) + } + case types.SyncActionDelete: + { + return d.deleteK8sResourceOfCluster(ctx, clusterName, obj) + } + default: + { + return errors.Newf("unknown sync action %q", action) + } + } +} + func (d *domain) parseRecordVersionFromAnnotations(annotations map[string]string) (int, error) { annotatedVersion, ok := annotations[constants.RecordVersionKey] if !ok { @@ -406,7 +420,6 @@ func (d *domain) checkEnvironmentAccess(ctx ResourceContext, action iamT.Action) UserId: string(ctx.UserId), ResourceRefs: []string{ iamT.NewResourceRef(ctx.AccountName, iamT.ResourceAccount, ctx.AccountName), - //iamT.NewResourceRef(ctx.AccountName, iamT.ResourceProject, ctx.ProjectName), iamT.NewResourceRef(ctx.AccountName, iamT.ResourceEnvironment, ctx.EnvironmentName), }, Action: string(action), @@ -488,8 +501,6 @@ var Module = fx.Module("domain", iamClient iam.IAMClient, infraClient infra.InfraClient, - // projectRepo repos.DbRepo[*entities.Project], - // pmsRepo repos.DbRepo[*entities.ProjectManagedService], environmentRepo repos.DbRepo[*entities.Environment], appRepo repos.DbRepo[*entities.App], @@ -518,8 +529,6 @@ var Module = fx.Module("domain", infraClient: infraClient, logger: logger, - // projectRepo: projectRepo, - // pmsRepo: pmsRepo, environmentRepo: environmentRepo, appRepo: appRepo, externalAppRepo: externalAppRepo, diff --git a/apps/console/internal/domain/environment.go b/apps/console/internal/domain/environment.go index 8cf3e2d77..e2ff9eccc 100644 --- a/apps/console/internal/domain/environment.go +++ b/apps/console/internal/domain/environment.go @@ -279,10 +279,6 @@ func (d *domain) CloneEnvironment(ctx ConsoleContext, sourceEnvName string, dest return nil, errors.NewE(err) } - // if err := d.syncAccountLevelImagePullSecrets(ctx, destEnv.Name, destEnv.Spec.TargetNamespace); err != nil { - // return nil, errors.NewE(err) - // } - if err := d.applyK8sResource(ctx, sourceEnv.Name, &destEnv.Environment, destEnv.RecordVersion); err != nil { return nil, errors.NewE(err) } @@ -327,13 +323,6 @@ func (d *domain) CloneEnvironment(ctx ConsoleContext, sourceEnvName string, dest if err != nil { return nil, errors.NewE(err) } - // managedResources, err := d.mresRepo.Find(ctx, repos.Query{ - // Filter: filters, - // Sort: nil, - // }) - // if err != nil { - // return nil, errors.NewE(err) - // } resourceMetadata := func(dn string) common.ResourceMetadata { return common.ResourceMetadata{ @@ -423,23 +412,6 @@ func (d *domain) CloneEnvironment(ctx ConsoleContext, sourceEnvName string, dest } } - // for i := range managedResources { - // spec := managedResources[i].Spec - // if _, err := d.createAndApplyManagedResource(resCtx, &entities.ManagedResource{ - // ManagedResource: crdsv1.ManagedResource{ - // TypeMeta: managedResources[i].TypeMeta, - // ObjectMeta: objectMeta(managedResources[i].ObjectMeta, destEnv.Spec.TargetNamespace), - // Spec: spec, - // Enabled: managedResources[i].Enabled, - // }, - // AccountName: ctx.AccountName, - // EnvironmentName: destEnv.Name, - // ResourceMetadata: resourceMetadata(managedResources[i].DisplayName), - // }); err != nil { - // return nil, err - // } - // } - if err := d.syncImagePullSecretsToEnvironment(ctx, destinationEnvName); err != nil { return nil, err } @@ -449,9 +421,6 @@ func (d *domain) CloneEnvironment(ctx ConsoleContext, sourceEnvName string, dest func (d *domain) getEnvironmentTargetNamespace(envName string) string { return fmt.Sprintf("env-%s", envName) - // envNamespace := fmt.Sprintf("env-%s", envName) - // hash := md5.Sum([]byte(envNamespace)) - // return fmt.Sprintf("env-%s", hex.EncodeToString(hash[:])) } func (d *domain) UpdateEnvironment(ctx ConsoleContext, env entities.Environment) (*entities.Environment, error) { diff --git a/apps/console/internal/domain/mres.go b/apps/console/internal/domain/mres.go index 0f36cd9f0..8fce539b7 100644 --- a/apps/console/internal/domain/mres.go +++ b/apps/console/internal/domain/mres.go @@ -2,9 +2,9 @@ package domain import ( "fmt" - "github.com/kloudlite/api/apps/console/internal/entities" fc "github.com/kloudlite/api/apps/console/internal/entities/field-constants" + iamT "github.com/kloudlite/api/apps/iam/types" "github.com/kloudlite/api/common" "github.com/kloudlite/api/common/fields" "github.com/kloudlite/api/grpc-interfaces/infra" @@ -13,33 +13,43 @@ import ( "github.com/kloudlite/api/pkg/repos" t "github.com/kloudlite/api/pkg/types" "github.com/kloudlite/operator/operators/resource-watcher/types" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // query -func (d *domain) ListManagedResources(ctx ResourceContext, search map[string]repos.MatchFilter, pq repos.CursorPagination) (*repos.PaginatedRecord[*entities.ManagedResource], error) { - if err := d.canReadResourcesInEnvironment(ctx); err != nil { +func (d *domain) ListManagedResources(ctx ManagedResourceContext, search map[string]repos.MatchFilter, pq repos.CursorPagination) (*repos.PaginatedRecord[*entities.ManagedResource], error) { + if err := d.canPerformActionInAccount(ctx.ConsoleContext, iamT.ListManagedResources); err != nil { return nil, errors.NewE(err) } + filters := ctx.MresDBFilters().Add(fields.EnvironmentName, "") + + return d.mresRepo.FindPaginated(ctx, d.mresRepo.MergeMatchFilters(filters, search), pq) +} +func (d *domain) ListImportedManagedResources(ctx ResourceContext, search map[string]repos.MatchFilter, pq repos.CursorPagination) (*repos.PaginatedRecord[*entities.ManagedResource], error) { + if err := d.canReadResourcesInEnvironment(ctx); err != nil { + return nil, errors.NewE(err) + } filters := ctx.DBFilters() return d.mresRepo.FindPaginated(ctx, d.mresRepo.MergeMatchFilters(filters, search), pq) } -func (d *domain) listImportedMres(ctx ResourceContext, mresName string) ([]*entities.ManagedResource, error) { +func (d *domain) listImportedMres(ctx ConsoleContext, mresName string) ([]*entities.ManagedResource, error) { filter := repos.Filter{ - fields.AccountName: ctx.AccountName, - "mresRef": mresName, + fields.AccountName: ctx.AccountName, + fc.ManagedResourceMresRef: mresName, } return d.mresRepo.Find(ctx, repos.Query{Filter: filter}) } -func (d *domain) findMRes(ctx ResourceContext, name string) (*entities.ManagedResource, error) { +func (d *domain) findMRes(ctx ManagedResourceContext, name string) (*entities.ManagedResource, error) { mres, err := d.mresRepo.FindOne( ctx, - ctx.DBFilters().Add(fields.MetadataName, name), + ctx.MresDBFilters().Add(fields.MetadataName, name), ) if err != nil { return nil, errors.NewE(err) @@ -50,17 +60,42 @@ func (d *domain) findMRes(ctx ResourceContext, name string) (*entities.ManagedRe return mres, nil } -func (d *domain) GetManagedResource(ctx ResourceContext, name string) (*entities.ManagedResource, error) { - if err := d.canReadResourcesInEnvironment(ctx); err != nil { +func (d *domain) findImportedMRes(ctx ResourceContext, name string) (*entities.ManagedResource, error) { + impMres, err := d.mresRepo.FindOne( + ctx, + repos.Filter{ + fields.AccountName: ctx.AccountName, + fields.EnvironmentName: ctx.EnvironmentName, + fc.ManagedResourceMresRef: name, + }, + ) + if err != nil { + return nil, errors.NewE(err) + } + if impMres == nil { + return nil, errors.Newf("no imported managed resource with name (%s) found", name) + } + return impMres, nil +} + +func (d *domain) GetManagedResource(ctx ManagedResourceContext, name string) (*entities.ManagedResource, error) { + if err := d.canPerformActionInAccount(ctx.ConsoleContext, iamT.GetManagedResource); err != nil { return nil, errors.NewE(err) } return d.findMRes(ctx, name) } +func (d *domain) GetImportedManagedResource(ctx ResourceContext, name string) (*entities.ManagedResource, error) { + if err := d.canReadResourcesInEnvironment(ctx); err != nil { + return nil, errors.NewE(err) + } + return d.findImportedMRes(ctx, name) +} + // GetManagedResourceOutputKVs implements Domain. -func (d *domain) GetManagedResourceOutputKVs(ctx ResourceContext, keyrefs []ManagedResourceKeyRef) ([]*ManagedResourceKeyValueRef, error) { - filters := ctx.DBFilters() +func (d *domain) GetManagedResourceOutputKVs(ctx ManagedResourceContext, keyrefs []ManagedResourceKeyRef) ([]*ManagedResourceKeyValueRef, error) { + filters := ctx.MresDBFilters() names := make([]any, 0, len(keyrefs)) for i := range keyrefs { @@ -108,8 +143,8 @@ func (d *domain) GetManagedResourceOutputKVs(ctx ResourceContext, keyrefs []Mana } // GetManagedResourceOutputKeys implements Domain. -func (d *domain) GetManagedResourceOutputKeys(ctx ResourceContext, name string) ([]string, error) { - filters := ctx.DBFilters() +func (d *domain) GetManagedResourceOutputKeys(ctx ManagedResourceContext, name string) ([]string, error) { + filters := ctx.MresDBFilters() filters.Add(fields.MetadataName, name) mresSecret, err := d.findMRes(ctx, name) @@ -132,14 +167,18 @@ func (d *domain) GetManagedResourceOutputKeys(ctx ResourceContext, name string) // mutations -func (d *domain) CreateManagedResource(ctx ConsoleContext, msvcName string, mres entities.ManagedResource) (*entities.ManagedResource, error) { +func (d *domain) CreateManagedResource(ctx ManagedResourceContext, mres entities.ManagedResource) (*entities.ManagedResource, error) { + + if err := d.canPerformActionInAccount(ctx.ConsoleContext, iamT.CreateManagedResource); err != nil { + return nil, errors.NewE(err) + } msvcOut, err := d.infraClient.GetClusterManagedService(ctx, &infra.GetClusterManagedServiceIn{ UserId: string(ctx.UserId), UserName: ctx.UserName, UserEmail: ctx.UserEmail, AccountName: ctx.AccountName, - MsvcName: msvcName, + MsvcName: ctx.ManagedServiceName, }) if err != nil { @@ -151,6 +190,9 @@ func (d *domain) CreateManagedResource(ctx ConsoleContext, msvcName string, mres } mres.Namespace = msvcOut.TargetNamespace + if mres.ManagedResource.Spec.ResourceTemplate.MsvcRef.ClusterName == nil { + mres.ManagedResource.Spec.ResourceTemplate.MsvcRef.ClusterName = &msvcOut.ClusterName + } mres.EnsureGVK() if err := d.k8sClient.ValidateObject(ctx, &mres.ManagedResource); err != nil { @@ -168,30 +210,39 @@ func (d *domain) CreateManagedResource(ctx ConsoleContext, msvcName string, mres mres.AccountName = ctx.AccountName mres.EnvironmentName = "" - mres.ManagedServiceName = msvcName + mres.ManagedServiceName = ctx.ManagedServiceName mres.IsImported = false + mres.ClusterName = msvcOut.ClusterName return d.createAndApplyManagedResource(ctx, msvcOut.ClusterName, &mres) } -func (d *domain) ImportManagedResource(ctx ResourceContext, msvcName string, mresName string) (*entities.ManagedResource, error) { +func (d *domain) ImportManagedResource(ctx ManagedResourceContext, mresName string, envName string) (*entities.ManagedResource, error) { exMres, err := d.findMRes(ctx, mresName) if err != nil { return nil, errors.NewE(err) } - exMres.EnsureGVK() - if err := d.k8sClient.ValidateObject(ctx, exMres); err != nil { + impMres, err := d.mresRepo.FindOne( + ctx, + repos.Filter{ + fields.AccountName: ctx.AccountName, + fields.EnvironmentName: envName, + fc.ManagedResourceMresRef: mresName, + }, + ) + if err != nil { return nil, errors.NewE(err) } - fmt.Println("xmres", exMres.SyncedOutputSecretRef) + if impMres != nil { + return nil, errors.Newf("managed resource with name (%s) has been already imported", mresName) + } exMres.IncrementRecordVersion() exMres.Id = "imp-" + exMres.Id - exMres.Name = "imp-" + exMres.Name exMres.CreatedBy = common.CreatedOrUpdatedBy{ UserId: ctx.UserId, @@ -200,13 +251,11 @@ func (d *domain) ImportManagedResource(ctx ResourceContext, msvcName string, mre } exMres.LastUpdatedBy = exMres.CreatedBy - exMres.AccountName = ctx.AccountName - exMres.EnvironmentName = ctx.EnvironmentName - exMres.ManagedServiceName = msvcName + exMres.EnvironmentName = envName exMres.IsImported = true exMres.MresRef = mresName - return d.importAndApplyManagedResourceSecret(ctx, exMres) + return d.importAndApplyManagedResourceSecret(ctx, envName, exMres) } func genMresResourceName(envName string, mresName string) string { @@ -217,8 +266,7 @@ func genMresCredentialsSecretName(name string) string { return fmt.Sprintf("mres-%s-creds", name) } -func (d *domain) createAndApplyManagedResource(ctx ConsoleContext, clusterName string, mres *entities.ManagedResource) (*entities.ManagedResource, error) { - // mres.Spec.ResourceNamePrefix = fn.New(genMresResourceName(ctx.EnvironmentName, mres.Name)) +func (d *domain) createAndApplyManagedResource(ctx ManagedResourceContext, clusterName string, mres *entities.ManagedResource) (*entities.ManagedResource, error) { mres.Spec.ResourceNamePrefix = nil mres.SyncStatus = t.GenSyncStatus(t.SyncActionApply, 0) @@ -231,7 +279,7 @@ func (d *domain) createAndApplyManagedResource(ctx ConsoleContext, clusterName s return nil, errors.NewE(err) } - d.resourceEventPublisher.PublishConsoleEvent(ctx, entities.ResourceTypeManagedResource, m.Name, PublishAdd) + d.resourceEventPublisher.PublishConsoleEvent(ctx.ConsoleContext, entities.ResourceTypeManagedResource, m.Name, PublishAdd) if err := d.applyK8sResourceOnCluster(ctx, clusterName, &m.ManagedResource, m.RecordVersion); err != nil { return m, errors.NewE(err) @@ -240,14 +288,25 @@ func (d *domain) createAndApplyManagedResource(ctx ConsoleContext, clusterName s return m, nil } -func (d *domain) importAndApplyManagedResourceSecret(ctx ResourceContext, mres *entities.ManagedResource) (*entities.ManagedResource, error) { - mres.Spec.ResourceNamePrefix = fn.New(genMresResourceName(ctx.EnvironmentName, mres.Name)) +func (d *domain) importAndApplyManagedResourceSecret(ctx ManagedResourceContext, envName string, mres *entities.ManagedResource) (*entities.ManagedResource, error) { + mres.Spec.ResourceNamePrefix = fn.New(genMresResourceName(envName, mres.Name)) mres.SyncStatus = t.GenSyncStatus(t.SyncActionApply, 0) - fmt.Println("env", ctx.EnvironmentName) - mres.SyncedOutputSecretRef.Namespace = d.getEnvironmentTargetNamespace(ctx.EnvironmentName) - if _, err := d.upsertEnvironmentResourceMapping(ctx, mres); err != nil { - return nil, errors.NewE(err) + if mres.SyncedOutputSecretRef == nil { + return nil, errors.Newf("managed resource (%s), not ready yet, please try again", mres.Name) + } + + secret := corev1.Secret{ + TypeMeta: v1.TypeMeta{APIVersion: "v1", Kind: "Secret"}, + ObjectMeta: v1.ObjectMeta{ + Name: fmt.Sprintf("%s-%s-creds", d.getEnvironmentTargetNamespace(envName), mres.Name), + Namespace: d.getEnvironmentTargetNamespace(envName), + Labels: map[string]string{ + "kloudlite.io/mres.imported": "true", + }, + Annotations: mres.SyncedOutputSecretRef.GetAnnotations(), + }, + Data: mres.SyncedOutputSecretRef.Data, } nImpMres, err := d.mresRepo.Create(ctx, mres) @@ -255,21 +314,21 @@ func (d *domain) importAndApplyManagedResourceSecret(ctx ResourceContext, mres * return nil, errors.NewE(err) } - d.resourceEventPublisher.PublishResourceEvent(ctx, entities.ResourceTypeManagedResource, nImpMres.Name, PublishAdd) + d.resourceEventPublisher.PublishConsoleEvent(ctx.ConsoleContext, entities.ResourceTypeManagedResource, nImpMres.Name, PublishAdd) - if err := d.applyK8sResource(ctx, ctx.EnvironmentName, nImpMres.SyncedOutputSecretRef, nImpMres.RecordVersion); err != nil { + if err := d.applyK8sResource(ctx, envName, &secret, 1); err != nil { return nImpMres, errors.NewE(err) } return nImpMres, nil } -func (d *domain) applyMresSecretsToEnvironment(ctx ResourceContext, envName string, mres *entities.ManagedResource) error { +func (d *domain) applyMresSecretsToEnvironment(ctx ConsoleContext, envName string, mres *entities.ManagedResource) error { mres.SyncedOutputSecretRef.Namespace = d.getEnvironmentTargetNamespace(envName) return d.applyK8sResource(ctx, envName, mres.SyncedOutputSecretRef, mres.RecordVersion) } -func (d *domain) applyMresSecrets(ctx ResourceContext, mres *entities.ManagedResource) error { +func (d *domain) applyMresSecrets(ctx ConsoleContext, mres *entities.ManagedResource) error { listImportedMres, err := d.listImportedMres(ctx, mres.Name) if err != nil { @@ -285,8 +344,8 @@ func (d *domain) applyMresSecrets(ctx ResourceContext, mres *entities.ManagedRes return nil } -func (d *domain) UpdateManagedResource(ctx ResourceContext, mres entities.ManagedResource) (*entities.ManagedResource, error) { - if err := d.canReadResourcesInEnvironment(ctx); err != nil { +func (d *domain) UpdateManagedResource(ctx ManagedResourceContext, mres entities.ManagedResource) (*entities.ManagedResource, error) { + if err := d.canPerformActionInAccount(ctx.ConsoleContext, iamT.UpdateManagedResource); err != nil { return nil, errors.NewE(err) } @@ -306,37 +365,37 @@ func (d *domain) UpdateManagedResource(ctx ResourceContext, mres entities.Manage upMres, err := d.mresRepo.Patch( ctx, - ctx.DBFilters().Add(fields.MetadataName, mres.Name), + ctx.MresDBFilters().Add(fields.MetadataName, mres.Name), patchForUpdate, ) if err != nil { return nil, errors.NewE(err) } - d.resourceEventPublisher.PublishResourceEvent(ctx, entities.ResourceTypeManagedResource, upMres.Name, PublishUpdate) + d.resourceEventPublisher.PublishConsoleEvent(ctx.ConsoleContext, entities.ResourceTypeManagedResource, upMres.Name, PublishUpdate) - if err := d.applyK8sResource(ctx, ctx.EnvironmentName, &upMres.ManagedResource, upMres.RecordVersion); err != nil { + if err := d.applyK8sResourceOnCluster(ctx, upMres.ClusterName, &upMres.ManagedResource, upMres.RecordVersion); err != nil { return upMres, errors.NewE(err) } return upMres, nil } -func (d *domain) DeleteManagedResource(ctx ResourceContext, name string) error { - if err := d.canMutateResourcesInEnvironment(ctx); err != nil { +func (d *domain) DeleteManagedResource(ctx ManagedResourceContext, name string) error { + if err := d.canPerformActionInAccount(ctx.ConsoleContext, iamT.DeleteManagedResource); err != nil { return errors.NewE(err) } umres, err := d.mresRepo.Patch( ctx, - ctx.DBFilters().Add(fields.MetadataName, name), + ctx.MresDBFilters().Add(fields.MetadataName, name), common.PatchForMarkDeletion(), ) if err != nil { return errors.NewE(err) } - d.resourceEventPublisher.PublishResourceEvent(ctx, entities.ResourceTypeManagedResource, umres.Name, PublishUpdate) - if err := d.deleteK8sResource(ctx, ctx.EnvironmentName, &umres.ManagedResource); err != nil { + d.resourceEventPublisher.PublishConsoleEvent(ctx.ConsoleContext, entities.ResourceTypeManagedResource, umres.Name, PublishUpdate) + if err := d.deleteK8sResourceOfCluster(ctx, umres.ClusterName, &umres.ManagedResource); err != nil { if errors.Is(err, ErrNoClusterAttached) { return d.mresRepo.DeleteById(ctx, umres.Id) } @@ -345,20 +404,69 @@ func (d *domain) DeleteManagedResource(ctx ResourceContext, name string) error { return nil } -func (d *domain) OnManagedResourceDeleteMessage(ctx ResourceContext, mres entities.ManagedResource) error { +func (d *domain) DeleteImportedManagedResource(ctx ResourceContext, mresName string) error { + if err := d.canMutateResourcesInEnvironment(ctx); err != nil { + return errors.NewE(err) + } + + impMres, err := d.findImportedMRes(ctx, mresName) + if err != nil { + return errors.NewE(err) + } + + secret := corev1.Secret{ + TypeMeta: v1.TypeMeta{APIVersion: "v1", Kind: "Secret"}, + ObjectMeta: v1.ObjectMeta{ + Name: fmt.Sprintf("%s-%s-creds", d.getEnvironmentTargetNamespace(impMres.EnvironmentName), mresName), + Namespace: d.getEnvironmentTargetNamespace(impMres.EnvironmentName), + Labels: map[string]string{ + "kloudlite.io/mres.imported": "true", + }, + Annotations: impMres.SyncedOutputSecretRef.GetAnnotations(), + }, + Data: impMres.SyncedOutputSecretRef.Data, + } + + if err := d.deleteK8sResource(ctx, impMres.EnvironmentName, &secret); err != nil { + if errors.Is(err, ErrNoClusterAttached) { + return d.mresRepo.DeleteById(ctx, impMres.Id) + } + return errors.NewE(err) + } + + err = d.mresRepo.DeleteOne( + ctx, + repos.Filter{ + fields.AccountName: ctx.AccountName, + fields.EnvironmentName: ctx.EnvironmentName, + fc.ManagedResourceMresRef: mresName, + }, + ) + if err != nil { + return errors.NewE(err) + } + d.resourceEventPublisher.PublishConsoleEvent(ctx.ConsoleContext, entities.ResourceTypeManagedResource, mresName, PublishDelete) + return nil +} + +func (d *domain) OnManagedResourceDeleteMessage(ctx ConsoleContext, msvcName string, mres entities.ManagedResource) error { err := d.mresRepo.DeleteOne( ctx, - ctx.DBFilters().Add(fields.MetadataName, mres.Name), + repos.Filter{ + fields.AccountName: ctx.AccountName, + fc.ManagedResourceManagedServiceName: msvcName, + fields.MetadataName: mres.Name, + }, ) if err != nil { return errors.NewE(err) } - d.resourceEventPublisher.PublishResourceEvent(ctx, entities.ResourceTypeManagedResource, mres.Name, PublishDelete) + d.resourceEventPublisher.PublishConsoleEvent(ctx, entities.ResourceTypeManagedResource, mres.Name, PublishDelete) return nil } -func (d *domain) OnManagedResourceUpdateMessage(ctx ResourceContext, mres entities.ManagedResource, status types.ResourceStatus, opts UpdateAndDeleteOpts) error { - xmres, err := d.findMRes(ctx, mres.Name) +func (d *domain) OnManagedResourceUpdateMessage(ctx ConsoleContext, msvcName string, mres entities.ManagedResource, status types.ResourceStatus, opts UpdateAndDeleteOpts) error { + xmres, err := d.findMRes(NewManagedResourceContext(ctx, msvcName), mres.Name) if err != nil { return errors.NewE(err) } @@ -369,7 +477,7 @@ func (d *domain) OnManagedResourceUpdateMessage(ctx ResourceContext, mres entiti recordVersion, err := d.MatchRecordVersion(mres.Annotations, xmres.RecordVersion) if err != nil { - return d.resyncK8sResource(ctx, xmres.EnvironmentName, mres.SyncStatus.Action, &mres.ManagedResource, mres.RecordVersion) + return d.resyncK8sResourceToCluster(ctx, xmres.ClusterName, mres.SyncStatus.Action, &mres.ManagedResource, mres.RecordVersion) } umres, err := d.mresRepo.PatchById( @@ -385,7 +493,7 @@ func (d *domain) OnManagedResourceUpdateMessage(ctx ResourceContext, mres entiti return err } - d.resourceEventPublisher.PublishResourceEvent(ctx, umres.GetResourceType(), umres.GetName(), PublishUpdate) + d.resourceEventPublisher.PublishConsoleEvent(ctx, umres.GetResourceType(), umres.GetName(), PublishUpdate) if mres.SyncedOutputSecretRef != nil { if mres.SyncedOutputSecretRef.Labels == nil { @@ -404,13 +512,11 @@ func (d *domain) OnManagedResourceUpdateMessage(ctx ResourceContext, mres entiti if _, err = d.secretRepo.Upsert(ctx, repos.Filter{ fc.AccountName: ctx.AccountName, - fc.EnvironmentName: ctx.EnvironmentName, fc.MetadataName: mres.SyncedOutputSecretRef.GetName(), fc.MetadataNamespace: mres.SyncedOutputSecretRef.GetNamespace(), }, &entities.Secret{ - Secret: *mres.SyncedOutputSecretRef, - AccountName: ctx.AccountName, - EnvironmentName: ctx.EnvironmentName, + Secret: *mres.SyncedOutputSecretRef, + AccountName: ctx.AccountName, ResourceMetadata: common.ResourceMetadata{ DisplayName: umres.GetName(), CreatedBy: common.CreatedOrUpdatedByResourceSync, @@ -437,10 +543,14 @@ func (d *domain) OnManagedResourceUpdateMessage(ctx ResourceContext, mres entiti return nil } -func (d *domain) OnManagedResourceApplyError(ctx ResourceContext, errMsg string, name string, opts UpdateAndDeleteOpts) error { +func (d *domain) OnManagedResourceApplyError(ctx ConsoleContext, errMsg string, msvcName string, name string, opts UpdateAndDeleteOpts) error { umres, err := d.mresRepo.Patch( ctx, - ctx.DBFilters().Add(fields.MetadataName, name), + repos.Filter{ + fields.AccountName: ctx.AccountName, + fc.ManagedResourceManagedServiceName: msvcName, + fields.MetadataName: name, + }, common.PatchForErrorFromAgent( errMsg, common.PatchOpts{ @@ -451,18 +561,18 @@ func (d *domain) OnManagedResourceApplyError(ctx ResourceContext, errMsg string, if err != nil { return errors.NewE(err) } - d.resourceEventPublisher.PublishResourceEvent(ctx, entities.ResourceTypeManagedResource, umres.Name, PublishDelete) + d.resourceEventPublisher.PublishConsoleEvent(ctx, entities.ResourceTypeManagedResource, umres.Name, PublishDelete) return errors.NewE(err) } -func (d *domain) ResyncManagedResource(ctx ResourceContext, name string) error { - if err := d.canMutateResourcesInEnvironment(ctx); err != nil { +func (d *domain) ResyncManagedResource(ctx ConsoleContext, msvcName string, name string) error { + if err := d.canPerformActionInAccount(ctx, iamT.CreateManagedResource); err != nil { return errors.NewE(err) } - mres, err := d.findMRes(ctx, name) + mres, err := d.findMRes(NewManagedResourceContext(ctx, msvcName), name) if err != nil { return errors.NewE(err) } - return d.resyncK8sResource(ctx, mres.EnvironmentName, mres.SyncStatus.Action, &mres.ManagedResource, mres.RecordVersion) + return d.resyncK8sResourceToCluster(ctx, mres.ClusterName, mres.SyncStatus.Action, &mres.ManagedResource, mres.RecordVersion) } diff --git a/apps/console/internal/entities/field-constants/generated_constants.go b/apps/console/internal/entities/field-constants/generated_constants.go index 690124207..cedf9275f 100644 --- a/apps/console/internal/entities/field-constants/generated_constants.go +++ b/apps/console/internal/entities/field-constants/generated_constants.go @@ -110,6 +110,9 @@ const ( // constant vars generated for struct ManagedResource const ( ManagedResourceEnabled = "enabled" + ManagedResourceIsImported = "isImported" + ManagedResourceManagedServiceName = "managedServiceName" + ManagedResourceMresRef = "mresRef" ManagedResourceOutput = "output" ManagedResourceOutputCredentialsRef = "output.credentialsRef" ManagedResourceOutputCredentialsRefName = "output.credentialsRef.name" diff --git a/apps/console/internal/entities/mres.go b/apps/console/internal/entities/mres.go index c3524ac3b..054355da4 100644 --- a/apps/console/internal/entities/mres.go +++ b/apps/console/internal/entities/mres.go @@ -17,6 +17,7 @@ type ManagedResource struct { AccountName string `json:"accountName" graphql:"noinput"` EnvironmentName string `json:"environmentName" graphql:"noinput"` ManagedServiceName string `json:"managedServiceName" graphql:"noinput"` + ClusterName string `json:"clusterName" graphql:"noinput"` SyncedOutputSecretRef *corev1.Secret `json:"syncedOutputSecretRef" graphql:"noinput"` diff --git a/apps/iam/internal/app/action-role-binding.go b/apps/iam/internal/app/action-role-binding.go index f3ddf13f2..a3c1be372 100644 --- a/apps/iam/internal/app/action-role-binding.go +++ b/apps/iam/internal/app/action-role-binding.go @@ -67,6 +67,13 @@ var roleBindings RoleBindingMap = RoleBindingMap{ t.ListNodepools: []t.Role{t.RoleAccountOwner, t.RoleAccountAdmin, t.RoleAccountMember, t.RoleProjectAdmin, t.RoleProjectMember}, t.GetNodepool: []t.Role{t.RoleAccountOwner, t.RoleAccountAdmin, t.RoleAccountMember, t.RoleProjectAdmin, t.RoleProjectMember}, + // for managed resource + t.CreateManagedResource: []t.Role{t.RoleAccountOwner, t.RoleAccountAdmin, t.RoleAccountMember}, + t.UpdateManagedResource: []t.Role{t.RoleAccountOwner, t.RoleAccountAdmin, t.RoleAccountMember}, + t.DeleteManagedResource: []t.Role{t.RoleAccountOwner, t.RoleAccountAdmin, t.RoleAccountMember}, + t.ListManagedResources: []t.Role{t.RoleAccountOwner, t.RoleAccountAdmin, t.RoleAccountMember, t.RoleProjectAdmin, t.RoleProjectMember}, + t.GetManagedResource: []t.Role{t.RoleAccountOwner, t.RoleAccountAdmin, t.RoleAccountMember, t.RoleProjectAdmin, t.RoleProjectMember}, + // for cloud provider secrets t.CreateCloudProviderSecret: []t.Role{t.RoleAccountOwner, t.RoleAccountAdmin, t.RoleAccountMember}, t.UpdateCloudProviderSecret: []t.Role{t.RoleAccountOwner, t.RoleAccountAdmin, t.RoleAccountMember}, diff --git a/apps/iam/types/types.go b/apps/iam/types/types.go index 66e818f21..859c93580 100644 --- a/apps/iam/types/types.go +++ b/apps/iam/types/types.go @@ -96,6 +96,13 @@ const ( GetNodepool Action = "get-nodepool" UpdateNodepool Action = "update-nodepool" + // managed resource + CreateManagedResource Action = "create-managed-resource" + DeleteManagedResource Action = "delete-managed-resource" + ListManagedResources Action = "list-managed-resources" + GetManagedResource Action = "get-managed-resource" + UpdateManagedResource Action = "update-managed-resource" + CreateCloudProviderSecret Action = "create-cloud-provider-secret" UpdateCloudProviderSecret Action = "update-cloud-provider-secret" DeleteCloudProviderSecret Action = "delete-cloud-provider-secret"