mirror of
https://github.com/containers/podman.git
synced 2025-08-06 11:32:07 +08:00
Merge pull request #11689 from Luap99/con-state
sync container state before reading the healthcheck
This commit is contained in:
@ -151,7 +151,7 @@ func (c *Container) getContainerInspectData(size bool, driverData *define.Driver
|
||||
|
||||
if c.config.HealthCheckConfig != nil {
|
||||
// This container has a healthcheck defined in it; we need to add it's state
|
||||
healthCheckState, err := c.GetHealthCheckLog()
|
||||
healthCheckState, err := c.getHealthCheckLog()
|
||||
if err != nil {
|
||||
// An error here is not considered fatal; no health state will be displayed
|
||||
logrus.Error(err)
|
||||
|
@ -162,7 +162,7 @@ func newHealthCheckLog(start, end time.Time, exitCode int, log string) define.He
|
||||
// updatedHealthCheckStatus updates the health status of the container
|
||||
// in the healthcheck log
|
||||
func (c *Container) updateHealthStatus(status string) error {
|
||||
healthCheck, err := c.GetHealthCheckLog()
|
||||
healthCheck, err := c.getHealthCheckLog()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -176,7 +176,7 @@ func (c *Container) updateHealthStatus(status string) error {
|
||||
|
||||
// UpdateHealthCheckLog parses the health check results and writes the log
|
||||
func (c *Container) updateHealthCheckLog(hcl define.HealthCheckLog, inStartPeriod bool) error {
|
||||
healthCheck, err := c.GetHealthCheckLog()
|
||||
healthCheck, err := c.getHealthCheckLog()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -213,10 +213,11 @@ func (c *Container) healthCheckLogPath() string {
|
||||
return filepath.Join(filepath.Dir(c.state.RunDir), "healthcheck.log")
|
||||
}
|
||||
|
||||
// GetHealthCheckLog returns HealthCheck results by reading the container's
|
||||
// getHealthCheckLog returns HealthCheck results by reading the container's
|
||||
// health check log file. If the health check log file does not exist, then
|
||||
// an empty healthcheck struct is returned
|
||||
func (c *Container) GetHealthCheckLog() (define.HealthCheckResults, error) {
|
||||
// The caller should lock the container before this function is called.
|
||||
func (c *Container) getHealthCheckLog() (define.HealthCheckResults, error) {
|
||||
var healthCheck define.HealthCheckResults
|
||||
if _, err := os.Stat(c.healthCheckLogPath()); os.IsNotExist(err) {
|
||||
return healthCheck, nil
|
||||
@ -236,7 +237,12 @@ func (c *Container) HealthCheckStatus() (string, error) {
|
||||
if !c.HasHealthCheck() {
|
||||
return "", errors.Errorf("container %s has no defined healthcheck", c.ID())
|
||||
}
|
||||
results, err := c.GetHealthCheckLog()
|
||||
c.lock.Lock()
|
||||
defer c.lock.Unlock()
|
||||
if err := c.syncContainer(); err != nil {
|
||||
return "", err
|
||||
}
|
||||
results, err := c.getHealthCheckLog()
|
||||
if err != nil {
|
||||
return "", errors.Wrapf(err, "unable to get healthcheck log for %s", c.ID())
|
||||
}
|
||||
|
@ -214,5 +214,12 @@ var _ = Describe("Podman healthcheck run", func() {
|
||||
|
||||
inspect = podmanTest.InspectContainer("hc")
|
||||
Expect(inspect[0].State.Healthcheck.Status).To(Equal(define.HealthCheckHealthy))
|
||||
|
||||
// Test podman ps --filter heath is working (#11687)
|
||||
ps := podmanTest.Podman([]string{"ps", "--filter", "health=healthy"})
|
||||
ps.WaitWithDefaultTimeout()
|
||||
Expect(ps).Should(Exit(0))
|
||||
Expect(len(ps.OutputToStringArray())).To(Equal(2))
|
||||
Expect(ps.OutputToString()).To(ContainSubstring("hc"))
|
||||
})
|
||||
})
|
||||
|
Reference in New Issue
Block a user