Skip to content

Commit

Permalink
disable healthchecks automatically on non systemd systems
Browse files Browse the repository at this point in the history
The podman healthchecks are implemented using systemd timers, this works
great but it will never work on non systemd distros. Currently the logic
always assumes systemd is available and will fail with an error, so users
are forced to always run with `--no-healthcheck` to disable healthchecks
that are defined in an image for example. This is annoying and IMO
unnecessary, we should just default to no healthcheck on these systems.

First, use the systemd build tag to disable it at build time if this tag
is not used.
Second, use make sure systemd is used as init before trying
to use healthchecks. This could be the case when we are run in a container.

[NO NEW TESTS NEEDED] We do not have any non systemd VMs in CI AFAIK.

Fixes containers#16644

Signed-off-by: Paul Holzinger <[email protected]>
  • Loading branch information
Luap99 committed Dec 5, 2022
1 parent 2f2df58 commit 28774f1
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 24 deletions.
24 changes: 0 additions & 24 deletions libpod/healthcheck.go
Original file line number Diff line number Diff line change
Expand Up @@ -432,27 +432,3 @@ func (c *Container) healthCheckStatus() (string, error) {

return results.Status, nil
}

func (c *Container) disableHealthCheckSystemd(isStartup bool) bool {
if os.Getenv("DISABLE_HC_SYSTEMD") == "true" {
return true
}
if isStartup {
if c.config.StartupHealthCheckConfig.Interval == 0 {
return true
}
}
if c.config.HealthCheckConfig.Interval == 0 {
return true
}
return false
}

// Systemd unit name for the healthcheck systemd unit
func (c *Container) hcUnitName(isStartup bool) string {
unitName := c.ID()
if isStartup {
unitName += "-startup"
}
return unitName
}
28 changes: 28 additions & 0 deletions libpod/healthcheck_linux.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
//go:build systemd
// +build systemd

package libpod

import (
Expand All @@ -10,6 +13,7 @@ import (
"github.com/containers/podman/v4/pkg/errorhandling"
"github.com/containers/podman/v4/pkg/rootless"
"github.com/containers/podman/v4/pkg/systemd"
"github.com/containers/podman/v4/utils"
"github.com/sirupsen/logrus"
)

Expand Down Expand Up @@ -132,3 +136,27 @@ func (c *Container) removeTransientFiles(ctx context.Context, isStartup bool) er

return errorhandling.JoinErrors(stopErrors)
}

func (c *Container) disableHealthCheckSystemd(isStartup bool) bool {
if !utils.RunsOnSystemd() || os.Getenv("DISABLE_HC_SYSTEMD") == "true" {
return true
}
if isStartup {
if c.config.StartupHealthCheckConfig.Interval == 0 {
return true
}
}
if c.config.HealthCheckConfig.Interval == 0 {
return true
}
return false
}

// Systemd unit name for the healthcheck systemd unit
func (c *Container) hcUnitName(isStartup bool) string {
unitName := c.ID()
if isStartup {
unitName += "-startup"
}
return unitName
}
24 changes: 24 additions & 0 deletions libpod/healthcheck_nosystemd_linux.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
//go:build !systemd
// +build !systemd

package libpod

import (
"context"
)

// createTimer systemd timers for healthchecks of a container
func (c *Container) createTimer(interval string, isStartup bool) error {
return nil
}

// startTimer starts a systemd timer for the healthchecks
func (c *Container) startTimer(isStartup bool) error {
return nil
}

// removeTransientFiles removes the systemd timer and unit files
// for the container
func (c *Container) removeTransientFiles(ctx context.Context, isStartup bool) error {
return nil
}

0 comments on commit 28774f1

Please sign in to comment.