Skip to content

Commit 0c951e6

Browse files
authored
feat(k8s): add wait and status color to k8s node (#774)
1 parent d19ad40 commit 0c951e6

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

cmd/scw/testdata/test-all-usage-k8s-node-reboot-usage.stderr.golden

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ ARGS:
99

1010
FLAGS:
1111
-h, --help help for reboot
12+
-w, --wait wait until the node is ready
1213

1314
GLOBAL FLAGS:
1415
-D, --debug Enable debug mode

internal/namespaces/k8s/v1beta4/custom.go

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ func GetCommands() *core.Commands {
1717

1818
human.RegisterMarshalerFunc(k8s.ClusterStatus(0), human.BindAttributesMarshalFunc(clusterStatusAttributes))
1919
human.RegisterMarshalerFunc(k8s.PoolStatus(0), human.BindAttributesMarshalFunc(poolStatusAttributes))
20+
human.RegisterMarshalerFunc(k8s.NodeStatus(0), human.BindAttributesMarshalFunc(nodeStatusAttributes))
2021

2122
cmds.MustFind("k8s", "cluster", "list-available-versions").Override(clusterAvailableVersionsListBuilder)
2223
cmds.MustFind("k8s", "cluster", "create").Override(clusterCreateBuilder)
@@ -29,5 +30,7 @@ func GetCommands() *core.Commands {
2930
cmds.MustFind("k8s", "pool", "upgrade").Override(poolUpgradeBuilder)
3031
cmds.MustFind("k8s", "pool", "delete").Override(poolDeleteBuilder)
3132

33+
cmds.MustFind("k8s", "node", "reboot").Override(nodeRebootBuilder)
34+
3235
return cmds
3336
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package k8s
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/fatih/color"
8+
"github.com/scaleway/scaleway-cli/internal/core"
9+
"github.com/scaleway/scaleway-cli/internal/human"
10+
k8s "github.com/scaleway/scaleway-sdk-go/api/k8s/v1beta4"
11+
"github.com/scaleway/scaleway-sdk-go/scw"
12+
)
13+
14+
const (
15+
nodeActionTimeout = 10 * time.Minute
16+
)
17+
18+
var (
19+
// nodeStatusAttributes allows to override the displayed status color
20+
nodeStatusAttributes = human.Attributes{
21+
k8s.NodeStatusCreating: color.FgBlue,
22+
k8s.NodeStatusRebooting: color.FgBlue,
23+
k8s.NodeStatusReady: color.FgGreen,
24+
k8s.NodeStatusNotready: color.FgYellow,
25+
k8s.NodeStatusCreationError: color.FgRed,
26+
k8s.NodeStatusLocked: color.FgRed,
27+
k8s.NodeStatusWarning: color.FgHiYellow,
28+
}
29+
)
30+
31+
const (
32+
nodeActionReboot = iota
33+
)
34+
35+
func nodeRebootBuilder(c *core.Command) *core.Command {
36+
c.WaitFunc = waitForNodeFunc(nodeActionReboot)
37+
return c
38+
}
39+
40+
func waitForNodeFunc(action int) core.WaitFunc {
41+
return func(ctx context.Context, _, respI interface{}) (interface{}, error) {
42+
node, err := k8s.NewAPI(core.ExtractClient(ctx)).WaitForNode(&k8s.WaitForNodeRequest{
43+
Region: respI.(*k8s.Node).Region,
44+
NodeID: respI.(*k8s.Node).ID,
45+
Timeout: scw.DurationPtr(nodeActionTimeout),
46+
})
47+
switch action {
48+
case nodeActionReboot:
49+
return node, err
50+
}
51+
return nil, err
52+
}
53+
}

0 commit comments

Comments
 (0)