mirror of
https://github.com/containers/podman.git
synced 2025-06-14 20:44:53 +08:00
enable gocritic linter
The linter ensures a common code style. - use switch/case instead of else if - use if instead of switch/case for single case statement - add space between comment and text - detect the use of defer with os.Exit() - use short form var += "..." instead of var = var + "..." - detect problems with append() ``` newSlice := append(orgSlice, val) ``` This could lead to nasty bugs because the orgSlice will be changed in place if it has enough capacity too hold the new elements. Thus we newSlice might not be a copy. Of course most of the changes are just cosmetic and do not cause any logic errors but I think it is a good idea to enforce a common style. This should help maintainability. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
@ -46,7 +46,6 @@ linters:
|
||||
- lll
|
||||
- unconvert
|
||||
- errcheck
|
||||
- gocritic
|
||||
- gosec
|
||||
- maligned
|
||||
- gomoddirectives
|
||||
|
@ -327,7 +327,7 @@ func suffixCompSlice(suf string, slice []string) []string {
|
||||
if len(split) > 1 {
|
||||
slice[i] = split[0] + suf + "\t" + split[1]
|
||||
} else {
|
||||
slice[i] = slice[i] + suf
|
||||
slice[i] += suf
|
||||
}
|
||||
}
|
||||
return slice
|
||||
@ -647,7 +647,10 @@ func AutocompleteInspect(cmd *cobra.Command, args []string, toComplete string) (
|
||||
pods, _ := getPods(cmd, toComplete, completeDefault)
|
||||
networks, _ := getNetworks(cmd, toComplete, completeDefault)
|
||||
volumes, _ := getVolumes(cmd, toComplete)
|
||||
suggestions := append(containers, images...)
|
||||
|
||||
suggestions := make([]string, 0, len(containers)+len(images)+len(pods)+len(networks)+len(volumes))
|
||||
suggestions = append(suggestions, containers...)
|
||||
suggestions = append(suggestions, images...)
|
||||
suggestions = append(suggestions, pods...)
|
||||
suggestions = append(suggestions, networks...)
|
||||
suggestions = append(suggestions, volumes...)
|
||||
@ -961,6 +964,8 @@ func AutocompleteFormat(o interface{}) func(cmd *cobra.Command, args []string, t
|
||||
// this function provides shell completion for go templates
|
||||
return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||
// autocomplete json when nothing or json is typed
|
||||
// gocritic complains about the argument order but this is correct in this case
|
||||
//nolint:gocritic
|
||||
if strings.HasPrefix("json", toComplete) {
|
||||
return []string{"json"}, cobra.ShellCompDirectiveNoFileComp
|
||||
}
|
||||
|
@ -121,13 +121,8 @@ func scp(cmd *cobra.Command, args []string) (finalErr error) {
|
||||
return err
|
||||
}
|
||||
if flipConnections { // the order of cliConnections matters, we need to flip both arrays since the args are parsed separately sometimes.
|
||||
connect := cliConnections[0]
|
||||
cliConnections[0] = cliConnections[1]
|
||||
cliConnections[1] = connect
|
||||
|
||||
loc := locations[0]
|
||||
locations[0] = locations[1]
|
||||
locations[1] = loc
|
||||
cliConnections[0], cliConnections[1] = cliConnections[1], cliConnections[0]
|
||||
locations[0], locations[1] = locations[1], locations[0]
|
||||
}
|
||||
dest = *locations[1]
|
||||
case len(locations) == 1:
|
||||
|
@ -224,7 +224,8 @@ func create(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
sort.Ints(vals)
|
||||
for ind, core := range vals {
|
||||
if core > int(cpuSet) {
|
||||
switch {
|
||||
case core > int(cpuSet):
|
||||
if copy == "" {
|
||||
copy = "0-" + strconv.Itoa(int(cpuSet))
|
||||
infraOptions.CPUSetCPUs = copy
|
||||
@ -233,9 +234,9 @@ func create(cmd *cobra.Command, args []string) error {
|
||||
infraOptions.CPUSetCPUs = copy
|
||||
break
|
||||
}
|
||||
} else if ind != 0 {
|
||||
case ind != 0:
|
||||
copy += "," + strconv.Itoa(core)
|
||||
} else {
|
||||
default:
|
||||
copy = "" + strconv.Itoa(core)
|
||||
}
|
||||
}
|
||||
|
@ -62,13 +62,14 @@ func create(cmd *cobra.Command, args []string) error {
|
||||
path := args[1]
|
||||
|
||||
var reader io.Reader
|
||||
if env {
|
||||
switch {
|
||||
case env:
|
||||
envValue := os.Getenv(path)
|
||||
if envValue == "" {
|
||||
return errors.Errorf("cannot create store secret data: environment variable %s is not set", path)
|
||||
}
|
||||
reader = strings.NewReader(envValue)
|
||||
} else if path == "-" || path == "/dev/stdin" {
|
||||
case path == "-" || path == "/dev/stdin":
|
||||
stat, err := os.Stdin.Stat()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -77,7 +78,7 @@ func create(cmd *cobra.Command, args []string) error {
|
||||
return errors.New("if `-` is used, data must be passed into stdin")
|
||||
}
|
||||
reader = os.Stdin
|
||||
} else {
|
||||
default:
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -69,6 +69,10 @@ func migrate(cmd *cobra.Command, args []string) {
|
||||
err = engine.Migrate(registry.Context(), cmd.Flags(), registry.PodmanConfig(), migrateOptions)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
|
||||
// FIXME change this to return the error like other commands
|
||||
// defer will never run on os.Exit()
|
||||
//nolint:gocritic
|
||||
os.Exit(define.ExecErrorCodeGeneric)
|
||||
}
|
||||
os.Exit(0)
|
||||
|
@ -56,6 +56,9 @@ func renumber(cmd *cobra.Command, args []string) {
|
||||
err = engine.Renumber(registry.Context(), cmd.Flags(), registry.PodmanConfig())
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
// FIXME change this to return the error like other commands
|
||||
// defer will never run on os.Exit()
|
||||
//nolint:gocritic
|
||||
os.Exit(define.ExecErrorCodeGeneric)
|
||||
}
|
||||
os.Exit(0)
|
||||
|
@ -95,6 +95,9 @@ func reset(cmd *cobra.Command, args []string) {
|
||||
|
||||
if err := engine.Reset(registry.Context()); err != nil {
|
||||
logrus.Error(err)
|
||||
// FIXME change this to return the error like other commands
|
||||
// defer will never run on os.Exit()
|
||||
//nolint:gocritic
|
||||
os.Exit(define.ExecErrorCodeGeneric)
|
||||
}
|
||||
os.Exit(0)
|
||||
|
@ -37,8 +37,7 @@ func AliasFlags(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
||||
|
||||
// TimeoutAliasFlags is a function to handle backwards compatibility with old timeout flags
|
||||
func TimeoutAliasFlags(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
||||
switch name {
|
||||
case "timeout":
|
||||
if name == "timeout" {
|
||||
name = "time"
|
||||
}
|
||||
return pflag.NormalizedName(name)
|
||||
|
@ -229,8 +229,7 @@ func (c *Container) Kill(signal uint) error {
|
||||
// This function returns when the attach finishes. It does not hold the lock for
|
||||
// the duration of its runtime, only using it at the beginning to verify state.
|
||||
func (c *Container) Attach(streams *define.AttachStreams, keys string, resize <-chan define.TerminalSize) error {
|
||||
switch c.LogDriver() {
|
||||
case define.PassthroughLogging:
|
||||
if c.LogDriver() == define.PassthroughLogging {
|
||||
return errors.Wrapf(define.ErrNoLogs, "this container is using the 'passthrough' log driver, cannot attach")
|
||||
}
|
||||
if !c.batched {
|
||||
|
@ -817,16 +817,16 @@ func (c *Container) Exec(config *ExecConfig, streams *define.AttachStreams, resi
|
||||
// Please be careful when using this function since it might temporarily unlock
|
||||
// the container when os.RemoveAll($bundlePath) fails with ENOTEMPTY or EBUSY
|
||||
// errors.
|
||||
func (c *Container) cleanupExecBundle(sessionID string) (Err error) {
|
||||
func (c *Container) cleanupExecBundle(sessionID string) (err error) {
|
||||
path := c.execBundlePath(sessionID)
|
||||
for attempts := 0; attempts < 50; attempts++ {
|
||||
Err = os.RemoveAll(path)
|
||||
if Err == nil || os.IsNotExist(Err) {
|
||||
err = os.RemoveAll(path)
|
||||
if err == nil || os.IsNotExist(err) {
|
||||
return nil
|
||||
}
|
||||
if pathErr, ok := Err.(*os.PathError); ok {
|
||||
Err = pathErr.Err
|
||||
if errors.Cause(Err) == unix.ENOTEMPTY || errors.Cause(Err) == unix.EBUSY {
|
||||
if pathErr, ok := err.(*os.PathError); ok {
|
||||
err = pathErr.Err
|
||||
if errors.Cause(err) == unix.ENOTEMPTY || errors.Cause(err) == unix.EBUSY {
|
||||
// give other processes a chance to use the container
|
||||
if !c.batched {
|
||||
if err := c.save(); err != nil {
|
||||
|
@ -505,8 +505,7 @@ func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) {
|
||||
}
|
||||
|
||||
for _, o := range namedVol.Options {
|
||||
switch o {
|
||||
case "U":
|
||||
if o == "U" {
|
||||
if err := c.ChangeHostPathOwnership(mountPoint, true, int(hostUID), int(hostGID)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -596,8 +595,7 @@ func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) {
|
||||
|
||||
// Check overlay volume options
|
||||
for _, o := range overlayVol.Options {
|
||||
switch o {
|
||||
case "U":
|
||||
if o == "U" {
|
||||
if err := c.ChangeHostPathOwnership(overlayVol.Source, true, int(hostUID), int(hostGID)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -2144,13 +2142,11 @@ func (c *Container) makeBindMounts() error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if !c.config.UseImageHosts && c.state.BindMounts["/etc/hosts"] == "" {
|
||||
} else if !c.config.UseImageHosts && c.state.BindMounts["/etc/hosts"] == "" {
|
||||
if err := c.createHosts(); err != nil {
|
||||
return errors.Wrapf(err, "error creating hosts file for container %s", c.ID())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if c.config.ShmDir != "" {
|
||||
// If ShmDir has a value SHM is always added when we mount the container
|
||||
@ -2351,7 +2347,7 @@ func (c *Container) generateResolvConf() (string, error) {
|
||||
return "", errors.Wrapf(err, "error parsing host resolv.conf")
|
||||
}
|
||||
|
||||
dns := make([]net.IP, 0, len(c.runtime.config.Containers.DNSServers))
|
||||
dns := make([]net.IP, 0, len(c.runtime.config.Containers.DNSServers)+len(c.config.DNSServer))
|
||||
for _, i := range c.runtime.config.Containers.DNSServers {
|
||||
result := net.ParseIP(i)
|
||||
if result == nil {
|
||||
@ -2359,13 +2355,13 @@ func (c *Container) generateResolvConf() (string, error) {
|
||||
}
|
||||
dns = append(dns, result)
|
||||
}
|
||||
dnsServers := append(dns, c.config.DNSServer...)
|
||||
dns = append(dns, c.config.DNSServer...)
|
||||
// If the user provided dns, it trumps all; then dns masq; then resolv.conf
|
||||
var search []string
|
||||
switch {
|
||||
case len(dnsServers) > 0:
|
||||
case len(dns) > 0:
|
||||
// We store DNS servers as net.IP, so need to convert to string
|
||||
for _, server := range dnsServers {
|
||||
for _, server := range dns {
|
||||
nameservers = append(nameservers, server.String())
|
||||
}
|
||||
default:
|
||||
@ -2890,11 +2886,11 @@ func (c *Container) generateUserPasswdEntry(addedUID int) (string, error) {
|
||||
|
||||
func (c *Container) passwdEntry(username string, uid, gid, name, homeDir string) string {
|
||||
s := c.config.PasswdEntry
|
||||
s = strings.Replace(s, "$USERNAME", username, -1)
|
||||
s = strings.Replace(s, "$UID", uid, -1)
|
||||
s = strings.Replace(s, "$GID", gid, -1)
|
||||
s = strings.Replace(s, "$NAME", name, -1)
|
||||
s = strings.Replace(s, "$HOME", homeDir, -1)
|
||||
s = strings.ReplaceAll(s, "$USERNAME", username)
|
||||
s = strings.ReplaceAll(s, "$UID", uid)
|
||||
s = strings.ReplaceAll(s, "$GID", gid)
|
||||
s = strings.ReplaceAll(s, "$NAME", name)
|
||||
s = strings.ReplaceAll(s, "$HOME", homeDir)
|
||||
return s + "\n"
|
||||
}
|
||||
|
||||
|
@ -94,15 +94,16 @@ func (c *Container) stat(containerMountPoint string, containerPath string) (*def
|
||||
}
|
||||
}
|
||||
|
||||
if statInfo.IsSymlink {
|
||||
switch {
|
||||
case statInfo.IsSymlink:
|
||||
// Symlinks are already evaluated and always relative to the
|
||||
// container's mount point.
|
||||
absContainerPath = statInfo.ImmediateTarget
|
||||
} else if strings.HasPrefix(resolvedPath, containerMountPoint) {
|
||||
case strings.HasPrefix(resolvedPath, containerMountPoint):
|
||||
// If the path is on the container's mount point, strip it off.
|
||||
absContainerPath = strings.TrimPrefix(resolvedPath, containerMountPoint)
|
||||
absContainerPath = filepath.Join("/", absContainerPath)
|
||||
} else {
|
||||
default:
|
||||
// No symlink and not on the container's mount point, so let's
|
||||
// move it back to the original input. It must have evaluated
|
||||
// to a volume or bind mount but we cannot return host paths.
|
||||
|
@ -100,7 +100,7 @@ type InspectRestartPolicy struct {
|
||||
// InspectLogConfig holds information about a container's configured log driver
|
||||
type InspectLogConfig struct {
|
||||
Type string `json:"Type"`
|
||||
Config map[string]string `json:"Config"` //idk type, TODO
|
||||
Config map[string]string `json:"Config"`
|
||||
// Path specifies a path to the log file
|
||||
Path string `json:"Path"`
|
||||
// Tag specifies a custom log tag for the container
|
||||
@ -680,7 +680,7 @@ type InspectContainerData struct {
|
||||
SizeRootFs int64 `json:"SizeRootFs,omitempty"`
|
||||
Mounts []InspectMount `json:"Mounts"`
|
||||
Dependencies []string `json:"Dependencies"`
|
||||
NetworkSettings *InspectNetworkSettings `json:"NetworkSettings"` //TODO
|
||||
NetworkSettings *InspectNetworkSettings `json:"NetworkSettings"`
|
||||
Namespace string `json:"Namespace"`
|
||||
IsInfra bool `json:"IsInfra"`
|
||||
Config *InspectContainerConfig `json:"Config"`
|
||||
|
@ -220,7 +220,7 @@ func ConvertV1PodToYAMLPod(pod *v1.Pod) *YAMLPod {
|
||||
cs = append(cs, &YAMLContainer{Container: cc, Resources: res})
|
||||
}
|
||||
mpo := &YAMLPod{Pod: *pod}
|
||||
mpo.Spec = &YAMLPodSpec{PodSpec: (*pod).Spec, Containers: cs}
|
||||
mpo.Spec = &YAMLPodSpec{PodSpec: pod.Spec, Containers: cs}
|
||||
for _, ctr := range pod.Spec.Containers {
|
||||
if ctr.SecurityContext == nil || ctr.SecurityContext.SELinuxOptions == nil {
|
||||
continue
|
||||
@ -527,7 +527,7 @@ func simplePodWithV1Containers(ctx context.Context, ctrs []*Container) (*v1.Pod,
|
||||
// Check if the pod name and container name will end up conflicting
|
||||
// Append -pod if so
|
||||
if util.StringInSlice(podName, ctrNames) {
|
||||
podName = podName + "-pod"
|
||||
podName += "-pod"
|
||||
}
|
||||
|
||||
return newPodObject(
|
||||
@ -885,7 +885,7 @@ func convertVolumePathToName(hostSourcePath string) (string, error) {
|
||||
}
|
||||
// First, trim trailing slashes, then replace slashes with dashes.
|
||||
// Thus, /mnt/data/ will become mnt-data
|
||||
return strings.Replace(strings.Trim(hostSourcePath, "/"), "/", "-", -1), nil
|
||||
return strings.ReplaceAll(strings.Trim(hostSourcePath, "/"), "/", "-"), nil
|
||||
}
|
||||
|
||||
func determineCapAddDropFromCapabilities(defaultCaps, containerCaps []string) *v1.Capabilities {
|
||||
@ -927,14 +927,20 @@ func capAddDrop(caps *specs.LinuxCapabilities) (*v1.Capabilities, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defCaps := g.Config.Process.Capabilities
|
||||
// Combine all the default capabilities into a slice
|
||||
defaultCaps := append(g.Config.Process.Capabilities.Ambient, g.Config.Process.Capabilities.Bounding...)
|
||||
defaultCaps = append(defaultCaps, g.Config.Process.Capabilities.Effective...)
|
||||
defaultCaps = append(defaultCaps, g.Config.Process.Capabilities.Inheritable...)
|
||||
defaultCaps = append(defaultCaps, g.Config.Process.Capabilities.Permitted...)
|
||||
defaultCaps := make([]string, 0, len(defCaps.Ambient)+len(defCaps.Bounding)+len(defCaps.Effective)+len(defCaps.Inheritable)+len(defCaps.Permitted))
|
||||
defaultCaps = append(defaultCaps, defCaps.Ambient...)
|
||||
defaultCaps = append(defaultCaps, defCaps.Bounding...)
|
||||
defaultCaps = append(defaultCaps, defCaps.Effective...)
|
||||
defaultCaps = append(defaultCaps, defCaps.Inheritable...)
|
||||
defaultCaps = append(defaultCaps, defCaps.Permitted...)
|
||||
|
||||
// Combine all the container's capabilities into a slice
|
||||
containerCaps := append(caps.Ambient, caps.Bounding...)
|
||||
containerCaps := make([]string, 0, len(caps.Ambient)+len(caps.Bounding)+len(caps.Effective)+len(caps.Inheritable)+len(caps.Permitted))
|
||||
containerCaps = append(containerCaps, caps.Ambient...)
|
||||
containerCaps = append(containerCaps, caps.Bounding...)
|
||||
containerCaps = append(containerCaps, caps.Effective...)
|
||||
containerCaps = append(containerCaps, caps.Inheritable...)
|
||||
containerCaps = append(containerCaps, caps.Permitted...)
|
||||
@ -1042,7 +1048,7 @@ func generateKubeVolumeDeviceFromLinuxDevice(devices []specs.LinuxDevice) []v1.V
|
||||
}
|
||||
|
||||
func removeUnderscores(s string) string {
|
||||
return strings.Replace(s, "_", "", -1)
|
||||
return strings.ReplaceAll(s, "_", "")
|
||||
}
|
||||
|
||||
// getAutoUpdateAnnotations searches for auto-update container labels
|
||||
|
@ -579,7 +579,7 @@ func (r *Runtime) GetRootlessNetNs(new bool) (*RootlessNetNS, error) {
|
||||
// lets add /usr/sbin to $PATH ourselves.
|
||||
path = os.Getenv("PATH")
|
||||
if !strings.Contains(path, "/usr/sbin") {
|
||||
path = path + ":/usr/sbin"
|
||||
path += ":/usr/sbin"
|
||||
os.Setenv("PATH", path)
|
||||
}
|
||||
|
||||
@ -1508,7 +1508,7 @@ func ocicniPortsToNetTypesPorts(ports []types.OCICNIPortMapping) []types.PortMap
|
||||
ports[i].Protocol == currentPort.Protocol &&
|
||||
ports[i].HostPort-int32(currentPort.Range) == int32(currentPort.HostPort) &&
|
||||
ports[i].ContainerPort-int32(currentPort.Range) == int32(currentPort.ContainerPort) {
|
||||
currentPort.Range = currentPort.Range + 1
|
||||
currentPort.Range++
|
||||
} else {
|
||||
newPorts = append(newPorts, currentPort)
|
||||
currentPort = types.PortMapping{
|
||||
|
@ -33,9 +33,9 @@ type machineExpose struct {
|
||||
func requestMachinePorts(expose bool, ports []types.PortMapping) error {
|
||||
url := "http://" + machineGvproxyEndpoint + "/services/forwarder/"
|
||||
if expose {
|
||||
url = url + "expose"
|
||||
url += "expose"
|
||||
} else {
|
||||
url = url + "unexpose"
|
||||
url += "unexpose"
|
||||
}
|
||||
ctx := context.Background()
|
||||
client := &http.Client{
|
||||
|
@ -82,7 +82,9 @@ func checkSlirpFlags(path string) (*slirpFeatures, error) {
|
||||
}
|
||||
|
||||
func parseSlirp4netnsNetworkOptions(r *Runtime, extraOptions []string) (*slirp4netnsNetworkOptions, error) {
|
||||
slirpOptions := append(r.config.Engine.NetworkCmdOptions, extraOptions...)
|
||||
slirpOptions := make([]string, 0, len(r.config.Engine.NetworkCmdOptions)+len(extraOptions))
|
||||
slirpOptions = append(slirpOptions, r.config.Engine.NetworkCmdOptions...)
|
||||
slirpOptions = append(slirpOptions, extraOptions...)
|
||||
slirp4netnsOpts := &slirp4netnsNetworkOptions{
|
||||
// overwrite defaults
|
||||
disableHostLoopback: true,
|
||||
|
@ -766,14 +766,12 @@ func prepareProcessExec(c *Container, options *ExecOptions, env []string, sessio
|
||||
if execUser.Uid == 0 {
|
||||
pspec.Capabilities.Effective = pspec.Capabilities.Bounding
|
||||
pspec.Capabilities.Permitted = pspec.Capabilities.Bounding
|
||||
} else {
|
||||
if user == c.config.User {
|
||||
} else if user == c.config.User {
|
||||
pspec.Capabilities.Effective = ctrSpec.Process.Capabilities.Effective
|
||||
pspec.Capabilities.Inheritable = ctrSpec.Process.Capabilities.Effective
|
||||
pspec.Capabilities.Permitted = ctrSpec.Process.Capabilities.Effective
|
||||
pspec.Capabilities.Ambient = ctrSpec.Process.Capabilities.Effective
|
||||
}
|
||||
}
|
||||
|
||||
hasHomeSet := false
|
||||
for _, s := range pspec.Env {
|
||||
|
@ -1371,7 +1371,7 @@ func (r *ConmonOCIRuntime) sharedConmonArgs(ctr *Container, cuuid, bundlePath, p
|
||||
case define.JSONLogging:
|
||||
fallthrough
|
||||
//lint:ignore ST1015 the default case has to be here
|
||||
default: //nolint:stylecheck
|
||||
default: //nolint:stylecheck,gocritic
|
||||
// No case here should happen except JSONLogging, but keep this here in case the options are extended
|
||||
logrus.Errorf("%s logging specified but not supported. Choosing k8s-file logging instead", ctr.LogDriver())
|
||||
fallthrough
|
||||
|
@ -550,6 +550,10 @@ func makeRuntime(runtime *Runtime) (retErr error) {
|
||||
// Check if the pause process was created. If it was created, then
|
||||
// move it to its own systemd scope.
|
||||
utils.MovePauseProcessToScope(pausePid)
|
||||
|
||||
// gocritic complains because defer is not run on os.Exit()
|
||||
// However this is fine because the lock is released anyway when the process exits
|
||||
//nolint:gocritic
|
||||
os.Exit(ret)
|
||||
}
|
||||
}
|
||||
|
@ -293,9 +293,10 @@ func LibpodToContainer(l *libpod.Container, sz bool) (*handlers.Container, error
|
||||
stateStr = "created"
|
||||
}
|
||||
|
||||
if state == define.ContainerStateConfigured || state == define.ContainerStateCreated {
|
||||
switch state {
|
||||
case define.ContainerStateConfigured, define.ContainerStateCreated:
|
||||
status = "Created"
|
||||
} else if state == define.ContainerStateStopped || state == define.ContainerStateExited {
|
||||
case define.ContainerStateStopped, define.ContainerStateExited:
|
||||
exitCode, _, err := l.ExitCode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -305,7 +306,7 @@ func LibpodToContainer(l *libpod.Container, sz bool) (*handlers.Container, error
|
||||
return nil, err
|
||||
}
|
||||
status = fmt.Sprintf("Exited (%d) %s ago", exitCode, units.HumanDuration(time.Since(finishedTime)))
|
||||
} else if state == define.ContainerStateRunning || state == define.ContainerStatePaused {
|
||||
case define.ContainerStateRunning, define.ContainerStatePaused:
|
||||
startedTime, err := l.StartedTime()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -314,11 +315,11 @@ func LibpodToContainer(l *libpod.Container, sz bool) (*handlers.Container, error
|
||||
if state == define.ContainerStatePaused {
|
||||
status += " (Paused)"
|
||||
}
|
||||
} else if state == define.ContainerStateRemoving {
|
||||
case define.ContainerStateRemoving:
|
||||
status = "Removal In Progress"
|
||||
} else if state == define.ContainerStateStopping {
|
||||
case define.ContainerStateStopping:
|
||||
status = "Stopping"
|
||||
} else {
|
||||
default:
|
||||
status = "Unknown"
|
||||
}
|
||||
|
||||
|
@ -532,7 +532,7 @@ func ExportImages(w http.ResponseWriter, r *http.Request) {
|
||||
utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
|
||||
return
|
||||
}
|
||||
if len(query.Names) <= 0 {
|
||||
if len(query.Names) == 0 {
|
||||
utils.Error(w, http.StatusBadRequest, fmt.Errorf("no images to download"))
|
||||
return
|
||||
}
|
||||
|
@ -286,7 +286,7 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
}
|
||||
secrets = append(secrets, strings.Join(modifiedOpt[:], ","))
|
||||
secrets = append(secrets, strings.Join(modifiedOpt, ","))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ func PruneImages(w http.ResponseWriter, r *http.Request) {
|
||||
idr = append(idr, types.ImageDeleteResponseItem{
|
||||
Deleted: p.Id,
|
||||
})
|
||||
reclaimedSpace = reclaimedSpace + p.Size
|
||||
reclaimedSpace += p.Size
|
||||
}
|
||||
if errorMsg.Len() > 0 {
|
||||
utils.InternalServerError(w, errors.New(errorMsg.String()))
|
||||
|
@ -150,7 +150,7 @@ func MarshalErrorJSONIsEmpty(ptr unsafe.Pointer) bool {
|
||||
}
|
||||
|
||||
func MarshalErrorSliceJSONIsEmpty(ptr unsafe.Pointer) bool {
|
||||
return len(*((*[]error)(ptr))) <= 0
|
||||
return len(*((*[]error)(ptr))) == 0
|
||||
}
|
||||
|
||||
// WriteJSON writes an interface value encoded as JSON to w
|
||||
|
@ -225,11 +225,9 @@ func Build(ctx context.Context, containerFiles []string, options entities.BuildO
|
||||
platform = "linux"
|
||||
}
|
||||
platform += "/" + options.Architecture
|
||||
} else {
|
||||
if len(platform) > 0 {
|
||||
} else if len(platform) > 0 {
|
||||
platform += "/" + runtime.GOARCH
|
||||
}
|
||||
}
|
||||
if len(platform) > 0 {
|
||||
params.Set("platform", platform)
|
||||
}
|
||||
@ -447,7 +445,7 @@ func Build(ctx context.Context, containerFiles []string, options entities.BuildO
|
||||
}
|
||||
}
|
||||
}
|
||||
secretsForRemote = append(secretsForRemote, strings.Join(modifiedOpt[:], ","))
|
||||
secretsForRemote = append(secretsForRemote, strings.Join(modifiedOpt, ","))
|
||||
}
|
||||
}
|
||||
|
||||
@ -603,8 +601,8 @@ func nTar(excludes []string, sources ...string) (io.ReadCloser, error) {
|
||||
// are required to visit all files. :(
|
||||
return nil
|
||||
}
|
||||
|
||||
if d.Type().IsRegular() { // add file item
|
||||
switch {
|
||||
case d.Type().IsRegular(): // add file item
|
||||
info, err := d.Info()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -644,7 +642,7 @@ func nTar(excludes []string, sources ...string) (io.ReadCloser, error) {
|
||||
seen[di] = name
|
||||
}
|
||||
return err
|
||||
} else if d.IsDir() { // add folders
|
||||
case d.IsDir(): // add folders
|
||||
info, err := d.Info()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -658,7 +656,7 @@ func nTar(excludes []string, sources ...string) (io.ReadCloser, error) {
|
||||
if lerr := tw.WriteHeader(hdr); lerr != nil {
|
||||
return lerr
|
||||
}
|
||||
} else if d.Type()&os.ModeSymlink != 0 { // add symlinks as it, not content
|
||||
case d.Type()&os.ModeSymlink != 0: // add symlinks as it, not content
|
||||
link, err := os.Readlink(path)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -101,7 +101,7 @@ func List(ctx context.Context, options *ListOptions) ([]types.Network, error) {
|
||||
}
|
||||
|
||||
// Disconnect removes a container from a given network
|
||||
func Disconnect(ctx context.Context, networkName string, ContainerNameOrID string, options *DisconnectOptions) error {
|
||||
func Disconnect(ctx context.Context, networkName string, containerNameOrID string, options *DisconnectOptions) error {
|
||||
if options == nil {
|
||||
options = new(DisconnectOptions)
|
||||
}
|
||||
@ -114,7 +114,7 @@ func Disconnect(ctx context.Context, networkName string, ContainerNameOrID strin
|
||||
Container string
|
||||
Force bool
|
||||
}{
|
||||
Container: ContainerNameOrID,
|
||||
Container: containerNameOrID,
|
||||
}
|
||||
if force := options.GetForce(); options.Changed("Force") {
|
||||
disconnect.Force = force
|
||||
|
@ -18,9 +18,6 @@ import (
|
||||
|
||||
var _ = Describe("Podman volumes", func() {
|
||||
var (
|
||||
//tempdir string
|
||||
//err error
|
||||
//podmanTest *PodmanTestIntegration
|
||||
bt *bindingTest
|
||||
s *gexec.Session
|
||||
connText context.Context
|
||||
@ -28,13 +25,6 @@ var _ = Describe("Podman volumes", func() {
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
//tempdir, err = CreateTempDirInTempDir()
|
||||
//if err != nil {
|
||||
// os.Exit(1)
|
||||
//}
|
||||
//podmanTest = PodmanTestCreate(tempdir)
|
||||
//podmanTest.Setup()
|
||||
//podmanTest.SeedImages()
|
||||
bt = newBindingTest()
|
||||
bt.RestoreImagesFromCache()
|
||||
s = bt.startAPIService()
|
||||
@ -44,9 +34,6 @@ var _ = Describe("Podman volumes", func() {
|
||||
})
|
||||
|
||||
AfterEach(func() {
|
||||
//podmanTest.Cleanup()
|
||||
//f := CurrentGinkgoTestDescription()
|
||||
//processTestResult(f)
|
||||
s.Kill()
|
||||
bt.cleanup()
|
||||
})
|
||||
|
@ -34,7 +34,7 @@ func PruneReportsSize(r []*PruneReport) uint64 {
|
||||
if v == nil {
|
||||
continue
|
||||
}
|
||||
size = size + v.Size
|
||||
size += v.Size
|
||||
}
|
||||
return size
|
||||
}
|
||||
|
@ -785,12 +785,19 @@ func transferRootless(source entities.ImageScpOptions, dest entities.ImageScpOpt
|
||||
return cmdLoad.Run()
|
||||
}
|
||||
|
||||
// TransferRootful creates new podman processes using exec.Command and a new uid/gid alongside a cleared environment
|
||||
// transferRootful creates new podman processes using exec.Command and a new uid/gid alongside a cleared environment
|
||||
func transferRootful(source entities.ImageScpOptions, dest entities.ImageScpOptions, podman string, parentFlags []string) error {
|
||||
basicCommand := []string{podman}
|
||||
basicCommand := make([]string, 0, len(parentFlags)+1)
|
||||
basicCommand = append(basicCommand, podman)
|
||||
basicCommand = append(basicCommand, parentFlags...)
|
||||
saveCommand := append(basicCommand, "save")
|
||||
loadCommand := append(basicCommand, "load")
|
||||
|
||||
saveCommand := make([]string, 0, len(basicCommand)+4)
|
||||
saveCommand = append(saveCommand, basicCommand...)
|
||||
saveCommand = append(saveCommand, "save")
|
||||
|
||||
loadCommand := make([]string, 0, len(basicCommand)+3)
|
||||
loadCommand = append(loadCommand, basicCommand...)
|
||||
loadCommand = append(loadCommand, "load")
|
||||
if source.Quiet {
|
||||
saveCommand = append(saveCommand, "-q")
|
||||
loadCommand = append(loadCommand, "-q")
|
||||
|
@ -435,7 +435,7 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY
|
||||
initContainers = append(initContainers, ctr)
|
||||
}
|
||||
for _, container := range podYAML.Spec.Containers {
|
||||
if !strings.Contains("infra", container.Name) {
|
||||
if !strings.Contains(container.Name, "infra") {
|
||||
// Error out if the same name is used for more than one container
|
||||
if _, ok := ctrNames[container.Name]; ok {
|
||||
return nil, errors.Errorf("the pod %q is invalid; duplicate container name %q detected", podName, container.Name)
|
||||
@ -770,7 +770,7 @@ func getBuildFile(imageName string, cwd string) (string, error) {
|
||||
logrus.Error(err.Error())
|
||||
}
|
||||
|
||||
_, err = os.Stat(filepath.Join(dockerfilePath))
|
||||
_, err = os.Stat(dockerfilePath)
|
||||
if err == nil {
|
||||
logrus.Debugf("Building %s with %s", imageName, dockerfilePath)
|
||||
return dockerfilePath, nil
|
||||
|
@ -150,7 +150,7 @@ func (ic *ContainerEngine) SystemPrune(ctx context.Context, options entities.Sys
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
reclaimedSpace = reclaimedSpace + reports.PruneReportsSize(containerPruneReports)
|
||||
reclaimedSpace += reports.PruneReportsSize(containerPruneReports)
|
||||
systemPruneReport.ContainerPruneReports = append(systemPruneReport.ContainerPruneReports, containerPruneReports...)
|
||||
imagePruneOptions := entities.ImagePruneOptions{
|
||||
All: options.All,
|
||||
@ -158,7 +158,7 @@ func (ic *ContainerEngine) SystemPrune(ctx context.Context, options entities.Sys
|
||||
}
|
||||
imageEngine := ImageEngine{Libpod: ic.Libpod}
|
||||
imagePruneReports, err := imageEngine.Prune(ctx, imagePruneOptions)
|
||||
reclaimedSpace = reclaimedSpace + reports.PruneReportsSize(imagePruneReports)
|
||||
reclaimedSpace += reports.PruneReportsSize(imagePruneReports)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -178,7 +178,7 @@ func (ic *ContainerEngine) SystemPrune(ctx context.Context, options entities.Sys
|
||||
if len(volumePruneReport) > 0 {
|
||||
found = true
|
||||
}
|
||||
reclaimedSpace = reclaimedSpace + reports.PruneReportsSize(volumePruneReport)
|
||||
reclaimedSpace += reports.PruneReportsSize(volumePruneReport)
|
||||
systemPruneReport.VolumePruneReports = append(systemPruneReport.VolumePruneReports, volumePruneReport...)
|
||||
}
|
||||
}
|
||||
|
@ -231,13 +231,13 @@ func (a int64Amount) AsCanonicalBytes(out []byte) (result []byte, exponent int32
|
||||
if !ok {
|
||||
return infDecAmount{a.AsDec()}.AsCanonicalBytes(out)
|
||||
}
|
||||
exponent = exponent - 1
|
||||
exponent--
|
||||
case 2, -1:
|
||||
amount, ok = int64MultiplyScale100(amount)
|
||||
if !ok {
|
||||
return infDecAmount{a.AsDec()}.AsCanonicalBytes(out)
|
||||
}
|
||||
exponent = exponent - 2
|
||||
exponent -= 2
|
||||
}
|
||||
return strconv.AppendInt(out, amount, 10), exponent
|
||||
}
|
||||
|
@ -171,7 +171,7 @@ func negativeScaleInt64(base int64, scale Scale) (result int64, exact bool) {
|
||||
if !fraction && value%10 != 0 {
|
||||
fraction = true
|
||||
}
|
||||
value = value / 10
|
||||
value /= 10
|
||||
if value == 0 {
|
||||
if fraction {
|
||||
if base > 0 {
|
||||
@ -265,18 +265,18 @@ func removeInt64Factors(value int64, base int64) (result int64, times int32) {
|
||||
case 10:
|
||||
for result >= 10 && result%10 == 0 {
|
||||
times++
|
||||
result = result / 10
|
||||
result /= 10
|
||||
}
|
||||
// allow the compiler to optimize the common cases
|
||||
case 1024:
|
||||
for result >= 1024 && result%1024 == 0 {
|
||||
times++
|
||||
result = result / 1024
|
||||
result /= 1024
|
||||
}
|
||||
default:
|
||||
for result >= base && result%base == 0 {
|
||||
times++
|
||||
result = result / base
|
||||
result /= base
|
||||
}
|
||||
}
|
||||
if negative {
|
||||
|
@ -21,6 +21,8 @@ const (
|
||||
githubURL = "http://github.com/fedora-cloud/docker-brew-fedora/"
|
||||
)
|
||||
|
||||
var fedoraxzRegex = regexp.MustCompile(`fedora[^\"]+xz`)
|
||||
|
||||
type FedoraDownload struct {
|
||||
Download
|
||||
}
|
||||
@ -96,12 +98,8 @@ func getFedoraDownload(releaseStream string) (string, *url.URL, int64, error) {
|
||||
return "", nil, -1, err
|
||||
}
|
||||
|
||||
rx, err := regexp.Compile(`fedora[^\"]+xz`)
|
||||
if err != nil {
|
||||
return "", nil, -1, err
|
||||
}
|
||||
file := rx.FindString(string(body))
|
||||
if len(file) <= 0 {
|
||||
file := fedoraxzRegex.FindString(string(body))
|
||||
if len(file) == 0 {
|
||||
return "", nil, -1, fmt.Errorf("could not locate Fedora download at %s", dirURL)
|
||||
}
|
||||
|
||||
|
@ -332,8 +332,7 @@ func (v *MachineVM) Init(opts machine.InitOptions) (bool, error) {
|
||||
}
|
||||
}
|
||||
}
|
||||
switch volumeType {
|
||||
case VolumeTypeVirtfs:
|
||||
if volumeType == VolumeTypeVirtfs {
|
||||
virtfsOptions := fmt.Sprintf("local,path=%s,mount_tag=%s,security_model=mapped-xattr", source, tag)
|
||||
if readonly {
|
||||
virtfsOptions += ",readonly"
|
||||
@ -783,7 +782,7 @@ func (v *MachineVM) Stop(_ string, _ machine.StopOptions) error {
|
||||
break
|
||||
}
|
||||
time.Sleep(waitInternal)
|
||||
waitInternal = waitInternal * 2
|
||||
waitInternal *= 2
|
||||
}
|
||||
|
||||
return v.ReadySocket.Delete()
|
||||
@ -799,8 +798,7 @@ func NewQMPMonitor(network, name string, timeout time.Duration) (Monitor, error)
|
||||
rtDir = "/run"
|
||||
}
|
||||
rtDir = filepath.Join(rtDir, "podman")
|
||||
if _, err := os.Stat(filepath.Join(rtDir)); os.IsNotExist(err) {
|
||||
// TODO 0644 is fine on linux but macos is weird
|
||||
if _, err := os.Stat(rtDir); os.IsNotExist(err) {
|
||||
if err := os.MkdirAll(rtDir, 0755); err != nil {
|
||||
return Monitor{}, err
|
||||
}
|
||||
|
@ -434,8 +434,7 @@ func createContainerOptions(rt *libpod.Runtime, s *specgen.SpecGenerator, pod *l
|
||||
// Security options
|
||||
if len(s.SelinuxOpts) > 0 {
|
||||
options = append(options, libpod.WithSecLabels(s.SelinuxOpts))
|
||||
} else {
|
||||
if pod != nil && len(compatibleOptions.SelinuxOpts) == 0 {
|
||||
} else if pod != nil && len(compatibleOptions.SelinuxOpts) == 0 {
|
||||
// duplicate the security options from the pod
|
||||
processLabel, err := pod.ProcessLabel()
|
||||
if err != nil {
|
||||
@ -449,7 +448,6 @@ func createContainerOptions(rt *libpod.Runtime, s *specgen.SpecGenerator, pod *l
|
||||
options = append(options, libpod.WithSecLabels(selinuxOpts))
|
||||
}
|
||||
}
|
||||
}
|
||||
options = append(options, libpod.WithPrivileged(s.Privileged))
|
||||
|
||||
// Get namespace related options
|
||||
|
@ -449,12 +449,13 @@ func setupLivenessProbe(s *specgen.SpecGenerator, containerYAML v1.Container, re
|
||||
}
|
||||
|
||||
// configure healthcheck on the basis of Handler Actions.
|
||||
if probeHandler.Exec != nil {
|
||||
switch {
|
||||
case probeHandler.Exec != nil:
|
||||
execString := strings.Join(probeHandler.Exec.Command, " ")
|
||||
commandString = fmt.Sprintf("%s || %s", execString, failureCmd)
|
||||
} else if probeHandler.HTTPGet != nil {
|
||||
case probeHandler.HTTPGet != nil:
|
||||
commandString = fmt.Sprintf("curl %s://%s:%d/%s || %s", probeHandler.HTTPGet.Scheme, probeHandler.HTTPGet.Host, probeHandler.HTTPGet.Port.IntValue(), probeHandler.HTTPGet.Path, failureCmd)
|
||||
} else if probeHandler.TCPSocket != nil {
|
||||
case probeHandler.TCPSocket != nil:
|
||||
commandString = fmt.Sprintf("nc -z -v %s %d || %s", probeHandler.TCPSocket.Host, probeHandler.TCPSocket.Port.IntValue(), failureCmd)
|
||||
}
|
||||
s.HealthConfig, err = makeHealthCheck(commandString, probe.PeriodSeconds, probe.FailureThreshold, probe.TimeoutSeconds, probe.InitialDelaySeconds)
|
||||
|
@ -5,7 +5,6 @@ import (
|
||||
|
||||
v1 "github.com/containers/podman/v4/pkg/k8s.io/api/core/v1"
|
||||
"github.com/stretchr/testify/assert"
|
||||
//"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func testPropagation(t *testing.T, propagation v1.MountPropagationMode, expected string) {
|
||||
|
@ -202,12 +202,10 @@ func namespaceOptions(s *specgen.SpecGenerator, rt *libpod.Runtime, pod *libpod.
|
||||
if s.IDMappings != nil {
|
||||
if pod == nil {
|
||||
toReturn = append(toReturn, libpod.WithIDMappings(*s.IDMappings))
|
||||
} else {
|
||||
if pod.HasInfraContainer() && (len(s.IDMappings.UIDMap) > 0 || len(s.IDMappings.GIDMap) > 0) {
|
||||
} else if pod.HasInfraContainer() && (len(s.IDMappings.UIDMap) > 0 || len(s.IDMappings.GIDMap) > 0) {
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "cannot specify a new uid/gid map when entering a pod with an infra container")
|
||||
}
|
||||
}
|
||||
}
|
||||
if s.User != "" {
|
||||
toReturn = append(toReturn, libpod.WithUser(s.User))
|
||||
}
|
||||
|
@ -298,7 +298,8 @@ func SpecGenToOCI(ctx context.Context, s *specgen.SpecGenerator, rt *libpod.Runt
|
||||
g.AddAnnotation(key, val)
|
||||
}
|
||||
|
||||
if compatibleOptions.InfraResources == nil && s.ResourceLimits != nil {
|
||||
switch {
|
||||
case compatibleOptions.InfraResources == nil && s.ResourceLimits != nil:
|
||||
out, err := json.Marshal(s.ResourceLimits)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -307,7 +308,7 @@ func SpecGenToOCI(ctx context.Context, s *specgen.SpecGenerator, rt *libpod.Runt
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else if s.ResourceLimits != nil { // if we have predefined resource limits we need to make sure we keep the infra and container limits
|
||||
case s.ResourceLimits != nil: // if we have predefined resource limits we need to make sure we keep the infra and container limits
|
||||
originalResources, err := json.Marshal(s.ResourceLimits)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -325,7 +326,7 @@ func SpecGenToOCI(ctx context.Context, s *specgen.SpecGenerator, rt *libpod.Runt
|
||||
return nil, err
|
||||
}
|
||||
g.Config.Linux.Resources = s.ResourceLimits
|
||||
} else {
|
||||
default:
|
||||
g.Config.Linux.Resources = compatibleOptions.InfraResources
|
||||
}
|
||||
// Devices
|
||||
|
@ -47,12 +47,10 @@ func verifyContainerResourcesCgroupV1(s *specgen.SpecGenerator) ([]string, error
|
||||
if !sysInfo.MemorySwappiness {
|
||||
warnings = append(warnings, "Your kernel does not support memory swappiness capabilities, or the cgroup is not mounted. Memory swappiness discarded.")
|
||||
memory.Swappiness = nil
|
||||
} else {
|
||||
if *memory.Swappiness > 100 {
|
||||
} else if *memory.Swappiness > 100 {
|
||||
return warnings, errors.Errorf("invalid value: %v, valid memory swappiness range is 0-100", *memory.Swappiness)
|
||||
}
|
||||
}
|
||||
}
|
||||
if memory.Reservation != nil && !sysInfo.MemoryReservation {
|
||||
warnings = append(warnings, "Your kernel does not support memory soft limit capabilities or the cgroup is not mounted. Limitation discarded.")
|
||||
memory.Reservation = nil
|
||||
|
@ -47,11 +47,12 @@ func ConvertWinMountPath(path string) (string, error) {
|
||||
path = strings.TrimPrefix(path, `\\?\`)
|
||||
|
||||
// Drive installed via wsl --mount
|
||||
if strings.HasPrefix(path, `\\.\`) {
|
||||
switch {
|
||||
case strings.HasPrefix(path, `\\.\`):
|
||||
path = "/mnt/wsl/" + path[4:]
|
||||
} else if len(path) > 1 && path[1] == ':' {
|
||||
case len(path) > 1 && path[1] == ':':
|
||||
path = "/mnt/" + strings.ToLower(path[0:1]) + path[2:]
|
||||
} else {
|
||||
default:
|
||||
return path, errors.New("unsupported UNC path")
|
||||
}
|
||||
|
||||
|
@ -24,11 +24,12 @@ func validate(c *entities.ContainerCreateOptions) error {
|
||||
"ignore": "",
|
||||
}
|
||||
if _, ok := imageVolType[c.ImageVolume]; !ok {
|
||||
if c.IsInfra {
|
||||
switch {
|
||||
case c.IsInfra:
|
||||
c.ImageVolume = "bind"
|
||||
} else if c.IsClone { // the image volume type will be deduced later from the container we are cloning
|
||||
case c.IsClone: // the image volume type will be deduced later from the container we are cloning
|
||||
return nil
|
||||
} else {
|
||||
default:
|
||||
return errors.Errorf("invalid image-volume type %q. Pick one of bind, tmpfs, or ignore", c.ImageVolume)
|
||||
}
|
||||
}
|
||||
|
@ -34,13 +34,14 @@ func GetTimestamp(value string, reference time.Time) (string, error) {
|
||||
// if the string has a Z or a + or three dashes use parse otherwise use parseinlocation
|
||||
parseInLocation := !(strings.ContainsAny(value, "zZ+") || strings.Count(value, "-") == 3)
|
||||
|
||||
if strings.Contains(value, ".") { // nolint(gocritic)
|
||||
switch {
|
||||
case strings.Contains(value, "."):
|
||||
if parseInLocation {
|
||||
format = rFC3339NanoLocal
|
||||
} else {
|
||||
format = time.RFC3339Nano
|
||||
}
|
||||
} else if strings.Contains(value, "T") {
|
||||
case strings.Contains(value, "T"):
|
||||
// we want the number of colons in the T portion of the timestamp
|
||||
tcolons := strings.Count(value, ":")
|
||||
// if parseInLocation is off and we have a +/- zone offset (not Z) then
|
||||
@ -68,9 +69,9 @@ func GetTimestamp(value string, reference time.Time) (string, error) {
|
||||
format = time.RFC3339
|
||||
}
|
||||
}
|
||||
} else if parseInLocation {
|
||||
case parseInLocation:
|
||||
format = dateLocal
|
||||
} else {
|
||||
default:
|
||||
format = dateWithZone
|
||||
}
|
||||
|
||||
|
@ -212,7 +212,7 @@ func PodmanTestCreateUtil(tempDir string, remote bool) *PodmanTestIntegration {
|
||||
podmanRemoteBinary = os.Getenv("PODMAN_REMOTE_BINARY")
|
||||
}
|
||||
|
||||
conmonBinary := filepath.Join("/usr/libexec/podman/conmon")
|
||||
conmonBinary := "/usr/libexec/podman/conmon"
|
||||
altConmonBinary := "/usr/bin/conmon"
|
||||
if _, err := os.Stat(conmonBinary); os.IsNotExist(err) {
|
||||
conmonBinary = altConmonBinary
|
||||
@ -344,7 +344,7 @@ func imageTarPath(image string) string {
|
||||
}
|
||||
|
||||
// e.g., registry.com/fubar:latest -> registry.com-fubar-latest.tar
|
||||
imageCacheName := strings.Replace(strings.Replace(image, ":", "-", -1), "/", "-", -1) + ".tar"
|
||||
imageCacheName := strings.ReplaceAll(strings.ReplaceAll(image, ":", "-"), "/", "-") + ".tar"
|
||||
|
||||
return filepath.Join(cacheDir, imageCacheName)
|
||||
}
|
||||
|
@ -184,7 +184,7 @@ var _ = Describe("Podman container clone", func() {
|
||||
Expect(checkCreate).Should(Exit(0))
|
||||
createArray := checkCreate.OutputToStringArray()
|
||||
|
||||
Expect(cloneArray).To(ContainElements(createArray[:]))
|
||||
Expect(cloneArray).To(ContainElements(createArray))
|
||||
|
||||
ctrInspect := podmanTest.Podman([]string{"inspect", clone.OutputToString()})
|
||||
ctrInspect.WaitWithDefaultTimeout()
|
||||
|
@ -75,7 +75,7 @@ var _ = Describe("Podman generate kube", func() {
|
||||
|
||||
numContainers := 0
|
||||
for range pod.Spec.Containers {
|
||||
numContainers = numContainers + 1
|
||||
numContainers++
|
||||
}
|
||||
Expect(numContainers).To(Equal(1))
|
||||
})
|
||||
@ -169,7 +169,7 @@ var _ = Describe("Podman generate kube", func() {
|
||||
|
||||
numContainers := 0
|
||||
for range pod.Spec.Containers {
|
||||
numContainers = numContainers + 1
|
||||
numContainers++
|
||||
}
|
||||
Expect(numContainers).To(Equal(1))
|
||||
})
|
||||
@ -478,11 +478,11 @@ var _ = Describe("Podman generate kube", func() {
|
||||
// for k8s
|
||||
Expect(port.Protocol).To(BeEmpty())
|
||||
if port.HostPort == 4000 {
|
||||
foundPort4000 = foundPort4000 + 1
|
||||
foundPort4000++
|
||||
} else if port.HostPort == 5000 {
|
||||
foundPort5000 = foundPort5000 + 1
|
||||
foundPort5000++
|
||||
} else {
|
||||
foundOtherPort = foundOtherPort + 1
|
||||
foundOtherPort++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ var _ = Describe("Podman load", func() {
|
||||
|
||||
compress := SystemExec("gzip", []string{outfile})
|
||||
Expect(compress).Should(Exit(0))
|
||||
outfile = outfile + ".gz"
|
||||
outfile += ".gz"
|
||||
|
||||
rmi := podmanTest.Podman([]string{"rmi", ALPINE})
|
||||
rmi.WaitWithDefaultTimeout()
|
||||
|
@ -51,7 +51,7 @@ var _ = Describe("Podman namespaces", func() {
|
||||
numCtrs := 0
|
||||
for _, outputLine := range output {
|
||||
if outputLine != "" {
|
||||
numCtrs = numCtrs + 1
|
||||
numCtrs++
|
||||
}
|
||||
}
|
||||
Expect(numCtrs).To(Equal(0))
|
||||
|
@ -84,12 +84,12 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
|
||||
exec.WaitWithDefaultTimeout()
|
||||
Expect(exec).Should(Exit(0))
|
||||
|
||||
containerCgroup := strings.TrimRight(strings.Replace(exec.OutputToString(), "0::", "", -1), "\n")
|
||||
containerCgroup := strings.TrimRight(strings.ReplaceAll(exec.OutputToString(), "0::", ""), "\n")
|
||||
|
||||
// Move the container process to a sub cgroup
|
||||
content, err := ioutil.ReadFile(filepath.Join(cgroupRoot, containerCgroup, "cgroup.procs"))
|
||||
Expect(err).To(BeNil())
|
||||
oldSubCgroupPath := filepath.Join(filepath.Join(cgroupRoot, containerCgroup, "old-container"))
|
||||
oldSubCgroupPath := filepath.Join(cgroupRoot, containerCgroup, "old-container")
|
||||
err = os.MkdirAll(oldSubCgroupPath, 0755)
|
||||
Expect(err).To(BeNil())
|
||||
err = ioutil.WriteFile(filepath.Join(oldSubCgroupPath, "cgroup.procs"), content, 0644)
|
||||
@ -102,7 +102,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
|
||||
run = podmanTest.Podman([]string{"--cgroup-manager=cgroupfs", "run", "--rm", "--cgroupns=host", fmt.Sprintf("--cgroup-parent=%s", newCgroup), fedoraMinimal, "cat", "/proc/self/cgroup"})
|
||||
run.WaitWithDefaultTimeout()
|
||||
Expect(run).Should(Exit(0))
|
||||
cgroupEffective := strings.TrimRight(strings.Replace(run.OutputToString(), "0::", "", -1), "\n")
|
||||
cgroupEffective := strings.TrimRight(strings.ReplaceAll(run.OutputToString(), "0::", ""), "\n")
|
||||
|
||||
Expect(newCgroup).To(Equal(filepath.Dir(cgroupEffective)))
|
||||
})
|
||||
|
@ -66,7 +66,7 @@ var _ = Describe("Podman run with --sig-proxy", func() {
|
||||
counter := 0
|
||||
for {
|
||||
buf := make([]byte, 1024)
|
||||
n, err := uds.Read(buf[:])
|
||||
n, err := uds.Read(buf)
|
||||
if err != nil && err != io.EOF {
|
||||
fmt.Println(err)
|
||||
return
|
||||
@ -92,7 +92,7 @@ var _ = Describe("Podman run with --sig-proxy", func() {
|
||||
counter = 0
|
||||
for {
|
||||
buf := make([]byte, 1024)
|
||||
n, err := uds.Read(buf[:])
|
||||
n, err := uds.Read(buf)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
|
@ -729,7 +729,7 @@ VOLUME /test/`, ALPINE)
|
||||
Expect(session).Should(Exit(0))
|
||||
Expect(session.OutputToString()).To(ContainSubstring("888:888"))
|
||||
|
||||
vol = vol + ",O"
|
||||
vol += ",O"
|
||||
session = podmanTest.Podman([]string{"run", "--rm", "--user", "888:888", "--userns", "keep-id", "-v", vol, ALPINE, "stat", "-c", "%u:%g", dest})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
|
@ -108,8 +108,8 @@ func (p *PodmanTest) PodmanAsUserBase(args []string, uid, gid uint32, cwd string
|
||||
timeCmd := append([]string{"/usr/bin/time"}, timeArgs...)
|
||||
wrapper = append(timeCmd, wrapper...)
|
||||
}
|
||||
|
||||
runCmd := append(wrapper, podmanBinary)
|
||||
runCmd := wrapper
|
||||
runCmd = append(runCmd, podmanBinary)
|
||||
if !p.RemoteTest && p.NetworkBackend == Netavark {
|
||||
runCmd = append(runCmd, []string{"--network-backend", "netavark"}...)
|
||||
}
|
||||
@ -449,10 +449,10 @@ func GetHostDistributionInfo() HostOS {
|
||||
host.Arch = runtime.GOARCH
|
||||
for l.Scan() {
|
||||
if strings.HasPrefix(l.Text(), "ID=") {
|
||||
host.Distribution = strings.Replace(strings.TrimSpace(strings.Join(strings.Split(l.Text(), "=")[1:], "")), "\"", "", -1)
|
||||
host.Distribution = strings.ReplaceAll(strings.TrimSpace(strings.Join(strings.Split(l.Text(), "=")[1:], "")), "\"", "")
|
||||
}
|
||||
if strings.HasPrefix(l.Text(), "VERSION_ID=") {
|
||||
host.Version = strings.Replace(strings.TrimSpace(strings.Join(strings.Split(l.Text(), "=")[1:], "")), "\"", "", -1)
|
||||
host.Version = strings.ReplaceAll(strings.TrimSpace(strings.Join(strings.Split(l.Text(), "=")[1:], "")), "\"", "")
|
||||
}
|
||||
}
|
||||
return host
|
||||
|
Reference in New Issue
Block a user