@ -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 {
@ -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" ) {