Skip to content

Commit

Permalink
Merge pull request #35 from andyz-dev/clustername
Browse files Browse the repository at this point in the history
[Bugfix] Default cluster name and hostname checks
  • Loading branch information
iwilltry42 authored May 9, 2019
2 parents 15b1326 + 93f72e6 commit 4c14a8e
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 5 deletions.
35 changes: 35 additions & 0 deletions cli/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,37 @@ import (
)

const defaultRegistry = "docker.io"
const clusterNameMaxSize int = 35

// Make sure a cluster name is also a valid host name according to RFC 1123.
// We further restrict the length of the cluster name to shorter than 'clusterNameMaxSize'
// so that we can construct the host names based on the cluster name, and still stay
// within the 64 characters limit.
func checkClusterName(name string) error {
if len(name) > clusterNameMaxSize {
return fmt.Errorf("cluster name is too long")
}

if name[0] == '-' || name[len(name) - 1] == '-' {
return fmt.Errorf("cluster name can not start or end with - (dash)")
}


for _ , c := range name {
switch {
case '0' <= c && c <= '9':
case 'a' <= c && c <= 'z':
case 'A' <= c && c <= 'Z':
case c == '-':
break;
default:
return fmt.Errorf("cluster name contains charaters other than 'Aa-Zz', '0-9' or '-'")

}
}

return nil
}

// CheckTools checks if the docker API server is responding
func CheckTools(c *cli.Context) error {
Expand All @@ -45,6 +76,10 @@ func CheckTools(c *cli.Context) error {
// CreateCluster creates a new single-node cluster container and initializes the cluster directory
func CreateCluster(c *cli.Context) error {

if err := checkClusterName(c.String("name")); err != nil {
return err;
}

// define image
image := c.String("image")
if c.IsSet("version") {
Expand Down
11 changes: 6 additions & 5 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (

// defaultK3sImage specifies the default image being used for server and workers
const defaultK3sImage = "docker.io/rancher/k3s"
const defaultK3sClusterName string = "k3s-default"

// main represents the CLI application
func main() {
Expand Down Expand Up @@ -52,7 +53,7 @@ func main() {
Flags: []cli.Flag{
cli.StringFlag{
Name: "name, n",
Value: "k3s-default",
Value: defaultK3sClusterName,
Usage: "Set a name for the cluster",
},
cli.StringFlag{
Expand Down Expand Up @@ -107,7 +108,7 @@ func main() {
Flags: []cli.Flag{
cli.StringFlag{
Name: "name, n",
Value: "k3s-default",
Value: defaultK3sClusterName,
Usage: "name of the cluster",
},
cli.BoolFlag{
Expand All @@ -124,7 +125,7 @@ func main() {
Flags: []cli.Flag{
cli.StringFlag{
Name: "name, n",
Value: "k3s-default",
Value: defaultK3sClusterName,
Usage: "Name of the cluster",
},
cli.BoolFlag{
Expand All @@ -141,7 +142,7 @@ func main() {
Flags: []cli.Flag{
cli.StringFlag{
Name: "name, n",
Value: "k3s-default",
Value: defaultK3sClusterName,
Usage: "Name of the cluster",
},
cli.BoolFlag{
Expand Down Expand Up @@ -171,7 +172,7 @@ func main() {
Flags: []cli.Flag{
cli.StringFlag{
Name: "name, n",
Value: "k3s-default",
Value: defaultK3sClusterName,
Usage: "Name of the cluster",
},
cli.BoolFlag{
Expand Down

0 comments on commit 4c14a8e

Please sign in to comment.