// 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 device facilitates interaction with the Vanadium device manager.

Usage:
   device <command>

The device commands are:
   install       Install the given application.
   install-local Install the given application from the local system.
   uninstall     Uninstall the given application installation.
   associate     Tool for creating associations between Vanadium blessings and a
                 system account
   describe      Describe the device.
   claim         Claim the device.
   instantiate   Create an instance of the given application.
   delete        Delete the given application instance.
   run           Run the given application instance.
   kill          Kill the given application instance.
   revert        Revert the device manager or applications.
   update        Update the device manager or applications.
   status        Get device manager or application status.
   debug         Debug the device.
   acl           Tool for setting device manager Permissions
   publish       Publish the given application(s).
   ls            List applications.
   help          Display help for commands or topics

The global flags are:
 -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

 -alsologtostderr=true
   log to standard error as well as files
 -chown=false
   Change owner of files and directories given as command-line arguments to the
   user specified by this flag
 -dryrun=false
   Elides root-requiring systemcalls.
 -installation-state=
   If non-empty, specifies allowed installation states (all others installations
   get filtered out). The value of the flag is a comma-separated list of values
   from among: [Active Uninstalled].
 -instance-state=
   If non-empty, specifies allowed instance states (all other instances get
   filtered out). The value of the flag is a comma-separated list of values from
   among: [Launching Running Dying NotRunning Updating Deleted].
 -kill=false
   Kill process ids given as command-line arguments.
 -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
 -logdir=
   Path to the log 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
 -minuid=501
   UIDs cannot be less than this number.
 -only-installations=false
   If set, only consider installations.
 -only-instances=false
   If set, only consider instances.
 -parallelism=BYKIND
   Specifies the level of parallelism for the handler execution. One of:
   BYKIND,FULL,NONE
 -progname=unnamed_app
   Visible name of the application, used in argv[0]
 -rm=false
   Remove the file trees given as command-line arguments.
 -run=
   Path to the application to exec.
 -stderrthreshold=2
   logs at or above this threshold go to stderr
 -username=
   The UNIX user name used for the other functions of this tool.
 -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.metadata=<just specify -v23.metadata to activate>
   Displays metadata for the program and exits.
 -v23.permissions.file=map[]
   specify a perms file as <name>:<permsfile>
 -v23.permissions.literal=
   explicitly specify the runtime perms as a JSON-encoded access.Permissions.
   Overrides all --v23.permissions.file flags.
 -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 file-filtered logging
 -workspace=
   Path to the application's workspace directory.

Device install

Install the given application and print the name of the new installation.

Usage:
   device install [flags] <device> <application>

<device> is the vanadium object name of the device manager's app service.

<application> is the vanadium object name of the application.

The device install flags are:
 -config={}
   JSON-encoded device.Config object, of the form:
   '{"flag1":"value1","flag2":"value2"}'
 -packages={}
   JSON-encoded application.Packages object, of the form:
   '{"pkg1":{"File":"object name 1"},"pkg2":{"File":"object name 2"}}'

Device install-local

Install the given application specified using a local path, and print the name
of the new installation.

Usage:
   device install-local [flags] <device> <title> [ENV=VAL ...] binary [--flag=val ...] [PACKAGES path ...]

<device> is the vanadium object name of the device manager's app service.

<title> is the app title.

This is followed by an arbitrary number of environment variable settings, the
local path for the binary to install, and arbitrary flag settings and args.
Optionally, this can be followed by 'PACKAGES' and a list of local files and
directories to be installed as packages for the app

The device install-local flags are:
 -config={}
   JSON-encoded device.Config object, of the form:
   '{"flag1":"value1","flag2":"value2"}'
 -packages={}
   JSON-encoded application.Packages object, of the form:
   '{"pkg1":{"File":"local file path1"},"pkg2":{"File":"local file path 2"}}'

Device uninstall

Uninstall the given application installation.

Usage:
   device uninstall <installation>

<installation> is the vanadium object name of the application installation to
uninstall.

Device associate - Tool for creating associations between Vanadium blessings and a system account

The associate tool facilitates managing blessing to system account associations.

Usage:
   device associate <command>

The device associate commands are:
   list        Lists the account associations.
   add         Add the listed blessings with the specified system account.
   remove      Removes system accounts associated with the listed blessings.

Device associate list

Lists all account associations.

Usage:
   device associate list <devicemanager>.

<devicemanager> is the name of the device manager to connect to.

Device associate add

Add the listed blessings with the specified system account.

Usage:
   device associate add <devicemanager> <systemName> <blessing>...

<devicemanager> is the name of the device manager to connect to. <systemName> is
the name of an account holder on the local system. <blessing>.. are the
blessings to associate systemAccount with.

Device associate remove

Removes system accounts associated with the listed blessings.

