// 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.
 -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.
 -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 filename-filtered logging
 -vpath=
   comma-separated list of pattern=N settings for file pathname-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 [flags] <name patterns...>

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

The device revert flags are:
 -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].
 -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].

Device update

Update the device manager or application instances and installations

Usage:
   device update [flags] <name patterns...>

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

The device update flags are:
 -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].
 -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].

Device status

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

Usage:
   device status [flags] <name patterns...>

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

The device status flags are:
 -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].
 -only-installations=false
   If set, only consider installations.
 -only-instances=false
   If set, only consider instances.
 -parallelism=FULL
   Specifies the level of parallelism for the handler execution. One of: [BYKIND
   FULL NONE].

Device debug

Get internal debug information about application installations and instances.

Usage:
   device debug [flags] <app name patterns...>

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

The device debug flags are:
 -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].
 -only-installations=false
   If set, only consider installations.
 -only-instances=false
   If set, only consider instances.
 -parallelism=FULL
   Specifies the level of parallelism for the handler execution. One of: [BYKIND
   FULL NONE].

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 [flags] <app name patterns...>

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

The device ls flags are:
 -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].
 -only-installations=false
   If set, only consider installations.
 -only-instances=false
   If set, only consider instances.
 -parallelism=FULL
   Specifies the level of parallelism for the handler execution. One of: [BYKIND
   FULL NONE].

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
