get.porter.sh/porter@v1.3.0/pkg/cnab/drivers/drivers.go (about)

     1  package drivers
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"get.porter.sh/porter/pkg/portercontext"
     7  	"github.com/cnabio/cnab-go/driver"
     8  	"github.com/cnabio/cnab-go/driver/command"
     9  	"github.com/cnabio/cnab-go/driver/debug"
    10  	"github.com/cnabio/cnab-go/driver/docker"
    11  	"github.com/cnabio/cnab-go/driver/kubernetes"
    12  )
    13  
    14  // LookupDriver creates a driver by name.
    15  //
    16  // This replaces cnab-go's lookup function because cnab-go uses global process
    17  // values, such as $PATH, instead of our context.
    18  func LookupDriver(cxt *portercontext.Context, name string) (driver.Driver, error) {
    19  	switch name {
    20  	case "docker":
    21  		return &docker.Driver{}, nil
    22  	case "kubernetes", "k8s":
    23  		return &kubernetes.Driver{}, nil
    24  	case "debug":
    25  		return &debug.Driver{}, nil
    26  	default:
    27  		// Drivers must be named "cnab-NAME" and be on the PATH
    28  		if driverPath, ok := cxt.LookPath("cnab-" + name); ok {
    29  			d := &command.Driver{Name: name}
    30  			d.Path = driverPath
    31  			return d, nil
    32  		}
    33  
    34  		return nil, fmt.Errorf("unsupported driver or driver not found in PATH: %s", name)
    35  	}
    36  }