mirror of https://github.com/containers/podman.git
				
				
				
			Merge pull request #5655 from baude/v2hcrun
podmanv2 enable healthcheck run
This commit is contained in:
		
						commit
						9f5fcc3565
					
				| 
						 | 
					@ -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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					package entities
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type HealthCheckOptions struct{}
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue