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`,