From 11799f4e0ec6256c65691828fb73501bda5d7eec Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Tue, 12 Mar 2019 15:53:08 -0400 Subject: Add named volumes for each container to database Signed-off-by: Matthew Heon --- libpod/container.go | 14 ++++++++++++++ libpod/options.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) (limited to 'libpod') diff --git a/libpod/container.go b/libpod/container.go index 739406e42..b02e536c5 100644 --- a/libpod/container.go +++ b/libpod/container.go @@ -234,6 +234,8 @@ type ContainerConfig struct { // These include the SHM mount. // These must be unmounted before the container's rootfs is unmounted. Mounts []string `json:"mounts,omitempty"` + // NamedVolumes lists the named volumes to mount into the container. + NamedVolumes []*ContainerNamedVolume `json:"namedVolumes,omitempty"` // Security Config @@ -368,6 +370,18 @@ type ContainerConfig struct { HealthCheckConfig *manifest.Schema2HealthConfig `json:"healthcheck"` } +// ContainerNamedVolume is a named volume that will be mounted into the +// container. +type ContainerNamedVolume struct { + // Name is the name of the volume to mount in. + // Must resolve to a valid volume present in this Podman. + Name string `json:"volumeName"` + // Dest is the mount's destination + Dest string `json:"dest"` + // Options are fstab style mount options + Options []string `json:"options,omitempty"` +} + // ContainerStatus returns a string representation for users // of a container state func (t ContainerStatus) String() string { diff --git a/libpod/options.go b/libpod/options.go index 24f126e66..86f1747ce 100644 --- a/libpod/options.go +++ b/libpod/options.go @@ -1255,6 +1255,38 @@ func withIsInfra() CtrCreateOption { } } +// WithNamedVolumes adds the given named volumes to the container. +func WithNamedVolumes(volumes []*ContainerNamedVolume) CtrCreateOption { + return func(ctr *Container) error { + if ctr.valid { + return ErrCtrFinalized + } + + destinations := make(map[string]bool) + + for _, vol := range volumes { + // First check if libpod has the volumes + _, err := ctr.runtime.GetVolume(vol.Name) + if err != nil { + return errors.Wrapf(err, "error retrieving volume %s to add to container", vol.Name) + } + + if _, ok := destinations[vol.Dest]; ok { + return errors.Wrapf(err, "two volumes found with destination %s", vol.Dest) + } + destinations[vol.Dest] = true + + ctr.config.NamedVolumes = append(ctr.config.NamedVolumes, &ContainerNamedVolume{ + Name: vol.Name, + Dest: vol.Dest, + Options: vol.Options, + }) + } + + return nil + } +} + // Volume Creation Options // WithVolumeName sets the name of the volume. -- cgit v1.2.3-54-g00ecf