diff options
| -rw-r--r-- | cmd/podman/auto-update.go | 46 | ||||
| -rw-r--r-- | pkg/domain/entities/auto-update.go | 7 | ||||
| -rw-r--r-- | pkg/domain/entities/engine_container.go | 1 | ||||
| -rw-r--r-- | pkg/domain/infra/abi/auto-update.go | 13 | ||||
| -rw-r--r-- | pkg/domain/infra/tunnel/auto-update.go | 12 | 
5 files changed, 79 insertions, 0 deletions
diff --git a/cmd/podman/auto-update.go b/cmd/podman/auto-update.go new file mode 100644 index 000000000..758cbbc6f --- /dev/null +++ b/cmd/podman/auto-update.go @@ -0,0 +1,46 @@ +package main + +import ( +	"fmt" + +	"github.com/containers/libpod/cmd/podman/registry" +	"github.com/containers/libpod/pkg/domain/entities" +	"github.com/containers/libpod/pkg/errorhandling" +	"github.com/pkg/errors" +	"github.com/spf13/cobra" +) + +var ( +	autoUpdateDescription = `Auto update containers according to their auto-update policy. + +  Auto-update policies are specified with the "io.containers.autoupdate" label. +  Note that this command is experimental.` +	autoUpdateCommand = &cobra.Command{ +		Use:     "auto-update [flags]", +		Short:   "Auto update containers according to their auto-update policy", +		Long:    autoUpdateDescription, +		RunE:    autoUpdate, +		Example: `podman auto-update`, +	} +) + +func init() { +	registry.Commands = append(registry.Commands, registry.CliCommand{ +		Mode:    []entities.EngineMode{entities.ABIMode}, +		Command: autoUpdateCommand, +	}) +} + +func autoUpdate(cmd *cobra.Command, args []string) error { +	if len(args) > 0 { +		// Backwards compat. System tests expext this error string. +		return errors.Errorf("`%s` takes no arguments", cmd.CommandPath()) +	} +	report, failures := registry.ContainerEngine().AutoUpdate(registry.GetContext()) +	if report != nil { +		for _, unit := range report.Units { +			fmt.Println(unit) +		} +	} +	return errorhandling.JoinErrors(failures) +} diff --git a/pkg/domain/entities/auto-update.go b/pkg/domain/entities/auto-update.go new file mode 100644 index 000000000..aef8fc46b --- /dev/null +++ b/pkg/domain/entities/auto-update.go @@ -0,0 +1,7 @@ +package entities + +// AutoUpdateReport contains the results from running auto-update. +type AutoUpdateReport struct { +	// Units - the restarted systemd units during auto-update. +	Units []string +} diff --git a/pkg/domain/entities/engine_container.go b/pkg/domain/entities/engine_container.go index 1bfac4514..33dbe5120 100644 --- a/pkg/domain/entities/engine_container.go +++ b/pkg/domain/entities/engine_container.go @@ -10,6 +10,7 @@ import (  )  type ContainerEngine interface { +	AutoUpdate(ctx context.Context) (*AutoUpdateReport, []error)  	Config(ctx context.Context) (*config.Config, error)  	ContainerAttach(ctx context.Context, nameOrId string, options AttachOptions) error  	ContainerCheckpoint(ctx context.Context, namesOrIds []string, options CheckpointOptions) ([]*CheckpointReport, error) diff --git a/pkg/domain/infra/abi/auto-update.go b/pkg/domain/infra/abi/auto-update.go new file mode 100644 index 000000000..aa20664b4 --- /dev/null +++ b/pkg/domain/infra/abi/auto-update.go @@ -0,0 +1,13 @@ +package abi + +import ( +	"context" + +	"github.com/containers/libpod/pkg/autoupdate" +	"github.com/containers/libpod/pkg/domain/entities" +) + +func (ic *ContainerEngine) AutoUpdate(ctx context.Context) (*entities.AutoUpdateReport, []error) { +	units, failures := autoupdate.AutoUpdate(ic.Libpod) +	return &entities.AutoUpdateReport{Units: units}, failures +} diff --git a/pkg/domain/infra/tunnel/auto-update.go b/pkg/domain/infra/tunnel/auto-update.go new file mode 100644 index 000000000..fac033050 --- /dev/null +++ b/pkg/domain/infra/tunnel/auto-update.go @@ -0,0 +1,12 @@ +package tunnel + +import ( +	"context" + +	"github.com/containers/libpod/pkg/domain/entities" +	"github.com/pkg/errors" +) + +func (ic *ContainerEngine) AutoUpdate(ctx context.Context) (*entities.AutoUpdateReport, []error) { +	return nil, []error{errors.New("not implemented")} +}  | 
