diff --git a/go.mod b/go.mod index b0330779eb..81997dfc9e 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( github.com/mattn/go-isatty v0.0.20 github.com/moby/buildkit v0.26.3 github.com/opencontainers/go-digest v1.0.0 - github.com/scaleway/scaleway-sdk-go v1.0.0-beta.36.0.20260130135251-d983e7b5616c + github.com/scaleway/scaleway-sdk-go v1.0.0-beta.36.0.20260203052142-918ae3efe337 github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 diff --git a/go.sum b/go.sum index 353f3ffef5..b3b68dd885 100644 --- a/go.sum +++ b/go.sum @@ -468,8 +468,8 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.36.0.20260130135251-d983e7b5616c h1:d+fekBfNNjEoRLITir9SgaYq/GyLDVLo1jE9RrsSwoc= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.36.0.20260130135251-d983e7b5616c/go.mod h1:VbEqG0nAXcEFyHLKWwbhgbDNimnLf24Qat73/12DU9o= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.36.0.20260203052142-918ae3efe337 h1:E7zH2bIf8EtLomw/tFgfevq7HJ8mKuBKOm+BEx5YxLc= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.36.0.20260203052142-918ae3efe337/go.mod h1:VbEqG0nAXcEFyHLKWwbhgbDNimnLf24Qat73/12DU9o= github.com/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8= github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM= github.com/secure-systems-lab/go-securesystemslib v0.9.1 h1:nZZaNz4DiERIQguNy0cL5qTdn9lR8XKHf4RUyG1Sx3g= diff --git a/internal/namespaces/datalab/v1beta1/datalab_cli.go b/internal/namespaces/datalab/v1beta1/datalab_cli.go new file mode 100644 index 0000000000..6d19f02d80 --- /dev/null +++ b/internal/namespaces/datalab/v1beta1/datalab_cli.go @@ -0,0 +1,546 @@ +// This file was automatically generated. DO NOT EDIT. +// If you have any remark or suggestion do not hesitate to open an issue. + +package datalab + +import ( + "context" + "reflect" + + "github.com/scaleway/scaleway-cli/v2/core" + datalab "github.com/scaleway/scaleway-sdk-go/api/datalab/v1beta1" + "github.com/scaleway/scaleway-sdk-go/scw" +) + +// always import dependencies +var ( + _ = scw.RegionFrPar +) + +func GetGeneratedCommands() *core.Commands { + return core.NewCommands( + datalabRoot(), + datalabDatalab(), + datalabNodeTypes(), + datalabNotebookVersions(), + datalabClusterVersions(), + datalabDatalabCreate(), + datalabDatalabGet(), + datalabDatalabList(), + datalabDatalabUpdate(), + datalabDatalabDelete(), + datalabNodeTypesList(), + datalabNotebookVersionsList(), + datalabClusterVersionsList(), + ) +} + +func datalabRoot() *core.Command { + return &core.Command{ + Short: `Data Lab API for Apache Sparkā„¢`, + Long: `Data Lab API.`, + Namespace: "datalab", + } +} + +func datalabDatalab() *core.Command { + return &core.Command{ + Short: ``, + Long: `Manage your Datalab.`, + Namespace: "datalab", + Resource: "datalab", + } +} + +func datalabNodeTypes() *core.Command { + return &core.Command{ + Short: ``, + Long: `List available node types. These are the possible compute units that can host the Spark cluster.`, + Namespace: "datalab", + Resource: "node-types", + } +} + +func datalabNotebookVersions() *core.Command { + return &core.Command{ + Short: ``, + Long: `List available notebook versions. Currently it includes JupyterLab.`, + Namespace: "datalab", + Resource: "notebook-versions", + } +} + +func datalabClusterVersions() *core.Command { + return &core.Command{ + Short: ``, + Long: `Lists the Spark versions available for Data Lab creation.`, + Namespace: "datalab", + Resource: "cluster-versions", + } +} + +func datalabDatalabCreate() *core.Command { + return &core.Command{ + Short: `Create datalab resources`, + Long: `Create datalab resources.`, + Namespace: "datalab", + Resource: "datalab", + Verb: "create", + // Deprecated: false, + ArgsType: reflect.TypeOf(datalab.CreateDatalabRequest{}), + ArgSpecs: core.ArgSpecs{ + core.ProjectIDArgSpec(), + { + Name: "name", + Short: `The name of the Data Lab.`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "description", + Short: `The description of the Data Lab.`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "tags.{index}", + Short: `The tags of the Data Lab.`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "main.node-type", + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "worker.node-type", + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "worker.node-count", + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "has-notebook", + Short: `Whether a JupyterLab notebook shall be created with the Data Lab or not.`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "spark-version", + Short: `The version of Spark running inside the Data Lab, available options can be viewed at ListClusterVersions.`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "total-storage.type", + Required: false, + Deprecated: false, + Positional: false, + EnumValues: []string{ + "unknown_type", + "sbs_5k", + }, + }, + { + Name: "total-storage.size", + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "private-network-id", + Short: `The private network to which the Data Lab is connected. Important for accessing the Spark Master URL from a private cluster.`, + Required: false, + Deprecated: false, + Positional: false, + }, + core.RegionArgSpec(scw.RegionFrPar), + }, + Run: func(ctx context.Context, args any) (i any, e error) { + request := args.(*datalab.CreateDatalabRequest) + + client := core.ExtractClient(ctx) + api := datalab.NewAPI(client) + + return api.CreateDatalab(request) + }, + } +} + +func datalabDatalabGet() *core.Command { + return &core.Command{ + Short: `Get datalab resources`, + Long: `Get datalab resources.`, + Namespace: "datalab", + Resource: "datalab", + Verb: "get", + // Deprecated: false, + ArgsType: reflect.TypeOf(datalab.GetDatalabRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "datalab-id", + Short: `The unique identifier of the Data Lab`, + Required: true, + Deprecated: false, + Positional: false, + }, + core.RegionArgSpec(scw.RegionFrPar), + }, + Run: func(ctx context.Context, args any) (i any, e error) { + request := args.(*datalab.GetDatalabRequest) + + client := core.ExtractClient(ctx) + api := datalab.NewAPI(client) + + return api.GetDatalab(request) + }, + } +} + +func datalabDatalabList() *core.Command { + return &core.Command{ + Short: `List datalab resources`, + Long: `List datalab resources.`, + Namespace: "datalab", + Resource: "datalab", + Verb: "list", + // Deprecated: false, + ArgsType: reflect.TypeOf(datalab.ListDatalabsRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "project-id", + Short: `The unique identifier of the project whose Data Labs you want to list.`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "name", + Short: `The name of the Data Lab you want to list.`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "tags.{index}", + Short: `The tags associated with the Data Lab you want to list.`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "order-by", + Short: `The order by field, available options are ` + "`" + `name_asc` + "`" + `, ` + "`" + `name_desc` + "`" + `, ` + "`" + `created_at_asc` + "`" + `, ` + "`" + `created_at_desc` + "`" + `, ` + "`" + `updated_at_asc` + "`" + `, ` + "`" + `updated_at_desc` + "`" + `.`, + Required: false, + Deprecated: false, + Positional: false, + EnumValues: []string{ + "name_asc", + "name_desc", + "created_at_asc", + "created_at_desc", + "updated_at_asc", + "updated_at_desc", + }, + }, + { + Name: "organization-id", + Short: `The unique identifier of the organization whose Data Labs you want to list.`, + Required: false, + Deprecated: false, + Positional: false, + }, + core.RegionArgSpec( + scw.RegionFrPar, + scw.Region(core.AllLocalities), + ), + }, + Run: func(ctx context.Context, args any) (i any, e error) { + request := args.(*datalab.ListDatalabsRequest) + + client := core.ExtractClient(ctx) + api := datalab.NewAPI(client) + opts := []scw.RequestOption{scw.WithAllPages()} + if request.Region == scw.Region(core.AllLocalities) { + opts = append(opts, scw.WithRegions(api.Regions()...)) + request.Region = "" + } + resp, err := api.ListDatalabs(request, opts...) + if err != nil { + return nil, err + } + + return resp.Datalabs, nil + }, + } +} + +func datalabDatalabUpdate() *core.Command { + return &core.Command{ + Short: `Update datalab resources`, + Long: `Update datalab resources.`, + Namespace: "datalab", + Resource: "datalab", + Verb: "update", + // Deprecated: false, + ArgsType: reflect.TypeOf(datalab.UpdateDatalabRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "datalab-id", + Short: `The unique identifier of the Data Lab.`, + Required: true, + Deprecated: false, + Positional: false, + }, + { + Name: "name", + Short: `The updated name of the Data Lab.`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "description", + Short: `The updated description of the Data Lab.`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "tags.{index}", + Short: `The updated tags of the Data Lab`, + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "node-count", + Short: `The updated node count of the Data Lab. Scale up or down the number of worker nodes.`, + Required: false, + Deprecated: false, + Positional: false, + }, + core.RegionArgSpec(scw.RegionFrPar), + }, + Run: func(ctx context.Context, args any) (i any, e error) { + request := args.(*datalab.UpdateDatalabRequest) + + client := core.ExtractClient(ctx) + api := datalab.NewAPI(client) + + return api.UpdateDatalab(request) + }, + } +} + +func datalabDatalabDelete() *core.Command { + return &core.Command{ + Short: `Delete datalab resources`, + Long: `Delete datalab resources.`, + Namespace: "datalab", + Resource: "datalab", + Verb: "delete", + // Deprecated: false, + ArgsType: reflect.TypeOf(datalab.DeleteDatalabRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "datalab-id", + Short: `The unique identifier of the Data Lab.`, + Required: true, + Deprecated: false, + Positional: false, + }, + core.RegionArgSpec(scw.RegionFrPar), + }, + Run: func(ctx context.Context, args any) (i any, e error) { + request := args.(*datalab.DeleteDatalabRequest) + + client := core.ExtractClient(ctx) + api := datalab.NewAPI(client) + + return api.DeleteDatalab(request) + }, + } +} + +func datalabNodeTypesList() *core.Command { + return &core.Command{ + Short: `List datalab resources`, + Long: `List datalab resources.`, + Namespace: "datalab", + Resource: "node-types", + Verb: "list", + // Deprecated: false, + ArgsType: reflect.TypeOf(datalab.ListNodeTypesRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "order-by", + Short: `The order by field. Available fields are ` + "`" + `name_asc` + "`" + `, ` + "`" + `name_desc` + "`" + `, ` + "`" + `vcpus_asc` + "`" + `, ` + "`" + `vcpus_desc` + "`" + `, ` + "`" + `memory_gigabytes_asc` + "`" + `, ` + "`" + `memory_gigabytes_desc` + "`" + `, ` + "`" + `vram_bytes_asc` + "`" + `, ` + "`" + `vram_bytes_desc` + "`" + `, ` + "`" + `gpus_asc` + "`" + `, ` + "`" + `gpus_desc` + "`" + `.`, + Required: false, + Deprecated: false, + Positional: false, + EnumValues: []string{ + "name_asc", + "name_desc", + "vcpus_asc", + "vcpus_desc", + "memory_gigabytes_asc", + "memory_gigabytes_desc", + "vram_bytes_asc", + "vram_bytes_desc", + "gpus_asc", + "gpus_desc", + }, + }, + { + Name: "targets.{index}", + Short: `Filter on the wanted targets, whether it's for main node or worker.`, + Required: false, + Deprecated: false, + Positional: false, + EnumValues: []string{ + "unknown_target", + "notebook", + "worker", + }, + }, + { + Name: "resource-type", + Short: `Filter based on node type ( ` + "`" + `cpu` + "`" + `/` + "`" + `gpu` + "`" + `/` + "`" + `all` + "`" + ` ).`, + Required: false, + Deprecated: false, + Positional: false, + EnumValues: []string{ + "all", + "gpu", + "cpu", + }, + }, + core.RegionArgSpec( + scw.RegionFrPar, + scw.Region(core.AllLocalities), + ), + }, + Run: func(ctx context.Context, args any) (i any, e error) { + request := args.(*datalab.ListNodeTypesRequest) + + client := core.ExtractClient(ctx) + api := datalab.NewAPI(client) + opts := []scw.RequestOption{scw.WithAllPages()} + if request.Region == scw.Region(core.AllLocalities) { + opts = append(opts, scw.WithRegions(api.Regions()...)) + request.Region = "" + } + resp, err := api.ListNodeTypes(request, opts...) + if err != nil { + return nil, err + } + + return resp.NodeTypes, nil + }, + } +} + +func datalabNotebookVersionsList() *core.Command { + return &core.Command{ + Short: `List datalab resources`, + Long: `List datalab resources.`, + Namespace: "datalab", + Resource: "notebook-versions", + Verb: "list", + // Deprecated: false, + ArgsType: reflect.TypeOf(datalab.ListNotebookVersionsRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "order-by", + Short: `The order by field. Available options are ` + "`" + `name_asc` + "`" + ` and ` + "`" + `name_desc` + "`" + `.`, + Required: false, + Deprecated: false, + Positional: false, + EnumValues: []string{ + "name_asc", + "name_desc", + }, + }, + core.RegionArgSpec( + scw.RegionFrPar, + scw.Region(core.AllLocalities), + ), + }, + Run: func(ctx context.Context, args any) (i any, e error) { + request := args.(*datalab.ListNotebookVersionsRequest) + + client := core.ExtractClient(ctx) + api := datalab.NewAPI(client) + opts := []scw.RequestOption{scw.WithAllPages()} + if request.Region == scw.Region(core.AllLocalities) { + opts = append(opts, scw.WithRegions(api.Regions()...)) + request.Region = "" + } + resp, err := api.ListNotebookVersions(request, opts...) + if err != nil { + return nil, err + } + + return resp.Notebooks, nil + }, + } +} + +func datalabClusterVersionsList() *core.Command { + return &core.Command{ + Short: `List datalab resources`, + Long: `List datalab resources.`, + Namespace: "datalab", + Resource: "cluster-versions", + Verb: "list", + // Deprecated: false, + ArgsType: reflect.TypeOf(datalab.ListClusterVersionsRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "order-by", + Short: `The order by field.`, + Required: false, + Deprecated: false, + Positional: false, + EnumValues: []string{ + "name_asc", + "name_desc", + }, + }, + core.RegionArgSpec( + scw.RegionFrPar, + scw.Region(core.AllLocalities), + ), + }, + Run: func(ctx context.Context, args any) (i any, e error) { + request := args.(*datalab.ListClusterVersionsRequest) + + client := core.ExtractClient(ctx) + api := datalab.NewAPI(client) + opts := []scw.RequestOption{scw.WithAllPages()} + if request.Region == scw.Region(core.AllLocalities) { + opts = append(opts, scw.WithRegions(api.Regions()...)) + request.Region = "" + } + resp, err := api.ListClusterVersions(request, opts...) + if err != nil { + return nil, err + } + + return resp.Clusters, nil + }, + } +}