From cfd6c280b093c714cfe221f8b0e134ec68a0ce29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jules=20Cast=C3=A9ran?= Date: Thu, 7 Dec 2023 10:22:19 +0100 Subject: [PATCH] feat(jobs): add commands (#3528) --- ...-usage-jobs-definition-create-usage.golden | 27 +++ ...-usage-jobs-definition-delete-usage.golden | 19 ++ ...all-usage-jobs-definition-get-usage.golden | 19 ++ ...ll-usage-jobs-definition-list-usage.golden | 20 ++ ...l-usage-jobs-definition-start-usage.golden | 19 ++ ...-usage-jobs-definition-update-usage.golden | 27 +++ ...est-all-usage-jobs-definition-usage.golden | 23 ++ .../test-all-usage-jobs-run-get-usage.golden | 19 ++ .../test-all-usage-jobs-run-list-usage.golden | 21 ++ .../test-all-usage-jobs-run-stop-usage.golden | 19 ++ .../test-all-usage-jobs-run-usage.golden | 20 ++ .../testdata/test-all-usage-jobs-usage.golden | 21 ++ cmd/scw/testdata/test-main-usage-usage.golden | 1 + docs/commands/jobs.md | 226 ++++++++++++++++++ internal/namespaces/get_commands.go | 2 + internal/namespaces/jobs/v1alpha1/custom.go | 28 +++ 16 files changed, 511 insertions(+) create mode 100644 cmd/scw/testdata/test-all-usage-jobs-definition-create-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-definition-delete-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-definition-get-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-definition-list-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-definition-start-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-definition-update-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-definition-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-run-get-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-run-list-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-run-stop-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-run-usage.golden create mode 100644 cmd/scw/testdata/test-all-usage-jobs-usage.golden create mode 100644 docs/commands/jobs.md create mode 100644 internal/namespaces/jobs/v1alpha1/custom.go diff --git a/cmd/scw/testdata/test-all-usage-jobs-definition-create-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-definition-create-usage.golden new file mode 100644 index 0000000000..7cd2cfd924 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-definition-create-usage.golden @@ -0,0 +1,27 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Create jobs resources. + +USAGE: + scw jobs definition create [arg=value ...] + +ARGS: + name= + cpu-limit + memory-limit + [image-uri] + [command] + [project-id] Project ID to use. If none is passed the default project ID will be used + [environment-variables.{key}] + [description] + [job-timeout] + [region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw) + +FLAGS: + -h, --help help for create + +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-jobs-definition-delete-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-definition-delete-usage.golden new file mode 100644 index 0000000000..23b3ee13aa --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-definition-delete-usage.golden @@ -0,0 +1,19 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Delete jobs resources. + +USAGE: + scw jobs definition delete [arg=value ...] + +ARGS: + job-definition-id + [region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw) + +FLAGS: + -h, --help help for delete + +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-jobs-definition-get-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-definition-get-usage.golden new file mode 100644 index 0000000000..4309920b67 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-definition-get-usage.golden @@ -0,0 +1,19 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Get jobs resources. + +USAGE: + scw jobs definition get [arg=value ...] + +ARGS: + job-definition-id + [region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw) + +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-jobs-definition-list-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-definition-list-usage.golden new file mode 100644 index 0000000000..e404e74070 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-definition-list-usage.golden @@ -0,0 +1,20 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +List jobs resources. + +USAGE: + scw jobs definition list [arg=value ...] + +ARGS: + [order-by] (created_at_asc | created_at_desc) + [project-id] + [region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw | all) + +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-jobs-definition-start-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-definition-start-usage.golden new file mode 100644 index 0000000000..1c2560e1b2 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-definition-start-usage.golden @@ -0,0 +1,19 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Start jobs resources. + +USAGE: + scw jobs definition start [arg=value ...] + +ARGS: + job-definition-id + [region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw) + +FLAGS: + -h, --help help for start + +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-jobs-definition-update-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-definition-update-usage.golden new file mode 100644 index 0000000000..2135feb498 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-definition-update-usage.golden @@ -0,0 +1,27 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Update jobs resources. + +USAGE: + scw jobs definition update [arg=value ...] + +ARGS: + job-definition-id + [name] + [cpu-limit] + [memory-limit] + [image-uri] + [command] + [environment-variables.{key}] + [description] + [job-timeout] + [region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw) + +FLAGS: + -h, --help help for update + +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-jobs-definition-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-definition-usage.golden new file mode 100644 index 0000000000..8306b0dc85 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-definition-usage.golden @@ -0,0 +1,23 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +USAGE: + scw jobs definition + +AVAILABLE COMMANDS: + create Create jobs resources + delete Delete jobs resources + get Get jobs resources + list List jobs resources + start Start jobs resources + update Update jobs resources + +FLAGS: + -h, --help help for definition + +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 jobs definition [command] --help" for more information about a command. diff --git a/cmd/scw/testdata/test-all-usage-jobs-run-get-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-run-get-usage.golden new file mode 100644 index 0000000000..e91d3e0183 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-run-get-usage.golden @@ -0,0 +1,19 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Get jobs resources. + +USAGE: + scw jobs run get [arg=value ...] + +ARGS: + job-run-id + [region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw) + +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-jobs-run-list-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-run-list-usage.golden new file mode 100644 index 0000000000..e77b202ca5 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-run-list-usage.golden @@ -0,0 +1,21 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +List jobs resources. + +USAGE: + scw jobs run list [arg=value ...] + +ARGS: + [order-by] (created_at_asc | created_at_desc) + [job-definition-id] + [project-id] + [region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw | all) + +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-jobs-run-stop-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-run-stop-usage.golden new file mode 100644 index 0000000000..3879862829 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-run-stop-usage.golden @@ -0,0 +1,19 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Stop jobs resources. + +USAGE: + scw jobs run stop [arg=value ...] + +ARGS: + job-run-id + [region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw) + +FLAGS: + -h, --help help for stop + +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-jobs-run-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-run-usage.golden new file mode 100644 index 0000000000..85715776c1 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-run-usage.golden @@ -0,0 +1,20 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +USAGE: + scw jobs run + +AVAILABLE COMMANDS: + get Get jobs resources + list List jobs resources + stop Stop jobs resources + +FLAGS: + -h, --help help for run + +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 jobs run [command] --help" for more information about a command. diff --git a/cmd/scw/testdata/test-all-usage-jobs-usage.golden b/cmd/scw/testdata/test-all-usage-jobs-usage.golden new file mode 100644 index 0000000000..bfd6fb8c2b --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-jobs-usage.golden @@ -0,0 +1,21 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Serverless Jobs API. + +USAGE: + scw jobs + +AVAILABLE COMMANDS: + definition + run + +FLAGS: + -h, --help help for jobs + +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 jobs [command] --help" for more information about a command. diff --git a/cmd/scw/testdata/test-main-usage-usage.golden b/cmd/scw/testdata/test-main-usage-usage.golden index 875b2789b5..60f96c0272 100644 --- a/cmd/scw/testdata/test-main-usage-usage.golden +++ b/cmd/scw/testdata/test-main-usage-usage.golden @@ -21,6 +21,7 @@ AVAILABLE COMMANDS: instance Instance API iot This API allows you to manage IoT hubs and devices ipam This API allows you to manage IP addresses with Scaleway's IP Address Management tool + jobs Serverless Jobs API k8s Kubernetes API lb This API allows you to manage your Scaleway Load Balancer services marketplace Marketplace API diff --git a/docs/commands/jobs.md b/docs/commands/jobs.md new file mode 100644 index 0000000000..3c254121db --- /dev/null +++ b/docs/commands/jobs.md @@ -0,0 +1,226 @@ + +# Documentation for `scw jobs` +Serverless Jobs API. + +- [](#) + - [Create jobs resources](#create-jobs-resources) + - [Delete jobs resources](#delete-jobs-resources) + - [Get jobs resources](#get-jobs-resources) + - [List jobs resources](#list-jobs-resources) + - [Start jobs resources](#start-jobs-resources) + - [Update jobs resources](#update-jobs-resources) +- [](#) + - [Get jobs resources](#get-jobs-resources) + - [List jobs resources](#list-jobs-resources) + - [Stop jobs resources](#stop-jobs-resources) + + +## + + + + +### Create jobs resources + +Create jobs resources. + +**Usage:** + +``` +scw jobs definition create [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| name | Required
Default: `` | | +| cpu-limit | Required | | +| memory-limit | Required | | +| image-uri | | | +| command | | | +| project-id | | Project ID to use. If none is passed the default project ID will be used | +| environment-variables.{key} | | | +| description | | | +| job-timeout | | | +| region | Default: `fr-par`
One of: `fr-par`, `nl-ams`, `pl-waw` | Region to target. If none is passed will use default region from the config | + + + +### Delete jobs resources + +Delete jobs resources. + +**Usage:** + +``` +scw jobs definition delete [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| job-definition-id | Required | | +| region | Default: `fr-par`
One of: `fr-par`, `nl-ams`, `pl-waw` | Region to target. If none is passed will use default region from the config | + + + +### Get jobs resources + +Get jobs resources. + +**Usage:** + +``` +scw jobs definition get [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| job-definition-id | Required | | +| region | Default: `fr-par`
One of: `fr-par`, `nl-ams`, `pl-waw` | Region to target. If none is passed will use default region from the config | + + + +### List jobs resources + +List jobs resources. + +**Usage:** + +``` +scw jobs definition list [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| order-by | One of: `created_at_asc`, `created_at_desc` | | +| project-id | | | +| region | Default: `fr-par`
One of: `fr-par`, `nl-ams`, `pl-waw`, `all` | Region to target. If none is passed will use default region from the config | + + + +### Start jobs resources + +Start jobs resources. + +**Usage:** + +``` +scw jobs definition start [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| job-definition-id | Required | | +| region | Default: `fr-par`
One of: `fr-par`, `nl-ams`, `pl-waw` | Region to target. If none is passed will use default region from the config | + + + +### Update jobs resources + +Update jobs resources. + +**Usage:** + +``` +scw jobs definition update [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| job-definition-id | Required | | +| name | | | +| cpu-limit | | | +| memory-limit | | | +| image-uri | | | +| command | | | +| environment-variables.{key} | | | +| description | | | +| job-timeout | | | +| region | Default: `fr-par`
One of: `fr-par`, `nl-ams`, `pl-waw` | Region to target. If none is passed will use default region from the config | + + + +## + + + + +### Get jobs resources + +Get jobs resources. + +**Usage:** + +``` +scw jobs run get [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| job-run-id | Required | | +| region | Default: `fr-par`
One of: `fr-par`, `nl-ams`, `pl-waw` | Region to target. If none is passed will use default region from the config | + + + +### List jobs resources + +List jobs resources. + +**Usage:** + +``` +scw jobs run list [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| order-by | One of: `created_at_asc`, `created_at_desc` | | +| job-definition-id | | | +| project-id | | | +| region | Default: `fr-par`
One of: `fr-par`, `nl-ams`, `pl-waw`, `all` | Region to target. If none is passed will use default region from the config | + + + +### Stop jobs resources + +Stop jobs resources. + +**Usage:** + +``` +scw jobs run stop [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| job-run-id | Required | | +| region | Default: `fr-par`
One of: `fr-par`, `nl-ams`, `pl-waw` | Region to target. If none is passed will use default region from the config | + + + diff --git a/internal/namespaces/get_commands.go b/internal/namespaces/get_commands.go index cab51f0d19..f4a8ec4878 100644 --- a/internal/namespaces/get_commands.go +++ b/internal/namespaces/get_commands.go @@ -25,6 +25,7 @@ import ( "github.com/scaleway/scaleway-cli/v2/internal/namespaces/iot/v1" "github.com/scaleway/scaleway-cli/v2/internal/namespaces/ipam/v1" ipfs "github.com/scaleway/scaleway-cli/v2/internal/namespaces/ipfs/v1alpha1" + jobs "github.com/scaleway/scaleway-cli/v2/internal/namespaces/jobs/v1alpha1" "github.com/scaleway/scaleway-cli/v2/internal/namespaces/k8s/v1" "github.com/scaleway/scaleway-cli/v2/internal/namespaces/lb/v1" "github.com/scaleway/scaleway-cli/v2/internal/namespaces/marketplace/v2" @@ -90,6 +91,7 @@ func GetCommands() *core.Commands { mnq.GetCommands(), block.GetCommands(), ipam.GetCommands(), + jobs.GetCommands(), ) //if beta {} diff --git a/internal/namespaces/jobs/v1alpha1/custom.go b/internal/namespaces/jobs/v1alpha1/custom.go new file mode 100644 index 0000000000..34287be829 --- /dev/null +++ b/internal/namespaces/jobs/v1alpha1/custom.go @@ -0,0 +1,28 @@ +package jobs + +import ( + "github.com/fatih/color" + "github.com/scaleway/scaleway-cli/v2/internal/core" + "github.com/scaleway/scaleway-cli/v2/internal/human" + jobs "github.com/scaleway/scaleway-sdk-go/api/jobs/v1alpha1" +) + +var ( + jobRunStateMarshalSpecs = human.EnumMarshalSpecs{ + jobs.JobRunStateUnknownState: &human.EnumMarshalSpec{Attribute: color.Faint}, + jobs.JobRunStateQueued: &human.EnumMarshalSpec{Attribute: color.FgBlue}, + jobs.JobRunStateScheduled: &human.EnumMarshalSpec{Attribute: color.FgBlue}, + jobs.JobRunStateRunning: &human.EnumMarshalSpec{Attribute: color.FgBlue}, + jobs.JobRunStateSucceeded: &human.EnumMarshalSpec{Attribute: color.FgBlue}, + jobs.JobRunStateFailed: &human.EnumMarshalSpec{Attribute: color.FgRed}, + jobs.JobRunStateCanceled: &human.EnumMarshalSpec{Attribute: color.FgRed}, + } +) + +func GetCommands() *core.Commands { + cmds := GetGeneratedCommands() + + human.RegisterMarshalerFunc(jobs.JobRunState(""), human.EnumMarshalFunc(jobRunStateMarshalSpecs)) + + return cmds +}