// 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

/*
Manages Vanadium applications on kubernetes

Usage:
   vkube [flags] <command>

The vkube commands are:
   get-credentials     Gets the kubernetes credentials from Google Cloud.
   start               Starts an application.
   update              Updates an application.
   stop                Stops an application.
   start-cluster-agent Starts the cluster agent.
   stop-cluster-agent  Stops the cluster agent.
   claim-cluster-agent Claims the cluster agent.
   build-docker-images Builds the docker images for the cluster and pod agents.
   help                Display help for commands or topics

The vkube flags are:
 -config=vkube.cfg
   The 'vkube.cfg' file to use.
 -gcloud=gcloud
   The 'gcloud' binary to use.
 -kubectl=kubectl
   The 'kubectl' binary to use.

The global flags are:
 -alsologtostderr=true
   log to standard error as well as files
 -log_backtrace_at=:0
   when logging hits line file:N, emit a stack trace
 -log_dir=
   if non-empty, write log files to this directory
 -logtostderr=false
   log to standard error instead of files
 -max_stack_buf_size=4292608
   max size in bytes of the buffer to use for logging stack traces
 -metadata=<just specify -metadata to activate>
   Displays metadata for the program and exits.
 -stderrthreshold=2
   logs at or above this threshold go to stderr
 -time=false
   Dump timing information to stderr before exiting the program.
 -v=0
   log level for V logs
 -v23.credentials=
   directory to use for storing security credentials
 -v23.i18n-catalogue=
   18n catalogue files to load, comma separated
 -v23.namespace.root=[/(dev.v.io/role/vprod/service/mounttabled)@ns.dev.v.io:8101]
   local namespace root; can be repeated to provided multiple roots
 -v23.proxy=
   object name of proxy service to use to export services across network
   boundaries
 -v23.tcp.address=
   address to listen on
 -v23.tcp.protocol=wsh
   protocol to listen with
 -v23.vtrace.cache-size=1024
   The number of vtrace traces to store in memory.
 -v23.vtrace.collect-regexp=
   Spans and annotations that match this regular expression will trigger trace
   collection.
 -v23.vtrace.dump-on-shutdown=true
   If true, dump all stored traces on runtime shutdown.
 -v23.vtrace.sample-rate=0
   Rate (from 0.0 to 1.0) to sample vtrace traces.
 -vmodule=
   comma-separated list of pattern=N settings for filename-filtered logging
 -vpath=
   comma-separated list of pattern=N settings for file pathname-filtered logging

Vkube get-credentials

Gets the kubernetes credentials from Google Cloud.

Usage:
   vkube get-credentials

Vkube start

Starts an application.

Usage:
   vkube start [flags] <extension>

<extension> The blessing name extension to give to the application.

The vkube start flags are:
 -f=
   Filename to use to create the kubernetes resource.

Vkube update

Updates an application to a new version with a rolling update, preserving the
existing blessings.

Usage:
   vkube update [flags]

The vkube update flags are:
 -f=
   Filename to use to update the kubernetes resource.

Vkube stop

Stops an application.

Usage:
   vkube stop [flags]

The vkube stop flags are:
 -f=
   Filename to use to stop the kubernetes resource.

Vkube start-cluster-agent

Starts the cluster agent.

Usage:
   vkube start-cluster-agent

Vkube stop-cluster-agent

Stops the cluster agent.

Usage:
   vkube stop-cluster-agent

Vkube claim-cluster-agent

Claims the cluster agent.

Usage:
   vkube claim-cluster-agent

Vkube build-docker-images

Builds the docker images for the cluster and pod agents.

Usage:
   vkube build-docker-images [flags]

The vkube build-docker-images flags are:
 -v=false
   When true, the output is more verbose.

Vkube 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:
   vkube help [flags] [command/topic ...]

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

The vkube 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.
   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
