Skip to content

Commit df8df43

Browse files
authored
Merge pull request #19 from serverscom/k8s-clusters
k8s clusters cmd
2 parents 6c3d3f5 + d8fc3c4 commit df8df43

26 files changed

Lines changed: 1167 additions & 4 deletions

Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ generate: deps
1616
mockgen --destination ./internal/mocks/invoices_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/invoices.go
1717
mockgen --destination ./internal/mocks/account_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/accounts.go
1818
mockgen --destination ./internal/mocks/locations_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/locations.go
19+
mockgen --destination ./internal/mocks/kubernetes_clusters_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/kubernetes_clusters.go
1920
sed -i '' 's|github.com/serverscom/srvctl/vendor/github.com/serverscom/serverscom-go-client/pkg|github.com/serverscom/serverscom-go-client/pkg|g' \
2021
./internal/mocks/ssh_service.go \
2122
./internal/mocks/hosts_service.go \
@@ -25,5 +26,6 @@ generate: deps
2526
./internal/mocks/invoices_service.go \
2627
./internal/mocks/account_service.go \
2728
./internal/mocks/collection.go \
28-
./internal/mocks/locations_service.go
29+
./internal/mocks/locations_service.go \
30+
./internal/mocks/kubernetes_clusters_service.go
2931

cmd/entities/k8s/get.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package k8s
2+
3+
import (
4+
"log"
5+
6+
"github.com/serverscom/srvctl/cmd/base"
7+
"github.com/spf13/cobra"
8+
)
9+
10+
func newGetCmd(cmdContext *base.CmdContext) *cobra.Command {
11+
cmd := &cobra.Command{
12+
Use: "get <id>",
13+
Short: "Get a kubernetes cluster",
14+
Long: "Get a kubernetes cluster by id",
15+
Args: cobra.ExactArgs(1),
16+
RunE: func(cmd *cobra.Command, args []string) error {
17+
manager := cmdContext.GetManager()
18+
19+
ctx, cancel := base.SetupContext(cmd, manager)
20+
defer cancel()
21+
22+
base.SetupProxy(cmd, manager)
23+
24+
scClient := cmdContext.GetClient().SetVerbose(manager.GetVerbose(cmd)).GetScClient()
25+
26+
id := args[0]
27+
k8s, err := scClient.KubernetesClusters.Get(ctx, id)
28+
if err != nil {
29+
return err
30+
}
31+
32+
if k8s != nil {
33+
formatter := cmdContext.GetOrCreateFormatter(cmd)
34+
return formatter.Format(k8s)
35+
}
36+
return nil
37+
},
38+
}
39+
40+
return cmd
41+
}
42+
43+
func newGetNodeCmd(cmdContext *base.CmdContext) *cobra.Command {
44+
var clusterID string
45+
cmd := &cobra.Command{
46+
Use: "get-node <node-id> --cluster-id <string>",
47+
Short: "Get a kubernetes cluster node",
48+
Long: "Get a kubernetes cluster node by ID",
49+
Args: cobra.ExactArgs(1),
50+
RunE: func(cmd *cobra.Command, args []string) error {
51+
manager := cmdContext.GetManager()
52+
53+
ctx, cancel := base.SetupContext(cmd, manager)
54+
defer cancel()
55+
56+
base.SetupProxy(cmd, manager)
57+
58+
scClient := cmdContext.GetClient().SetVerbose(manager.GetVerbose(cmd)).GetScClient()
59+
60+
nodeID := args[0]
61+
k8s, err := scClient.KubernetesClusters.GetNode(ctx, clusterID, nodeID)
62+
if err != nil {
63+
return err
64+
}
65+
66+
if k8s != nil {
67+
formatter := cmdContext.GetOrCreateFormatter(cmd)
68+
return formatter.Format(k8s)
69+
}
70+
return nil
71+
},
72+
}
73+
74+
cmd.Flags().StringVar(&clusterID, "cluster-id", "", "cluster id")
75+
if err := cmd.MarkFlagRequired("cluster-id"); err != nil {
76+
log.Fatal(err)
77+
}
78+
79+
return cmd
80+
}

cmd/entities/k8s/k8s.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package k8s
2+
3+
import (
4+
"log"
5+
6+
serverscom "github.com/serverscom/serverscom-go-client/pkg"
7+
"github.com/serverscom/srvctl/cmd/base"
8+
"github.com/serverscom/srvctl/internal/output/entities"
9+
"github.com/spf13/cobra"
10+
)
11+
12+
func NewCmd(cmdContext *base.CmdContext) *cobra.Command {
13+
entitiesMap, err := getK8sEntities()
14+
if err != nil {
15+
log.Fatal(err)
16+
}
17+
18+
cmd := &cobra.Command{
19+
Use: "k8s",
20+
Short: "Manage kubernetes clusters",
21+
PersistentPreRunE: base.CombinePreRunE(
22+
base.CheckFormatterFlags(cmdContext, entitiesMap),
23+
base.CheckEmptyContexts(cmdContext),
24+
),
25+
Args: base.NoArgs,
26+
Run: base.UsageRun,
27+
}
28+
29+
cmd.AddCommand(
30+
newListCmd(cmdContext),
31+
newListNodesCmd(cmdContext),
32+
newGetCmd(cmdContext),
33+
newGetNodeCmd(cmdContext),
34+
newUpdateCmd(cmdContext),
35+
)
36+
37+
base.AddFormatFlags(cmd)
38+
39+
return cmd
40+
}
41+
42+
func getK8sEntities() (map[string]entities.EntityInterface, error) {
43+
result := make(map[string]entities.EntityInterface)
44+
45+
k8sEntity, err := entities.Registry.GetEntityFromValue(serverscom.KubernetesCluster{})
46+
if err != nil {
47+
log.Fatal(err)
48+
}
49+
result["k8s"] = k8sEntity
50+
51+
k8sNodeEntity, err := entities.Registry.GetEntityFromValue(serverscom.KubernetesClusterNode{})
52+
if err != nil {
53+
log.Fatal(err)
54+
}
55+
result["list-nodes"] = k8sNodeEntity
56+
result["get-node"] = k8sNodeEntity
57+
58+
return result, nil
59+
}

0 commit comments

Comments
 (0)