opts.go 1.3 KB

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