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 }