github.com/ssdev-go/moby@v17.12.1-ce-rc2+incompatible/opts/runtime.go (about)

     1  package opts
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/docker/docker/api/types"
     8  )
     9  
    10  // RuntimeOpt defines a map of Runtimes
    11  type RuntimeOpt struct {
    12  	name             string
    13  	stockRuntimeName string
    14  	values           *map[string]types.Runtime
    15  }
    16  
    17  // NewNamedRuntimeOpt creates a new RuntimeOpt
    18  func NewNamedRuntimeOpt(name string, ref *map[string]types.Runtime, stockRuntime string) *RuntimeOpt {
    19  	if ref == nil {
    20  		ref = &map[string]types.Runtime{}
    21  	}
    22  	return &RuntimeOpt{name: name, values: ref, stockRuntimeName: stockRuntime}
    23  }
    24  
    25  // Name returns the name of the NamedListOpts in the configuration.
    26  func (o *RuntimeOpt) Name() string {
    27  	return o.name
    28  }
    29  
    30  // Set validates and updates the list of Runtimes
    31  func (o *RuntimeOpt) Set(val string) error {
    32  	parts := strings.SplitN(val, "=", 2)
    33  	if len(parts) != 2 {
    34  		return fmt.Errorf("invalid runtime argument: %s", val)
    35  	}
    36  
    37  	parts[0] = strings.TrimSpace(parts[0])
    38  	parts[1] = strings.TrimSpace(parts[1])
    39  	if parts[0] == "" || parts[1] == "" {
    40  		return fmt.Errorf("invalid runtime argument: %s", val)
    41  	}
    42  
    43  	parts[0] = strings.ToLower(parts[0])
    44  	if parts[0] == o.stockRuntimeName {
    45  		return fmt.Errorf("runtime name '%s' is reserved", o.stockRuntimeName)
    46  	}
    47  
    48  	if _, ok := (*o.values)[parts[0]]; ok {
    49  		return fmt.Errorf("runtime '%s' was already defined", parts[0])
    50  	}
    51  
    52  	(*o.values)[parts[0]] = types.Runtime{Path: parts[1]}
    53  
    54  	return nil
    55  }
    56  
    57  // String returns Runtime values as a string.
    58  func (o *RuntimeOpt) String() string {
    59  	var out []string
    60  	for k := range *o.values {
    61  		out = append(out, k)
    62  	}
    63  
    64  	return fmt.Sprintf("%v", out)
    65  }
    66  
    67  // GetMap returns a map of Runtimes (name: path)
    68  func (o *RuntimeOpt) GetMap() map[string]types.Runtime {
    69  	if o.values != nil {
    70  		return *o.values
    71  	}
    72  
    73  	return map[string]types.Runtime{}
    74  }
    75  
    76  // Type returns the type of the option
    77  func (o *RuntimeOpt) Type() string {
    78  	return "runtime"
    79  }