github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/pkg/domain/infra/runtime_abi.go (about)

     1  // +build !remote
     2  
     3  package infra
     4  
     5  import (
     6  	"context"
     7  	"fmt"
     8  
     9  	"github.com/containers/podman/v2/libpod"
    10  	"github.com/containers/podman/v2/pkg/bindings"
    11  	"github.com/containers/podman/v2/pkg/domain/entities"
    12  	"github.com/containers/podman/v2/pkg/domain/infra/abi"
    13  	"github.com/containers/podman/v2/pkg/domain/infra/tunnel"
    14  )
    15  
    16  // NewContainerEngine factory provides a libpod runtime for container-related operations
    17  func NewContainerEngine(facts *entities.PodmanConfig) (entities.ContainerEngine, error) {
    18  	switch facts.EngineMode {
    19  	case entities.ABIMode:
    20  		r, err := NewLibpodRuntime(facts.FlagSet, facts)
    21  		return r, err
    22  	case entities.TunnelMode:
    23  		ctx, err := bindings.NewConnectionWithIdentity(context.Background(), facts.URI, facts.Identity)
    24  		return &tunnel.ContainerEngine{ClientCxt: ctx}, err
    25  	}
    26  	return nil, fmt.Errorf("runtime mode '%v' is not supported", facts.EngineMode)
    27  }
    28  
    29  // NewContainerEngine factory provides a libpod runtime for image-related operations
    30  func NewImageEngine(facts *entities.PodmanConfig) (entities.ImageEngine, error) {
    31  	switch facts.EngineMode {
    32  	case entities.ABIMode:
    33  		r, err := NewLibpodImageRuntime(facts.FlagSet, facts)
    34  		return r, err
    35  	case entities.TunnelMode:
    36  		ctx, err := bindings.NewConnectionWithIdentity(context.Background(), facts.URI, facts.Identity)
    37  		return &tunnel.ImageEngine{ClientCxt: ctx}, err
    38  	}
    39  	return nil, fmt.Errorf("runtime mode '%v' is not supported", facts.EngineMode)
    40  }
    41  
    42  // NewSystemEngine factory provides a libpod runtime for specialized system operations
    43  func NewSystemEngine(setup entities.EngineSetup, facts *entities.PodmanConfig) (entities.SystemEngine, error) {
    44  	switch facts.EngineMode {
    45  	case entities.ABIMode:
    46  		var r *libpod.Runtime
    47  		var err error
    48  		switch setup {
    49  		case entities.NormalMode:
    50  			r, err = GetRuntime(context.Background(), facts.FlagSet, facts)
    51  		case entities.RenumberMode:
    52  			r, err = GetRuntimeRenumber(context.Background(), facts.FlagSet, facts)
    53  		case entities.ResetMode:
    54  			r, err = GetRuntimeRenumber(context.Background(), facts.FlagSet, facts)
    55  		case entities.MigrateMode:
    56  			name, flagErr := facts.FlagSet.GetString("new-runtime")
    57  			if flagErr != nil {
    58  				return nil, flagErr
    59  			}
    60  			r, err = GetRuntimeMigrate(context.Background(), facts.FlagSet, facts, name)
    61  		case entities.NoFDsMode:
    62  			r, err = GetRuntimeDisableFDs(context.Background(), facts.FlagSet, facts)
    63  		}
    64  		return &abi.SystemEngine{Libpod: r}, err
    65  	case entities.TunnelMode:
    66  		return nil, fmt.Errorf("tunnel system runtime not supported")
    67  	}
    68  	return nil, fmt.Errorf("runtime mode '%v' is not supported", facts.EngineMode)
    69  }