diff --git a/cli/commands.go b/cli/commands.go index 5e8c7602..2552a3d5 100644 --- a/cli/commands.go +++ b/cli/commands.go @@ -24,37 +24,6 @@ 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 { @@ -76,8 +45,8 @@ 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; + if err := CheckClusterName(c.String("name")); err != nil { + return err } // define image diff --git a/cli/util.go b/cli/util.go index 66d0ba2b..1688c57b 100644 --- a/cli/util.go +++ b/cli/util.go @@ -1,6 +1,7 @@ package run import ( + "fmt" "math/rand" "strings" "time" @@ -36,3 +37,35 @@ func GenerateRandomString(n int) string { return sb.String() } + +/*** Cluster Name Validation ***/ +const clusterNameMaxSize int = 35 + +// CheckClusterName ensures that a cluster name is also a valid host name according to RFC 1123. +// We further restrict the length of the cluster name to maximum '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("[ERROR] Cluster name is too long") + } + + if name[0] == '-' || name[len(name)-1] == '-' { + return fmt.Errorf("[ERROR] 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("[ERROR] Cluster name contains characters other than 'Aa-Zz', '0-9' or '-'") + + } + } + + return nil +}