From 2b7ad47bd2649c3f164e8b57b31fae313045c8f4 Mon Sep 17 00:00:00 2001 From: Daniel Nephin Date: Mon, 21 Dec 2015 20:05:55 -0500 Subject: [PATCH] Move the runconfig.Parse() function into the runconfig/opts package. The parse.go file is used almost exclusively in the client. The few small functions that are used outside of the client could easily be copied out when the client is extracted, allowing this runconfig/opts package to move to the client. Signed-off-by: Daniel Nephin --- api/client/create.go | 4 +-- api/client/run.go | 4 +-- builder/dockerfile/dispatchers.go | 3 +- daemon/daemon_unix.go | 3 +- runconfig/errors.go | 32 +++++++++++++++++ runconfig/{ => opts}/fixtures/valid.env | 0 runconfig/{ => opts}/fixtures/valid.label | 0 runconfig/{client => opts}/parse.go | 42 ++++------------------- runconfig/{client => opts}/parse_test.go | 7 ++-- 9 files changed, 51 insertions(+), 44 deletions(-) create mode 100644 runconfig/errors.go rename runconfig/{ => opts}/fixtures/valid.env (100%) rename runconfig/{ => opts}/fixtures/valid.label (100%) rename runconfig/{client => opts}/parse.go (87%) rename runconfig/{client => opts}/parse_test.go (99%) diff --git a/api/client/create.go b/api/client/create.go index 7a4070b0b9..2569ae755a 100644 --- a/api/client/create.go +++ b/api/client/create.go @@ -12,7 +12,7 @@ import ( "github.com/docker/docker/pkg/jsonmessage" "github.com/docker/docker/reference" "github.com/docker/docker/registry" - "github.com/docker/docker/runconfig" + runconfigopts "github.com/docker/docker/runconfig/opts" ) func (cli *DockerCli) pullImage(image string) error { @@ -156,7 +156,7 @@ func (cli *DockerCli) CmdCreate(args ...string) error { flName = cmd.String([]string{"-name"}, "", "Assign a name to the container") ) - config, hostConfig, cmd, err := runconfig.Parse(cmd, args) + config, hostConfig, cmd, err := runconfigopts.Parse(cmd, args) if err != nil { cmd.ReportError(err.Error(), true) os.Exit(1) diff --git a/api/client/run.go b/api/client/run.go index ec35530a47..0a7f5265ca 100644 --- a/api/client/run.go +++ b/api/client/run.go @@ -14,7 +14,7 @@ import ( "github.com/docker/docker/opts" "github.com/docker/docker/pkg/promise" "github.com/docker/docker/pkg/signal" - "github.com/docker/docker/runconfig" + runconfigopts "github.com/docker/docker/runconfig/opts" "github.com/docker/libnetwork/resolvconf/dns" ) @@ -82,7 +82,7 @@ func (cli *DockerCli) CmdRun(args ...string) error { ErrConflictDetachAutoRemove = fmt.Errorf("Conflicting options: --rm and -d") ) - config, hostConfig, cmd, err := runconfig.Parse(cmd, args) + config, hostConfig, cmd, err := runconfigopts.Parse(cmd, args) // just in case the Parse does not exit if err != nil { cmd.ReportError(err.Error(), true) diff --git a/builder/dockerfile/dispatchers.go b/builder/dockerfile/dispatchers.go index c036cf74fb..02d4413f1f 100644 --- a/builder/dockerfile/dispatchers.go +++ b/builder/dockerfile/dispatchers.go @@ -25,6 +25,7 @@ import ( "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/system" "github.com/docker/docker/runconfig" + runconfigopts "github.com/docker/docker/runconfig/opts" "github.com/docker/go-connections/nat" ) @@ -337,7 +338,7 @@ func run(b *Builder, args []string, attributes map[string]bool, original string) // of RUN, without leaking it to the final image. It also aids cache // lookup for same image built with same build time environment. cmdBuildEnv := []string{} - configEnv := runconfig.ConvertKVStringsToMap(b.runConfig.Env) + configEnv := runconfigopts.ConvertKVStringsToMap(b.runConfig.Env) for key, val := range b.BuildArgs { if !b.isBuildArgAllowed(key) { // skip build-args that are not in allowed list, meaning they have diff --git a/daemon/daemon_unix.go b/daemon/daemon_unix.go index e6d7a08080..68e04ea882 100644 --- a/daemon/daemon_unix.go +++ b/daemon/daemon_unix.go @@ -23,6 +23,7 @@ import ( "github.com/docker/docker/pkg/sysinfo" "github.com/docker/docker/reference" "github.com/docker/docker/runconfig" + runconfigopts "github.com/docker/docker/runconfig/opts" "github.com/docker/libnetwork" nwconfig "github.com/docker/libnetwork/config" "github.com/docker/libnetwork/drivers/bridge" @@ -681,7 +682,7 @@ func (daemon *Daemon) registerLinks(container *container.Container, hostConfig * } for _, l := range hostConfig.Links { - name, alias, err := runconfig.ParseLink(l) + name, alias, err := runconfigopts.ParseLink(l) if err != nil { return err } diff --git a/runconfig/errors.go b/runconfig/errors.go new file mode 100644 index 0000000000..7dbdb9e1ce --- /dev/null +++ b/runconfig/errors.go @@ -0,0 +1,32 @@ +package runconfig + +import ( + "fmt" +) + +var ( + // ErrConflictContainerNetworkAndLinks conflict between --net=container and links + ErrConflictContainerNetworkAndLinks = fmt.Errorf("Conflicting options: container type network can't be used with links. This would result in undefined behavior") + // ErrConflictUserDefinedNetworkAndLinks conflict between --net= and links + ErrConflictUserDefinedNetworkAndLinks = fmt.Errorf("Conflicting options: networking can't be used with links. This would result in undefined behavior") + // ErrConflictSharedNetwork conflict between private and other networks + ErrConflictSharedNetwork = fmt.Errorf("Container sharing network namespace with another container or host cannot be connected to any other network") + // ErrConflictHostNetwork conflict from being disconnected from host network or connected to host network. + ErrConflictHostNetwork = fmt.Errorf("Container cannot be disconnected from host network or connected to host network") + // ErrConflictNoNetwork conflict between private and other networks + ErrConflictNoNetwork = fmt.Errorf("Container cannot be connected to multiple networks with one of the networks in private (none) mode") + // ErrConflictNetworkAndDNS conflict between --dns and the network mode + ErrConflictNetworkAndDNS = fmt.Errorf("Conflicting options: dns and the network mode") + // ErrConflictNetworkHostname conflict between the hostname and the network mode + ErrConflictNetworkHostname = fmt.Errorf("Conflicting options: hostname and the network mode") + // ErrConflictHostNetworkAndLinks conflict between --net=host and links + ErrConflictHostNetworkAndLinks = fmt.Errorf("Conflicting options: host type networking can't be used with links. This would result in undefined behavior") + // ErrConflictContainerNetworkAndMac conflict between the mac address and the network mode + ErrConflictContainerNetworkAndMac = fmt.Errorf("Conflicting options: mac-address and the network mode") + // ErrConflictNetworkHosts conflict between add-host and the network mode + ErrConflictNetworkHosts = fmt.Errorf("Conflicting options: custom host-to-IP mapping and the network mode") + // ErrConflictNetworkPublishPorts conflict between the publish options and the network mode + ErrConflictNetworkPublishPorts = fmt.Errorf("Conflicting options: port publishing and the container type network mode") + // ErrConflictNetworkExposePorts conflict between the expose option and the network mode + ErrConflictNetworkExposePorts = fmt.Errorf("Conflicting options: port exposing and the container type network mode") +) diff --git a/runconfig/fixtures/valid.env b/runconfig/opts/fixtures/valid.env similarity index 100% rename from runconfig/fixtures/valid.env rename to runconfig/opts/fixtures/valid.env diff --git a/runconfig/fixtures/valid.label b/runconfig/opts/fixtures/valid.label similarity index 100% rename from runconfig/fixtures/valid.label rename to runconfig/opts/fixtures/valid.label diff --git a/runconfig/client/parse.go b/runconfig/opts/parse.go similarity index 87% rename from runconfig/client/parse.go rename to runconfig/opts/parse.go index b2c0f35651..c391c4a8d0 100644 --- a/runconfig/client/parse.go +++ b/runconfig/opts/parse.go @@ -1,4 +1,4 @@ -package runconfig +package opts import ( "fmt" @@ -12,39 +12,11 @@ import ( flag "github.com/docker/docker/pkg/mflag" "github.com/docker/docker/pkg/mount" "github.com/docker/docker/pkg/signal" - runconfigopts "github.com/docker/docker/runconfig/opts" "github.com/docker/docker/volume" "github.com/docker/go-connections/nat" "github.com/docker/go-units" ) -var ( - // ErrConflictContainerNetworkAndLinks conflict between --net=container and links - ErrConflictContainerNetworkAndLinks = fmt.Errorf("Conflicting options: container type network can't be used with links. This would result in undefined behavior") - // ErrConflictUserDefinedNetworkAndLinks conflict between --net= and links - ErrConflictUserDefinedNetworkAndLinks = fmt.Errorf("Conflicting options: networking can't be used with links. This would result in undefined behavior") - // ErrConflictSharedNetwork conflict between private and other networks - ErrConflictSharedNetwork = fmt.Errorf("Container sharing network namespace with another container or host cannot be connected to any other network") - // ErrConflictHostNetwork conflict from being disconnected from host network or connected to host network. - ErrConflictHostNetwork = fmt.Errorf("Container cannot be disconnected from host network or connected to host network") - // ErrConflictNoNetwork conflict between private and other networks - ErrConflictNoNetwork = fmt.Errorf("Container cannot be connected to multiple networks with one of the networks in private (none) mode") - // ErrConflictNetworkAndDNS conflict between --dns and the network mode - ErrConflictNetworkAndDNS = fmt.Errorf("Conflicting options: dns and the network mode") - // ErrConflictNetworkHostname conflict between the hostname and the network mode - ErrConflictNetworkHostname = fmt.Errorf("Conflicting options: hostname and the network mode") - // ErrConflictHostNetworkAndLinks conflict between --net=host and links - ErrConflictHostNetworkAndLinks = fmt.Errorf("Conflicting options: host type networking can't be used with links. This would result in undefined behavior") - // ErrConflictContainerNetworkAndMac conflict between the mac address and the network mode - ErrConflictContainerNetworkAndMac = fmt.Errorf("Conflicting options: mac-address and the network mode") - // ErrConflictNetworkHosts conflict between add-host and the network mode - ErrConflictNetworkHosts = fmt.Errorf("Conflicting options: custom host-to-IP mapping and the network mode") - // ErrConflictNetworkPublishPorts conflict between the publish options and the network mode - ErrConflictNetworkPublishPorts = fmt.Errorf("Conflicting options: port publishing and the container type network mode") - // ErrConflictNetworkExposePorts conflict between the expose option and the network mode - ErrConflictNetworkExposePorts = fmt.Errorf("Conflicting options: port exposing and the container type network mode") -) - // Parse parses the specified args for the specified command and generates a Config, // a HostConfig and returns them with the specified command. // If the specified args are not valid, it will return an error. @@ -54,17 +26,17 @@ func Parse(cmd *flag.FlagSet, args []string) (*container.Config, *container.Host flAttach = opts.NewListOpts(opts.ValidateAttach) flVolumes = opts.NewListOpts(nil) flTmpfs = opts.NewListOpts(nil) - flBlkioWeightDevice = runconfigopts.NewWeightdeviceOpt(runconfigopts.ValidateWeightDevice) - flDeviceReadBps = runconfigopts.NewThrottledeviceOpt(runconfigopts.ValidateThrottleBpsDevice) - flDeviceWriteBps = runconfigopts.NewThrottledeviceOpt(runconfigopts.ValidateThrottleBpsDevice) + flBlkioWeightDevice = NewWeightdeviceOpt(ValidateWeightDevice) + flDeviceReadBps = NewThrottledeviceOpt(ValidateThrottleBpsDevice) + flDeviceWriteBps = NewThrottledeviceOpt(ValidateThrottleBpsDevice) flLinks = opts.NewListOpts(ValidateLink) - flDeviceReadIOps = runconfigopts.NewThrottledeviceOpt(runconfigopts.ValidateThrottleIOpsDevice) - flDeviceWriteIOps = runconfigopts.NewThrottledeviceOpt(runconfigopts.ValidateThrottleIOpsDevice) + flDeviceReadIOps = NewThrottledeviceOpt(ValidateThrottleIOpsDevice) + flDeviceWriteIOps = NewThrottledeviceOpt(ValidateThrottleIOpsDevice) flEnv = opts.NewListOpts(opts.ValidateEnv) flLabels = opts.NewListOpts(opts.ValidateEnv) flDevices = opts.NewListOpts(ValidateDevice) - flUlimits = runconfigopts.NewUlimitOpt(nil) + flUlimits = NewUlimitOpt(nil) flPublish = opts.NewListOpts(nil) flExpose = opts.NewListOpts(nil) diff --git a/runconfig/client/parse_test.go b/runconfig/opts/parse_test.go similarity index 99% rename from runconfig/client/parse_test.go rename to runconfig/opts/parse_test.go index 7c48abe603..4ae73fa4e9 100644 --- a/runconfig/client/parse_test.go +++ b/runconfig/opts/parse_test.go @@ -1,4 +1,4 @@ -package runconfig +package opts import ( "bytes" @@ -12,6 +12,7 @@ import ( "github.com/docker/docker/api/types/container" flag "github.com/docker/docker/pkg/mflag" + "github.com/docker/docker/runconfig" "github.com/docker/go-connections/nat" ) @@ -288,7 +289,7 @@ func callDecodeContainerConfig(volumes []string, binds []string) (*container.Con c *container.Config h *container.HostConfig ) - w := ContainerConfigWrapper{ + w := runconfig.ContainerConfigWrapper{ Config: &container.Config{ Volumes: map[string]struct{}{}, }, @@ -303,7 +304,7 @@ func callDecodeContainerConfig(volumes []string, binds []string) (*container.Con if b, err = json.Marshal(w); err != nil { return nil, nil, fmt.Errorf("Error on marshal %s", err.Error()) } - c, h, err = DecodeContainerConfig(bytes.NewReader(b)) + c, h, err = runconfig.DecodeContainerConfig(bytes.NewReader(b)) if err != nil { return nil, nil, fmt.Errorf("Error parsing %s: %v", string(b), err) }