From b438cb2cce33ac727f3b0c24154055e287fead4d Mon Sep 17 00:00:00 2001 From: Brent Baude Date: Mon, 3 Feb 2020 15:30:17 -0600 Subject: seperate container create network options this pr splits off some of the network container create options into a different flag set. the options in question are: --add-host --dns --dns-opt --dns-search --ip --mac-address --network --no-hosts --publish in the future, these options are going to be added to the pod create flags. this makes that transition easier and provides for less code duplication. Signed-off-by: Brent Baude --- cmd/podman/common.go | 78 +++++++++++++++++++++++++----------------------- cmd/podman/create.go | 1 + cmd/podman/pod_create.go | 12 ++++++++ cmd/podman/run.go | 1 + 4 files changed, 55 insertions(+), 37 deletions(-) (limited to 'cmd/podman') diff --git a/cmd/podman/common.go b/cmd/podman/common.go index 46feae90d..7610edbc0 100644 --- a/cmd/podman/common.go +++ b/cmd/podman/common.go @@ -16,6 +16,7 @@ import ( jsoniter "github.com/json-iterator/go" "github.com/pkg/errors" "github.com/spf13/cobra" + "github.com/spf13/pflag" ) var ( @@ -116,14 +117,49 @@ func getDefaultNetwork() string { return "bridge" } -func getCreateFlags(c *cliconfig.PodmanCommand) { - - createFlags := c.Flags() - - createFlags.StringSlice( +func getNetFlags() *pflag.FlagSet { + netFlags := pflag.FlagSet{} + netFlags.StringSlice( "add-host", []string{}, "Add a custom host-to-IP mapping (host:ip) (default [])", ) + netFlags.StringSlice( + "dns", []string{}, + "Set custom DNS servers", + ) + netFlags.StringSlice( + "dns-opt", []string{}, + "Set custom DNS options", + ) + netFlags.StringSlice( + "dns-search", []string{}, + "Set custom DNS search domains", + ) + netFlags.String( + "ip", "", + "Specify a static IPv4 address for the container", + ) + netFlags.String( + "mac-address", "", + "Container MAC address (e.g. 92:d0:c6:0a:29:33)", + ) + netFlags.String( + "network", getDefaultNetwork(), + "Connect a container to a network", + ) + netFlags.StringSliceP( + "publish", "p", []string{}, + "Publish a container's port, or a range of ports, to the host (default [])", + ) + netFlags.Bool( + "no-hosts", false, + "Do not create /etc/hosts within the container, instead use the version from the image", + ) + return &netFlags +} + +func getCreateFlags(c *cliconfig.PodmanCommand) { + createFlags := c.Flags() createFlags.StringSlice( "annotation", []string{}, "Add annotations to container (key:value) (default [])", @@ -236,18 +272,6 @@ func getCreateFlags(c *cliconfig.PodmanCommand) { "device-write-iops", []string{}, "Limit write rate (IO per second) to a device (e.g. --device-write-iops=/dev/sda:1000)", ) - createFlags.StringSlice( - "dns", []string{}, - "Set custom DNS servers", - ) - createFlags.StringSlice( - "dns-opt", []string{}, - "Set custom DNS options", - ) - createFlags.StringSlice( - "dns-search", []string{}, - "Set custom DNS search domains", - ) createFlags.String( "entrypoint", "", "Overwrite the default ENTRYPOINT of the image", @@ -323,10 +347,6 @@ func getCreateFlags(c *cliconfig.PodmanCommand) { "interactive", "i", false, "Keep STDIN open even if not attached", ) - createFlags.String( - "ip", "", - "Specify a static IPv4 address for the container", - ) createFlags.String( "ipc", "", "IPC namespace to use", @@ -351,10 +371,6 @@ func getCreateFlags(c *cliconfig.PodmanCommand) { "log-opt", []string{}, "Logging driver options (default [])", ) - createFlags.String( - "mac-address", "", - "Container MAC address (e.g. 92:d0:c6:0a:29:33)", - ) createFlags.StringP( "memory", "m", "", "Memory limit "+sizeWithUnitFormat, @@ -375,14 +391,6 @@ func getCreateFlags(c *cliconfig.PodmanCommand) { "name", "", "Assign a name to the container", ) - createFlags.String( - "network", getDefaultNetwork(), - "Connect a container to a network", - ) - createFlags.Bool( - "no-hosts", false, - "Do not create /etc/hosts within the container, instead use the version from the image", - ) createFlags.Bool( "oom-kill-disable", false, "Disable OOM Killer", @@ -417,10 +425,6 @@ func getCreateFlags(c *cliconfig.PodmanCommand) { "privileged", false, "Give extended privileges to container", ) - createFlags.StringSliceP( - "publish", "p", []string{}, - "Publish a container's port, or a range of ports, to the host (default [])", - ) createFlags.BoolP( "publish-all", "P", false, "Publish all exposed ports to random ports on the host interface", diff --git a/cmd/podman/create.go b/cmd/podman/create.go index 01cad9765..73d62bddb 100644 --- a/cmd/podman/create.go +++ b/cmd/podman/create.go @@ -41,6 +41,7 @@ func init() { getCreateFlags(&createCommand.PodmanCommand) flags := createCommand.Flags() + flags.AddFlagSet(getNetFlags()) flags.SetInterspersed(false) flags.SetNormalizeFunc(aliasFlags) } diff --git a/cmd/podman/pod_create.go b/cmd/podman/pod_create.go index ad3c00aa8..cee6476ea 100644 --- a/cmd/podman/pod_create.go +++ b/cmd/podman/pod_create.go @@ -44,6 +44,18 @@ func init() { podCreateCommand.SetUsageTemplate(UsageTemplate()) flags := podCreateCommand.Flags() flags.SetInterspersed(false) + // When we are ready to add the network options to the create commmand, we need to uncomment + // the following + + //flags.AddFlagSet(getNetFlags()) + + // Once this is uncommented, then the publish option below needs to be removed because it + // conflicts with the publish in getNetFlags. Upon removal, the c.Publish will not work + // anymore and needs to be cleaned up. I suggest starting with removing the Publish attribute + // from PodCreateValues structure. Running make should then expose all areas that need to be + // addressed. To get the value of publish (and other flags in getNetFlags, use the syntax: + // c.("