promote.go 1011 B

123456789101112131415161718192021222324252627282930313233343536
  1. package node
  2. import (
  3. "fmt"
  4. "github.com/docker/docker/api/types/swarm"
  5. "github.com/docker/docker/cli"
  6. "github.com/docker/docker/cli/command"
  7. "github.com/spf13/cobra"
  8. )
  9. func newPromoteCommand(dockerCli *command.DockerCli) *cobra.Command {
  10. return &cobra.Command{
  11. Use: "promote NODE [NODE...]",
  12. Short: "Promote one or more nodes to manager in the swarm",
  13. Args: cli.RequiresMinArgs(1),
  14. RunE: func(cmd *cobra.Command, args []string) error {
  15. return runPromote(dockerCli, args)
  16. },
  17. }
  18. }
  19. func runPromote(dockerCli *command.DockerCli, nodes []string) error {
  20. promote := func(node *swarm.Node) error {
  21. if node.Spec.Role == swarm.NodeRoleManager {
  22. fmt.Fprintf(dockerCli.Out(), "Node %s is already a manager.\n", node.ID)
  23. return errNoRoleChange
  24. }
  25. node.Spec.Role = swarm.NodeRoleManager
  26. return nil
  27. }
  28. success := func(nodeID string) {
  29. fmt.Fprintf(dockerCli.Out(), "Node %s promoted to a manager in the swarm.\n", nodeID)
  30. }
  31. return updateNodes(dockerCli, nodes, promote, success)
  32. }