github.com/thomasobenaus/nomad@v0.11.1/command/acl_token_update.go (about) 1 package command 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/posener/complete" 8 ) 9 10 type ACLTokenUpdateCommand struct { 11 Meta 12 } 13 14 func (c *ACLTokenUpdateCommand) Help() string { 15 helpText := ` 16 Usage: nomad acl token update <token_accessor_id> 17 18 Update is used to update an existing ACL token. Requires a management token. 19 20 General Options: 21 22 ` + generalOptionsUsage() + ` 23 24 Update Options: 25 26 -name="" 27 Sets the human readable name for the ACL token. 28 29 -type="client" 30 Sets the type of token. Must be one of "client" (default), or "management". 31 32 -global=false 33 Toggles the global mode of the token. Global tokens are replicated to all regions. 34 35 -policy="" 36 Specifies a policy to associate with the token. Can be specified multiple times, 37 but only with client type tokens. 38 ` 39 40 return strings.TrimSpace(helpText) 41 } 42 43 func (c *ACLTokenUpdateCommand) AutocompleteFlags() complete.Flags { 44 return mergeAutocompleteFlags(c.Meta.AutocompleteFlags(FlagSetClient), 45 complete.Flags{ 46 "name": complete.PredictAnything, 47 "type": complete.PredictAnything, 48 "global": complete.PredictNothing, 49 "policy": complete.PredictAnything, 50 }) 51 } 52 53 func (c *ACLTokenUpdateCommand) AutocompleteArgs() complete.Predictor { 54 return complete.PredictNothing 55 } 56 57 func (c *ACLTokenUpdateCommand) Synopsis() string { 58 return "Update an existing ACL token" 59 } 60 61 func (*ACLTokenUpdateCommand) Name() string { return "acl token update" } 62 63 func (c *ACLTokenUpdateCommand) Run(args []string) int { 64 var name, tokenType string 65 var global bool 66 var policies []string 67 flags := c.Meta.FlagSet(c.Name(), FlagSetClient) 68 flags.Usage = func() { c.Ui.Output(c.Help()) } 69 flags.StringVar(&name, "name", "", "") 70 flags.StringVar(&tokenType, "type", "client", "") 71 flags.BoolVar(&global, "global", false, "") 72 flags.Var((funcVar)(func(s string) error { 73 policies = append(policies, s) 74 return nil 75 }), "policy", "") 76 if err := flags.Parse(args); err != nil { 77 return 1 78 } 79 80 // Check that we got exactly one argument 81 args = flags.Args() 82 if l := len(args); l != 1 { 83 c.Ui.Error("This command takes one argument: <token_accessor_id>") 84 c.Ui.Error(commandErrorText(c)) 85 return 1 86 } 87 88 tokenAccessorID := args[0] 89 90 // Get the HTTP client 91 client, err := c.Meta.Client() 92 if err != nil { 93 c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err)) 94 return 1 95 } 96 97 // Get the specified token 98 token, _, err := client.ACLTokens().Info(tokenAccessorID, nil) 99 if err != nil { 100 c.Ui.Error(fmt.Sprintf("Error fetching token: %s", err)) 101 return 1 102 } 103 104 // Create the updated token 105 if name != "" { 106 token.Name = name 107 } 108 109 if tokenType != "" { 110 token.Type = tokenType 111 } 112 113 // This will default to false if the user does not specify it 114 if global != token.Global { 115 token.Global = global 116 } 117 118 if len(policies) != 0 { 119 token.Policies = policies 120 } 121 122 // Update the token 123 updatedToken, _, err := client.ACLTokens().Update(token, nil) 124 if err != nil { 125 c.Ui.Error(fmt.Sprintf("Error updating token: %s", err)) 126 return 1 127 } 128 129 // Format the output 130 c.Ui.Output(formatKVACLToken(updatedToken)) 131 return 0 132 }