123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package node
- import (
- "fmt"
- "strings"
- "github.com/docker/docker/opts"
- runconfigopts "github.com/docker/docker/runconfig/opts"
- "github.com/docker/engine-api/types/swarm"
- )
- type nodeOptions struct {
- annotations
- role string
- availability string
- }
- type annotations struct {
- name string
- labels opts.ListOpts
- }
- func newNodeOptions() *nodeOptions {
- return &nodeOptions{
- annotations: annotations{
- labels: opts.NewListOpts(nil),
- },
- }
- }
- func (opts *nodeOptions) ToNodeSpec() (swarm.NodeSpec, error) {
- var spec swarm.NodeSpec
- spec.Annotations.Name = opts.annotations.name
- spec.Annotations.Labels = runconfigopts.ConvertKVStringsToMap(opts.annotations.labels.GetAll())
- switch swarm.NodeRole(strings.ToLower(opts.role)) {
- case swarm.NodeRoleWorker:
- spec.Role = swarm.NodeRoleWorker
- case swarm.NodeRoleManager:
- spec.Role = swarm.NodeRoleManager
- case "":
- default:
- return swarm.NodeSpec{}, fmt.Errorf("invalid role %q, only worker and manager are supported", opts.role)
- }
- switch swarm.NodeAvailability(strings.ToLower(opts.availability)) {
- case swarm.NodeAvailabilityActive:
- spec.Availability = swarm.NodeAvailabilityActive
- case swarm.NodeAvailabilityPause:
- spec.Availability = swarm.NodeAvailabilityPause
- case swarm.NodeAvailabilityDrain:
- spec.Availability = swarm.NodeAvailabilityDrain
- case "":
- default:
- return swarm.NodeSpec{}, fmt.Errorf("invalid availability %q, only active, pause and drain are supported", opts.availability)
- }
- return spec, nil
- }
|