diff --git a/cmd/scw/testdata/test-all-usage-marketplace-category-get-usage.golden b/cmd/scw/testdata/test-all-usage-marketplace-category-get-usage.golden new file mode 100644 index 0000000000..11f6ab84a3 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-marketplace-category-get-usage.golden @@ -0,0 +1,18 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Get marketplace resources. + +USAGE: + scw marketplace category get [arg=value ...] + +ARGS: + category-id + +FLAGS: + -h, --help help for get + +GLOBAL FLAGS: + -c, --config string The path to the config file + -D, --debug Enable debug mode + -o, --output string Output format: json or human, see 'scw help output' for more info (default "human") + -p, --profile string The config profile to use diff --git a/cmd/scw/testdata/test-all-usage-marketplace-category-list-usage.golden b/cmd/scw/testdata/test-all-usage-marketplace-category-list-usage.golden new file mode 100644 index 0000000000..ac4905564e --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-marketplace-category-list-usage.golden @@ -0,0 +1,15 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +List marketplace resources. + +USAGE: + scw marketplace category list + +FLAGS: + -h, --help help for list + +GLOBAL FLAGS: + -c, --config string The path to the config file + -D, --debug Enable debug mode + -o, --output string Output format: json or human, see 'scw help output' for more info (default "human") + -p, --profile string The config profile to use diff --git a/cmd/scw/testdata/test-all-usage-marketplace-category-usage.golden b/cmd/scw/testdata/test-all-usage-marketplace-category-usage.golden new file mode 100644 index 0000000000..1703d430f6 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-marketplace-category-usage.golden @@ -0,0 +1,21 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Marketplace category management commands. + +USAGE: + scw marketplace category + +AVAILABLE COMMANDS: + get Get marketplace resources + list List marketplace resources + +FLAGS: + -h, --help help for category + +GLOBAL FLAGS: + -c, --config string The path to the config file + -D, --debug Enable debug mode + -o, --output string Output format: json or human, see 'scw help output' for more info (default "human") + -p, --profile string The config profile to use + +Use "scw marketplace category [command] --help" for more information about a command. diff --git a/cmd/scw/testdata/test-all-usage-marketplace-local-image-get-usage.golden b/cmd/scw/testdata/test-all-usage-marketplace-local-image-get-usage.golden new file mode 100644 index 0000000000..898a3563f9 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-marketplace-local-image-get-usage.golden @@ -0,0 +1,18 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Get marketplace resources. + +USAGE: + scw marketplace local-image get [arg=value ...] + +ARGS: + local-image-id + +FLAGS: + -h, --help help for get + +GLOBAL FLAGS: + -c, --config string The path to the config file + -D, --debug Enable debug mode + -o, --output string Output format: json or human, see 'scw help output' for more info (default "human") + -p, --profile string The config profile to use diff --git a/cmd/scw/testdata/test-all-usage-marketplace-local-image-usage.golden b/cmd/scw/testdata/test-all-usage-marketplace-local-image-usage.golden index 546e678c9f..58684ab19d 100644 --- a/cmd/scw/testdata/test-all-usage-marketplace-local-image-usage.golden +++ b/cmd/scw/testdata/test-all-usage-marketplace-local-image-usage.golden @@ -6,6 +6,7 @@ USAGE: scw marketplace local-image AVAILABLE COMMANDS: + get Get marketplace resources list List local images from a specific image or version FLAGS: diff --git a/cmd/scw/testdata/test-all-usage-marketplace-usage.golden b/cmd/scw/testdata/test-all-usage-marketplace-usage.golden index df21e4fdea..18ec6b6da1 100644 --- a/cmd/scw/testdata/test-all-usage-marketplace-usage.golden +++ b/cmd/scw/testdata/test-all-usage-marketplace-usage.golden @@ -6,8 +6,10 @@ USAGE: scw marketplace AVAILABLE COMMANDS: + category Marketplace category management commands image Marketplace images management commands local-image Marketplace Local Images management commands + version Marketplace version management commands FLAGS: -h, --help help for marketplace diff --git a/cmd/scw/testdata/test-all-usage-marketplace-version-get-usage.golden b/cmd/scw/testdata/test-all-usage-marketplace-version-get-usage.golden new file mode 100644 index 0000000000..19fcb21171 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-marketplace-version-get-usage.golden @@ -0,0 +1,18 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Get marketplace resources. + +USAGE: + scw marketplace version get [arg=value ...] + +ARGS: + version-id + +FLAGS: + -h, --help help for get + +GLOBAL FLAGS: + -c, --config string The path to the config file + -D, --debug Enable debug mode + -o, --output string Output format: json or human, see 'scw help output' for more info (default "human") + -p, --profile string The config profile to use diff --git a/cmd/scw/testdata/test-all-usage-marketplace-version-list-usage.golden b/cmd/scw/testdata/test-all-usage-marketplace-version-list-usage.golden new file mode 100644 index 0000000000..28c02d1987 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-marketplace-version-list-usage.golden @@ -0,0 +1,19 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +List marketplace resources. + +USAGE: + scw marketplace version list [arg=value ...] + +ARGS: + [image-id] + [order-by] (created_at_asc | created_at_desc) + +FLAGS: + -h, --help help for list + +GLOBAL FLAGS: + -c, --config string The path to the config file + -D, --debug Enable debug mode + -o, --output string Output format: json or human, see 'scw help output' for more info (default "human") + -p, --profile string The config profile to use diff --git a/cmd/scw/testdata/test-all-usage-marketplace-version-usage.golden b/cmd/scw/testdata/test-all-usage-marketplace-version-usage.golden new file mode 100644 index 0000000000..e6afa2c1c6 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-marketplace-version-usage.golden @@ -0,0 +1,21 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Marketplace version management commands. + +USAGE: + scw marketplace version + +AVAILABLE COMMANDS: + get Get marketplace resources + list List marketplace resources + +FLAGS: + -h, --help help for version + +GLOBAL FLAGS: + -c, --config string The path to the config file + -D, --debug Enable debug mode + -o, --output string Output format: json or human, see 'scw help output' for more info (default "human") + -p, --profile string The config profile to use + +Use "scw marketplace version [command] --help" for more information about a command. diff --git a/docs/commands/marketplace.md b/docs/commands/marketplace.md index 74b2f8e8b1..b094903ee0 100644 --- a/docs/commands/marketplace.md +++ b/docs/commands/marketplace.md @@ -2,13 +2,56 @@ # Documentation for `scw marketplace` Marketplace API. +- [Marketplace category management commands](#marketplace-category-management-commands) + - [Get marketplace resources](#get-marketplace-resources) + - [List marketplace resources](#list-marketplace-resources) - [Marketplace images management commands](#marketplace-images-management-commands) - [Get a specific marketplace image](#get-a-specific-marketplace-image) - [List marketplace images](#list-marketplace-images) - [Marketplace Local Images management commands](#marketplace-local-images-management-commands) + - [Get marketplace resources](#get-marketplace-resources) - [List local images from a specific image or version](#list-local-images-from-a-specific-image-or-version) +- [Marketplace version management commands](#marketplace-version-management-commands) + - [Get marketplace resources](#get-marketplace-resources) + - [List marketplace resources](#list-marketplace-resources) +## Marketplace category management commands + +Marketplace category management commands. + + +### Get marketplace resources + +Get marketplace resources. + +**Usage:** + +``` +scw marketplace category get [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| category-id | Required | | + + + +### List marketplace resources + +List marketplace resources. + +**Usage:** + +``` +scw marketplace category list +``` + + + ## Marketplace images management commands Marketplace images management commands. @@ -60,6 +103,25 @@ scw marketplace image list [arg=value ...] Marketplace Local Images management commands. +### Get marketplace resources + +Get marketplace resources. + +**Usage:** + +``` +scw marketplace local-image get [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| local-image-id | Required | | + + + ### List local images from a specific image or version List local images from a specific image or version. @@ -83,3 +145,47 @@ scw marketplace local-image list [arg=value ...] +## Marketplace version management commands + +Marketplace version management commands. + + +### Get marketplace resources + +Get marketplace resources. + +**Usage:** + +``` +scw marketplace version get [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| version-id | Required | | + + + +### List marketplace resources + +List marketplace resources. + +**Usage:** + +``` +scw marketplace version list [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| image-id | | | +| order-by | One of: `created_at_asc`, `created_at_desc` | | + + + diff --git a/go.mod b/go.mod index f42a3b7ba7..d165d5249b 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/moby/buildkit v0.11.4 github.com/opencontainers/go-digest v1.0.0 github.com/pkg/errors v0.9.1 - github.com/scaleway/scaleway-sdk-go v1.0.0-beta.15.0.20230322194848-b93be9bb5355 + github.com/scaleway/scaleway-sdk-go v1.0.0-beta.15.0.20230323101524-c017498bf616 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.8.2 diff --git a/go.sum b/go.sum index 44814d7a06..dfeb00a174 100644 --- a/go.sum +++ b/go.sum @@ -192,8 +192,8 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.15.0.20230322194848-b93be9bb5355 h1:aHNVwBytdB7wkPgNiHnIHEPTkiRbMiCo6LnGIpPdg3k= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.15.0.20230322194848-b93be9bb5355/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.15.0.20230323101524-c017498bf616 h1:7zcfy2f51uoLQyFzguQXa5rxDzyy8md6eWTuwFn3sis= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.15.0.20230323101524-c017498bf616/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= github.com/secure-systems-lab/go-securesystemslib v0.4.0 h1:b23VGrQhTA8cN2CbBw7/FulN9fTtqYUdS5+Oxzt+DUE= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= diff --git a/internal/namespaces/marketplace/v2/marketplace_cli.go b/internal/namespaces/marketplace/v2/marketplace_cli.go index bda4d6ce00..a8bbd77fc4 100644 --- a/internal/namespaces/marketplace/v2/marketplace_cli.go +++ b/internal/namespaces/marketplace/v2/marketplace_cli.go @@ -22,9 +22,16 @@ func GetGeneratedCommands() *core.Commands { marketplaceRoot(), marketplaceImage(), marketplaceLocalImage(), + marketplaceVersion(), + marketplaceCategory(), marketplaceImageList(), marketplaceImageGet(), + marketplaceVersionList(), + marketplaceVersionGet(), marketplaceLocalImageList(), + marketplaceLocalImageGet(), + marketplaceCategoryList(), + marketplaceCategoryGet(), ) } func marketplaceRoot() *core.Command { @@ -53,6 +60,24 @@ func marketplaceLocalImage() *core.Command { } } +func marketplaceVersion() *core.Command { + return &core.Command{ + Short: `Marketplace version management commands`, + Long: `Marketplace version management commands.`, + Namespace: "marketplace", + Resource: "version", + } +} + +func marketplaceCategory() *core.Command { + return &core.Command{ + Short: `Marketplace category management commands`, + Long: `Marketplace category management commands.`, + Namespace: "marketplace", + Resource: "category", + } +} + func marketplaceImageList() *core.Command { return &core.Command{ Short: `List marketplace images`, @@ -173,6 +198,74 @@ func marketplaceImageGet() *core.Command { } } +func marketplaceVersionList() *core.Command { + return &core.Command{ + Short: `List marketplace resources`, + Long: `List marketplace resources.`, + Namespace: "marketplace", + Resource: "version", + Verb: "list", + // Deprecated: false, + ArgsType: reflect.TypeOf(marketplace.ListVersionsRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "image-id", + Required: false, + Deprecated: false, + Positional: false, + }, + { + Name: "order-by", + Required: false, + Deprecated: false, + Positional: false, + EnumValues: []string{"created_at_asc", "created_at_desc"}, + }, + }, + Run: func(ctx context.Context, args interface{}) (i interface{}, e error) { + request := args.(*marketplace.ListVersionsRequest) + + client := core.ExtractClient(ctx) + api := marketplace.NewAPI(client) + opts := []scw.RequestOption{scw.WithAllPages()} + resp, err := api.ListVersions(request, opts...) + if err != nil { + return nil, err + } + return resp.Versions, nil + + }, + } +} + +func marketplaceVersionGet() *core.Command { + return &core.Command{ + Short: `Get marketplace resources`, + Long: `Get marketplace resources.`, + Namespace: "marketplace", + Resource: "version", + Verb: "get", + // Deprecated: false, + ArgsType: reflect.TypeOf(marketplace.GetVersionRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "version-id", + Required: true, + Deprecated: false, + Positional: false, + }, + }, + Run: func(ctx context.Context, args interface{}) (i interface{}, e error) { + request := args.(*marketplace.GetVersionRequest) + + client := core.ExtractClient(ctx) + api := marketplace.NewAPI(client) + return api.GetVersion(request) + + }, + } +} + func marketplaceLocalImageList() *core.Command { return &core.Command{ Short: `List local images from a specific image or version`, @@ -230,3 +323,85 @@ func marketplaceLocalImageList() *core.Command { }, } } + +func marketplaceLocalImageGet() *core.Command { + return &core.Command{ + Short: `Get marketplace resources`, + Long: `Get marketplace resources.`, + Namespace: "marketplace", + Resource: "local-image", + Verb: "get", + // Deprecated: false, + ArgsType: reflect.TypeOf(marketplace.GetLocalImageRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "local-image-id", + Required: true, + Deprecated: false, + Positional: false, + }, + }, + Run: func(ctx context.Context, args interface{}) (i interface{}, e error) { + request := args.(*marketplace.GetLocalImageRequest) + + client := core.ExtractClient(ctx) + api := marketplace.NewAPI(client) + return api.GetLocalImage(request) + + }, + } +} + +func marketplaceCategoryList() *core.Command { + return &core.Command{ + Short: `List marketplace resources`, + Long: `List marketplace resources.`, + Namespace: "marketplace", + Resource: "category", + Verb: "list", + // Deprecated: false, + ArgsType: reflect.TypeOf(marketplace.ListCategoriesRequest{}), + ArgSpecs: core.ArgSpecs{}, + Run: func(ctx context.Context, args interface{}) (i interface{}, e error) { + request := args.(*marketplace.ListCategoriesRequest) + + client := core.ExtractClient(ctx) + api := marketplace.NewAPI(client) + opts := []scw.RequestOption{scw.WithAllPages()} + resp, err := api.ListCategories(request, opts...) + if err != nil { + return nil, err + } + return resp.Categories, nil + + }, + } +} + +func marketplaceCategoryGet() *core.Command { + return &core.Command{ + Short: `Get marketplace resources`, + Long: `Get marketplace resources.`, + Namespace: "marketplace", + Resource: "category", + Verb: "get", + // Deprecated: false, + ArgsType: reflect.TypeOf(marketplace.GetCategoryRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "category-id", + Required: true, + Deprecated: false, + Positional: false, + }, + }, + Run: func(ctx context.Context, args interface{}) (i interface{}, e error) { + request := args.(*marketplace.GetCategoryRequest) + + client := core.ExtractClient(ctx) + api := marketplace.NewAPI(client) + return api.GetCategory(request) + + }, + } +}