// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file was auto-generated via go generate.
// DO NOT UPDATE MANUALLY

/*
Command vcloud is a wrapper over the Google Compute Engine gcloud tool.  It
simplifies common usage scenarios and provides some Vanadium-specific support.

Usage:
   vcloud [flags] <command>

The vcloud commands are:
   list        List GCE node information
   cp          Copy files to or from GCE nodes
   node        Manage GCE nodes
   run         Copy files to GCE nodes and run
   sh          Start a shell or run a command on GCE nodes
   help        Display help for commands or topics

The vcloud flags are:
 -color=true
   Use color to format output.
 -v=false
   Print verbose output.

The global flags are:
 -metadata=<just specify -metadata to activate>
   Displays metadata for the program and exits.
 -project=vanadium-internal
   Specify the gcloud project.
 -time=false
   Dump timing information to stderr before exiting the program.
 -user=veyron
   Run operations as the given user on each node.

Vcloud list - List GCE node information

List GCE node information.  Runs 'gcloud compute instances list'.

Usage:
   vcloud list [flags] [nodes]

[nodes] is a comma-separated list of node name(s).  Each node name is a regular
expression, with matches performed on the full node name.  We select nodes that
match any of the regexps.  The comma-separated list allows you to easily specify
a list of specific node names, without using regexp alternation.  We assume node
names do not have embedded commas.

If [nodes] is not provided, lists information for all nodes.

The vcloud list flags are:
 -fields=
   Only display these fields, specified as comma-separated column header names.
 -noheader=false
   Don't print list table header.

 -color=true
   Use color to format output.
 -v=false
   Print verbose output.

Vcloud cp - Copy files to or from GCE nodes

Copy files to GCE node(s).  Runs 'gcloud compute copy-files'.  The default is to
copy to/from all nodes in parallel.

Usage:
   vcloud cp [flags] <nodes> <src...> <dst>

<nodes> is a comma-separated list of node name(s).  Each node name is a regular
expression, with matches performed on the full node name.  We select nodes that
match any of the regexps.  The comma-separated list allows you to easily specify
a list of specific node names, without using regexp alternation.  We assume node
names do not have embedded commas.

<src...> are the source file argument(s) to 'gcloud compute copy-files', and
<dst> is the destination.  The syntax for each file is:
  [:]file

Files with the ':' prefix are remote; files without any such prefix are local.

As with 'gcloud compute copy-files', if <dst> is local, all <src...> must be
remote.  If <dst> is remote, all <src...> must be local.

Each matching node in <nodes> is applied to the remote side of the copy
operation, either src or dst.  If <dst> is local and there is more than one
matching node, sub directories will be automatically created under <dst>.

E.g. if <nodes> matches A, B and C:
  // Copies local src{1,2,3} to {A,B,C}:dst
  vcloud cp src1 src2 src3 :dst
  // Copies remote {A,B,C}:src{1,2,3} to dst/{A,B,C} respectively.
  vcloud cp :src1 :src2 :src3 dst

The vcloud cp flags are:
 -failfast=false
   Skip unstarted nodes after the first failing node.
 -p=-1
   Copy to/from this many nodes in parallel.
     <0   means all nodes in parallel
      0,1 means sequentially
      2+  means at most this many nodes in parallel

 -color=true
   Use color to format output.
 -v=false
   Print verbose output.

Vcloud node - Manage GCE nodes

Manage GCE nodes.

Usage:
   vcloud node [flags] <command>

The vcloud node commands are:
   authorize   Authorize a user to login to a GCE node
   deauthorize Deauthorize a user to login to a GCE node
   create      Create GCE nodes
   delete      Delete GCE nodes

The vcloud node flags are:
 -color=true
   Use color to format output.
 -v=false
   Print verbose output.

Vcloud node authorize - Authorize a user to login to a GCE node

Authorizes a user to login to a GCE node (possibly as other user). For instance,
this mechanism is used to give Jenkins slave nodes access to the GCE mirror of
Vanadium repositories.

Usage:
   vcloud node authorize [flags] <userA>@<hostA> [<userB>@]<hostB>

<userA>@<hostA> [<userB>@]<hostB> authorizes userA to log into GCE node hostB
from GCE node hostA as user userB. The default value for userB is userA.

The vcloud node authorize flags are:
 -color=true
   Use color to format output.
 -v=false
   Print verbose output.

Vcloud node deauthorize - Deauthorize a user to login to a GCE node

Deuthorizes a user to login to a GCE node (possibly as other user). For
instance, this mechanism is used to revoke access of give Jenkins slave nodes to
the GCE mirror of Vanadium repositories.

Usage:
   vcloud node deauthorize [flags] <userA>@<hostA> [<userB>@]<hostB>

<userA>@<hostA> [<userB>@]<hostB> deauthorizes userA to log into GCE node hostB
from GCE node hostA as user userB. The default value for userB is userA.

The vcloud node deauthorize flags are:
 -color=true
   Use color to format output.
 -v=false
   Print verbose output.

Vcloud node create - Create GCE nodes

Create GCE nodes. Runs 'gcloud compute instances create'.

Usage:
   vcloud node create [flags] <names>

<names> is a list of names identifying nodes to be created.

The vcloud node create flags are:
 -boot-disk-size=500GB
   Size of the machine boot disk.
 -image=ubuntu-14-04
   Image to create the machine from.
 -machine-type=n1-standard-8
   Machine type to create.
 -scopes=storage-full,logging-write
   Scopes of the machine.
 -setup-script=
   Script to set up the machine.
 -zone=us-central1-f
   Zone to create the machine in.

 -color=true
   Use color to format output.
 -v=false
   Print verbose output.

Vcloud node delete - Delete GCE nodes

Delete GCE nodes. Runs 'gcloud compute instances delete'.

Usage:
   vcloud node delete [flags] <names>

<names> is a list of names identifying nodes to be deleted.

The vcloud node delete flags are:
 -zone=us-central1-f
   Zone to delete the machine in.

 -color=true
   Use color to format output.
 -v=false
   Print verbose output.

Vcloud run - Copy files to GCE nodes and run

Copy file(s) to GCE node(s) and run.  Uses the logic of both cp and sh.

Usage:
   vcloud run [flags] <nodes> <files...> [++ [command...]]

<nodes> is a comma-separated list of node name(s).  Each node name is a regular
expression, with matches performed on the full node name.  We select nodes that
match any of the regexps.  The comma-separated list allows you to easily specify
a list of specific node names, without using regexp alternation.  We assume node
names do not have embedded commas.

<files...> are the local source file argument(s) to copy to each matching node.

[command...] is the shell command line to run on each node.  Specify the entire
command line without extra quoting, just like 'vcloud sh'.  If a command is
specified, it must be preceeded by a single ++ argument, to distinguish it from
the files.  If no command is given, runs the first file from <files...>.

We run the following logic on each matching node, in parallel by default:
  1) Create a temporary directory TMPDIR based on a random number.
  2) Copy run files to TMPDIR.
  3) Change current directory to TMPDIR.
  4) Runs the [command...], or if no command is given, runs the first run file.
  5) If -outdir is specified, remove run files from TMPDIR, and copy TMPDIR from
     the node to the local -outdir.
  6) Delete TMPDIR.

The vcloud run flags are:
 -failfast=false
   Skip unstarted nodes after the first failing node.
 -outdir=
   Output directory to store results from each node.
 -p=-1
   Copy/run on this many nodes in parallel.
     <0   means all nodes in parallel
      0,1 means sequentially
      2+  means at most this many nodes in parallel

 -color=true
   Use color to format output.
 -v=false
   Print verbose output.

Vcloud sh - Start a shell or run a command on GCE nodes

Start a shell or run a command on GCE node(s).  Runs 'gcloud compute ssh'.

Usage:
   vcloud sh [flags] <nodes> [command...]

<nodes> is a comma-separated list of node name(s).  Each node name is a regular
expression, with matches performed on the full node name.  We select nodes that
match any of the regexps.  The comma-separated list allows you to easily specify
a list of specific node names, without using regexp alternation.  We assume node
names do not have embedded commas.

[command...] is the shell command line to run on each node.  Specify the entire
command line without extra quoting, e.g. like this:
  vcloud sh jenkins-node uname -a
But NOT like this:
  vcloud sh jenkins-node 'uname -a'
If quoting and escaping becomes too complicated, use 'vcloud run' instead.

If <nodes> matches exactly one node and no [command] is given, sh starts a shell
on the specified node.

Otherwise [command...] is required; sh runs the command on all matching nodes.
The default is to run on all nodes in parallel.

The vcloud sh flags are:
 -failfast=false
   Skip unstarted nodes after the first failing node.
 -p=-1
   Run command on this many nodes in parallel.
     <0   means all nodes in parallel
      0,1 means sequentially
      2+  means at most this many nodes in parallel

 -color=true
   Use color to format output.
 -v=false
   Print verbose output.

Vcloud help - Display help for commands or topics

Help with no args displays the usage of the parent command.

Help with args displays the usage of the specified sub-command or help topic.

"help ..." recursively displays help for all commands and topics.

Usage:
   vcloud help [flags] [command/topic ...]

[command/topic ...] optionally identifies a specific sub-command or help topic.

The vcloud help flags are:
 -style=compact
   The formatting style for help output:
      compact   - Good for compact cmdline output.
      full      - Good for cmdline output, shows all global flags.
      godoc     - Good for godoc processing.
      shortonly - Only output short description.
   Override the default by setting the CMDLINE_STYLE environment variable.
 -width=<terminal width>
   Format output to this target width in runes, or unlimited if width < 0.
   Defaults to the terminal width if available.  Override the default by setting
   the CMDLINE_WIDTH environment variable.
*/
package main
