podmanv2 enable healthcheck run

run healthcheck with podmanv2

Signed-off-by: Brent Baude <bbaude@redhat.com>
This commit is contained in:
Brent Baude
2020-03-29 18:07:05 -05:00
parent 598bb53d46
commit a84c006368
7 changed files with 122 additions and 0 deletions

View 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
}

View 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
}

View File

@ -7,6 +7,7 @@ import (
"strings"
_ "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/networks"
_ "github.com/containers/libpod/cmd/podmanV2/pods"

View File

@ -2,6 +2,8 @@ package entities
import (
"context"
"github.com/containers/libpod/libpod/define"
)
type ContainerEngine interface {
@ -31,4 +33,6 @@ type ContainerEngine interface {
VolumeRm(ctx context.Context, namesOrIds []string, opts VolumeRmOptions) ([]*VolumeRmReport, error)
VolumePrune(ctx context.Context, opts VolumePruneOptions) ([]*VolumePruneReport, error)
VolumeList(ctx context.Context, opts VolumeListOptions) ([]*VolumeListReport, error)
HealthCheckRun(ctx context.Context, nameOrId string, options HealthCheckOptions) (*define.HealthCheckResults, error)
}

View File

@ -0,0 +1,3 @@
package entities
type HealthCheckOptions struct{}

View 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
}

View 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)
}