summaryrefslogtreecommitdiff
path: root/libpod/container.go
diff options
context:
space:
mode:
authoropenshift-ci[bot] <75433959+openshift-ci[bot]@users.noreply.github.com>2022-07-06 14:51:22 +0000
committerGitHub <noreply@github.com>2022-07-06 14:51:22 +0000
commitca5bebb0825a738ee04c073646696906db95c97c (patch)
treeedc2990099171183914478cb101ce1562bdf95c2 /libpod/container.go
parent49df3cc5cb7e6a1d9e28cacfa86562abbdf48fd9 (diff)
parent8f2d9e7a7c30f5e74f6aa0375b21a4522ec81756 (diff)
downloadpodman-ca5bebb0825a738ee04c073646696906db95c97c.tar.gz
podman-ca5bebb0825a738ee04c073646696906db95c97c.tar.bz2
podman-ca5bebb0825a738ee04c073646696906db95c97c.zip
Merge pull request #14501 from cdoern/podUTS
podman pod create --uts support
Diffstat (limited to 'libpod/container.go')
-rw-r--r--libpod/container.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/libpod/container.go b/libpod/container.go
index 786d9c3d4..4e2d93860 100644
--- a/libpod/container.go
+++ b/libpod/container.go
@@ -1335,3 +1335,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"
+}