mirror of
https://github.com/containers/podman.git
synced 2025-08-02 17:22:30 +08:00
Merge pull request #14501 from cdoern/podUTS
podman pod create --uts support
This commit is contained in:
@ -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"
|
||||
}
|
||||
|
@ -794,28 +794,8 @@ func (c *Container) generateInspectContainerHostConfig(ctrSpec *spec.Spec, named
|
||||
hostConfig.PidMode = pidMode
|
||||
|
||||
// UTS namespace mode
|
||||
utsMode := ""
|
||||
if c.config.UTSNsCtr != "" {
|
||||
utsMode = fmt.Sprintf("container:%s", c.config.UTSNsCtr)
|
||||
} else if ctrSpec.Linux != nil {
|
||||
// Locate the spec's UTS namespace.
|
||||
// If there is none, it's uts=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 _, ns := range ctrSpec.Linux.Namespaces {
|
||||
if ns.Type == spec.UTSNamespace {
|
||||
if ns.Path != "" {
|
||||
utsMode = fmt.Sprintf("ns:%s", ns.Path)
|
||||
} else {
|
||||
utsMode = "private"
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
if utsMode == "" {
|
||||
utsMode = "host"
|
||||
}
|
||||
}
|
||||
utsMode := c.NamespaceMode(spec.UTSNamespace, ctrSpec)
|
||||
|
||||
hostConfig.UTSMode = utsMode
|
||||
|
||||
// User namespace mode
|
||||
|
@ -122,6 +122,8 @@ type InspectPodInfraConfig struct {
|
||||
PidNS string `json:"pid_ns,omitempty"`
|
||||
// UserNS is the usernamespace that all the containers in the pod will join.
|
||||
UserNS string `json:"userns,omitempty"`
|
||||
// UtsNS is the uts namespace that all containers in the pod will join
|
||||
UtsNS string `json:"uts_ns,omitempty"`
|
||||
}
|
||||
|
||||
// InspectPodContainerInfo contains information on a container in a pod.
|
||||
|
@ -676,6 +676,7 @@ func (p *Pod) Inspect() (*define.InspectPodData, error) {
|
||||
infraConfig.CPUSetCPUs = p.ResourceLim().CPU.Cpus
|
||||
infraConfig.PidNS = p.NamespaceMode(specs.PIDNamespace)
|
||||
infraConfig.UserNS = p.NamespaceMode(specs.UserNamespace)
|
||||
infraConfig.UtsNS = p.NamespaceMode(specs.UTSNamespace)
|
||||
namedVolumes, mounts := infra.SortUserVolumes(infra.config.Spec)
|
||||
inspectMounts, err = infra.GetMounts(namedVolumes, infra.config.ImageVolumes, mounts)
|
||||
infraSecurity = infra.GetSecurityOptions()
|
||||
|
Reference in New Issue
Block a user