diff --git a/cmd/create/createCluster.go b/cmd/create/createCluster.go index ab24e274..2301844a 100644 --- a/cmd/create/createCluster.go +++ b/cmd/create/createCluster.go @@ -59,7 +59,8 @@ func NewCmdCreateCluster() *cobra.Command { cmd.Flags().String("image", k3d.DefaultK3sImageRepo, "Specify k3s image that you want to use for the nodes") // TODO: get image version cmd.Flags().String("network", "", "Join an existing network") cmd.Flags().String("secret", "", "Specify a cluster secret. By default, we generate one.") - cmd.Flags().StringArrayP("volume", "v", nil, "Mount volumes into the nodes (Format: `--volume [SOURCE:]DEST[@SELECTOR[;SELECTOR...]]`") + cmd.Flags().StringArrayP("volume", "v", nil, "Mount volumes into the nodes (Format: `--volume [SOURCE:]DEST[@NODEFILTER[;NODEFILTER...]]`") + cmd.Flags().StringArrayP("port", "p", nil, "Map ports from the node containers to the host (Format: `[IP:][HOSTPORT:]CONTAINERPORT[/PROTOCOL][@NODEFILTER]`)") // add subcommands @@ -155,6 +156,33 @@ func parseCreateClusterCmd(cmd *cobra.Command, args []string) (runtimes.Runtime, } } + // --port + portFlags, err := cmd.Flags().GetStringArray("port") + if err != nil { + log.Fatalln(err) + } + portFilterMap := make(map[string]string, 1) + for _, portFlag := range portFlags { + // split node filter from the specified volume + volume, filter, err := cliutil.SplitFilterFromFlag(portFlag) + if err != nil { + log.Fatalln(err) + } + + // validate the specified volume mount and return it in SRC:DEST format + volume, err = cliutil.ValidateVolumeMount(volume) + if err != nil { + log.Fatalln(err) + } + + // create new entry or append filter to existing entry + if _, exists := volumeFilterMap[volume]; exists { + volumeFilterMap[volume] = fmt.Sprintf("%s;%s", volumeFilterMap[volume], filter) + } else { + volumeFilterMap[volume] = filter + } + } + /* generate cluster */ cluster := &k3d.Cluster{ Name: args[0], // TODO: validate name0 diff --git a/cmd/util/ports.go b/cmd/util/ports.go index 54163344..8d111b2d 100644 --- a/cmd/util/ports.go +++ b/cmd/util/ports.go @@ -67,3 +67,8 @@ func ParseAPIPort(portString string) (k3d.ExposeAPI, error) { return exposeAPI, nil } + +// ValidatePortMap validates a port mapping +func ValidatePortMap(portmap string) (string, error) { + return "", nil // TODO: +}