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 }