github.com/aminovpavel/nomad@v0.11.8/command/volume_deregister.go (about) 1 package command 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/hashicorp/nomad/api/contexts" 8 "github.com/posener/complete" 9 ) 10 11 type VolumeDeregisterCommand struct { 12 Meta 13 } 14 15 func (c *VolumeDeregisterCommand) Help() string { 16 helpText := ` 17 Usage: nomad volume deregister [options] <id> 18 19 Remove an unused volume from Nomad. 20 21 General Options: 22 23 ` + generalOptionsUsage() 24 25 return strings.TrimSpace(helpText) 26 } 27 28 func (c *VolumeDeregisterCommand) AutocompleteFlags() complete.Flags { 29 return c.Meta.AutocompleteFlags(FlagSetClient) 30 } 31 32 func (c *VolumeDeregisterCommand) AutocompleteArgs() complete.Predictor { 33 return complete.PredictFunc(func(a complete.Args) []string { 34 client, err := c.Meta.Client() 35 if err != nil { 36 return nil 37 } 38 39 // When multiple volume types are implemented, this search should merge contexts 40 resp, _, err := client.Search().PrefixSearch(a.Last, contexts.Volumes, nil) 41 if err != nil { 42 return []string{} 43 } 44 return resp.Matches[contexts.Volumes] 45 }) 46 } 47 48 func (c *VolumeDeregisterCommand) Synopsis() string { 49 return "Remove a volume" 50 } 51 52 func (c *VolumeDeregisterCommand) Name() string { return "volume deregister" } 53 54 func (c *VolumeDeregisterCommand) Run(args []string) int { 55 flags := c.Meta.FlagSet(c.Name(), FlagSetClient) 56 flags.Usage = func() { c.Ui.Output(c.Help()) } 57 58 if err := flags.Parse(args); err != nil { 59 c.Ui.Error(fmt.Sprintf("Error parsing arguments %s", err)) 60 return 1 61 } 62 63 // Check that we get exactly one argument 64 args = flags.Args() 65 if l := len(args); l != 1 { 66 c.Ui.Error("This command takes one argument: <id>") 67 c.Ui.Error(commandErrorText(c)) 68 return 1 69 } 70 volID := args[0] 71 72 // Get the HTTP client 73 client, err := c.Meta.Client() 74 if err != nil { 75 c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err)) 76 return 1 77 } 78 79 // Deregister only works on CSI volumes, but could be extended to support other 80 // network interfaces or host volumes 81 err = client.CSIVolumes().Deregister(volID, nil) 82 if err != nil { 83 c.Ui.Error(fmt.Sprintf("Error deregistering volume: %s", err)) 84 return 1 85 } 86 87 return 0 88 }