Skip to content

Commit 9608a1c

Browse files
committed
feat(k8s): add wait flag to cluster actions
Signed-off-by: Patrik Cyvoct <[email protected]>
1 parent 8d9afd0 commit 9608a1c

File tree

4 files changed

+54
-0
lines changed

4 files changed

+54
-0
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ require (
2626
github.com/spf13/pflag v1.0.5 // indirect
2727
github.com/stretchr/testify v1.4.0
2828
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586
29+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543
2930
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
3031
gopkg.in/yaml.v2 v2.2.5 // indirect
3132
)

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193
127127
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
128128
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
129129
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
130+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
131+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
130132
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
131133
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
132134
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=

internal/namespaces/k8s/v1beta4/custom.go

+4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ func GetCommands() *core.Commands {
1818
human.RegisterMarshalerFunc(k8s.ClusterStatus(0), human.BindAttributesMarshalFunc(clusterStatusAttributes))
1919

2020
cmds.MustFind("k8s", "cluster", "list-available-versions").Override(clusterAvailableVersionsListBuilder)
21+
cmds.MustFind("k8s", "cluster", "create").Override(clusterCreateBuilder)
22+
cmds.MustFind("k8s", "cluster", "update").Override(clusterUpdateBuilder)
23+
cmds.MustFind("k8s", "cluster", "upgrade").Override(clusterUpgradeBuilder)
24+
cmds.MustFind("k8s", "cluster", "delete").Override(clusterDeleteBuilder)
2125

2226
return cmds
2327
}

internal/namespaces/k8s/v1beta4/custom_cluster.go

+47
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,20 @@ package k8s
22

33
import (
44
"context"
5+
"fmt"
6+
"net/http"
7+
"time"
58

69
"github.com/fatih/color"
710
"github.com/scaleway/scaleway-cli/internal/core"
811
"github.com/scaleway/scaleway-cli/internal/human"
912
k8s "github.com/scaleway/scaleway-sdk-go/api/k8s/v1beta4"
13+
"github.com/scaleway/scaleway-sdk-go/scw"
14+
"golang.org/x/xerrors"
15+
)
16+
17+
const (
18+
clusterActionTimeout = 10 * time.Minute
1019
)
1120

1221
//
@@ -40,3 +49,41 @@ func clusterAvailableVersionsListBuilder(c *core.Command) *core.Command {
4049

4150
return c
4251
}
52+
53+
func clusterCreateBuilder(c *core.Command) *core.Command {
54+
c.WaitFunc = waitForClusterFunc()
55+
return c
56+
}
57+
58+
func clusterDeleteBuilder(c *core.Command) *core.Command {
59+
c.WaitFunc = waitForClusterFunc()
60+
return c
61+
}
62+
63+
func clusterUpgradeBuilder(c *core.Command) *core.Command {
64+
c.WaitFunc = waitForClusterFunc()
65+
return c
66+
}
67+
68+
func clusterUpdateBuilder(c *core.Command) *core.Command {
69+
c.WaitFunc = waitForClusterFunc()
70+
return c
71+
}
72+
73+
func waitForClusterFunc() core.WaitFunc {
74+
return func(ctx context.Context, _, respI interface{}) (interface{}, error) {
75+
cluster, err := k8s.NewAPI(core.ExtractClient(ctx)).WaitForCluster(&k8s.WaitForClusterRequest{
76+
Region: respI.(*k8s.Cluster).Region,
77+
ClusterID: respI.(*k8s.Cluster).ID,
78+
Timeout: scw.DurationPtr(clusterActionTimeout),
79+
})
80+
if err != nil {
81+
notFoundError := &scw.ResourceNotFoundError{}
82+
responseError := &scw.ResponseError{}
83+
if xerrors.As(err, &responseError) && responseError.StatusCode == http.StatusNotFound || xerrors.As(err, &notFoundError) {
84+
return fmt.Sprintf("Cluster %s successfully deleted.", respI.(*k8s.Cluster).ID), nil
85+
}
86+
}
87+
return cluster, nil
88+
}
89+
}

0 commit comments

Comments
 (0)