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  }