diff --git a/cmd/create/createCluster.go b/cmd/create/createCluster.go index 0ad2c790..9cb02cff 100644 --- a/cmd/create/createCluster.go +++ b/cmd/create/createCluster.go @@ -110,7 +110,7 @@ func NewCmdCreateCluster() *cobra.Command { /********* * Flags * *********/ - cmd.Flags().StringP("api-port", "a", "", "Specify the Kubernetes API server port exposed on the LoadBalancer (Format: `--api-port [HOST:]HOSTPORT`)\n - Example: `k3d create -m 3 -a 0.0.0.0:6550`") + cmd.Flags().StringP("api-port", "a", "random", "Specify the Kubernetes API server port exposed on the LoadBalancer (Format: `--api-port [HOST:]HOSTPORT`)\n - Example: `k3d create -m 3 -a 0.0.0.0:6550`") cmd.Flags().IntP("masters", "m", 1, "Specify how many masters you want to create") cmd.Flags().IntP("workers", "w", 0, "Specify how many workers you want to create") cmd.Flags().StringP("image", "i", fmt.Sprintf("%s:%s", k3d.DefaultK3sImageRepo, version.GetK3sVersion(false)), "Specify k3s image that you want to use for the nodes") diff --git a/cmd/util/ports.go b/cmd/util/ports.go index e445a433..1728b784 100644 --- a/cmd/util/ports.go +++ b/cmd/util/ports.go @@ -54,15 +54,17 @@ func ParseAPIPort(portString string) (k3d.ExposeAPI, error) { } // Verify 'port' is an integer and within port ranges - if exposeAPI.Port == "" { + if exposeAPI.Port == "" || exposeAPI.Port == "random" { log.Debugf("API-Port Mapping didn't specify hostPort, choosing one randomly...") freePort, err := GetFreePort() if err != nil || freePort == 0 { - log.Errorln("Failed to get a free port") - return exposeAPI, err + log.Warnf("Failed to get random free port:\n%+v", err) + log.Warnf("Falling back to default port %s (may be blocked though)...", k3d.DefaultAPIPort) + exposeAPI.Port = k3d.DefaultAPIPort + } else { + exposeAPI.Port = strconv.Itoa(freePort) + log.Debugf("Got free port for API: '%d'", freePort) } - exposeAPI.Port = strconv.Itoa(freePort) - log.Debugf("Got free port for API: '%d'", freePort) } p, err := strconv.Atoi(exposeAPI.Port) if err != nil { diff --git a/tests/test_basic.sh b/tests/test_basic.sh index bdf9b930..d615ed61 100755 --- a/tests/test_basic.sh +++ b/tests/test_basic.sh @@ -8,7 +8,7 @@ source "$CURR_DIR/common.sh" info "Creating two clusters..." $EXE create cluster c1 --wait --timeout 60s --api-port 6443 || failed "could not create cluster c1" -$EXE create cluster c2 --wait --timeout 60s --api-port 6444 || failed "could not create cluster c2" +$EXE create cluster c2 --wait --timeout 60s || failed "could not create cluster c2" info "Checking that we can get both clusters..." check_cluster_count 2