diff options
author | cdoern <cdoern@redhat.com> | 2022-06-06 13:03:37 -0400 |
---|---|---|
committer | Charlie Doern <cdoern@redhat.com> | 2022-07-05 09:28:07 -0400 |
commit | 8f2d9e7a7c30f5e74f6aa0375b21a4522ec81756 (patch) | |
tree | 03526a91d8d8c428547b63b22f145e59a373bd63 /libpod/container.go | |
parent | 13479d457d34496b43027bc1d71cdb0891a8b738 (diff) | |
download | podman-8f2d9e7a7c30f5e74f6aa0375b21a4522ec81756.tar.gz podman-8f2d9e7a7c30f5e74f6aa0375b21a4522ec81756.tar.bz2 podman-8f2d9e7a7c30f5e74f6aa0375b21a4522ec81756.zip |
podman pod create --uts support
add support for the --uts flag in pod create, allowing users to avoid
issues with default values in containers.conf.
uts follows the same format as other namespace flags:
--uts=private (default), --uts=host, --uts=ns:PATH
resolves #13714
Signed-off-by: Charlie Doern <cdoern@redhat.com>
Diffstat (limited to 'libpod/container.go')
-rw-r--r-- | libpod/container.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/libpod/container.go b/libpod/container.go index 0619471b4..1e2dad3f3 100644 --- a/libpod/container.go +++ b/libpod/container.go @@ -1336,3 +1336,52 @@ func (c *Container) getNetworkStatus() map[string]types.StatusBlock { } return nil } + +func (c *Container) NamespaceMode(ns spec.LinuxNamespaceType, ctrSpec *spec.Spec) string { + switch ns { + case spec.UTSNamespace: + if c.config.UTSNsCtr != "" { + return fmt.Sprintf("container:%s", c.config.UTSNsCtr) + } + case spec.CgroupNamespace: + if c.config.CgroupNsCtr != "" { + return fmt.Sprintf("container:%s", c.config.CgroupNsCtr) + } + case spec.IPCNamespace: + if c.config.IPCNsCtr != "" { + return fmt.Sprintf("container:%s", c.config.IPCNsCtr) + } + case spec.PIDNamespace: + if c.config.PIDNsCtr != "" { + return fmt.Sprintf("container:%s", c.config.PIDNsCtr) + } + case spec.UserNamespace: + if c.config.UserNsCtr != "" { + return fmt.Sprintf("container:%s", c.config.UserNsCtr) + } + case spec.NetworkNamespace: + if c.config.NetNsCtr != "" { + return fmt.Sprintf("container:%s", c.config.NetNsCtr) + } + case spec.MountNamespace: + if c.config.MountNsCtr != "" { + return fmt.Sprintf("container:%s", c.config.MountNsCtr) + } + } + + if ctrSpec.Linux != nil { + // Locate the spec's given namespace. + // If there is none, it's namespace=host. + // If there is one and it has a path, it's "ns:". + // If there is no path, it's default - the empty string. + for _, availableNS := range ctrSpec.Linux.Namespaces { + if availableNS.Type == ns { + if availableNS.Path != "" { + return fmt.Sprintf("ns:%s", availableNS.Path) + } + return "private" + } + } + } + return "host" +} |