mirror of
https://github.com/containers/podman.git
synced 2025-06-22 01:48:54 +08:00
Merge pull request #5655 from baude/v2hcrun
podmanv2 enable healthcheck run
This commit is contained in:
33
cmd/podmanV2/healthcheck/healthcheck.go
Normal file
33
cmd/podmanV2/healthcheck/healthcheck.go
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package healthcheck
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/containers/libpod/cmd/podmanV2/registry"
|
||||||
|
"github.com/containers/libpod/pkg/domain/entities"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// Command: healthcheck
|
||||||
|
healthCmd = &cobra.Command{
|
||||||
|
Use: "healthcheck",
|
||||||
|
Short: "Manage Healthcheck",
|
||||||
|
Long: "Manage Healthcheck",
|
||||||
|
TraverseChildren: true,
|
||||||
|
PersistentPreRunE: preRunE,
|
||||||
|
RunE: registry.SubCommandExists,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
registry.Commands = append(registry.Commands, registry.CliCommand{
|
||||||
|
Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
|
||||||
|
Command: healthCmd,
|
||||||
|
})
|
||||||
|
healthCmd.SetHelpTemplate(registry.HelpTemplate())
|
||||||
|
healthCmd.SetUsageTemplate(registry.UsageTemplate())
|
||||||
|
}
|
||||||
|
|
||||||
|
func preRunE(cmd *cobra.Command, args []string) error {
|
||||||
|
_, err := registry.NewContainerEngine(cmd, args)
|
||||||
|
return err
|
||||||
|
}
|
42
cmd/podmanV2/healthcheck/run.go
Normal file
42
cmd/podmanV2/healthcheck/run.go
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package healthcheck
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/containers/libpod/cmd/podmanV2/registry"
|
||||||
|
"github.com/containers/libpod/pkg/domain/entities"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
healthcheckRunDescription = "run the health check of a container"
|
||||||
|
healthcheckrunCommand = &cobra.Command{
|
||||||
|
Use: "run [flags] CONTAINER",
|
||||||
|
Short: "run the health check of a container",
|
||||||
|
Long: healthcheckRunDescription,
|
||||||
|
Example: `podman healthcheck run mywebapp`,
|
||||||
|
RunE: run,
|
||||||
|
Args: cobra.ExactArgs(1),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
registry.Commands = append(registry.Commands, registry.CliCommand{
|
||||||
|
Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
|
||||||
|
Command: healthcheckrunCommand,
|
||||||
|
Parent: healthCmd,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func run(cmd *cobra.Command, args []string) error {
|
||||||
|
response, err := registry.ContainerEngine().HealthCheckRun(context.Background(), args[0], entities.HealthCheckOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if response.Status == "unhealthy" {
|
||||||
|
registry.SetExitCode(1)
|
||||||
|
}
|
||||||
|
fmt.Println(response.Status)
|
||||||
|
return err
|
||||||
|
}
|
@ -7,6 +7,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
_ "github.com/containers/libpod/cmd/podmanV2/containers"
|
_ "github.com/containers/libpod/cmd/podmanV2/containers"
|
||||||
|
_ "github.com/containers/libpod/cmd/podmanV2/healthcheck"
|
||||||
_ "github.com/containers/libpod/cmd/podmanV2/images"
|
_ "github.com/containers/libpod/cmd/podmanV2/images"
|
||||||
_ "github.com/containers/libpod/cmd/podmanV2/networks"
|
_ "github.com/containers/libpod/cmd/podmanV2/networks"
|
||||||
_ "github.com/containers/libpod/cmd/podmanV2/pods"
|
_ "github.com/containers/libpod/cmd/podmanV2/pods"
|
||||||
|
@ -2,6 +2,8 @@ package entities
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"github.com/containers/libpod/libpod/define"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ContainerEngine interface {
|
type ContainerEngine interface {
|
||||||
@ -32,4 +34,6 @@ type ContainerEngine interface {
|
|||||||
VolumeRm(ctx context.Context, namesOrIds []string, opts VolumeRmOptions) ([]*VolumeRmReport, error)
|
VolumeRm(ctx context.Context, namesOrIds []string, opts VolumeRmOptions) ([]*VolumeRmReport, error)
|
||||||
VolumePrune(ctx context.Context, opts VolumePruneOptions) ([]*VolumePruneReport, error)
|
VolumePrune(ctx context.Context, opts VolumePruneOptions) ([]*VolumePruneReport, error)
|
||||||
VolumeList(ctx context.Context, opts VolumeListOptions) ([]*VolumeListReport, error)
|
VolumeList(ctx context.Context, opts VolumeListOptions) ([]*VolumeListReport, error)
|
||||||
|
|
||||||
|
HealthCheckRun(ctx context.Context, nameOrId string, options HealthCheckOptions) (*define.HealthCheckResults, error)
|
||||||
}
|
}
|
||||||
|
3
pkg/domain/entities/healthcheck.go
Normal file
3
pkg/domain/entities/healthcheck.go
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
package entities
|
||||||
|
|
||||||
|
type HealthCheckOptions struct{}
|
26
pkg/domain/infra/abi/healthcheck.go
Normal file
26
pkg/domain/infra/abi/healthcheck.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// +build ABISupport
|
||||||
|
|
||||||
|
package abi
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/containers/libpod/libpod"
|
||||||
|
"github.com/containers/libpod/libpod/define"
|
||||||
|
"github.com/containers/libpod/pkg/domain/entities"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (ic *ContainerEngine) HealthCheckRun(ctx context.Context, nameOrId string, options entities.HealthCheckOptions) (*define.HealthCheckResults, error) {
|
||||||
|
status, err := ic.Libpod.HealthCheck(nameOrId)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
hcStatus := "unhealthy"
|
||||||
|
if status == libpod.HealthCheckSuccess {
|
||||||
|
hcStatus = "healthy"
|
||||||
|
}
|
||||||
|
report := define.HealthCheckResults{
|
||||||
|
Status: hcStatus,
|
||||||
|
}
|
||||||
|
return &report, nil
|
||||||
|
}
|
13
pkg/domain/infra/tunnel/healthcheck.go
Normal file
13
pkg/domain/infra/tunnel/healthcheck.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package tunnel
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/containers/libpod/libpod/define"
|
||||||
|
"github.com/containers/libpod/pkg/bindings/containers"
|
||||||
|
"github.com/containers/libpod/pkg/domain/entities"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (ic *ContainerEngine) HealthCheckRun(ctx context.Context, nameOrId string, options entities.HealthCheckOptions) (*define.HealthCheckResults, error) {
|
||||||
|
return containers.RunHealthCheck(ic.ClientCxt, nameOrId)
|
||||||
|
}
|
Reference in New Issue
Block a user