diff options
author | Matthew Heon <matthew.heon@pm.me> | 2019-04-15 15:26:29 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2019-05-01 10:19:05 -0400 |
commit | 9ee50fe2c7d31e5a6209b63f7735a965dc204131 (patch) | |
tree | d346f802417e6a3fce722b129de39613f60b67ba /pkg/spec/containerconfig.go | |
parent | 71f65ab07f0e96d59ba3836c176f9aa5e7330276 (diff) | |
download | podman-9ee50fe2c7d31e5a6209b63f7735a965dc204131.tar.gz podman-9ee50fe2c7d31e5a6209b63f7735a965dc204131.tar.bz2 podman-9ee50fe2c7d31e5a6209b63f7735a965dc204131.zip |
Migrate to unified volume handling code
Unify handling for the --volume, --mount, --volumes-from, --tmpfs
and --init flags into a single file and set of functions. This
will greatly improve readability and maintainability.
Further, properly handle superceding and conflicting mounts. Our
current patchwork has serious issues when mounts conflict, or
when a mount from --volumes-from or an image volume should be
overwritten by a user volume or named volume.
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
Diffstat (limited to 'pkg/spec/containerconfig.go')
-rw-r--r-- | pkg/spec/containerconfig.go | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/pkg/spec/containerconfig.go b/pkg/spec/containerconfig.go index 87c1b5155..f9bb075b8 100644 --- a/pkg/spec/containerconfig.go +++ b/pkg/spec/containerconfig.go @@ -4,6 +4,7 @@ import ( "github.com/containers/libpod/libpod" spec "github.com/opencontainers/runtime-spec/specs-go" "github.com/pkg/errors" + "github.com/sirupsen/logrus" ) // MakeContainerConfig generates all configuration necessary to start a @@ -15,15 +16,27 @@ func (config *CreateConfig) MakeContainerConfig(runtime *libpod.Runtime, pod *li return nil, nil, errors.Wrapf(libpod.ErrInvalidArg, "pod was given but no pod is specified") } - runtimeSpec, namedVolumes, err := config.createConfigToOCISpec(runtime) + // Parse volumes flag into OCI spec mounts and libpod Named Volumes. + // If there is an identical mount in the OCI spec, we will replace it + // with a mount generated here. + mounts, namedVolumes, err := config.parseVolumes(runtime) if err != nil { return nil, nil, err } - options, err := config.getContainerCreateOptions(runtime, pod, namedVolumes) + logrus.Debugf("got mounts as %v", mounts) + + runtimeSpec, err := config.createConfigToOCISpec(runtime, mounts) + if err != nil { + return nil, nil, err + } + + options, err := config.getContainerCreateOptions(runtime, pod, mounts, namedVolumes) if err != nil { return nil, nil, err } + logrus.Debugf("created OCI spec and options for new container") + return runtimeSpec, options, nil } |