github.com/kobeld/docker@v1.12.0-rc1/api/client/node/opts.go (about)

     1  package node
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/docker/engine-api/types/swarm"
     8  )
     9  
    10  type nodeOptions struct {
    11  	role         string
    12  	membership   string
    13  	availability string
    14  }
    15  
    16  func (opts *nodeOptions) ToNodeSpec() (swarm.NodeSpec, error) {
    17  	var spec swarm.NodeSpec
    18  
    19  	switch swarm.NodeRole(strings.ToLower(opts.role)) {
    20  	case swarm.NodeRoleWorker:
    21  		spec.Role = swarm.NodeRoleWorker
    22  	case swarm.NodeRoleManager:
    23  		spec.Role = swarm.NodeRoleManager
    24  	case "":
    25  	default:
    26  		return swarm.NodeSpec{}, fmt.Errorf("invalid role %q, only worker and manager are supported", opts.role)
    27  	}
    28  
    29  	switch swarm.NodeMembership(strings.ToLower(opts.membership)) {
    30  	case swarm.NodeMembershipAccepted:
    31  		spec.Membership = swarm.NodeMembershipAccepted
    32  	case "":
    33  	default:
    34  		return swarm.NodeSpec{}, fmt.Errorf("invalid membership %q, only accepted is supported", opts.membership)
    35  	}
    36  
    37  	switch swarm.NodeAvailability(strings.ToLower(opts.availability)) {
    38  	case swarm.NodeAvailabilityActive:
    39  		spec.Availability = swarm.NodeAvailabilityActive
    40  	case swarm.NodeAvailabilityPause:
    41  		spec.Availability = swarm.NodeAvailabilityPause
    42  	case swarm.NodeAvailabilityDrain:
    43  		spec.Availability = swarm.NodeAvailabilityDrain
    44  	case "":
    45  	default:
    46  		return swarm.NodeSpec{}, fmt.Errorf("invalid availability %q, only active, pause and drain are supported", opts.availability)
    47  	}
    48  
    49  	return spec, nil
    50  }