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 }