From f3446cf058238484c7a97d04ae1f106983c1ca0e Mon Sep 17 00:00:00 2001 From: Stavros Sachtouris Date: Mon, 26 Nov 2012 20:27:47 +0200 Subject: [PATCH] Add interactive shell help (2b continued) --- docs/conf.py | 29 +-- docs/usage.rst | 561 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 504 insertions(+), 86 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index f365b77..3fab217 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -3,7 +3,8 @@ # Kamaki documentation build configuration file, created by # sphinx-quickstart on Tue Nov 29 15:15:50 2011. # -# This file is execfile()d with the current directory set to its containing dir. +# This file is execfile()d with the current directory set to its containing +# dir. # # Note that not all possible configuration values are present in this # autogenerated file. @@ -15,18 +16,20 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -import sys, os +from sys import path, stderr +import os -sys.path.append('/home/saxtouri/src/synnefo/snf-common') +path.append('/home/saxtouri/src/synnefo/snf-common') try: from synnefo import lib + lib except ImportError: - sys.stderr.write("`snf-common` package is required to build kamaki docs.\n") + stderr.write("`snf-common` package is required to build kamaki docs.\n") exit() -sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')) +path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), '..')) -# -- General configuration ----------------------------------------------------- +# -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' @@ -74,7 +77,8 @@ release = '0.6.1' # directories to ignore when looking for source files. exclude_patterns = ['_build'] -# The reST default role (used for this markup: `text`) to use for all documents. +# The reST default role (used for this markup: `text`) to use for all +# documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. @@ -95,7 +99,7 @@ pygments_style = 'sphinx' #modindex_common_prefix = [] -# -- Options for HTML output --------------------------------------------------- +# -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. @@ -175,7 +179,7 @@ html_static_path = ['_static'] htmlhelp_basename = 'Kamakidoc' -# -- Options for LaTeX output -------------------------------------------------- +# -- Options for LaTeX output ------------------------------------------------ latex_elements = { # The paper size ('letterpaper' or 'a4paper'). @@ -189,7 +193,8 @@ latex_elements = { } # Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). +# (source start file, target name, title, author, documentclass +# [howto/manual]). latex_documents = [ ('index', 'Kamaki.tex', u'Kamaki Documentation', u'GRNet', 'manual'), @@ -216,7 +221,7 @@ latex_documents = [ #latex_domain_indices = True -# -- Options for manual page output -------------------------------------------- +# -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). @@ -228,7 +233,7 @@ man_pages = [ #man_show_urls = False -# -- Options for Texinfo output ------------------------------------------------ +# -- Options for Texinfo output ---------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, diff --git a/docs/usage.rst b/docs/usage.rst index 7abc6d7..7d8bcde 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -16,21 +16,21 @@ Quick guide It is essential for users to get a configuration token (to get in Okeanos.grnet.gr log `here `_) and provide it to kamaki: .. code-block:: console - - $ kamaki set token myt0k3n== - + :emphasize-lines: 1 Example 1.1.1: Set user token to myt0k3n== + $ kamaki set token myt0k3n== + To use the storage service, a user should also provide the corresponding username: .. code-block:: console - - $ kamaki set account user@domain.com - + :emphasize-lines: 1 Example 1.1.2: Set user name to user@domain.com + $ kamaki set account user@domain.com + Command line interfaces ----------------------- Kamaki users can access synnefo services through either the interactive shell or the one-command behaviors. In practice, both systems relly on the same command set implementations and API clients, with identical responses and error messages. Still, there are some differenses. @@ -56,21 +56,20 @@ To use kamaki as a shell, run: * without any parameters or arguments .. code-block:: console + :emphasize-lines: 1 - $ kamaki - - - Example 2.2.1: Running kamaki shell + Example 2.2.1: Run kamaki shell + $ kamaki * with any kind of '-' prefixed arguments, except '-h', '--help'. .. code-block:: console + :emphasize-lines: 1 - $ kamaki --config myconfig.file + Example 2.2.2: Run kamaki shell with custom configuration file - - Example 2.2.2: Running kamaki shell with custom configuration file + $ kamaki --config myconfig.file Run as one-command @@ -80,21 +79,21 @@ To use kamaki as an one-command tool, run: * with the '-h' or '--help' arguments (help for kamaki one-command) .. code-block:: console - - $kamaki -h - + :emphasize-lines: 1 Example 2.3.1: Kamaki help + $kamaki -h + * with one or more command parameters: .. code-block:: console - - $ kamaki server list - + :emphasize-lines: 1 Example 2.3.2: List VMs managed by user + $ kamaki server list + Commands ^^^^^^^^ @@ -103,23 +102,23 @@ Client commands are grouped by service (see example 3.1.1 on how to list availab Typically, commands consist of a group name (e.g. store for storage commands) one or more terms (e.g. list for listing) and the command specific parameters (e.g. the name of the container), if any. .. code-block:: console - - $ kamaki store list mycontainer - + :emphasize-lines: 1 Example 3.1.1: List stored files in container mycontainer. + $ kamaki store list mycontainer + Example 2.3.2 showcases a command without parameters (the group is "server", the command is "list"). The "server" command group is also refered in the following example. .. code-block:: console - - $ kamaki server info 42 - + :emphasize-lines: 1 Example 3.1.2 Show information about a user-managed VM with id 42 + $ kamaki server info 42 + Client commands can feature an arbitarry number of terms: .. code-block:: text @@ -146,9 +145,12 @@ astakos (Identity Manager) Showcase: get user information, provided the token was set .. code-block:: console - :emphasize-lines: 3-11 + :emphasize-lines: 1,4 + * Enter astakos context * [kamaki]:astakos + + * Authenticate user * [astakos]:authenticate auth_token : s0m3t0k3nth@t1sr3m0v3d== auth_token_created: 2012-11-13T14:12:40.917034 @@ -159,7 +161,6 @@ Showcase: get user information, provided the token was set has_signed_terms : True uniq : myaccount@grnet.gr username : 4215th3b357num9323v32 - [astakos]: flavor (Compute/Cyclades) """"""""""""""""""""""""" @@ -172,9 +173,12 @@ flavor (Compute/Cyclades) Showcase: show details for flavor with id 43 .. code-block:: console - :emphasize-lines: 3-8 + :emphasize-lines: 1,4 + * Enter flavor context * [kamaki]: flavor + + * Get details about flavor with id 43 * [flavor]: info 43 SNF:disk_template: drbd cpu : 4 @@ -182,7 +186,6 @@ Showcase: show details for flavor with id 43 id : 43 name : C4R2048D10 ram : 2048 - [flavor]: image (Compute/Cyclades + Glance) """""""""""""""""""""""""""""""""" @@ -205,16 +208,19 @@ image (Compute/Cyclades + Glance) setproperty: Update an image property shared : List shared images -Showcase: show a list of public images, list the properties of Debian Base +Showcase: Pick an image and list the properties .. code-block:: console - :emphasize-lines: 3-13,15-22 + :emphasize-lines: 1,4,18 + * Enter image context * [kamaki]:image + + * list all available images * [image]:list - 1395fdfb-51b4-419f-bb02-f7d632860611 (Ubuntu Desktop LTS (Long Term Support)) + 1395fdfb-51b4-419f-bb02-f7d632860611 (Ubuntu Desktop LTS) 1580deb4-edb3-4496-a27f-7a246c4c0528 (Ubuntu Desktop) - 18a82962-43eb-4b32-8e28-8f8880af89d7 (Kubuntu LTS (Long Term Support)) + 18a82962-43eb-4b32-8e28-8f8880af89d7 (Kubuntu LTS) 6aa6eafd-dccb-422d-a904-67fe2bdde87e (Debian Desktop) 6b5681e4-7502-46ae-b1e9-9fd837932095 (maelstrom) 78262ee7-949e-4d70-af3a-85360c3de57a (Windows Server 2012) @@ -223,6 +229,8 @@ Showcase: show a list of public images, list the properties of Debian Base b2dffe52-64a4-48c3-8a4c-8214cc3165cf (Debian Base) baf2321c-57a0-4a69-825d-49f49cea163a (CentOS) c1d27b46-d875-4f5c-b7f1-f39b5af62905 (Kubuntu) + + * Get properties of image with id b2dffe52-64a4-48c3-8a4c-8214cc3165cf * [image]:properties b2dffe52-64a4-48c3-8a4c-8214cc3165cf description : Debian 6.0.6 (Squeeze) Base System gui : No GUI @@ -232,7 +240,6 @@ Showcase: show a list of public images, list the properties of Debian Base root_partition: 1 sortorder : 1 users : root - [image]: server (Compute/Cyclades) """"""""""""""""""""""""" @@ -257,12 +264,15 @@ server (Compute/Cyclades) stats : Get server statistics wait : Wait for server to finish -Showcase: Create a server: Show create help, find a flavor and an image make a server. Wait for server to be build, get server details. Note that the progress bar feature is optional (see ) +Showcase: Create a server. .. code-block:: console - :emphasize-lines: 3-16,18-33,35-40,42-56,58,59,61-66 + :emphasize-lines: 1,4,21,35,44,62 + * Enter server context * [kamaki]:server + + * See server-create help * [server]:create -h usage: create [--personality PERSONALITY] [-h] [--config CONFIG] @@ -278,18 +288,22 @@ Showcase: Create a server: Show create help, find a flavor and an image make a s -i, --include Include protocol headers in the output --config CONFIG Path to configuration file -s, --silent Do not output anything + + * List all available images * [server]:/image list 1395fdfb-51b4-419f-bb02-f7d632860611 (Ubuntu Desktop LTS) 1580deb4-edb3-4496-a27f-7a246c4c0528 (Ubuntu Desktop) - |18a82962-43eb-4b32-8e28-8f8880af89d7 (Kubuntu LTS) - |6aa6eafd-dccb-422d-a904-67fe2bdde87e (Debian Desktop) - |6b5681e4-7502-46ae-b1e9-9fd837932095 (maelstrom) - |78262ee7-949e-4d70-af3a-85360c3de57a (Windows Server 2012) - |86bc2414-0fb3-4898-a637-240292243302 (Fedora) - |926ab1c5-2d85-49d4-aebe-0fce712789b9 (Windows Server 2008) - |b2dffe52-64a4-48c3-8a4c-8214cc3165cf (Debian Base) - |baf2321c-57a0-4a69-825d-49f49cea163a (CentOS) - |c1d27b46-d875-4f5c-b7f1-f39b5af62905 (Kubuntu) + 18a82962-43eb-4b32-8e28-8f8880af89d7 (Kubuntu LTS) + 6aa6eafd-dccb-422d-a904-67fe2bdde87e (Debian Desktop) + 6b5681e4-7502-46ae-b1e9-9fd837932095 (maelstrom) + 78262ee7-949e-4d70-af3a-85360c3de57a (Windows Server 2012) + 86bc2414-0fb3-4898-a637-240292243302 (Fedora) + 926ab1c5-2d85-49d4-aebe-0fce712789b9 (Windows Server 2008) + b2dffe52-64a4-48c3-8a4c-8214cc3165cf (Debian Base) + baf2321c-57a0-4a69-825d-49f49cea163a (CentOS) + c1d27b46-d875-4f5c-b7f1-f39b5af62905 (Kubuntu) + + * See details of flavor with id 1 * [server]:/flavor info 1 SNF:disk_template: drbd cpu : 1 @@ -297,6 +311,8 @@ Showcase: Create a server: Show create help, find a flavor and an image make a s id : 1 name : C1R1024D20 ram : 1024 + + * Create a debian server named 'My Small Debian Server' [server]:create 'My Small Debian Server' 1 b2dffe52-64a4-48c3-8a4c-8214cc3165cf adminPass: L8gu2wbZ94 created : 2012-11-23T16:56:04.190813+00:00 @@ -313,10 +329,13 @@ Showcase: Create a server: Show create help, find a flavor and an image make a s status : BUILD suspended: False updated : 2012-11-23T16:56:04.761962+00:00 + + * wait for server to build (optional) * [server]:wait 11687 Server 11687 still in BUILD mode ||||||||||||||||| | 80% - 3s Server 11687 is now in ACTIVE mode - [server]: + +.. Note:: In kamaki shell, / is used to access top-level command groups while working in command group contexts network (Compute/Cyclades) """""""""""""""""""""""""" @@ -331,17 +350,26 @@ network (Compute/Cyclades) list : List networks rename : Update network name -Showcase: Connect a network to a VM: create a network, list available VMs, connect to 'My Small Debian Server', check network info and server connectivity. +Showcase: Connect a network to a VM .. code-block:: console - :emphasize-lines: 1, 2, 5, 14, 15, 30, 42 + :emphasize-lines: 1,4,9,24,27,44 + * Enter network context * [kamaki]:network + + * List user-owned VMs * [network]:/server list 11687 (My Small Debian Server) 11688 (An Ubuntu server) + + * Try network-connect (to get help) * [network]:connect + Syntax error + usage: connect [-s] [-h] [-i] [--config CONFIG] + Connect a server to a network + Syntax: connect --config : Path to configuration file -d,--debug : Include debug output @@ -349,7 +377,11 @@ Showcase: Connect a network to a VM: create a network, list available VMs, conne -i,--include: Include protocol headers in the output -s,--silent : Do not output anything -v,--verbose: More info at response + + * Connect VM with id 11687 to network with id 1409 [network]: connect 11687 1409 + + * Get details on network with id 1409 [network]:info 1409 attachments: nic-11687-1 @@ -365,6 +397,8 @@ Showcase: Connect a network to a VM: create a network, list available VMs, conne status : ACTIVE type : PRIVATE_MAC_FILTERED updated : 2012-11-23T17:18:25.095225+00:00 + + * Get connectivity details on VM with id 11687 * [network]:/server addr 11687 id: nic-11687-1 ipv4 : 192.168.1.1 @@ -377,9 +411,8 @@ Showcase: Connect a network to a VM: create a network, list available VMs, conne ipv6 : 2001:648:2ffc:1116:a80c:f2ff:fe12:a9e mac_address : aa:0c:f2:12:0a:9e network_id : 1369 - [network]: - +.. Note:: In kamaki shell, / is used to access top-level command groups while working in command group contexts store (Storage/Pithos+) """"""""""""""""""""""" @@ -420,6 +453,82 @@ store (Storage/Pithos+) versioning : Get versioning for account [or container ] versions : Get the version list of an object +Showcase: Upload and download a file. + +.. code-block:: console + :emphasize-lines: 1,7,11,16,21,29,33,37,41,44,51,55,60,64 + + * Create a random binarry file at current OS path * + [kamaki]:!dd bs=4M if=/dev/zero of=rndm_local.file count=5 + 5+0 records in + 5+0 records out + 20971520 bytes (21 MB) copied, 0.016162 s, 1.3 GB/s + + * Enter store context * + [kamaki]:store + + + * Check local file * + [store]:!ls -lh rndm_local.file + -rw-rw-r-- 1 ******** ******** 20M Nov 26 15:36 rndm_local.file + + + * Create two containers * + [store]:create mycont1 + [store]:create mycont2 + + + * List accessible containers * + [store]:list + 1. mycont1 (0B, 0 objects) + 2. mycont2 (0B, 0 objects) + 3. pithos (0B, 0 objects) + 4. trash (0B, 0 objects) + + + * Upload local file to 1st container * + [store]:upload rndm_local.file mycont1 + + + * Check if file has been uploaded * + [store]:list mycont1 + 1. 20M rndm_local.file + + * Create director mydir on second container * + [store]:mkdir mycont2:mydir + + + * Move file from 1st to 2nd container (and in the directory) * + [store]:move mycont1:rndm_local.file mycont2:mydir/rndm_local.file + + * Check the container of both containers * + [store]:list mycont1 + [store]:list mycont2 + 1. D mydir/ + 2. 20M mydir/rndm_local.file + + + * Copy file from 2nd to 1st container, with a new name * + [store]:copy mycont2:mydir/rndm_local.file mycont1:rndm_remote.file + + + * Check pasted file * + [store]:list mycont1 + 1. 20M rndm_remote.file + + + * Download pasted file to local filesystem * + [store]:download mycont1:rndm_remote.file rndm_remote.file + + + * Check if file is downloaded and if it is the same to original * + [store]:!ls -lh *.file + -rw-rw-r-- 1 ******** ******** 20M Nov 26 15:36 rndm_local.file + -rw-rw-r-- 1 ******** ******** 20M Nov 26 15:42 rndm_remote.file + [store]:!diff rndm_local.file rndm_remote.file + +.. Note:: In kamaki shell, ! is used to execute OS shell commands (bash in the above) + One-command interface ^^^^^^^^^^^^^^^^^^^^^ @@ -433,11 +542,14 @@ Kamaki help is used to see available commands, with description, syntax and thei To see the command groups, users should use -h or --help like in example 1.3.1. In the same way, help information for command groups and commands is printed. In the following examples, the help messages of kamaki, of a command group (server) and of a command in that group (list) are shown. .. code-block:: console + :emphasize-lines: 1 + + Example 4.1.1: kamaki help shows available parameters and command groups + $ kamaki -h - usage: kamaki [ ...] [-v] [-s] [-V] [-d] [-i] - [--config CONFIG] - [-o OPTIONS] [-h] + usage: kamaki [ ...] + [-s] [-V] [-i] [--config CONFIG] [-o OPTIONS] [-h] optional arguments: -v, --verbose More info at response @@ -461,10 +573,11 @@ To see the command groups, users should use -h or --help like in example 1.3.1. server : Compute/Cyclades API server commands store : Pithos+ storage commands +.. code-block:: console + :emphasize-lines: 1 - Example 4.1.1: kamaki help shows available parameters and command groups + Example 4.1.2: Cyclades help contains all first-level commands of cyclades command group -.. code-block:: console $ kamaki cyclades -h usage: kamaki server <...> [-v] [-s] [-V] [-d] [-i] [--config CONFIG] @@ -501,14 +614,14 @@ To see the command groups, users should use -h or --help like in example 1.3.1. stats : Get server statistics wait : Wait for server to finish [BUILD, STOPPED, REBOOT, ACTIVE] +.. code-block:: console + :emphasize-lines: 1 - Example 4.1.2: Cyclades help contains all first-level commands of cyclades command group + Example 4.1.3: Help for command "server list" with syntax, description and avaiable user options -.. code-block:: console $ kamaki server list -h - usage: kamaki server list [-v] [-s] [-V] [-d] [-i] [--config CONFIG] - [-o OPTIONS] [-h] [-l] + usage: kamaki server list [-V] [-i] [--config CONFIG] [-h] [-l] List servers @@ -524,9 +637,6 @@ To see the command groups, users should use -h or --help like in example 1.3.1. -h, --help Show help message -l show detailed output - - Example 4.1.3: Help for command "server list" with syntax, description and avaiable user options - Using history """"""""""""" @@ -535,18 +645,23 @@ Kamaki command history is stored in a file at user home (".kamaki.history" by de Every syntactically correct command is appended at the end of that file. In order to see how to use history, use the kamaki help system: .. code-block:: console + :emphasize-lines: 1 + + Example 4.2.1: Available history options + $ kamaki history -h ... clean: Clean up history show : Show history - - Example 4.2.1: Available history options - The following example showcases how to use history in kamaki .. code-block:: console + :emphasize-lines: 1 + + Example 4.2.2: Clean up everything, run a kamaki command, show full and filtered history + $ kamaki history clean --match clean $ kamaki server list @@ -558,9 +673,6 @@ The following example showcases how to use history in kamaki 1. kamaki server list 3. kamaki history show --match server - - Example 4.2.2: Clean up everything, run a kamaki command, show full and filtered history - Debug """"" @@ -575,23 +687,324 @@ Most kamaki commands are translated into http requests. Kamaki clients API trans To run kamaki in verbose mode use the -v or --verbose option -Client commands -""""""""""""""" - +One-command features +"""""""""""""""""""" Kamaki commands can be used along with advanced shell features. .. code-block:: console + :emphasize-lines: 1 + + Example 4.4.1: Print username for token us3rt0k3n== using grep + - $ kamaki server list -l > vmlist.txt + $ kamaki astakos authenticate -o token=us3rt0k3n== | grep uniq + uniq : user@synnefo.org +The -o argument can be used to overide temporarily various (set or unset) options. In one command, all -o options are forgoten just after the command had been completed, and the previous settings are restored (the configuration file is not modified). - Example 4.4.1: Store a vm list in file vmlist.txt in a unix shell +The astakos-authenticate command in example 4.4.1 run against an explicitly provided token, which temporarily overode the token provided in the configuration file. Interactive shell ^^^^^^^^^^^^^^^^^ +Kamaki interactive shell is details in this section + +Command Contexts +"""""""""""""""" + +The kamaki interactive shell implements the notion of command contexts. Each command group is also a context where the users can **enter** by typing the group name. If the context switch is succesful, the kamaki shell prompt changes to present the new context ("store" in example 5.1.1). + +.. code-block:: console + :emphasize-lines: 1 + + Example 5.1.1: Enter store commands context/group + + + $ kamaki + [kamaki]:store + [store]: + +Type **exit** or **ctrl-D** to exit a context and return to the context of origin. If already at the top context (kamaki), an exit is equivalent to exiting the programm. + +.. code-block:: console + :emphasize-lines: 1 + + Example 5.1.2: Exit store context and then exit kamaki + + [store]: exit + [kamaki]: exit + $ + +A user might **browse** through different contexts during one session. + +.. code-block:: console + :emphasize-lines: 1 + + Example 5.1.3: Execute list command in different contexts + + $ kamaki + [kamaki]:config + [config]:list + ... (configuration options listing) ... + [config]:exit + [kamaki]:store + [store]:list + ... (storage containers listing) ... + [store]:exit + [kamaki]:server + [server]:list + ... (VMs listing) ... + [server]: exit + [kamaki]: + +Users have the option to avoid switching between contexts: all commands can run from the **top context**. As a result, examples 5.1.3 and 5.1.4 are equivalent. + +.. code-block:: console + :emphasize-lines: 1 + + Example 5.1.4: Execute different "list" commands from top context + + + [kamaki]:config list + ... (configuration options listing) ... + [kamaki]:store list + ... (storage container listing) ... + [kamaki]:server list + ... (VMs listing) ... + [kamaki]: + +Help +"""" + +There are two help mechanisms: a context-level and a command-level. + +**Context-level help** lists the available commands in a context and can also offer a short description for each command. + +Context-level help syntax:: + + * Show available commands in current context * + [context]:help + [context]:? + + * Show help for command cmd * + [context]:help cmd + [context]:?cmd + +The context-level help results change from context to context + +.. code-block:: console + :emphasize-lines: 1 + + Example 5.2.1: Get available commands, pick a context and get help there as well + + + [kamaki]:help + + kamaki commands: + ================ + astakos config flavor history image network server store + + interactive shell commands: + =========================== + exit help shell + + [kamaki]:?config + Configuration commands (config -h for more options) + + [kamaki]:config + + [config]:? + + config commands: + ================ + delete get list set + + interactive shell commands: + =========================== + exit help shell + + [config]:help set + Set a configuration option (set -h for more options) + +In context-level, there is a distinction between kamaki-commands and interactive shell commands. The former are available in one-command mode and are releated to the cloud client setup and use, while the later are context-shell functions. + +**Command-level help** prints the syntax, arguments and description of a specific (terminal) command + +Command-level help syntax:: + + * Get help for command cmd1 cmd2 ... cmdN * + [context]:cmd1 cmd2 ... cmdN -h + + + + + + +Command-level help mechanism is exactly the same as the one used in one-command mode. For example, it is invoked by using the -h or --help parameter at any point. + +.. code-block:: console + :emphasize-lines: 1 + + Example 5.2.2: Get command-level help for config and config-set + + + [kamaki]:config --help + config: Configuration commands + delete: Delete a configuration option (and use the default value) + get : Show a configuration option + list : List configuration options + set : Set a configuration option + + [kamaki]:config + + [config]:set -h + usage: set