mirror of https://github.com/containers/podman.git
				
				
				
			libpod: Split out platform-specific code from hostInfo
[NO NEW TESTS NEEDED] Signed-off-by: Doug Rabson <dfr@rabson.org>
This commit is contained in:
		
							parent
							
								
									2538bea8da
								
							
						
					
					
						commit
						877e673992
					
				
							
								
								
									
										105
									
								
								libpod/info.go
								
								
								
								
							
							
						
						
									
										105
									
								
								libpod/info.go
								
								
								
								
							|  | @ -11,7 +11,6 @@ import ( | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 	"math" | 	"math" | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/exec" |  | ||||||
| 	"runtime" | 	"runtime" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" | 	"strings" | ||||||
|  | @ -19,16 +18,12 @@ import ( | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"github.com/containers/buildah" | 	"github.com/containers/buildah" | ||||||
| 	"github.com/containers/common/pkg/apparmor" |  | ||||||
| 	"github.com/containers/common/pkg/cgroups" |  | ||||||
| 	"github.com/containers/common/pkg/seccomp" |  | ||||||
| 	"github.com/containers/image/v5/pkg/sysregistriesv2" | 	"github.com/containers/image/v5/pkg/sysregistriesv2" | ||||||
| 	"github.com/containers/podman/v4/libpod/define" | 	"github.com/containers/podman/v4/libpod/define" | ||||||
| 	"github.com/containers/podman/v4/libpod/linkmode" | 	"github.com/containers/podman/v4/libpod/linkmode" | ||||||
| 	"github.com/containers/podman/v4/pkg/rootless" | 	"github.com/containers/podman/v4/pkg/rootless" | ||||||
| 	"github.com/containers/storage" | 	"github.com/containers/storage" | ||||||
| 	"github.com/containers/storage/pkg/system" | 	"github.com/containers/storage/pkg/system" | ||||||
| 	"github.com/opencontainers/selinux/go-selinux" |  | ||||||
| 	"github.com/sirupsen/logrus" | 	"github.com/sirupsen/logrus" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -104,94 +99,30 @@ func (r *Runtime) hostInfo() (*define.HostInfo, error) { | ||||||
| 		return nil, fmt.Errorf("error getting hostname: %w", err) | 		return nil, fmt.Errorf("error getting hostname: %w", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	seccompProfilePath, err := DefaultSeccompPath() |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("error getting Seccomp profile path: %w", err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Cgroups version
 |  | ||||||
| 	unified, err := cgroups.IsCgroup2UnifiedMode() |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("error reading cgroups mode: %w", err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Get Map of all available controllers
 |  | ||||||
| 	availableControllers, err := cgroups.GetAvailableControllers(nil, unified) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("error getting available cgroup controllers: %w", err) |  | ||||||
| 	} |  | ||||||
| 	cpuUtil, err := getCPUUtilization() | 	cpuUtil, err := getCPUUtilization() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	info := define.HostInfo{ | 	info := define.HostInfo{ | ||||||
| 		Arch:              runtime.GOARCH, | 		Arch:           runtime.GOARCH, | ||||||
| 		BuildahVersion:    buildah.Version, | 		BuildahVersion: buildah.Version, | ||||||
| 		CgroupManager:     r.config.Engine.CgroupManager, | 		Linkmode:       linkmode.Linkmode(), | ||||||
| 		CgroupControllers: availableControllers, | 		CPUs:           runtime.NumCPU(), | ||||||
| 		Linkmode:          linkmode.Linkmode(), | 		CPUUtilization: cpuUtil, | ||||||
| 		CPUs:              runtime.NumCPU(), | 		Distribution:   hostDistributionInfo, | ||||||
| 		CPUUtilization:    cpuUtil, | 		LogDriver:      r.config.Containers.LogDriver, | ||||||
| 		Distribution:      hostDistributionInfo, | 		EventLogger:    r.eventer.String(), | ||||||
| 		LogDriver:         r.config.Containers.LogDriver, | 		Hostname:       host, | ||||||
| 		EventLogger:       r.eventer.String(), | 		Kernel:         kv, | ||||||
| 		Hostname:          host, | 		MemFree:        mi.MemFree, | ||||||
| 		IDMappings:        define.IDMappings{}, | 		MemTotal:       mi.MemTotal, | ||||||
| 		Kernel:            kv, | 		NetworkBackend: r.config.Network.NetworkBackend, | ||||||
| 		MemFree:           mi.MemFree, | 		OS:             runtime.GOOS, | ||||||
| 		MemTotal:          mi.MemTotal, | 		SwapFree:       mi.SwapFree, | ||||||
| 		NetworkBackend:    r.config.Network.NetworkBackend, | 		SwapTotal:      mi.SwapTotal, | ||||||
| 		OS:                runtime.GOOS, |  | ||||||
| 		Security: define.SecurityInfo{ |  | ||||||
| 			AppArmorEnabled:     apparmor.IsEnabled(), |  | ||||||
| 			DefaultCapabilities: strings.Join(r.config.Containers.DefaultCapabilities, ","), |  | ||||||
| 			Rootless:            rootless.IsRootless(), |  | ||||||
| 			SECCOMPEnabled:      seccomp.IsEnabled(), |  | ||||||
| 			SECCOMPProfilePath:  seccompProfilePath, |  | ||||||
| 			SELinuxEnabled:      selinux.GetEnabled(), |  | ||||||
| 		}, |  | ||||||
| 		Slirp4NetNS: define.SlirpInfo{}, |  | ||||||
| 		SwapFree:    mi.SwapFree, |  | ||||||
| 		SwapTotal:   mi.SwapTotal, |  | ||||||
| 	} | 	} | ||||||
| 
 | 	if err := r.setPlatformHostInfo(&info); err != nil { | ||||||
| 	cgroupVersion := "v1" | 		return nil, err | ||||||
| 	if unified { |  | ||||||
| 		cgroupVersion = "v2" |  | ||||||
| 	} |  | ||||||
| 	info.CgroupsVersion = cgroupVersion |  | ||||||
| 
 |  | ||||||
| 	slirp4netnsPath := r.config.Engine.NetworkCmdPath |  | ||||||
| 	if slirp4netnsPath == "" { |  | ||||||
| 		slirp4netnsPath, _ = exec.LookPath("slirp4netns") |  | ||||||
| 	} |  | ||||||
| 	if slirp4netnsPath != "" { |  | ||||||
| 		version, err := programVersion(slirp4netnsPath) |  | ||||||
| 		if err != nil { |  | ||||||
| 			logrus.Warnf("Failed to retrieve program version for %s: %v", slirp4netnsPath, err) |  | ||||||
| 		} |  | ||||||
| 		program := define.SlirpInfo{ |  | ||||||
| 			Executable: slirp4netnsPath, |  | ||||||
| 			Package:    packageVersion(slirp4netnsPath), |  | ||||||
| 			Version:    version, |  | ||||||
| 		} |  | ||||||
| 		info.Slirp4NetNS = program |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if rootless.IsRootless() { |  | ||||||
| 		uidmappings, err := rootless.ReadMappingsProc("/proc/self/uid_map") |  | ||||||
| 		if err != nil { |  | ||||||
| 			return nil, fmt.Errorf("error reading uid mappings: %w", err) |  | ||||||
| 		} |  | ||||||
| 		gidmappings, err := rootless.ReadMappingsProc("/proc/self/gid_map") |  | ||||||
| 		if err != nil { |  | ||||||
| 			return nil, fmt.Errorf("error reading gid mappings: %w", err) |  | ||||||
| 		} |  | ||||||
| 		idmappings := define.IDMappings{ |  | ||||||
| 			GIDMap: gidmappings, |  | ||||||
| 			UIDMap: uidmappings, |  | ||||||
| 		} |  | ||||||
| 		info.IDMappings = idmappings |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	conmonInfo, ociruntimeInfo, err := r.defaultOCIRuntime.RuntimeInfo() | 	conmonInfo, ociruntimeInfo, err := r.defaultOCIRuntime.RuntimeInfo() | ||||||
|  |  | ||||||
|  | @ -0,0 +1,88 @@ | ||||||
|  | package libpod | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"os/exec" | ||||||
|  | 	"strings" | ||||||
|  | 
 | ||||||
|  | 	"github.com/containers/common/pkg/apparmor" | ||||||
|  | 	"github.com/containers/common/pkg/cgroups" | ||||||
|  | 	"github.com/containers/common/pkg/seccomp" | ||||||
|  | 	"github.com/containers/podman/v4/libpod/define" | ||||||
|  | 	"github.com/containers/podman/v4/pkg/rootless" | ||||||
|  | 	"github.com/opencontainers/selinux/go-selinux" | ||||||
|  | 	"github.com/sirupsen/logrus" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func (r *Runtime) setPlatformHostInfo(info *define.HostInfo) error { | ||||||
|  | 	seccompProfilePath, err := DefaultSeccompPath() | ||||||
|  | 	if err != nil { | ||||||
|  | 		return fmt.Errorf("error getting Seccomp profile path: %w", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Cgroups version
 | ||||||
|  | 	unified, err := cgroups.IsCgroup2UnifiedMode() | ||||||
|  | 	if err != nil { | ||||||
|  | 		return fmt.Errorf("error reading cgroups mode: %w", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Get Map of all available controllers
 | ||||||
|  | 	availableControllers, err := cgroups.GetAvailableControllers(nil, unified) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return fmt.Errorf("error getting available cgroup controllers: %w", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	info.CgroupManager = r.config.Engine.CgroupManager | ||||||
|  | 	info.CgroupControllers = availableControllers | ||||||
|  | 	info.IDMappings = define.IDMappings{} | ||||||
|  | 	info.Security = define.SecurityInfo{ | ||||||
|  | 		AppArmorEnabled:     apparmor.IsEnabled(), | ||||||
|  | 		DefaultCapabilities: strings.Join(r.config.Containers.DefaultCapabilities, ","), | ||||||
|  | 		Rootless:            rootless.IsRootless(), | ||||||
|  | 		SECCOMPEnabled:      seccomp.IsEnabled(), | ||||||
|  | 		SECCOMPProfilePath:  seccompProfilePath, | ||||||
|  | 		SELinuxEnabled:      selinux.GetEnabled(), | ||||||
|  | 	} | ||||||
|  | 	info.Slirp4NetNS = define.SlirpInfo{} | ||||||
|  | 
 | ||||||
|  | 	cgroupVersion := "v1" | ||||||
|  | 	if unified { | ||||||
|  | 		cgroupVersion = "v2" | ||||||
|  | 	} | ||||||
|  | 	info.CgroupsVersion = cgroupVersion | ||||||
|  | 
 | ||||||
|  | 	slirp4netnsPath := r.config.Engine.NetworkCmdPath | ||||||
|  | 	if slirp4netnsPath == "" { | ||||||
|  | 		slirp4netnsPath, _ = exec.LookPath("slirp4netns") | ||||||
|  | 	} | ||||||
|  | 	if slirp4netnsPath != "" { | ||||||
|  | 		version, err := programVersion(slirp4netnsPath) | ||||||
|  | 		if err != nil { | ||||||
|  | 			logrus.Warnf("Failed to retrieve program version for %s: %v", slirp4netnsPath, err) | ||||||
|  | 		} | ||||||
|  | 		program := define.SlirpInfo{ | ||||||
|  | 			Executable: slirp4netnsPath, | ||||||
|  | 			Package:    packageVersion(slirp4netnsPath), | ||||||
|  | 			Version:    version, | ||||||
|  | 		} | ||||||
|  | 		info.Slirp4NetNS = program | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if rootless.IsRootless() { | ||||||
|  | 		uidmappings, err := rootless.ReadMappingsProc("/proc/self/uid_map") | ||||||
|  | 		if err != nil { | ||||||
|  | 			return fmt.Errorf("error reading uid mappings: %w", err) | ||||||
|  | 		} | ||||||
|  | 		gidmappings, err := rootless.ReadMappingsProc("/proc/self/gid_map") | ||||||
|  | 		if err != nil { | ||||||
|  | 			return fmt.Errorf("error reading gid mappings: %w", err) | ||||||
|  | 		} | ||||||
|  | 		idmappings := define.IDMappings{ | ||||||
|  | 			GIDMap: gidmappings, | ||||||
|  | 			UIDMap: uidmappings, | ||||||
|  | 		} | ||||||
|  | 		info.IDMappings = idmappings | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue