github.com/zoomfoo/nomad@v0.8.5-0.20180907175415-f28fd3a1a056/command/deployment_list.go (about) 1 package command 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/hashicorp/nomad/api" 8 "github.com/posener/complete" 9 ) 10 11 type DeploymentListCommand struct { 12 Meta 13 } 14 15 func (c *DeploymentListCommand) Help() string { 16 helpText := ` 17 Usage: nomad deployment list [options] 18 19 List is used to list the set of deployments tracked by Nomad. 20 21 General Options: 22 23 ` + generalOptionsUsage() + ` 24 25 List Options: 26 27 -json 28 Output the deployments in a JSON format. 29 30 -t 31 Format and display the deployments using a Go template. 32 33 -verbose 34 Display full information. 35 ` 36 return strings.TrimSpace(helpText) 37 } 38 39 func (c *DeploymentListCommand) AutocompleteFlags() complete.Flags { 40 return mergeAutocompleteFlags(c.Meta.AutocompleteFlags(FlagSetClient), 41 complete.Flags{ 42 "-json": complete.PredictNothing, 43 "-t": complete.PredictAnything, 44 "-verbose": complete.PredictNothing, 45 }) 46 } 47 48 func (c *DeploymentListCommand) AutocompleteArgs() complete.Predictor { 49 return complete.PredictNothing 50 } 51 52 func (c *DeploymentListCommand) Synopsis() string { 53 return "List all deployments" 54 } 55 56 func (c *DeploymentListCommand) Name() string { return "deployment list" } 57 58 func (c *DeploymentListCommand) Run(args []string) int { 59 var json, verbose bool 60 var tmpl string 61 62 flags := c.Meta.FlagSet(c.Name(), FlagSetClient) 63 flags.Usage = func() { c.Ui.Output(c.Help()) } 64 flags.BoolVar(&verbose, "verbose", false, "") 65 flags.BoolVar(&json, "json", false, "") 66 flags.StringVar(&tmpl, "t", "", "") 67 68 if err := flags.Parse(args); err != nil { 69 return 1 70 } 71 72 // Check that we got no arguments 73 args = flags.Args() 74 if l := len(args); l != 0 { 75 c.Ui.Error("This command takes no arguments") 76 c.Ui.Error(commandErrorText(c)) 77 return 1 78 } 79 80 // Truncate the id unless full length is requested 81 length := shortId 82 if verbose { 83 length = fullId 84 } 85 86 // Get the HTTP client 87 client, err := c.Meta.Client() 88 if err != nil { 89 c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err)) 90 return 1 91 } 92 93 deploys, _, err := client.Deployments().List(nil) 94 if err != nil { 95 c.Ui.Error(fmt.Sprintf("Error retrieving deployments: %s", err)) 96 return 1 97 } 98 99 if json || len(tmpl) > 0 { 100 out, err := Format(json, tmpl, deploys) 101 if err != nil { 102 c.Ui.Error(err.Error()) 103 return 1 104 } 105 106 c.Ui.Output(out) 107 return 0 108 } 109 110 c.Ui.Output(formatDeployments(deploys, length)) 111 return 0 112 } 113 114 func formatDeployments(deploys []*api.Deployment, uuidLength int) string { 115 if len(deploys) == 0 { 116 return "No deployments found" 117 } 118 119 rows := make([]string, len(deploys)+1) 120 rows[0] = "ID|Job ID|Job Version|Status|Description" 121 for i, d := range deploys { 122 rows[i+1] = fmt.Sprintf("%s|%s|%d|%s|%s", 123 limit(d.ID, uuidLength), 124 d.JobID, 125 d.JobVersion, 126 d.Status, 127 d.StatusDescription) 128 } 129 return formatList(rows) 130 }