Skip to content

Commit

Permalink
Merge pull request #365 from digitalocean/k8saas-add-support
Browse files Browse the repository at this point in the history
k8saas: basic k8s support
  • Loading branch information
aybabtme authored Nov 21, 2018
2 parents 823efd1 + 4caf3c5 commit 676c1ac
Show file tree
Hide file tree
Showing 6 changed files with 945 additions and 13 deletions.
12 changes: 12 additions & 0 deletions args.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,18 @@ const (
ArgActionStatus = "status"
// ArgActionType is an action type argument.
ArgActionType = "action-type"
// ArgClusterName is a cluster name argument.
ArgClusterName = "name"
// ArgClusterVersionSlug is a cluster version argument.
ArgClusterVersionSlug = "version"
// ArgClusterNodePools are a cluster's node pools arguments.
ArgClusterNodePools = "node-pools"
// ArgNodePoolName is a cluster's node pool name argument.
ArgNodePoolName = "name"
// ArgNodePoolCount is a cluster's node pool count argument.
ArgNodePoolCount = "count"
// ArgNodePoolNodeIDs is a cluster's node pool nodes argument.
ArgNodePoolNodeIDs = "node-ids"
// ArgCommandWait is a wait for a droplet to be created argument.
ArgCommandWait = "wait"
// ArgDropletID is a droplet id argument.
Expand Down
181 changes: 181 additions & 0 deletions commands/displayers/kubernetes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
package displayers

import (
"fmt"
"io"
"strings"

"github.com/digitalocean/doctl/do"
)

type KubernetesClusters struct {
KubernetesClusters do.KubernetesClusters
}

var _ Displayable = &KubernetesClusters{}

func (clusters *KubernetesClusters) JSON(out io.Writer) error {
return writeJSON(clusters.KubernetesClusters, out)
}

func (clusters *KubernetesClusters) Cols() []string {
return []string{
"ID",
"Name",
"Region",
"Version",
"Status",
"Endpoint",
"IPv4",
"ClusterSubnet",
"ServiceSubnet",
"Tags",
"Created",
"Updated",
"NodePools",
}
}

func (clusters *KubernetesClusters) ColMap() map[string]string {
return map[string]string{
"ID": "ID",
"Name": "Name",
"Region": "Region",
"Version": "Version",
"ClusterSubnet": "Cluster Subnet",
"ServiceSubnet": "Service Subnet",
"IPv4": "IPv4",
"Endpoint": "Endpoint",
"Tags": "Tags",
"Status": "Status",
"Created": "Created At",
"Updated": "Updated At",
"NodePools": "Node Pools",
}
}

func (clusters *KubernetesClusters) KV() []map[string]interface{} {
out := make([]map[string]interface{}, 0, len(clusters.KubernetesClusters))

for _, cluster := range clusters.KubernetesClusters {
tags := strings.Join(cluster.Tags, ",")
nodePools := make([]string, 0, len(cluster.NodePools))
for _, pool := range cluster.NodePools {
nodePools = append(nodePools, pool.Name)
}

o := map[string]interface{}{
"ID": cluster.ID,
"Name": cluster.Name,
"Region": cluster.RegionSlug,
"Version": cluster.VersionSlug,
"ClusterSubnet": cluster.ClusterSubnet,
"ServiceSubnet": cluster.ServiceSubnet,
"IPv4": cluster.IPv4,
"Endpoint": cluster.Endpoint,
"Tags": tags,
"Status": cluster.Status.State,
"Created": cluster.CreatedAt,
"Updated": cluster.UpdatedAt,
"NodePools": fmt.Sprintf(strings.Join(nodePools, " ")),
}
out = append(out, o)
}

return out
}

type KubernetesNodePools struct {
KubernetesNodePools do.KubernetesNodePools
}

var _ Displayable = &KubernetesNodePools{}

func (nodePools *KubernetesNodePools) JSON(out io.Writer) error {
return writeJSON(nodePools.KubernetesNodePools, out)
}

func (nodePools *KubernetesNodePools) Cols() []string {
return []string{
"ID",
"Name",
"Size",
"Count",
"Tags",
"Nodes",
}
}

func (nodePools *KubernetesNodePools) ColMap() map[string]string {
return map[string]string{
"ID": "ID",
"Name": "Name",
"Size": "Size",
"Count": "Count",
"Tags": "Tags",
"Nodes": "Nodes",
}
}

func (nodePools *KubernetesNodePools) KV() []map[string]interface{} {
out := make([]map[string]interface{}, 0, len(nodePools.KubernetesNodePools))

for _, nodePools := range nodePools.KubernetesNodePools {
tags := strings.Join(nodePools.Tags, ",")
nodes := make([]string, 0, len(nodePools.Nodes))
for _, node := range nodePools.Nodes {
nodes = append(nodes, node.Name)
}

o := map[string]interface{}{
"ID": nodePools.ID,
"Name": nodePools.Name,
"Size": nodePools.Size,
"Count": nodePools.Count,
"Tags": tags,
"Nodes": nodes,
}
out = append(out, o)
}

return out
}

type KubernetesVersions struct {
KubernetesVersions do.KubernetesVersions
}

var _ Displayable = &KubernetesVersions{}

func (versions *KubernetesVersions) JSON(out io.Writer) error {
return writeJSON(versions.KubernetesVersions, out)
}

func (versions *KubernetesVersions) Cols() []string {
return []string{
"Slug",
"KubernetesVersion",
}
}

func (versions *KubernetesVersions) ColMap() map[string]string {
return map[string]string{
"Slug": "Slug",
"KubernetesVersion": "Kubernetes Version",
}
}

func (versions *KubernetesVersions) KV() []map[string]interface{} {
out := make([]map[string]interface{}, 0, len(versions.KubernetesVersions))

for _, version := range versions.KubernetesVersions {

o := map[string]interface{}{
"Slug": version.KubernetesVersion.Slug,
"KubernetesVersion": version.KubernetesVersion.KubernetesVersion,
}
out = append(out, o)
}

return out
}
6 changes: 4 additions & 2 deletions commands/doit.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,13 @@ import (
"path/filepath"
"strings"

"gopkg.in/yaml.v2"

"github.com/digitalocean/doctl"
"github.com/digitalocean/doctl/commands/displayers"
"github.com/digitalocean/doctl/do"
"github.com/fatih/color"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"gopkg.in/yaml.v2"
)

const (
Expand Down Expand Up @@ -174,6 +173,7 @@ func addCommands() {
DoitCmd.AddCommand(Auth())
DoitCmd.AddCommand(Completion())
DoitCmd.AddCommand(computeCmd())
DoitCmd.AddCommand(Kubernetes())
DoitCmd.AddCommand(Projects())
DoitCmd.AddCommand(Version())
}
Expand Down Expand Up @@ -342,6 +342,7 @@ type CmdConfig struct {
Firewalls func() do.FirewallsService
CDNs func() do.CDNsService
Projects func() do.ProjectsService
Kubernetes func() do.KubernetesService
}

// NewCmdConfig creates an instance of a CmdConfig.
Expand Down Expand Up @@ -381,6 +382,7 @@ func NewCmdConfig(ns string, dc doctl.Config, out io.Writer, args []string, init
c.Firewalls = func() do.FirewallsService { return do.NewFirewallsService(godoClient) }
c.CDNs = func() do.CDNsService { return do.NewCDNsService(godoClient) }
c.Projects = func() do.ProjectsService { return do.NewProjectsService(godoClient) }
c.Kubernetes = func() do.KubernetesService { return do.NewKubernetesService(godoClient) }

return nil
},
Expand Down
Loading

0 comments on commit 676c1ac

Please sign in to comment.