github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/pkg/domain/infra/abi/system_varlink.go (about) 1 // +build varlink 2 3 package abi 4 5 import ( 6 "context" 7 8 "github.com/containers/podman/v2/pkg/domain/entities" 9 iopodman "github.com/containers/podman/v2/pkg/varlink" 10 iopodmanAPI "github.com/containers/podman/v2/pkg/varlinkapi" 11 "github.com/containers/podman/v2/version" 12 "github.com/pkg/errors" 13 "github.com/sirupsen/logrus" 14 "github.com/varlink/go/varlink" 15 ) 16 17 func (ic *ContainerEngine) VarlinkService(_ context.Context, opts entities.ServiceOptions) error { 18 var varlinkInterfaces = []*iopodman.VarlinkInterface{ 19 iopodmanAPI.New(opts.Command, ic.Libpod), 20 } 21 22 service, err := varlink.NewService( 23 "Atomic", 24 "podman", 25 version.Version.String(), 26 "https://github.com/containers/podman", 27 ) 28 if err != nil { 29 return errors.Wrapf(err, "unable to create new varlink service") 30 } 31 32 for _, i := range varlinkInterfaces { 33 if err := service.RegisterInterface(i); err != nil { 34 return errors.Errorf("unable to register varlink interface %v", i) 35 } 36 } 37 38 // Run the varlink server at the given address 39 if err = service.Listen(opts.URI, opts.Timeout); err != nil { 40 switch err.(type) { 41 case varlink.ServiceTimeoutError: 42 logrus.Infof("varlink service expired (use --time to increase session time beyond %s ms, 0 means never timeout)", opts.Timeout.String()) 43 return nil 44 default: 45 return errors.Wrapf(err, "unable to start varlink service") 46 } 47 } 48 return nil 49 }