浏览代码

daemon: WithNamespaces(): inline variables

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 1 年之前
父节点
当前提交
759698581e
共有 1 个文件被更改,包括 44 次插入32 次删除
  1. 44 32
      daemon/oci_linux.go

+ 44 - 32
daemon/oci_linux.go

@@ -244,34 +244,43 @@ func WithNamespaces(daemon *Daemon, c *container.Container) coci.SpecOpts {
 		userNS := false
 		userNS := false
 		// user
 		// user
 		if c.HostConfig.UsernsMode.IsPrivate() {
 		if c.HostConfig.UsernsMode.IsPrivate() {
-			uidMap := daemon.idMapping.UIDMaps
-			if uidMap != nil {
+			if uidMap := daemon.idMapping.UIDMaps; uidMap != nil {
 				userNS = true
 				userNS = true
-				ns := specs.LinuxNamespace{Type: "user"}
-				setNamespace(s, ns)
+				setNamespace(s, specs.LinuxNamespace{
+					Type: "user",
+				})
 				s.Linux.UIDMappings = specMapping(uidMap)
 				s.Linux.UIDMappings = specMapping(uidMap)
 				s.Linux.GIDMappings = specMapping(daemon.idMapping.GIDMaps)
 				s.Linux.GIDMappings = specMapping(daemon.idMapping.GIDMaps)
 			}
 			}
 		}
 		}
 		// network
 		// network
 		if !c.Config.NetworkDisabled {
 		if !c.Config.NetworkDisabled {
-			ns := specs.LinuxNamespace{Type: "network"}
 			if c.HostConfig.NetworkMode.IsContainer() {
 			if c.HostConfig.NetworkMode.IsContainer() {
 				nc, err := daemon.getNetworkedContainer(c.ID, c.HostConfig.NetworkMode.ConnectedContainer())
 				nc, err := daemon.getNetworkedContainer(c.ID, c.HostConfig.NetworkMode.ConnectedContainer())
 				if err != nil {
 				if err != nil {
 					return err
 					return err
 				}
 				}
-				ns.Path = fmt.Sprintf("/proc/%d/ns/net", nc.State.GetPID())
+				setNamespace(s, specs.LinuxNamespace{
+					Type: "network",
+					Path: fmt.Sprintf("/proc/%d/ns/net", nc.State.GetPID()),
+				})
 				if userNS {
 				if userNS {
-					// to share a net namespace, they must also share a user namespace
-					nsUser := specs.LinuxNamespace{Type: "user"}
-					nsUser.Path = fmt.Sprintf("/proc/%d/ns/user", nc.State.GetPID())
-					setNamespace(s, nsUser)
+					// to share a net namespace, the containers must also share a user namespace.
+					setNamespace(s, specs.LinuxNamespace{
+						Type: "user",
+						Path: fmt.Sprintf("/proc/%d/ns/user", nc.State.GetPID()),
+					})
 				}
 				}
 			} else if c.HostConfig.NetworkMode.IsHost() {
 			} else if c.HostConfig.NetworkMode.IsHost() {
-				ns.Path = c.NetworkSettings.SandboxKey
+				setNamespace(s, specs.LinuxNamespace{
+					Type: "network",
+					Path: c.NetworkSettings.SandboxKey,
+				})
+			} else {
+				setNamespace(s, specs.LinuxNamespace{
+					Type: "network",
+				})
 			}
 			}
-			setNamespace(s, ns)
 		}
 		}
 
 
 		// ipc
 		// ipc
@@ -281,18 +290,20 @@ func WithNamespaces(daemon *Daemon, c *container.Container) coci.SpecOpts {
 		}
 		}
 		switch {
 		switch {
 		case ipcMode.IsContainer():
 		case ipcMode.IsContainer():
-			ns := specs.LinuxNamespace{Type: "ipc"}
 			ic, err := daemon.getIpcContainer(ipcMode.Container())
 			ic, err := daemon.getIpcContainer(ipcMode.Container())
 			if err != nil {
 			if err != nil {
 				return errdefs.InvalidParameter(errors.Wrapf(err, "invalid IPC mode: %v", ipcMode))
 				return errdefs.InvalidParameter(errors.Wrapf(err, "invalid IPC mode: %v", ipcMode))
 			}
 			}
-			ns.Path = fmt.Sprintf("/proc/%d/ns/ipc", ic.State.GetPID())
-			setNamespace(s, ns)
+			setNamespace(s, specs.LinuxNamespace{
+				Type: "ipc",
+				Path: fmt.Sprintf("/proc/%d/ns/ipc", ic.State.GetPID()),
+			})
 			if userNS {
 			if userNS {
-				// to share an IPC namespace, they must also share a user namespace
-				nsUser := specs.LinuxNamespace{Type: "user"}
-				nsUser.Path = fmt.Sprintf("/proc/%d/ns/user", ic.State.GetPID())
-				setNamespace(s, nsUser)
+				// to share a IPC namespace, the containers must also share a user namespace.
+				setNamespace(s, specs.LinuxNamespace{
+					Type: "user",
+					Path: fmt.Sprintf("/proc/%d/ns/user", ic.State.GetPID()),
+				})
 			}
 			}
 		case ipcMode.IsHost():
 		case ipcMode.IsHost():
 			oci.RemoveNamespace(s, "ipc")
 			oci.RemoveNamespace(s, "ipc")
@@ -301,8 +312,9 @@ func WithNamespaces(daemon *Daemon, c *container.Container) coci.SpecOpts {
 			// The default behavior used to be what is now called "shareable".
 			// The default behavior used to be what is now called "shareable".
 			fallthrough
 			fallthrough
 		case ipcMode.IsPrivate(), ipcMode.IsShareable(), ipcMode.IsNone():
 		case ipcMode.IsPrivate(), ipcMode.IsShareable(), ipcMode.IsNone():
-			ns := specs.LinuxNamespace{Type: "ipc"}
-			setNamespace(s, ns)
+			setNamespace(s, specs.LinuxNamespace{
+				Type: "ipc",
+			})
 		}
 		}
 
 
 		// pid
 		// pid
@@ -314,24 +326,23 @@ func WithNamespaces(daemon *Daemon, c *container.Container) coci.SpecOpts {
 			if err != nil {
 			if err != nil {
 				return err
 				return err
 			}
 			}
-			ns := specs.LinuxNamespace{
+			setNamespace(s, specs.LinuxNamespace{
 				Type: "pid",
 				Type: "pid",
 				Path: fmt.Sprintf("/proc/%d/ns/pid", pc.State.GetPID()),
 				Path: fmt.Sprintf("/proc/%d/ns/pid", pc.State.GetPID()),
-			}
-			setNamespace(s, ns)
+			})
 			if userNS {
 			if userNS {
-				// to share a PID namespace, they must also share a user namespace
-				nsUser := specs.LinuxNamespace{
+				// to share a PID namespace, the containers must also share a user namespace.
+				setNamespace(s, specs.LinuxNamespace{
 					Type: "user",
 					Type: "user",
 					Path: fmt.Sprintf("/proc/%d/ns/user", pc.State.GetPID()),
 					Path: fmt.Sprintf("/proc/%d/ns/user", pc.State.GetPID()),
-				}
-				setNamespace(s, nsUser)
+				})
 			}
 			}
 		} else if c.HostConfig.PidMode.IsHost() {
 		} else if c.HostConfig.PidMode.IsHost() {
 			oci.RemoveNamespace(s, "pid")
 			oci.RemoveNamespace(s, "pid")
 		} else {
 		} else {
-			ns := specs.LinuxNamespace{Type: "pid"}
-			setNamespace(s, ns)
+			setNamespace(s, specs.LinuxNamespace{
+				Type: "pid",
+			})
 		}
 		}
 		// uts
 		// uts
 		if !c.HostConfig.UTSMode.Valid() {
 		if !c.HostConfig.UTSMode.Valid() {
@@ -348,8 +359,9 @@ func WithNamespaces(daemon *Daemon, c *container.Container) coci.SpecOpts {
 		}
 		}
 		if !c.HostConfig.CgroupnsMode.IsEmpty() {
 		if !c.HostConfig.CgroupnsMode.IsEmpty() {
 			if c.HostConfig.CgroupnsMode.IsPrivate() {
 			if c.HostConfig.CgroupnsMode.IsPrivate() {
-				nsCgroup := specs.LinuxNamespace{Type: "cgroup"}
-				setNamespace(s, nsCgroup)
+				setNamespace(s, specs.LinuxNamespace{
+					Type: "cgroup",
+				})
 			}
 			}
 		}
 		}