github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/domain/infra/runtime_abi.go (about)

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