Merge branch 'hotfix-0.12.10'
[kamaki] / docs / usage.rst
1 Usage
2 =====
3
4 Kamaki features commands of the form::
5
6   [kamaki] <object> <action> [identifier(s)] <non-positional arguments>
7   e.g., 
8   kamaki user info --username=user@example.com
9
10 A detailed list of the command specifications can be found in
11 `Commands <commands.html>`_ section.
12
13 All commands can run either from the host shell or through the kamaki
14 interactive shell:
15
16 .. code-block:: console
17
18   #  Run from host shell
19   $ kamaki user info
20   ... RESULTS ...
21
22   #  Run from kamaki interactive shell
23   $ kamaki-shell
24   [kamaki]: user info
25   ... RESULTS ...
26
27 In the later, the term "one-command" will be user to refer to running kamaki
28 commands from host shell, while the term "shell" will refer to the kamaki's own
29 interactive shell
30
31 .. note:: This section refers to the kamaki CLI. Developers and people who write
32   scripts, should rather use the the
33   `Clients lib <developers/code.html#the-clients-api>`_ instead of the kamaki
34   CLI.
35
36 Quick Setup
37 -----------
38
39 Kamaki interfaces rely on a list of configuration options. Check the
40 `Setup <setup.html>`_ guide for a full list.
41
42 As rule of the thump, it is enough to set a cloud authentication URL and TOKEN:
43
44 .. code-block:: console
45     :emphasize-lines: 1
46
47     Example 1.1: Set authentication URL, user token for cloud alias "default"
48
49     $ kamaki config set cloud.default.url <authentication URL>
50     $ kamaki config set cloud.default.token myt0k3n==
51
52 .. note:: The term *default* can be replaced by any arbitary term chosen by
53     the user.
54
55 Shell vs one-command
56 --------------------
57
58 Kamaki users can access Synnefo services through either the kamaki shell or the
59 one-command interface. Both systems feature identical responses and error
60 messages, since they rely on the same internal command and library API
61 implementation. However, there are some minor differences.
62
63 In favor of interactive shell:
64
65 * shorter commands (context switching)
66 * tab completion for commands (if supported by host shell)
67 * kamaki-specific history with ↑ or ↓ keys (if supported by host shell)
68 * re-run old commands with /history
69
70 In favor of one-command:
71
72 * users take advantage of host shell features (pipelines, redirection, etc.)
73 * can be used in shell scripts
74
75 Run as shell
76 ^^^^^^^^^^^^
77 To use kamaki as a shell, run:
78
79 .. code-block:: console
80     :emphasize-lines: 1
81
82     Example 2.2.1: Run kamaki shell
83
84     $ kamaki-shell
85
86 * with any kind of '-' prefixed arguments, except '-h', '--help', '-V',
87     '- - version'.
88
89 .. code-block:: console
90     :emphasize-lines: 1
91
92     Example 2.2.2: Run kamaki shell with custom configuration file
93
94     $ kamaki-shell -c myconfig.file
95
96     Example 2.2.3: Run kamaki shell so as to use a specific cloud
97
98     $ kamaki-shell --cloud=my_demo_cloud
99
100     Example 2.2.4: Run kamaki shell with verbosity (shows HTTP requests)
101
102     $ kamaki-shell -v
103
104 .. note:: Valid arguments can be combined e.g., it is ok to run a shell with
105   verbosity and a specific cloud::
106
107     $ kamaki-shell -v --cloud=my_demo_cloud
108
109 Run as one-command
110 ^^^^^^^^^^^^^^^^^^
111 To use kamaki as an one-command tool, run:
112
113 * with the '-h' or '--help' arguments (help for kamaki one-command)
114
115 .. code-block:: console
116     :emphasize-lines: 1
117
118     Example 2.3.1: Kamaki help
119
120     $kamaki -h
121
122 * with one or more command parameters (object and, maybe, action):
123
124 .. code-block:: console
125     :emphasize-lines: 1
126
127     Example 2.3.2: List servers managed by user
128
129     $ kamaki server list
130
131 One-command interface
132 ---------------------
133
134 Using help
135 ^^^^^^^^^^
136
137 Kamaki help provides information on commands (description, syntax).
138
139 To see the command groups (objects), use -h or --help (example 1.3.1). The
140 following examples demonstrate the help messages of kamaki, in the context of a
141 command group (server) and of a command in that group (list).
142
143 .. code-block:: console
144     :emphasize-lines: 1
145
146     Example 3.1.1: kamaki help shows available parameters and command groups
147
148
149     $ kamaki -h
150     usage: kamaki <cmd_group> [<cmd_subbroup> ...] <cmd>
151         [-v] [-s] [-V] [-d] [-c CONFIG] [-o OPTIONS] [--cloud CLOUD] [-h]
152
153     optional arguments:
154       -v, --verbose         More info at response
155       -s, --silent          Do not output anything
156       -V, --version         Print current version
157       -d, --debug           Include debug output
158       -c CONFIG, --config CONFIG
159                             Path to configuration file
160       -o OPTIONS, --options OPTIONS
161                             Override a config value
162       --cloud CLOUD         Chose a cloud to connect to
163       -h, --help            Show help message
164
165     Options:
166      - - - -
167     resource: Astakos/Account API commands for resources
168     group: Pithos+/Storage user groups
169     network: Networking API network commands
170     subnet: Networking API network commands
171     ip: Networking API floatingip commands
172     image: Cyclades/Plankton API image commands
173     imagecompute: Cyclades/Compute API image commands
174     quota: Astakos/Account API commands for quotas
175     sharer: Pithos+/Storage sharers
176     project: Astakos project API commands
177     user: Astakos/Identity API commands
178     file: Pithos+/Storage object level API commands
179     container: Pithos+/Storage container level API commands
180     flavor: Cyclades/Compute API flavor commands
181     server: Cyclades/Compute API server commands
182     config: Kamaki configurations
183     port: Networking API network commands
184     history: Kamaki command history
185     kamaki-shell: An interactive command line shell
186
187 .. code-block:: console
188     :emphasize-lines: 1,2
189
190     Example 3.1.2: Cyclades help contains all first-level commands of Cyclades
191     command group
192
193     $ kamaki server -h
194     usage: kamaki server <...> [-v] [-s] [-V] [-d] [-c CONFIG]
195                                [-o OPTIONS] [--cloud CLOUD] [-h]
196
197     optional arguments:
198       -v, --verbose         More info at response
199       -s, --silent          Do not output anything
200       -V, --version         Print current version
201       -d, --debug           Include debug output
202       -c CONFIG, --config CONFIG
203                             Path to configuration file
204       -o OPTIONS, --options OPTIONS
205                             Override a config value
206       --cloud CLOUD         Chose a cloud to connect to
207       -h, --help            Show help message
208
209     Options:
210      - - - -
211     info: Detailed information on a Virtual Machine
212     modify: Modify attributes of a virtual server
213     create: Create a server (aka Virtual Machine)
214     list: List virtual servers accessible by user
215     reboot: Reboot a virtual server
216     start: Start an existing virtual server
217     shutdown: Shutdown an active virtual server
218     delete: Delete a virtual server
219
220 .. code-block:: console
221     :emphasize-lines: 1,2
222
223     Example 3.1.3: Help for command "server list" with syntax, description and
224     available user options
225
226     $ kamaki server list -h
227     usage: kamaki server list [-v] [-s] [-V] [-d] [-c CONFIG] [-o OPTIONS]
228                               [--cloud CLOUD] [-h] [--since SINCE] [--enumerate]
229                               [-l] [--more] [-n LIMIT] [-j]
230
231     List Virtual Machines accessible by user
232
233     optional arguments:
234       -v, --verbose         More info at response
235       -s, --silent          Do not output anything
236       -V, --version         Print current version
237       -d, --debug           Include debug output
238       -c CONFIG, --config CONFIG
239                             Path to config file
240       -o OPTIONS, --options OPTIONS
241                             Override a config value
242       --cloud CLOUD         Chose a cloud to connect to
243       -h, --help            Show help message
244       --status STATUS       filter by status (ACTIVE, STOPPED, REBOOT, ERROR,
245                             etc.)
246       --enumerate           Enumerate results
247       --name-suffix NAME_SUFF
248                             filter by name suffix (case insensitive)
249       --image-id IMAGE_ID   filter by image id
250       --metadata META       filter by metadata key=values
251       -j, --json            show headers in json
252       --id ID               filter by id
253       --user-id USER_ID     filter by user id
254       --id-like ID_LIKE     print only if id contains this (case insensitive)
255       --id-suffix ID_SUFF   filter by id suffix (case insensitive)
256       --since SINCE         show only items since date (' d/m/Y H:M:S ')
257       -l, --details         show detailed output
258       --name NAME           filter by name
259       --more                output results in pages (-n to set items per page,
260                             default 10)
261       --name-prefix NAME_PREF
262                             filter by name prefix (case insensitive)
263       -n LIMIT, --number LIMIT
264                             limit number of listed virtual servers
265       --id-prefix ID_PREF   filter by id prefix (case insensitive)
266       --user-name USER_NAME
267                             filter by user name
268       --name-like NAME_LIKE
269                             print only if name contains this (case insensitive)
270       --metadata-like META_LIKE
271                             print only if in key=value, the value is part of
272                             actual value
273       --flavor-id FLAVOR_ID
274                             filter by flavor id
275
276     Details:
277     Use filtering arguments (e.g., --name-like) to manage long server lists
278
279 .. _using-history-ref:
280
281 Using history
282 ^^^^^^^^^^^^^
283
284 Kamaki command history is stored in '${HOME}/.kamaki.history' by default). To
285 set a custom history file path users must set the history.file config option
286 (more on config options `here <setup.html#editing-options>`_).
287
288 Every command is appended at the end of that file. In order to see how to use
289 history, use the kamaki help system:
290
291 .. code-block:: console
292     :emphasize-lines: 1
293
294     Example 3.2.1: Available history options
295
296     $ kamaki history -h
297     Options:
298      - - - -
299     clean:  Clean up history (permanent)
300     run  :  Run previously executed command(s)
301     show :  Show intersession command history
302
303
304     Example 3.2.2: Clean up everything, run a kamaki command, show full and filtered history
305
306     $ kamaki history clean
307     $ kamaki server list
308     ...
309     $ kamaki history show
310     1.  kamaki server list
311     2.  kamaki history show
312     $ kamaki history show --match server
313     1. kamaki server list
314     3. kamaki history show --match server
315
316 Debug and logging
317 ^^^^^^^^^^^^^^^^^
318
319 Debug
320 """""
321
322 When in debug mode, kamaki outputs some useful debug information (stack trace
323 and http logs). Kamaki in debug mode cancels the suppression of warning
324 messages too.
325
326 To run kamaki in debug mode use the -d or --debug option.
327
328
329 Verbose
330 """""""
331
332 Most kamaki commands are translated into http requests. Kamaki clients API
333 translates command semantics to REST and handles the response. Users who need
334 to have access to these commands can use the verbose mode that outputs the
335 HTTP Request and Response details along with the (possibly modified) regular
336 command output.
337
338 To run kamaki in verbose mode use the *-v/- - verbose* argument, it goes with
339 everything.
340
341 Verbose mode outputs the request and response mode, address and
342 headers as well as the size of the data block, if any. Sensitive information
343 (x-auth-token header and data body) are omitted by default,. Users who need
344 this information may enable it through the log_token and log_data configuration
345 options
346
347 .. tip:: Use the -o argument to include http data in the output:
348
349     .. code-block:: console
350
351         $ kamaki server list -v -o log_data=on
352
353
354 Logging
355 """""""
356
357 Kamaki logs in a file specified by the *log_file* option which defaults to
358 *${HOME}/.kamaki.log*. This configuration option can be modified::
359
360     kamaki config set log_file /new/log/file/path
361
362 Kamaki logs http request and response information, namely the method, URL,
363 headers and data size. Sensitive information (data and token header) are
364 omitted by default. There are some configuration options that can switch them
365 on, though:
366
367 * HTTP data blocks are not logged by default
368     to enable logging the full http bodies, set log_data to `on`::
369
370         kamaki config set log_data on
371
372     to disable it, set it to `off`::
373
374         kamaki config set log_data off
375
376     or delete it::
377
378         kamaki config delete log_data
379
380 * X-Auth-Token header is not logged by default
381     to enable logging the X-Auth-Token header, set log_token to `on`::
382
383         kamaki config set log_token on
384
385     to disable it, set it to `off`::
386
387         kamaki config set log_token off
388
389     or delete it::
390
391         kamaki config delete log_token
392
393 * The information (pid, name, date) of the processes that handle http requests
394     is not logged by default, because if they are, logs are difficult to read.
395     Still, they are useful for resolving race condition problems, so to enable
396     logging proccess information::
397
398         kamaki config set log_pid on
399
400     to disable it, set if to off::
401
402         kamaki config set log_pid off
403
404     or delete it::
405
406         kamaki config delete log_pid
407
408 One-command features
409 ^^^^^^^^^^^^^^^^^^^^
410
411 .. code-block:: console
412     :emphasize-lines: 1
413
414     Example 3.4.1: List the trash container contents, containing c1_
415     
416     $ kamaki file list -v -o log_token=on
417     ...
418     X-Auth-Token: s0m3-3x4mp1e-70k3n
419     ...
420
421 The -o argument can be used to temporarily override various (set or unset)
422 options. In one command, all -o option sets are forgotten just after the
423 command has been completed, and the previous settings are restored (the
424 configuration file is not modified).
425
426 For security reasons, all commands hide the authentication token from outputs
427 and the logs. In example 3.4.1 the token is not hided, because of the
428 *log_token=on* config option.
429
430 .. warning:: Complimentary output i.e., http logs and informative messages are
431   printed to standard error stream
432
433 Interactive shell
434 -----------------
435
436 Command Contexts
437 ^^^^^^^^^^^^^^^^
438
439 The command namespaces in kamaki interactive shell are called **contexts**.
440
441 Each command group is also a context where the users can **enter** by typing
442 the group name. If the context switch is successful, the kamaki shell prompt
443 changes to present the new context ("*file*" in example 4.1.1).
444
445 .. code-block:: console
446     :emphasize-lines: 1
447
448     Example 4.1.1: Start kamaki and switch to file context
449
450
451     $ kamaki
452     [kamaki]: file
453     [file]:
454
455 Type **exit** (alternatively **ctrl-D** in (X)nix systems or **ctrl-Z** in
456 Windows) to exit a context and return to the context of origin. If already at
457 the top context (kamaki), an exit is equivalent to exiting the program.
458
459 .. code-block:: console
460     :emphasize-lines: 1
461
462     Example 4.1.2: Exit file context and then exit kamaki
463
464     [file]: exit
465     [kamaki]: exit
466     $
467
468 A user might **browse** through different contexts during one session.
469
470 .. code-block:: console
471     :emphasize-lines: 1
472
473     Example 4.1.3: Execute list command in different contexts
474
475     $ kamaki
476     [kamaki]: config
477     [config]: list
478     ... (configuration options listing) ...
479     [config]: exit
480     [kamaki]: file
481     [file]: list
482     ... (file listing) ...
483     [file]: exit
484     [kamaki]: server
485     [server]: list
486     ... (servers listing) ...
487     [server]: exit
488     [kamaki]:
489
490 Users can avoid switching between contexts: all commands can run from the
491 **top context** e.g., examples 4.1.3 and 4.1.4 are equivalent.
492
493 .. code-block:: console
494     :emphasize-lines: 1
495
496     Example 4.1.4: Execute different "list" commands from top context
497
498     [kamaki]: config list
499     ... (configuration options listing) ...
500     [kamaki]: file list
501     ... (file listing) ...
502     [kamaki]: server list
503     ... (servers listing) ...
504     [kamaki]:
505
506 While in a context, other contexts are accessible by using a **/** as shown in
507 the following example:
508
509 .. code-block:: console
510
511   Example 4.1.5: Execute different "list" commands from the config context
512
513   [kamaki]: config
514   [config]: list
515   ... (configuration option listing) ...
516   [config]: /file list
517   ... (file listing) ...
518   [config]: /server list
519   ... (servers listing) ...
520   [config]:
521
522 Using Help
523 ^^^^^^^^^^
524
525 There are two help mechanisms: a context-level and a command-level.
526
527 **Context-level help** lists the available commands in a context and can also
528 offer a short description for each command.
529
530 Context-level help syntax::
531
532     * Show available commands in current context *
533     [context]: help
534     ...
535     [context]: ?
536     ...
537
538     * Show help for command cmd *
539     [context]: help cmd
540     ...
541     [context]: ?cmd
542     ...
543
544 The context-level help results may change from context to context
545
546 .. code-block:: console
547     :emphasize-lines: 1
548
549     Example 4.2.1: Get available commands and then get help in a context
550
551     [kamaki]: help
552
553     kamaki commands:
554     ================
555     user  config  flavor  history  image  network  server  file ...
556
557     interactive shell commands:
558     ===========================
559     exit  help  shell
560
561     [kamaki]: ?config
562     Configuration commands (config -h for more options)
563
564     [kamaki]: config
565
566     [config]: ?
567
568     config commands:
569     ================
570     delete  get  list  set
571
572     interactive shell commands:
573     ===========================
574     exit  help  shell
575
576     [config]: help set
577     Set a configuration option (set -h for more options)
578
579 In context-level, there is a distinction between kamaki-commands and
580 interactive shell commands. The former are available in one-command mode and
581 are the main functionality of kamaki, while the later are used to manage the
582 kamaki-shell.
583
584 **Command-level help** prints the syntax, arguments and description of a
585 specific (terminal) command
586
587 Command-level help syntax::
588
589     * Get help for command cmd1 cmd2 ... cmdN *
590     [context]: cmd1 cmd2 ... cmdN -h
591     <syntax>
592
593     <description>
594
595     <arguments and possible extensions>
596
597 Command-level help mechanism is exactly the same as the one used in
598 one-command mode. For example, it is invoked by using the -h or --help
599 parameter at any point.
600
601 .. code-block:: console
602     :emphasize-lines: 1
603
604     Example 4.2.2: Get command-level help for config and config-set
605
606
607     [kamaki]: config --help
608     config: Configuration commands
609     delete:  Delete a configuration option (and use the default value)
610     get   :  Show a configuration option
611     list  :  List configuration options
612     set   :  Set a configuration option
613
614     [kamaki]: config
615
616     [config]: set -h
617     usage: set <option> <value> [-v] [-d] [-h] [-i] [--config CONFIG] [-s]
618
619     Set a configuration option
620
621     optional arguments:
622       -v, --verbose    More info at response
623       -d, --debug      Include debug output
624       -h, --help       Show help message
625       -i, --include    Include protocol headers in the output
626       --config CONFIG  Path to configuration file
627       -s, --silent     Do not output anything
628
629 There are many ways of producing a help message, as shown in example 4.2.3
630
631 .. code-block:: console
632     :emphasize-lines: 1
633
634     Example 4.2.3: Equivalent calls of command-level help for config-set
635
636
637     [config]: set -h
638     [config]: set --help
639     [kamaki]: config set -h
640     [kamaki]: config set --help
641     [file]: /config set -h
642     [server]: /config set --help
643
644 History modes
645 ^^^^^^^^^^^^^
646
647 There are two history modes: session and permanent. Session history keeps
648 record of all actions in a kamaki shell session, while permanent history
649 appends all commands to an accessible history file.
650
651 Session history is only available in interactive shell mode. Users can iterate
652 through past commands in the same session with the ↑ and ↓ keys. Session
653 history is not stored, although commands are recorded through the permanent
654 history mechanism.
655
656 Permanent history is implemented as a command group and is common to both the
657 one-command and shell interfaces. In specific, every command is appended in a
658 history file (configured as `history_file` in settings, see
659 `setup section <setup.html>`_ for details). Commands executed in one-command
660 mode are mixed with the ones run in kamaki shell (also see
661 :ref:`using-history-ref` section on this guide).
662
663 Scripting
664 ^^^^^^^^^
665
666 The history-run feature allows the sequential run of previous command
667 executions in kamaki shell.
668
669 The following sequence copies and downloads a file from *mycontainer1* ,
670 uploads it to *mycontainer2* , then undo the proccess and repeats it with
671 history-run
672
673 .. code-block:: console
674     :emphasize-lines: 1,12,19,32
675
676     * Download mycontainer1:myfile and upload it to mycontainer2:myfile *
677     [kamaki]: file
678     [file]: copy /mycontainer1/somefile /mycontainer1/myfile
679     [file]: download /mycontainer1/myfile mylocalfile
680     ...
681     Download completed
682     [file]: upload mylocalfile /mycontainer2/myfile -f
683     ...
684     Upload completed
685
686     * undo the process *
687     [file]: !rm mylocalfile
688     [file]: delete /mycontainer1/myfile
689     [file]: delete /mycontainer2/myfile
690
691     * check history entries *
692     [file]: exit
693     [kamaki]: history
694     [history]: show
695     1.  file
696     2.  file copy /mycontainer1/somefile /mycontainer1/myfile
697     3.  file download /mycontainer1/myfile mylocalfile
698     4.  file upload mylocalfile /mycontainer2/myfile -f
699     5.  file delete /mycontainer1/myfile
700     6.  file delete /mycontainer2/myfile
701     7.  history
702     8.  history show
703
704     *repeat the process *
705     [history]: run 2-4
706     <file copy /mycontainer1/somefile /mycontainer1/myfile>
707     <file download /mycontainer1/myfile mylocalfile>
708     Download completed
709     <file upload mylocalfile /mycontainer2/myfile>
710     Upload completed
711
712 The suggested best practice for scripting is python scripts that import the
713 `kamaki.clients` library. Another option is host shell scripting (e.g., bash)
714 with kamaki one-command. Still, the history-run functionality might prove handy
715 in many occasions.
716
717 OS Shell integration
718 ^^^^^^^^^^^^^^^^^^^^
719
720 Kamaki shell features the ability to execute OS-shell commands from any
721 context. This can be achieved by typing *!* or *shell*::
722
723     [kamaki_context]: !<OS shell command>
724     ... OS shell command output ...
725
726     [kamaki_context]: shell <OS shell command>
727     ... OS shell command output ...
728
729 .. code-block:: console
730     :emphasize-lines: 1
731
732     Example 4.7.1: Run unix-style shell commands from kamaki shell
733
734
735     [kamaki]: !ls -al
736     total 16
737     drwxrwxr-x 2 username username 4096 Nov 27 16:47 .
738     drwxrwxr-x 7 username username 4096 Nov 27 16:47 ..
739     -rw-rw-r-- 1 username username 8063 Jun 28 14:48 kamaki-logo.png
740
741     [kamaki]: shell cp kamaki-logo.png logo-copy.png
742
743     [kamaki]: shell ls -al
744     total 24
745     drwxrwxr-x 2 username username 4096 Nov 27 16:47 .
746     drwxrwxr-x 7 username username 4096 Nov 27 16:47 ..
747     -rw-rw-r-- 1 username username 8063 Jun 28 14:48 kamaki-logo.png
748     -rw-rw-r-- 1 username username 8063 Jun 28 14:48 logo-copy.png
749
750
751 Kamaki shell commits command strings to the outside shell and prints the
752 results, without interacting with it. After a command is finished, kamaki shell
753 returns to its initial state, which involves the current directory, as shown in
754 example 4.8.2
755
756 .. code-block:: console
757     :emphasize-lines: 1
758
759     Example 4.8.2: Attempt (and fail) to change working directory
760
761
762     [kamaki]: !pwd
763     /home/username
764
765     [kamaki]: !cd ..
766
767     [kamaki]: shell pwd
768     /home/username