diff --git a/metropolis/cli/metroctl/cmd_node_set.go b/metropolis/cli/metroctl/cmd_node_set.go
index 59df43e..bdba8a9 100644
--- a/metropolis/cli/metroctl/cmd_node_set.go
+++ b/metropolis/cli/metroctl/cmd_node_set.go
@@ -2,6 +2,7 @@
 
 import (
 	"context"
+	"fmt"
 	"log"
 	"os"
 	"os/signal"
@@ -26,8 +27,45 @@
 	Short:   "Updates node roles.",
 	Use:     "role <KubernetesController|KubernetesWorker|ConsensusMember> [NodeID, ...]",
 	Example: "metroctl node add role KubernetesWorker metropolis-25fa5f5e9349381d4a5e9e59de0215e3",
-	Args:    PrintUsageOnWrongArgs(cobra.ArbitraryArgs),
-	Run:     doAdd,
+	Args:    PrintUsageOnWrongArgs(cobra.MinimumNArgs(2)),
+	RunE: func(cmd *cobra.Command, args []string) error {
+		ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
+		cc, err := dialAuthenticated(ctx)
+		if err != nil {
+			return fmt.Errorf("while dialing node: %w", err)
+		}
+		mgmt := api.NewManagementClient(cc)
+
+		role := strings.ToLower(args[0])
+		nodes := args[1:]
+
+		opt := func(v bool) *bool { return &v }
+		for _, node := range nodes {
+			req := &api.UpdateNodeRolesRequest{
+				Node: &api.UpdateNodeRolesRequest_Id{
+					Id: node,
+				},
+			}
+			switch role {
+			case "kubernetescontroller", "kc":
+				req.KubernetesController = opt(true)
+			case "kubernetesworker", "kw":
+				req.KubernetesWorker = opt(true)
+			case "consensusmember", "cm":
+				req.ConsensusMember = opt(true)
+			default:
+				return fmt.Errorf("unknown role: %s", role)
+			}
+
+			_, err := mgmt.UpdateNodeRoles(ctx, req)
+			if err != nil {
+				log.Printf("Couldn't update node \"%s\": %v", node, err)
+			} else {
+				log.Printf("Updated node %s.", node)
+			}
+		}
+		return nil
+	},
 }
 
 var removeRoleCmd = &cobra.Command{
@@ -35,7 +73,45 @@
 	Use:     "role <KubernetesController|KubernetesWorker|ConsensusMember> [NodeID, ...]",
 	Example: "metroctl node remove role KubernetesWorker metropolis-25fa5f5e9349381d4a5e9e59de0215e3",
 	Args:    PrintUsageOnWrongArgs(cobra.ArbitraryArgs),
-	Run:     doRemove,
+	RunE: func(cmd *cobra.Command, args []string) error {
+		ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
+		cc, err := dialAuthenticated(ctx)
+		if err != nil {
+			return fmt.Errorf("while dialing node: %w", err)
+		}
+		mgmt := api.NewManagementClient(cc)
+
+		role := strings.ToLower(args[0])
+		nodes := args[1:]
+
+		opt := func(v bool) *bool { return &v }
+		for _, node := range nodes {
+			req := &api.UpdateNodeRolesRequest{
+				Node: &api.UpdateNodeRolesRequest_Id{
+					Id: node,
+				},
+			}
+
+			switch role {
+			case "kubernetescontroller", "kc":
+				req.KubernetesController = opt(false)
+			case "kubernetesworker", "kw":
+				req.KubernetesWorker = opt(false)
+			case "consensusmember", "cm":
+				req.ConsensusMember = opt(false)
+			default:
+				return fmt.Errorf("unknown role: %s. Must be one of: KubernetesController, KubernetesWorker, ConsensusMember", role)
+			}
+
+			_, err := mgmt.UpdateNodeRoles(ctx, req)
+			if err != nil {
+				log.Printf("Couldn't update node \"%s\": %v", node, err)
+			} else {
+				log.Printf("Updated node %s.", node)
+			}
+		}
+		return nil
+	},
 }
 
 func init() {
@@ -45,82 +121,3 @@
 	removeCmd.AddCommand(removeRoleCmd)
 	nodeCmd.AddCommand(removeCmd)
 }
-
-func doAdd(cmd *cobra.Command, args []string) {
-	ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
-	cc := dialAuthenticated(ctx)
-	mgmt := api.NewManagementClient(cc)
-
-	if len(args) < 2 {
-		log.Fatal("Provide the role parameter together with at least one node ID.")
-	}
-
-	role := strings.ToLower(args[0])
-	nodes := args[1:]
-
-	opt := func(v bool) *bool { return &v }
-	for _, node := range nodes {
-		req := &api.UpdateNodeRolesRequest{
-			Node: &api.UpdateNodeRolesRequest_Id{
-				Id: node,
-			},
-		}
-		switch role {
-		case "kubernetescontroller", "kc":
-			req.KubernetesController = opt(true)
-		case "kubernetesworker", "kw":
-			req.KubernetesWorker = opt(true)
-		case "consensusmember", "cm":
-			req.ConsensusMember = opt(true)
-		default:
-			log.Fatalf("Unknown role: %s", role)
-		}
-
-		_, err := mgmt.UpdateNodeRoles(ctx, req)
-		if err != nil {
-			log.Printf("Couldn't update node \"%s\": %v", node, err)
-		} else {
-			log.Printf("Updated node %s.", node)
-		}
-	}
-}
-
-func doRemove(cmd *cobra.Command, args []string) {
-	ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
-	cc := dialAuthenticated(ctx)
-	mgmt := api.NewManagementClient(cc)
-
-	if len(args) < 2 {
-		log.Fatal("Provide the role parameter together with at least one node ID.")
-	}
-
-	role := strings.ToLower(args[0])
-	nodes := args[1:]
-
-	opt := func(v bool) *bool { return &v }
-	for _, node := range nodes {
-		req := &api.UpdateNodeRolesRequest{
-			Node: &api.UpdateNodeRolesRequest_Id{
-				Id: node,
-			},
-		}
-
-		switch role {
-		case "kubernetescontroller", "kc":
-			req.KubernetesController = opt(false)
-		case "kubernetesworker", "kw":
-			req.KubernetesWorker = opt(false)
-		case "consensusmember", "cm":
-			req.ConsensusMember = opt(false)
-		default:
-			log.Fatalf("Unknown role: %s. Must be one of: KubernetesController, KubernetesWorker, ConsensusMember.", role)
-		}
-
-		_, err := mgmt.UpdateNodeRoles(ctx, req)
-		if err != nil {
-			log.Printf("Couldn't update node \"%s\": %v", node, err)
-		} else {
-			log.Printf("Updated node %s.", node)
-		}
-	}
-}