Usage:
   device associate remove <devicemanager>  <blessing>...

<devicemanager> is the name of the device manager to connect to. <blessing>...
is a list of blessings.

Device describe

Describe the device.

Usage:
   device describe <device>

<device> is the vanadium object name of the device manager's device service.

Device claim

Claim the device.

Usage:
   device claim <device> <grant extension> <pairing token> <device publickey>

<device> is the vanadium object name of the device manager's device service.

<grant extension> is used to extend the default blessing of the current
principal when blessing the app instance.

<pairing token> is a token that the device manager expects to be replayed during
a claim operation on the device.

<device publickey> is the marshalled public key of the device manager we are
claiming.

Device instantiate

Create an instance of the given application, provide it with a blessing, and
print the name of the new instance.

Usage:
   device instantiate <application installation> <grant extension>

<application installation> is the vanadium object name of the application
installation from which to create an instance.

<grant extension> is used to extend the default blessing of the current
principal when blessing the app instance.

Device delete

Delete the given application instance.

Usage:
   device delete <app instance>

<app instance> is the vanadium object name of the application instance to
delete.

Device run

Run the given application instance.

Usage:
   device run <app instance>

<app instance> is the vanadium object name of the application instance to run.

Device kill

Kill the given application instance.

Usage:
   device kill <app instance>

<app instance> is the vanadium object name of the application instance to kill.

Device revert

Revert the device manager or application instances and installations to a
previous version of their current version

Usage:
   device revert <name patterns...>

<name patterns...> are vanadium object names or glob name patterns corresponding
to the device manager service, or to application installations and instances.

Device update

Update the device manager or application instances and installations

Usage:
   device update <name patterns...>

<name patterns...> are vanadium object names or glob name patterns corresponding
to the device manager service, or to application installations and instances.

Device status

Get the status of the device manager or application instances and installations.

Usage:
   device status <name patterns...>

<name patterns...> are vanadium object names or glob name patterns corresponding
to the device manager service, or to application installations and instances.

Device debug

Get internal debug information about application installations and instances.

Usage:
   device debug <app name patterns...>

<app name patterns...> are vanadium object names or glob name patterns
corresponding to application installations and instances.

Device acl - Tool for setting device manager Permissions

The acl tool manages Permissions on the device manger, installations and
instances.

Usage:
   device acl <command>

The device acl commands are:
   get         Get Permissions for the given target.
   set         Set Permissions for the given target.

Device acl get

Get Permissions for the given target.

Usage:
   device acl get <device manager name>

<device manager name> can be a Vanadium name for a device manager, application
installation or instance.

Device acl set

Set Permissions for the given target

Usage:
   device acl set [flags] <device manager name>  (<blessing> [!]<tag>(,[!]<tag>)*

<device manager name> can be a Vanadium name for a device manager, application
installation or instance.

<blessing> is a blessing pattern. If the same pattern is repeated multiple times
in the command, then the only the last occurrence will be honored.

<tag> is a subset of defined access types ("Admin", "Read", "Write" etc.). If
the access right is prefixed with a '!' then <blessing> is added to the NotIn
list for that right. Using "^" as a "tag" causes all occurrences of <blessing>
in the current AccessList to be cleared.

Examples: set root/self ^ will remove "root/self" from the In and NotIn lists
for all access rights.

set root/self Read,!Write will add "root/self" to the In list for Read access
and the NotIn list for Write access (and remove "root/self" from both the In and
NotIn lists of all other access rights)

The device acl set flags are:
 -f=false
   Instead of making the AccessLists additive, do a complete replacement based
   on the specified settings.

Device publish

Publishes the given application(s) to the binary and application servers. The
<title> can be optionally specified with @<title> (defaults to the binary name).
The binaries should be in $V23_ROOT/release/go/bin/[<GOOS>_<GOARCH>]. The binary
is published as <binserv>/<binary name>/<GOOS>-<GOARCH>/<TIMESTAMP>. The
application envelope is published as <appserv>/<binary name>/0. Optionally, adds
blessing patterns to the Read and Resolve AccessLists.

Usage:
   device publish [flags] <binary name>[@<title>] ...

The device publish flags are:
 -appserv=applications
   Name of application service.
 -binserv=binaries
   Name of binary service.
 -goarch=<runtime.GOARCH>
   GOARCH for application.  The default is the value of runtime.GOARCH.
 -goos=<runtime.GOOS>
   GOOS for application.  The default is the value of runtime.GOOS.
 -readers=dev.v.io
   If non-empty, comma-separated blessing patterns to add to Read and Resolve
   AccessList.

Device ls

List application installations or instances.

Usage:
   device ls <app name patterns...>

<app name patterns...> are vanadium object names or glob name patterns
corresponding to application installations and instances.

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

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

The device 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
