diff --git a/cmd/scw/testdata/test-all-usage-baremetal-server-get-metrics-usage.golden b/cmd/scw/testdata/test-all-usage-baremetal-server-get-metrics-usage.golden new file mode 100644 index 0000000000..271bb365ff --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-baremetal-server-get-metrics-usage.golden @@ -0,0 +1,19 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +Get the ping status of the server associated with the ID. + +USAGE: + scw baremetal server get-metrics [arg=value ...] + +ARGS: + server-id Server ID to get the metrics + [zone=fr-par-1] Zone to target. If none is passed will use default zone from the config (fr-par-1 | fr-par-2 | nl-ams-1) + +FLAGS: + -h, --help help for get-metrics + +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-baremetal-server-list-events-usage.golden b/cmd/scw/testdata/test-all-usage-baremetal-server-list-events-usage.golden new file mode 100644 index 0000000000..575e091728 --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-baremetal-server-list-events-usage.golden @@ -0,0 +1,20 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +πŸŸ₯πŸŸ₯πŸŸ₯ STDERR️️ πŸŸ₯πŸŸ₯πŸŸ₯️ +List event (i.e. start/stop/reboot) associated to the server ID. + +USAGE: + scw baremetal server list-events [arg=value ...] + +ARGS: + server-id ID of the server events searched + [order-by] Order of the server events (created_at_asc | created_at_desc) + [zone=fr-par-1] Zone to target. If none is passed will use default zone from the config (fr-par-1 | fr-par-2 | nl-ams-1 | all) + +FLAGS: + -h, --help help for list-events + +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-baremetal-server-usage.golden b/cmd/scw/testdata/test-all-usage-baremetal-server-usage.golden index 0283e2af72..9f17c649b6 100644 --- a/cmd/scw/testdata/test-all-usage-baremetal-server-usage.golden +++ b/cmd/scw/testdata/test-all-usage-baremetal-server-usage.golden @@ -9,8 +9,10 @@ AVAILABLE COMMANDS: create Create an Elastic Metal server delete Delete an Elastic Metal server get Get a specific Elastic Metal server + get-metrics Return server metrics install Install an Elastic Metal server list List Elastic Metal servers for an organization + list-events List server events reboot Reboot an Elastic Metal server start Start an Elastic Metal server stop Stop an Elastic Metal server diff --git a/docs/commands/baremetal.md b/docs/commands/baremetal.md index 60cc0cb1dc..1d3dd37c5c 100644 --- a/docs/commands/baremetal.md +++ b/docs/commands/baremetal.md @@ -26,8 +26,10 @@ Elastic Metal API. - [Create an Elastic Metal server](#create-an-elastic-metal-server) - [Delete an Elastic Metal server](#delete-an-elastic-metal-server) - [Get a specific Elastic Metal server](#get-a-specific-elastic-metal-server) + - [Return server metrics](#return-server-metrics) - [Install an Elastic Metal server](#install-an-elastic-metal-server) - [List Elastic Metal servers for an organization](#list-elastic-metal-servers-for-an-organization) + - [List server events](#list-server-events) - [Reboot an Elastic Metal server](#reboot-an-elastic-metal-server) - [Start an Elastic Metal server](#start-an-elastic-metal-server) - [Stop an Elastic Metal server](#stop-an-elastic-metal-server) @@ -582,6 +584,26 @@ scw baremetal server get 11111111-1111-1111-1111-111111111111 +### Return server metrics + +Get the ping status of the server associated with the ID. + +**Usage:** + +``` +scw baremetal server get-metrics [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| server-id | Required | Server ID to get the metrics | +| zone | Default: `fr-par-1`
One of: `fr-par-1`, `fr-par-2`, `nl-ams-1` | Zone to target. If none is passed will use default zone from the config | + + + ### Install an Elastic Metal server Install an Operating System (OS) on the Elastic Metal server with a specific ID. @@ -656,6 +678,27 @@ scw baremetal server list +### List server events + +List event (i.e. start/stop/reboot) associated to the server ID. + +**Usage:** + +``` +scw baremetal server list-events [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| server-id | Required | ID of the server events searched | +| order-by | One of: `created_at_asc`, `created_at_desc` | Order of the server events | +| zone | Default: `fr-par-1`
One of: `fr-par-1`, `fr-par-2`, `nl-ams-1`, `all` | Zone to target. If none is passed will use default zone from the config | + + + ### Reboot an Elastic Metal server Reboot the Elastic Metal server associated with the ID, use the `boot_type` `rescue` to reboot the server in rescue mode. diff --git a/internal/namespaces/baremetal/v1/baremetal_cli.go b/internal/namespaces/baremetal/v1/baremetal_cli.go index b70872970e..64b6cc0e7b 100644 --- a/internal/namespaces/baremetal/v1/baremetal_cli.go +++ b/internal/namespaces/baremetal/v1/baremetal_cli.go @@ -32,10 +32,12 @@ func GetGeneratedCommands() *core.Commands { baremetalServerCreate(), baremetalServerUpdate(), baremetalServerInstall(), + baremetalServerGetMetrics(), baremetalServerDelete(), baremetalServerReboot(), baremetalServerStart(), baremetalServerStop(), + baremetalServerListEvents(), baremetalBmcStart(), baremetalBmcGet(), baremetalBmcStop(), @@ -532,6 +534,36 @@ func baremetalServerInstall() *core.Command { } } +func baremetalServerGetMetrics() *core.Command { + return &core.Command{ + Short: `Return server metrics`, + Long: `Get the ping status of the server associated with the ID.`, + Namespace: "baremetal", + Resource: "server", + Verb: "get-metrics", + // Deprecated: false, + ArgsType: reflect.TypeOf(baremetal.GetServerMetricsRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "server-id", + Short: `Server ID to get the metrics`, + Required: true, + Deprecated: false, + Positional: false, + }, + core.ZoneArgSpec(scw.ZoneFrPar1, scw.ZoneFrPar2, scw.ZoneNlAms1), + }, + Run: func(ctx context.Context, args interface{}) (i interface{}, e error) { + request := args.(*baremetal.GetServerMetricsRequest) + + client := core.ExtractClient(ctx) + api := baremetal.NewAPI(client) + return api.GetServerMetrics(request) + + }, + } +} + func baremetalServerDelete() *core.Command { return &core.Command{ Short: `Delete an Elastic Metal server`, @@ -700,6 +732,53 @@ func baremetalServerStop() *core.Command { } } +func baremetalServerListEvents() *core.Command { + return &core.Command{ + Short: `List server events`, + Long: `List event (i.e. start/stop/reboot) associated to the server ID.`, + Namespace: "baremetal", + Resource: "server", + Verb: "list-events", + // Deprecated: false, + ArgsType: reflect.TypeOf(baremetal.ListServerEventsRequest{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "server-id", + Short: `ID of the server events searched`, + Required: true, + Deprecated: false, + Positional: false, + }, + { + Name: "order-by", + Short: `Order of the server events`, + Required: false, + Deprecated: false, + Positional: false, + EnumValues: []string{"created_at_asc", "created_at_desc"}, + }, + core.ZoneArgSpec(scw.ZoneFrPar1, scw.ZoneFrPar2, scw.ZoneNlAms1, scw.Zone(core.AllLocalities)), + }, + Run: func(ctx context.Context, args interface{}) (i interface{}, e error) { + request := args.(*baremetal.ListServerEventsRequest) + + client := core.ExtractClient(ctx) + api := baremetal.NewAPI(client) + opts := []scw.RequestOption{scw.WithAllPages()} + if request.Zone == scw.Zone(core.AllLocalities) { + opts = append(opts, scw.WithZones(api.Zones()...)) + request.Zone = "" + } + resp, err := api.ListServerEvents(request, opts...) + if err != nil { + return nil, err + } + return resp.Events, nil + + }, + } +} + func baremetalBmcStart() *core.Command { return &core.Command{ Short: `Start BMC access`,