Skip to content

Commit

Permalink
Update SKS-related commands (#309)
Browse files Browse the repository at this point in the history
* `exo sks`: new `upgrade` command
* `exo sks create`: new flags `--service-level` and `--no-cni`
  • Loading branch information
falzm authored Jan 21, 2021
1 parent fc47861 commit d676a4d
Show file tree
Hide file tree
Showing 14 changed files with 541 additions and 96 deletions.
42 changes: 37 additions & 5 deletions cmd/sks_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ Supported output template annotations: %s`,
var (
name = args[0]
cluster *egoscale.SKSCluster
cni = "calico"
addOns = map[string]struct{}{
"exoscale-cloud-controller": {},
}
)

zone, err := cmd.Flags().GetString("zone")
Expand All @@ -62,18 +66,42 @@ Supported output template annotations: %s`,
return err
}

level, err := cmd.Flags().GetString("service-level")
if err != nil {
return err
}

noCNI, err := cmd.Flags().GetBool("no-cni")
if err != nil {
return err
}
if noCNI {
cni = ""
}

noExoscaleCCM, err := cmd.Flags().GetBool("no-exoscale-ccm")
if err != nil {
return err
}
if noExoscaleCCM {
delete(addOns, "exoscale-cloud-controller")
}

ctx := apiv2.WithEndpoint(gContext, apiv2.NewReqEndpoint(gCurrentAccount.Environment, zone))
decorateAsyncOperation(fmt.Sprintf("Creating SKS cluster %q...", name), func() {
cluster, err = cs.CreateSKSCluster(ctx, zone, &egoscale.SKSCluster{
Name: name,
Description: description,
Version: version,
ExoscaleCloudControllerEnabled: !noExoscaleCCM,
Name: name,
Description: description,
Version: version,
Level: level,
CNI: cni,
AddOns: func() []string {
list := make([]string, 0)
for k := range addOns {
list = append(list, k)
}
return list
}(),
})
})
if err != nil {
Expand Down Expand Up @@ -160,8 +188,12 @@ func init() {
sksCreateCmd.Flags().String("description", "", "SKS cluster description")
sksCreateCmd.Flags().String("kubernetes-version", "1.20.0",
"SKS cluster control plane Kubernetes version")
sksCreateCmd.Flags().String("service-level", "pro",
"SKS cluster control plane service level (starter|pro)")
sksCreateCmd.Flags().Bool("no-cni", false,
"do not deploy the default Container Network Interface plugin in the cluster control plane")
sksCreateCmd.Flags().Bool("no-exoscale-ccm", false,
"do not deploy the Exoscale Cloud Controller Manager in the Kubernetes control plane")
"do not deploy the Exoscale Cloud Controller Manager in the cluster control plane")
sksCreateCmd.Flags().Int64("nodepool-size", 0,
"default Nodepool size (default: 0). If 0, no default Nodepool will be added to the cluster.")
sksCreateCmd.Flags().String("nodepool-name", "",
Expand Down
48 changes: 27 additions & 21 deletions cmd/sks_show.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,18 @@ import (
)

type sksShowOutput struct {
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
CreationDate string `json:"creation_date"`
Zone string `json:"zone"`
Endpoint string `json:"endpoint"`
Version string `json:"version"`
ExoscaleCloudControllerEnabled bool `json:"exoscale_cloud_controller_enabled"`
State string `json:"state"`
Nodepools []nlbServiceShowOutput `json:"nodepools"`
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
CreationDate string `json:"creation_date"`
Zone string `json:"zone"`
Endpoint string `json:"endpoint"`
Version string `json:"version"`
ServiceLevel string `json:"service_level"`
CNI string `json:"cni"`
AddOns []string `json:"addons"`
State string `json:"state"`
Nodepools []nlbServiceShowOutput `json:"nodepools"`
}

func (o *sksShowOutput) toJSON() { outputJSON(o) }
Expand All @@ -39,7 +41,9 @@ func (o *sksShowOutput) toTable() {
t.Append([]string{"Creation Date", o.CreationDate})
t.Append([]string{"Endpoint", o.Endpoint})
t.Append([]string{"Version", o.Version})
t.Append([]string{"Exoscale Cloud Controller Enabled", fmt.Sprint(o.ExoscaleCloudControllerEnabled)})
t.Append([]string{"Service Level", o.ServiceLevel})
t.Append([]string{"CNI", o.CNI})
t.Append([]string{"Add-Ons", strings.Join(o.AddOns, "\n")})
t.Append([]string{"State", o.State})
t.Append([]string{"Nodepools", func() string {
if len(o.Nodepools) > 0 {
Expand Down Expand Up @@ -102,16 +106,18 @@ func showSKSCluster(zone, c string) (outputter, error) {
}

out := sksShowOutput{
ID: cluster.ID,
Name: cluster.Name,
Description: cluster.Description,
CreationDate: cluster.CreatedAt.String(),
Version: cluster.Version,
ExoscaleCloudControllerEnabled: cluster.ExoscaleCloudControllerEnabled,
Zone: zone,
Endpoint: cluster.Endpoint,
State: cluster.State,
Nodepools: sksNodepools,
ID: cluster.ID,
Name: cluster.Name,
Description: cluster.Description,
CreationDate: cluster.CreatedAt.String(),
Version: cluster.Version,
ServiceLevel: cluster.Level,
CNI: cluster.CNI,
AddOns: cluster.AddOns,
Zone: zone,
Endpoint: cluster.Endpoint,
State: cluster.State,
Nodepools: sksNodepools,
}

return &out, nil
Expand Down
59 changes: 59 additions & 0 deletions cmd/sks_upgrade.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package cmd

import (
"fmt"

apiv2 "github.com/exoscale/egoscale/api/v2"
"github.com/spf13/cobra"
)

var sksUpgradeCmd = &cobra.Command{
Use: "upgrade <name | ID> <version>",
Short: "Upgrade a SKS cluster Kubernetes version",

PreRunE: func(cmd *cobra.Command, args []string) error {
if len(args) != 2 {
cmdExitOnUsageError(cmd, "invalid arguments")
}

cmdSetZoneFlagFromDefault(cmd)

return cmdCheckRequiredFlags(cmd, []string{"zone"})
},

RunE: func(cmd *cobra.Command, args []string) error {
var (
c = args[0]
version = args[1]
)

zone, err := cmd.Flags().GetString("zone")
if err != nil {
return err
}

ctx := apiv2.WithEndpoint(gContext, apiv2.NewReqEndpoint(gCurrentAccount.Environment, zone))
cluster, err := lookupSKSCluster(ctx, zone, c)
if err != nil {
return err
}

decorateAsyncOperation(fmt.Sprintf("Upgrading SKS cluster %q...", c), func() {
err = cs.UpgradeSKSCluster(ctx, zone, cluster.ID, version)
})
if err != nil {
return err
}

if !gQuiet {
return output(showSKSCluster(zone, cluster.ID))
}

return nil
},
}

func init() {
sksUpgradeCmd.Flags().StringP("zone", "z", "", "SKS cluster zone")
sksCmd.AddCommand(sksUpgradeCmd)
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require (
github.com/cenkalti/backoff v2.0.0+incompatible
github.com/deepmap/oapi-codegen v1.4.2 // indirect
github.com/dustin/go-humanize v1.0.0
github.com/exoscale/egoscale v0.39.1
github.com/exoscale/egoscale v0.40.0
github.com/exoscale/openapi-cli-generator v1.1.0
github.com/fatih/camelcase v1.0.0
github.com/fsnotify/fsnotify v1.4.9 // indirect
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ github.com/dlclark/regexp2 v1.2.0 h1:8sAhBGEM0dRWogWqWyQeIJnxjWO6oIjl8FKqREDsGfk
github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/exoscale/egoscale v0.39.1 h1:rv8jwvsiiXSDodGuhNI4mM86W0yWBVWx80NPwTVbAHw=
github.com/exoscale/egoscale v0.39.1/go.mod h1:BFi2GNsnsrALev3+gFO/HIQADBQhqJ41S0QrNEB2GJw=
github.com/exoscale/egoscale v0.40.0 h1:fvVKszvqAXNP1ryhC0rwsKHPenyMaV0fGf14oUMNZFw=
github.com/exoscale/egoscale v0.40.0/go.mod h1:BFi2GNsnsrALev3+gFO/HIQADBQhqJ41S0QrNEB2GJw=
github.com/exoscale/openapi-cli-generator v1.1.0 h1:fYjmPqHR5vxlOBrbvde7eo7bISNQIFxsGn4A5/acwKA=
github.com/exoscale/openapi-cli-generator v1.1.0/go.mod h1:TZBnbT7f3hJ5ImyUphJwRM+X5xF/zCQZ6o8a42gQeTs=
github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
Expand Down
7 changes: 7 additions & 0 deletions vendor/github.com/exoscale/egoscale/CHANGELOG.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 28 additions & 20 deletions vendor/github.com/exoscale/egoscale/internal/v2/sks_cluster.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit d676a4d

Please sign in to comment.