Skip to content

Commit

Permalink
Make sure the culster name is valid before creating it.
Browse files Browse the repository at this point in the history
MAke sure the cluster name is a RFC 1123 compliant host name, since the
cluster name is used as base for expanding into a auto generated
host names for k3s nodes.
  • Loading branch information
andyz-dev committed May 8, 2019
1 parent 4ebf342 commit 93f72e6
Showing 1 changed file with 35 additions and 0 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

0 comments on commit 93f72e6

Please sign in to comment.