github.com/rohankumardubey/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  }