summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@pm.me>2019-03-12 15:53:08 -0400
committerMatthew Heon <matthew.heon@pm.me>2019-04-04 12:26:29 -0400
commit11799f4e0ec6256c65691828fb73501bda5d7eec (patch)
tree6f214ab0ddb882b83277d77209544692b0bbfa7c
parent1759eb09e1c13bc8392d515d69ca93226d067c73 (diff)
downloadpodman-11799f4e0ec6256c65691828fb73501bda5d7eec.tar.gz
podman-11799f4e0ec6256c65691828fb73501bda5d7eec.tar.bz2
podman-11799f4e0ec6256c65691828fb73501bda5d7eec.zip
Add named volumes for each container to database
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
-rw-r--r--libpod/container.go14
-rw-r--r--libpod/options.go32
2 files changed, 46 insertions, 0 deletions
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.