aspera-cli 4.13.0 → 4.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +28 -5
  4. data/CONTRIBUTING.md +17 -1
  5. data/README.md +782 -401
  6. data/examples/dascli +1 -1
  7. data/examples/rubyc +24 -0
  8. data/lib/aspera/aoc.rb +21 -32
  9. data/lib/aspera/ascmd.rb +1 -0
  10. data/lib/aspera/cli/basic_auth_plugin.rb +6 -6
  11. data/lib/aspera/cli/formatter.rb +17 -25
  12. data/lib/aspera/cli/main.rb +21 -27
  13. data/lib/aspera/cli/manager.rb +128 -114
  14. data/lib/aspera/cli/plugin.rb +87 -38
  15. data/lib/aspera/cli/plugins/alee.rb +2 -2
  16. data/lib/aspera/cli/plugins/aoc.rb +216 -102
  17. data/lib/aspera/cli/plugins/ats.rb +16 -18
  18. data/lib/aspera/cli/plugins/bss.rb +3 -3
  19. data/lib/aspera/cli/plugins/config.rb +177 -367
  20. data/lib/aspera/cli/plugins/console.rb +4 -6
  21. data/lib/aspera/cli/plugins/cos.rb +12 -13
  22. data/lib/aspera/cli/plugins/faspex.rb +17 -18
  23. data/lib/aspera/cli/plugins/faspex5.rb +332 -216
  24. data/lib/aspera/cli/plugins/node.rb +171 -142
  25. data/lib/aspera/cli/plugins/orchestrator.rb +15 -18
  26. data/lib/aspera/cli/plugins/preview.rb +38 -60
  27. data/lib/aspera/cli/plugins/server.rb +22 -15
  28. data/lib/aspera/cli/plugins/shares.rb +24 -33
  29. data/lib/aspera/cli/plugins/sync.rb +3 -3
  30. data/lib/aspera/cli/transfer_agent.rb +29 -26
  31. data/lib/aspera/cli/version.rb +1 -1
  32. data/lib/aspera/colors.rb +9 -7
  33. data/lib/aspera/data/6 +0 -0
  34. data/lib/aspera/environment.rb +7 -3
  35. data/lib/aspera/fasp/agent_connect.rb +5 -0
  36. data/lib/aspera/fasp/agent_direct.rb +5 -5
  37. data/lib/aspera/fasp/agent_httpgw.rb +138 -60
  38. data/lib/aspera/fasp/agent_trsdk.rb +2 -0
  39. data/lib/aspera/fasp/error_info.rb +2 -0
  40. data/lib/aspera/fasp/installation.rb +18 -19
  41. data/lib/aspera/fasp/parameters.rb +18 -17
  42. data/lib/aspera/fasp/parameters.yaml +2 -1
  43. data/lib/aspera/fasp/resume_policy.rb +3 -3
  44. data/lib/aspera/fasp/transfer_spec.rb +6 -5
  45. data/lib/aspera/fasp/uri.rb +23 -21
  46. data/lib/aspera/faspex_postproc.rb +1 -1
  47. data/lib/aspera/hash_ext.rb +12 -2
  48. data/lib/aspera/keychain/macos_security.rb +13 -13
  49. data/lib/aspera/log.rb +1 -0
  50. data/lib/aspera/node.rb +62 -80
  51. data/lib/aspera/oauth.rb +1 -1
  52. data/lib/aspera/persistency_action_once.rb +1 -1
  53. data/lib/aspera/preview/terminal.rb +61 -15
  54. data/lib/aspera/preview/utils.rb +3 -3
  55. data/lib/aspera/proxy_auto_config.js +2 -2
  56. data/lib/aspera/rest.rb +37 -0
  57. data/lib/aspera/secret_hider.rb +6 -1
  58. data/lib/aspera/ssh.rb +1 -1
  59. data/lib/aspera/sync.rb +2 -0
  60. data.tar.gz.sig +0 -0
  61. metadata +3 -4
  62. metadata.gz.sig +0 -0
  63. data/docs/test_env.conf +0 -186
  64. data/lib/aspera/data/7 +0 -0
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Command Line Interface for IBM Aspera products
2
2
  <!-- markdownlint-disable MD033 MD003 MD053 -->
3
- <!-- cSpell:ignore devkit zcvf zxvf noded secondfile filesize sedemo eudemo webmail csum eascp loglevel cronfile magick keepalive inotify eastus bluemix trev sshfp struct genkey passout ibmaspera unpermitted schtasks taskschd -->
3
+ <!-- cspell:ignore devkit zcvf zxvf noded secondfile filesize sedemo eudemo webmail csum eascp loglevel cronfile magick keepalive inotify eastus bluemix trev sshfp struct genkey passout ibmaspera unpermitted schtasks taskschd dascli -->
4
4
 
5
5
  [comment1]: # (Do not edit this README.md, edit docs/README.erb.md, for details, read docs/README.md)
6
6
 
7
7
  ##
8
8
 
9
- Version : 4.13.0
9
+ Version : 4.14.0
10
10
 
11
11
  Laurent/2016-2023
12
12
 
@@ -92,7 +92,7 @@ ascli --version
92
92
  ```
93
93
 
94
94
  ```bash
95
- 4.13.0
95
+ 4.14.0
96
96
  ```
97
97
 
98
98
  ### First use
@@ -196,9 +196,9 @@ The following sections provide information on the various installation methods.
196
196
 
197
197
  An internet connection is required for the installation. If you don't have internet for the installation, refer to section [Installation without internet access](#offline_install).
198
198
 
199
- ### Docker container
199
+ ### Container
200
200
 
201
- The image is: [martinlaurent/ascli](https://hub.docker.com/r/martinlaurent/ascli).
201
+ The container image is: [martinlaurent/ascli](https://hub.docker.com/r/martinlaurent/ascli).
202
202
  The container contains: Ruby, `ascli` and the Aspera Transfer SDK.
203
203
  To use the container, ensure that you have `podman` (or `docker`) installed.
204
204
 
@@ -206,7 +206,7 @@ To use the container, ensure that you have `podman` (or `docker`) installed.
206
206
  podman --version
207
207
  ```
208
208
 
209
- #### Container quick start
209
+ #### Container: quick start
210
210
 
211
211
  **Wanna start quickly ?** With an interactive shell ? Execute this:
212
212
 
@@ -229,13 +229,13 @@ That is simple, but there are limitations:
229
229
  - Any generated file in the container will be lost on container (shell) exit. Including configuration files and downloaded files.
230
230
  - No possibility to upload files located on the host system
231
231
 
232
- #### Details on the container
232
+ #### Container: Details
233
233
 
234
- The container image is built from this [Dockerfile](Dockerfile): the entry point is `ascli` and the default command is `help`.
234
+ The container image is built from this [Dockerfile](Dockerfile.tmpl.erb): the entry point is `ascli` and the default command is `help`.
235
235
 
236
- If you want to run the image with a shell, execute with option: `--entrypoint bash`, and give argument `-l` (bash login to override the `help` default argument)
236
+ If you want to run the image with a shell, execute with option: `--entrypoint bash`, and give argument `-l` (`bash` login option to override the `help` default argument)
237
237
 
238
- The container can also be execute for individual commands like this: (add `ascli` commands and options at the end of the command line, e.g. `-v` to display the version)
238
+ The container can also be executed for individual commands like this: (add `ascli` commands and options at the end of the command line, e.g. `-v` to display the version)
239
239
 
240
240
  ```bash
241
241
  podman run --rm --tty --interactive martinlaurent/ascli:latest
@@ -254,11 +254,11 @@ ascli -v
254
254
  ```
255
255
 
256
256
  ```text
257
- 4.13.0
257
+ 4.14.0
258
258
  ```
259
259
 
260
260
  In order to keep persistency of configuration on the host,
261
- you should mount your user's config folder to the container.
261
+ you should specify your user's config folder as a volume for the container.
262
262
  To enable write access, a possibility is to run as `root` in the container (and set the default configuration folder to `/home/cliuser/.aspera/ascli`).
263
263
  Add options:
264
264
 
@@ -275,8 +275,8 @@ you can change the entry point, add option:
275
275
  --entrypoint bash
276
276
  ```
277
277
 
278
- You may also probably want that files downloaded in the container are in fact placed on the host.
279
- In this case you need also to mount the shared transfer folder:
278
+ You may also probably want that files downloaded in the container are directed to the host.
279
+ In this case you need also to specify the shared transfer folder as a volume:
280
280
 
281
281
  ```bash
282
282
  --volume $HOME/xferdir:/xferfiles
@@ -298,7 +298,7 @@ mkdir -p $HOME/.aspera/ascli
298
298
  asclish
299
299
  ```
300
300
 
301
- #### Sample container script
301
+ #### Container: Sample start script
302
302
 
303
303
  A convenience sample script is also provided: download the script [`dascli`](../examples/dascli) from [the GIT repo](https://raw.githubusercontent.com/IBM/aspera-cli/main/examples/dascli) :
304
304
 
@@ -308,7 +308,7 @@ Some environment variables can be set for this script to adapt its behavior:
308
308
 
309
309
  | env var | description | default | example |
310
310
  |--------------|------------------------------------|--------------------------|--------------------------|
311
- | ASCLI_HOME | configuration folder (persistency) | `$HOME/.aspera/ascli` | `$HOME/.ascliconfig` |
311
+ | ASCLI_HOME | configuration folder (persistency) | `$HOME/.aspera/ascli` | `$HOME/.ascli_config` |
312
312
  | docker_args | additional options to `podman` | &lt;empty&gt; | `--volume /Users:/Users` |
313
313
  | image | container image name | martinlaurent/ascli | |
314
314
  | version | container image version | latest | `4.8.0.pre` |
@@ -339,7 +339,7 @@ echo 'Local file to transfer' > $xferdir/samplefile.txt
339
339
  >
340
340
  > **Note:** Do not use too many volumes, as the AUFS limits the number.
341
341
 
342
- #### Offline installation of the container
342
+ #### Container: Offline installation
343
343
 
344
344
  - First create the image archive:
345
345
 
@@ -354,6 +354,50 @@ podman save martinlaurent/ascli|gzip>ascli_image_latest.tar.gz
354
354
  podman load -i ascli_image_latest.tar.gz
355
355
  ```
356
356
 
357
+ #### Container: `aspera.conf`
358
+
359
+ `ascp`'s configuration file `aspera.conf` is located in the container at: `/aspera_sdk/aspera.conf` (see Dockerfile).
360
+ As the container is immutable, it is not recommended to modify this file.
361
+ If one wants to change the content, it is possible to tell `ascp` to use another file using `ascp` option `-f`, e.g. by locating it on the host folder `$HOME/.aspera/ascli` mapped to the container folder `/home/cliuser/.aspera/ascli`:
362
+
363
+ ```bash
364
+ echo '<CONF/>' > $HOME/.aspera/ascli/aspera.conf
365
+ ```
366
+
367
+ Then, tell `ascp` to use that other conf file:
368
+
369
+ ```bash
370
+ --transfer-info=@json:'{"ascp_args":["-f","/home/cliuser/.aspera/ascli/aspera.conf"]}'
371
+ ```
372
+
373
+ #### Container: Singularity
374
+
375
+ Singularity is another type of use of container.
376
+
377
+ On Linux install:
378
+
379
+ ```console
380
+ dnf install singularity-ce
381
+ ```
382
+
383
+ Build an image like this:
384
+
385
+ ```bash
386
+ singularity build ascli.sif docker://martinlaurent/ascli
387
+ ```
388
+
389
+ The use like this:
390
+
391
+ ```bash
392
+ singularity run ascli.sif
393
+ ```
394
+
395
+ Or get a shell with access to the tool like this:
396
+
397
+ ```bash
398
+ singularity shell ascli.sif
399
+ ```
400
+
357
401
  ### <a id="ruby"></a>Ruby
358
402
 
359
403
  Use this method to install on the native host.
@@ -459,25 +503,36 @@ brew install ruby
459
503
 
460
504
  #### Linux: package
461
505
 
462
- If your Linux distribution provides a standard Ruby package, you can use it provided that the version is compatible (check at beginning of section).
506
+ If your Linux distribution provides a standard Ruby package, you can use it provided that the version supported.
463
507
 
464
- Example: RHEL 8 and 9: basic installation
508
+ **Example:** RHEL 8+, Rocky Linux 8+, Centos 8 Stream: with extensions to compile native gems
465
509
 
466
- ```bash
467
- yum module install ruby:3.1
468
- ```
510
+ - Check available ruby versions:
469
511
 
470
- Example: RHEL 8, Centos 8 Stream: with extensions to compile native gems
512
+ ```bash
513
+ dnf module list ruby
514
+ ```
471
515
 
472
- ```bash
473
- yum install make automake gcc gcc-c++ kernel-devel
474
- yum install redhat-rpm-config
475
- dnf module reset ruby
476
- dnf module enable ruby:3.1
477
- dnf module -y install ruby:3.1/common
478
- ```
516
+ - If ruby was already installed with an older version, remove it:
479
517
 
480
- Other examples:
518
+ ```bash
519
+ dnf module -y reset ruby
520
+ ```
521
+
522
+ - Install packages needed to build native gems:
523
+
524
+ ```bash
525
+ dnf install -y make automake gcc gcc-c++ kernel-devel
526
+ ```
527
+
528
+ - Enable the Ruby version you want:
529
+
530
+ ```bash
531
+ dnf module -y enable ruby:3.1
532
+ dnf install -y ruby-devel
533
+ ```
534
+
535
+ **Other examples:**
481
536
 
482
537
  ```bash
483
538
  yum install -y ruby ruby-devel rubygems ruby-json
@@ -543,9 +598,10 @@ To upgrade to the latest version:
543
598
  gem update aspera-cli
544
599
  ```
545
600
 
546
- `ascli` checks every week if a new version is available and notify the user in a WARN log. To de-activate this feature set the option `version_check_days` to `0`, or specify a different period in days.
601
+ `ascli` checks every week if a new version is available and notify the user in a WARN log.
602
+ To de-activate this feature, globally set the option `version_check_days` to `0`, or specify a different period in days.
547
603
 
548
- To check manually:
604
+ To check if a new version is available (independently of `version_check_days`):
549
605
 
550
606
  ```bash
551
607
  ascli conf check_update
@@ -696,21 +752,66 @@ Moreover all `ascp` options are supported either through transfer spec parameter
696
752
 
697
753
  #### Shell parsing for Unix-like systems: Linux, macOS, AIX
698
754
 
755
+ Linux command line parsing is easy: It is fully documented in the shell's documentation.
756
+
699
757
  On Unix-like environments, this is typically a POSIX shell (bash, zsh, ksh, sh).
700
758
  In this environment the shell parses the command line, possibly replacing variables, etc...
701
- see [bash shell operation](https://www.gnu.org/software/bash/manual/bash.html#Shell-Operation).
702
- Then it builds a list of arguments and then `ascli` (Ruby) is executed.
759
+ See [bash shell operation](https://www.gnu.org/software/bash/manual/bash.html#Shell-Operation).
760
+ The shell builds the list of arguments and then `fork`/`exec` Ruby with that list.
703
761
  Ruby receives a list parameters from shell and gives it to `ascli`.
704
- So special character handling (quotes, spaces, env vars, ...) is first done in the shell.
762
+ So special character handling (quotes, spaces, env vars, ...) is handled by the shell for any command executed.
705
763
 
706
764
  #### Shell parsing for Windows
707
765
 
708
- On Windows, `cmd.exe` is typically used.
709
- Windows process creation does not receive the list of arguments but just the whole line.
710
- It's up to the program to parse arguments. Ruby follows the Microsoft C/C++ parameter parsing rules.
766
+ MS Windows command line parsing is not easy: It is not hasndled by the shell (`cmd.exe`), not handled by the operating system, but it is handled by the application (here Ruby).
767
+
768
+ As far as `ascli` is concerned: it is close to a Linux shell parsing.
769
+
770
+ Thanksfully, `ascli` provides a command to check the value of an argument after parsing: `config echo`.
771
+ One can also run `ascli` with option `--log-level=debug` to display the command line after parsing.
772
+
773
+ The following examples give the same result on Windows:
774
+
775
+ - single quote protects the double quote
776
+
777
+ ```cmd
778
+ conf echo @json:'{"url":"https://..."}'
779
+ ```
780
+
781
+ - triple double quotes are replaced with a single double quote
782
+
783
+ ```cmd
784
+ conf echo @json:{"""url""":"""https://..."""}
785
+ ```
786
+
787
+ - double quote is escaped with backslash within double quotes
788
+
789
+ ```cmd
790
+ conf echo @json:"{\"url\":\"https://...\"}"
791
+ ```
792
+
793
+ On Windows, `cmd.exe` is typically used to start .
794
+ `cmd.exe` handles some special characters: `^"<>|%&`.
795
+ Basically it handles I/O redirections (`<>|`), shell variables (`%`), multiple commands (`&`) and handles those special characters from the command line.
796
+ Eventually, all those special characters are removed from the command line unless escaped with `^` or `"`.
797
+ `"` are kept and given to the program.
798
+
799
+ Then, Windows `CreateProcess` is called with just the whole command line as a single string, unlike Unix-like systems where the command line is split into arguments by the shell.
800
+
801
+ It's up to the program to split arguments:
711
802
 
712
803
  - [Windows: How Command Line Parameters Are Parsed](https://daviddeley.com/autohotkey/parameters/parameters.htm#RUBY)
713
- - [Understand Quoting and Escaping of Windows Command Line Arguments](http://www.windowsinspired.com/understanding-the-command-line-string-and-arguments-received-by-a-windows-program/)
804
+ - [Understand Quoting and Escaping of Windows Command Line Arguments](https://web.archive.org/web/20190316094059/http://www.windowsinspired.com/understanding-the-command-line-string-and-arguments-received-by-a-windows-program/)
805
+
806
+ is a Ruby program, so Ruby parses the command line into arguments and provides them to the program.
807
+ Ruby vaguely follows the Microsoft C/C++ parameter parsing rules.
808
+ (See `w32_cmdvector` in Ruby source [`win32.c`](https://github.com/ruby/ruby/blob/master/win32/win32.c#L1766)) : <!--cspell:disable-line-->
809
+
810
+ - space characters: split arguments (space, tab, newline)
811
+ - backslash: `\` escape single special character
812
+ - globbing characters: `*?[]{}` for file globbing
813
+ - double quotes: `"`
814
+ - single quotes: `'`
714
815
 
715
816
  #### Extended Values (JSON, Ruby, ...)
716
817
 
@@ -727,12 +828,12 @@ Example: The shell parses three arguments (as strings: `1`, `2` and `3`), so the
727
828
  ascli conf echo 1 2 3
728
829
  ```
729
830
 
730
- ```bash
831
+ ```ruby
731
832
  "1"
732
833
  ERROR: Argument: unprocessed values: ["2", "3"]
733
834
  ```
734
835
 
735
- `config echo` displays the value of the first argument using Ruby syntax: it surrounds a string with `"` and add `\` before special characters.
836
+ `config echo` displays the value of the **first** argument using Ruby syntax: it surrounds a string with `"` and add `\` before special characters.
736
837
 
737
838
  > **Note:** It gets its value after shell command line parsing and `ascli` extended value parsing.
738
839
 
@@ -743,7 +844,7 @@ Depending on the case, a different `format` is used to display the actual value.
743
844
  For example, in the simple string `Hello World`, the space character is special for the shell, so it must be escaped so that a single value is represented.
744
845
 
745
846
  Double quotes are processed by the shell to create a single string argument.
746
- For POSIX shells, single quotes can also be used in this case, or protect the special character ` ` (space) with a backslash. <!-- markdownlint-disable-line -->
847
+ For **POSIX shells**, single quotes can also be used in this case, or protect the special character ` ` (space) with a backslash. <!-- markdownlint-disable-line -->
747
848
 
748
849
  ```bash
749
850
  ascli conf echo "Hello World" --format=text
@@ -760,7 +861,7 @@ Hello World
760
861
  To be evaluated by shell, the shell variable must not be in single quotes.
761
862
  Even if the variable contains spaces it makes only one argument to `ascli` because word parsing is made before variable expansion by shell.
762
863
 
763
- > **Note:** we use a simple variable here: the variable is not necessarily an environment variable.
864
+ > **Note:** we use a shell variable here: the variable is not necessarily an environment variable (`export`).
764
865
 
765
866
  ```bash
766
867
  MYVAR="Hello World"
@@ -843,6 +944,22 @@ ascli conf echo @ruby:"{'title'=>gets.chomp}" --format=json
843
944
 
844
945
  `gets` is Ruby's method of terminal input (terminated by `\n`), and `chomp` removes the trailing `\n`.
845
946
 
947
+ #### Command line arguments from a file
948
+
949
+ If you need to provide a list of command line argument from lines that are in a file, on Linux you can use the `xargs` command:
950
+
951
+ ```bash
952
+ xargs -a lines.txt -d \\n ascli conf echo
953
+ ```
954
+
955
+ This is equivalent to execution of:
956
+
957
+ ```bash
958
+ ascli conf echo [line1] [line2] [line3] ...
959
+ ```
960
+
961
+ If there are spaces in the lines, those are not taken as separator, as we provide option `-d \\n` to `xargs`.
962
+
846
963
  #### Extended value using special characters read from environmental variables or files
847
964
 
848
965
  Using a text editor or shell: create a file `title.txt` (and env var) that contains exactly the text required: `Test " ' & \` :
@@ -876,25 +993,50 @@ ascli conf echo @ruby:"{'title'=>ENV['MYTITLE']}" --format=json
876
993
  {"title":"Test \" ' & \\"}
877
994
  ```
878
995
 
879
- ### Arguments : Commands and options
996
+ ### Commands, Options, Positional Values
880
997
 
881
- Arguments are the units of command line, as parsed by the shell, typically separated by spaces (and called "argv").
998
+ Command line arguments are the units of command line, as parsed by the shell, typically separated by spaces (and called "argv").
882
999
 
883
- There are two types of command line arguments: Commands and Options. Example :
1000
+ `ascli` considers three types of command line arguments:
1001
+
1002
+ - Commands
1003
+ - Options
1004
+ - Positional Values
884
1005
 
885
1006
  ```bash
886
1007
  ascli command subcommand --option-name=VAL1 VAL2
887
1008
  ```
888
1009
 
889
1010
  - executes *command*: `command subcommand`
890
- - with one *option*: `option_name`
891
- - this option is given a *value* of: `VAL1`
892
- - the command has one additional *argument*: `VAL2`
1011
+ - with one *option*: `option_name`and its *value*: `VAL1`
1012
+ - the command has one additional mandatory *argument*: `VAL2`
893
1013
 
894
- When the value of a command, option or argument is constrained by a fixed list of values, it is possible to use the first letters of the value only, provided that it uniquely identifies a value. For example `ascli conf ov` is the same as `ascli config overview`.
1014
+ When the value of a command, option or argument is constrained by a fixed list of values.
1015
+ It is possible to use the first letters of the value only, provided that it uniquely identifies a value.
1016
+ For example `ascli conf ov` is the same as `ascli config overview`.
895
1017
 
896
1018
  The value of options and arguments is evaluated with the [Extended Value Syntax](#extended).
897
1019
 
1020
+ #### Commands
1021
+
1022
+ Commands are typically entity types or verbs to act on those entities.
1023
+
1024
+ Example:
1025
+
1026
+ ```bash
1027
+ ascli conf ascp info
1028
+ ```
1029
+
1030
+ - `ascli` is the executable executed by the shell
1031
+ - `conf` is the first level command, and is also the name f the plugin to be used
1032
+ - `ascp` is the second level command, and is also the name of the component (singleton)
1033
+ - `info` is the third level command, and is also the action to be performed
1034
+
1035
+ Typically, commands are located at the beginning of the command line.
1036
+ Order is significant.
1037
+ The provided command must match one of the supported commands in the given context.
1038
+ If a wrong , or no command is provided when expected, an error message is displayed and the list of supported commands is displayed.
1039
+
898
1040
  #### Options
899
1041
 
900
1042
  All options, e.g. `--log-level=debug`, are command line arguments that:
@@ -902,7 +1044,7 @@ All options, e.g. `--log-level=debug`, are command line arguments that:
902
1044
  - start with `--`
903
1045
  - have a name, in lowercase, using `-` as word separator in name (e.g. `--log-level=debug`)
904
1046
  - have a value, separated from name with a `=`
905
- - can be used by prefix, provided that it is unique. E.g. `--log-l=debug` is the same as `--log-level=debug`
1047
+ - can be used by prefix, provided that it is unique. E.g. `--log-l=debug` is the same as `--log-level=debug` (avoid)
906
1048
 
907
1049
  Exceptions:
908
1050
 
@@ -910,17 +1052,24 @@ Exceptions:
910
1052
  - some options (flags) don't take a value, e.g. `-r`
911
1053
  - the special option `--` stops option processing and is ignored, following command line arguments are taken as arguments, including the ones starting with a `-`. Example:
912
1054
 
913
- ```bash
914
- ascli config echo -- --sample
915
- ```
1055
+ ```bash
1056
+ ascli config echo -- --sample
1057
+ ```
916
1058
 
917
- ```bash
918
- "--sample"
919
- ```
1059
+ ```bash
1060
+ "--sample"
1061
+ ```
920
1062
 
921
1063
  > **Note:** Here, `--sample` is taken as an argument, and not as an option, due to `--`.
922
1064
 
923
- Options can be optional or mandatory, with or without (hardcoded) default value. Options can be placed anywhere on command line and evaluated in order.
1065
+ Options may have an (hardcoded) default value.
1066
+
1067
+ Options can be placed anywhere on command line and evaluated in order.
1068
+
1069
+ Options are typically either:
1070
+
1071
+ - optional : typically to change the default behavior
1072
+ - mandatory : typically, connection information are options that are mandatory (so they can be placed in a config file)
924
1073
 
925
1074
  The value for *any* options can come from the following locations (in this order, last value evaluated overrides previous value):
926
1075
 
@@ -932,9 +1081,16 @@ Environment variable starting with prefix: ASCLI_ are taken as option values, e.
932
1081
 
933
1082
  Options values can be displayed for a given command by providing the `--show-config` option: `ascli node --show-config`
934
1083
 
935
- #### Commands and Arguments
1084
+ #### Positional Values
936
1085
 
937
- Command line arguments that are not options are either commands or arguments. If an argument must begin with `-`, then either use the `@val:` syntax (see [Extended Values](#extended)), or use the `--` separator (see above).
1086
+ Positional Values are typically mandatory values for a command, such as entity creation data.
1087
+
1088
+ If a Positional Values begins with `-`, then either use the `@val:` syntax (see [Extended Values](#extended)), or use the `--` separator (see above).
1089
+
1090
+ The advantages of using a positional value instead of an option for the same are that the command line is shorter(no option name, just the position) and the value is clearly mandatory.
1091
+
1092
+ The disadvantage is that it is not possible to define a default value in a config file or environment variable like for options.
1093
+ Nevertheless, [Extended Values](#extended) syntax is supported, so it is possible to retrieve a value from the config file or environment variable.
938
1094
 
939
1095
  ### Interactive Input
940
1096
 
@@ -1006,6 +1162,16 @@ ascli aoc admin res user list --fields=name,email,ats_admin --query=@json:'{"sor
1006
1162
 
1007
1163
  > **Note:** `select` filters selected elements from the result of API calls, while the `query` parameters gives filtering parameters to the API when listing elements.
1008
1164
 
1165
+ #### entity identifier
1166
+
1167
+ When a command is executed on a single entity, the entity is identified by a unique identifier that follows the command: e.g. `ascli aoc admin res user show 1234` where `1234` is the user identifier.
1168
+
1169
+ > **Note:** The legacy option `id` is deprecated: `--id=1234` as it does not provide the possibility to have sub-entities.
1170
+
1171
+ Only some commands provide the following capability: If the entity can also be uniquely identified by a name, then the name can be used instead of the identifier, using the **percent selector**: `ascli aoc admin res user show %name:john` where `john` is the user name.
1172
+
1173
+ Syntax: `%<field>:<value>`
1174
+
1009
1175
  #### Verbosity of output
1010
1176
 
1011
1177
  Output messages are categorized in 3 types:
@@ -1235,9 +1401,9 @@ ascli config open
1235
1401
  Older format for commands are still supported:
1236
1402
 
1237
1403
  ```bash
1238
- ascli config id <name> set|delete|show|initialize|update
1239
- ascli config over
1240
- ascli config list
1404
+ ascli config preset set|delete|show|initialize|update <name>
1405
+ ascli config preset over
1406
+ ascli config preset list
1241
1407
  ```
1242
1408
 
1243
1409
  #### <a id="lprtconf"></a>Special Option preset: config
@@ -1268,13 +1434,37 @@ ascli config preset get default _plugin_name_
1268
1434
 
1269
1435
  #### <a id="config"></a>Plugin: `config`: Configuration
1270
1436
 
1271
- Plugin `config` is used to configure `ascli` and also contains global options.
1437
+ Plugin `config` provides general commands for `ascli`:
1438
+
1439
+ - Option preset, config file operations
1440
+ - wizard
1441
+ - vault
1442
+ - ascp
1443
+
1444
+ The default configuration for `config` is read for any plugin invocation, this allows setting global options, such as `--log-level` or `--interactive`.
1445
+ When `ascli` starts, it looks for the `default` Option preset and checks the value for `config`.
1446
+ If set, it loads the option values for any plugin used.
1447
+
1448
+ > **Note:** If no global default is set by the user, the tool will use `global_common_defaults` when setting global parameters (e.g. `conf ascp use`)
1449
+
1450
+ Show current default (global) Option preset (`config` plugin):
1451
+
1452
+ ```console
1453
+ $ ascli conf preset get default config
1454
+ global_common_defaults
1455
+ ```
1456
+
1457
+ ```bash
1458
+ ascli conf preset set global_common_defaults version_check_days 0
1459
+ ```
1272
1460
 
1273
- When `ascli` starts, it looks for the `default` Option preset and if there is a value for `config`, if so, it loads the option values for any plugin used.
1461
+ If the default global Option preset is not set:
1274
1462
 
1275
- If no global default is set by the user, the tool will use `global_common_defaults` when setting global parameters (e.g. `conf ascp use`)
1463
+ ```bash
1464
+ ascli conf preset set default config global_common_defaults
1465
+ ```
1276
1466
 
1277
- Sample commands
1467
+ #### Config sample commands
1278
1468
 
1279
1469
  ```bash
1280
1470
  config ascp connect info 'Aspera Connect for Windows'
@@ -1377,7 +1567,7 @@ Some options are global, some options are available only for some plugins. (the
1377
1567
 
1378
1568
  Options are loaded using this algorithm:
1379
1569
 
1380
- - If option `--no-default` (or `-N`) is specified, then no default value is loaded is loaded for the plugin
1570
+ - If option `--no-default` (or `-N`) is specified, then no default value is loaded for the plugin
1381
1571
  - else it looks for the name of the plugin as key in section `default`, the value is the name of the default [option preset](#lprt) for it, and loads it.
1382
1572
  - If option `--preset=<name or extended value hash>` is specified (or `-Pxxxx`), this reads the [option preset](#lprt) specified from the configuration file, or of the value is a Hash, it uses it as options values.
1383
1573
  - Environment variables are evaluated
@@ -1459,7 +1649,7 @@ ascli config preset set default shares shares06
1459
1649
  - Display the content of configuration file in table format
1460
1650
 
1461
1651
  ```bash
1462
- ascli config overview
1652
+ ascli config preset overview
1463
1653
  ```
1464
1654
 
1465
1655
  - Execute a command on the shares application using default parameters
@@ -1718,13 +1908,13 @@ Examples:
1718
1908
  - display debugging log on `stdout`:
1719
1909
 
1720
1910
  ```bash
1721
- ascli conf over --log-level=debug --logger=stdout
1911
+ ascli conf pre over --log-level=debug --logger=stdout
1722
1912
  ```
1723
1913
 
1724
1914
  - log errors to `syslog`:
1725
1915
 
1726
1916
  ```bash
1727
- ascli conf over --log-level=error --logger=syslog
1917
+ ascli conf pre over --log-level=error --logger=syslog
1728
1918
  ```
1729
1919
 
1730
1920
  When `ascli` is used interactively in a shell, the shell itself will usually log executed commands in the history file.
@@ -1848,7 +2038,7 @@ Only supported with the `direct` agent: To specify a proxy for legacy HTTP fallb
1848
2038
 
1849
2039
  ### FASP proxy (forward) for transfers
1850
2040
 
1851
- To specify a FASP proxy (forward), set the [*transfer-spec*](#transferspec) parameter: `EX_fasp_proxy_url` (only supported with the `direct` agent).
2041
+ To specify a FASP proxy (forward), set the [*transfer-spec*](#transferspec) parameter: `proxy` (only supported with the `direct` agent).
1852
2042
 
1853
2043
  ### <a id="client"></a>FASP configuration
1854
2044
 
@@ -2184,11 +2374,13 @@ Parameters provided in option `transfer_info` are:
2184
2374
  | url | string | URL of the HTTP GW</br>Mandatory |
2185
2375
  | upload_bar_refresh_sec | float | Refresh rate for upload progress bar |
2186
2376
  | upload_chunk_size | int | Size in bytes of chunks for upload |
2377
+ | api_version | string | v1 or v2, for force use of version |
2378
+ | synchronous | bool | wait for each message acknowledgment |
2187
2379
 
2188
2380
  Example:
2189
2381
 
2190
2382
  ```bash
2191
- ascli faspex package recv --id=323 --transfer=httpgw --transfer-info=@json:'{"url":"https://asperagw.example.com:9443/aspera/http-gwy/v1"}'
2383
+ ascli faspex package recv 323 --transfer=httpgw --transfer-info=@json:'{"url":"https://asperagw.example.com:9443/aspera/http-gwy"}'
2192
2384
  ```
2193
2385
 
2194
2386
  > **Note:** The gateway only supports transfers authorized with a token.
@@ -2231,7 +2423,10 @@ The [*transfer-spec*](#transferspec) is a Hash (dictionary), so it is described
2231
2423
 
2232
2424
  It is possible to modify or add any of the supported [*transfer-spec*](#transferspec) parameter using the `ts` option.
2233
2425
  The `ts` option accepts a [Structured Value](#native) containing one or several [*transfer-spec*](#transferspec) parameters in a `Hash`.
2234
- Multiple `ts` options on command line are cumulative.
2426
+ Multiple `ts` options on command line are cumulative, and Hash is deeply merged.
2427
+ To remove a (deep) key from transfer spec, set the value to `null`.
2428
+
2429
+ > **Note:** Default transfer spec values can be displayed with command: `config ascp info --flat-hash=no` under field `ts`.
2235
2430
 
2236
2431
  It is possible to specify `ascp` options when the `transfer` option is set to [`direct`](#agt_direct) using `transfer_info` option parameter: `ascp_args`.
2237
2432
  Example: `--transfer-info=@json:'{"ascp_args":["-l","100m"]}'`.
@@ -2353,7 +2548,7 @@ Fields with EX_ prefix are extensions to transfer agent [`direct`](#agt_direct).
2353
2548
  | EX_license_text | string | Y | &nbsp; | &nbsp; | License file text override.<br/>By default ascp looks for license file near executable.<br/>(env:ASPERA_SCP_LICENSE) |
2354
2549
  | EX_no_read | bool | Y | &nbsp; | &nbsp; | no read source<br/>(--no-read) |
2355
2550
  | EX_no_write | bool | Y | &nbsp; | &nbsp; | no write on destination<br/>(--no-write) |
2356
- | EX_proxy_password | string | Y | &nbsp; | &nbsp; | Password used for Aspera proxy server authentication.<br/>May be overridden by password in URL EX_fasp_proxy_url.<br/>(env:ASPERA_PROXY_PASS) |
2551
+ | EX_proxy_password | string | Y | &nbsp; | &nbsp; | Password used for Aspera proxy server authentication.<br/>May be overridden by password in URL provided in parameter: proxy.<br/>(env:ASPERA_PROXY_PASS) |
2357
2552
  | EX_ssh_key_paths | array | Y | &nbsp; | &nbsp; | Use public key authentication for SSH and specify the private key file paths<br/>(-i {array}) |
2358
2553
 
2359
2554
  #### Destination folder for transfers
@@ -2461,6 +2656,58 @@ ascli server upload --src-type=pair ~/Documents/Samples/200KB.1 /Upload/sample1
2461
2656
 
2462
2657
  > **Note:** There are some specific rules to specify a file list when using **Aspera on Cloud**, refer to the AoC plugin section.
2463
2658
 
2659
+ #### Source directory structure on destination
2660
+
2661
+ This section is not specific to `ascli`, it is `ascp` behaviour.
2662
+
2663
+ The transfer destination is normally expected to designate a destination folder.
2664
+
2665
+ But there is one exception: The destination specifies the new item name when the following are met:
2666
+
2667
+ - there is a single source item (file or folder)
2668
+ - transfer spec `create_dir` is not set to `true` (`ascp` option `-d` not provided)
2669
+ - destination is not an existing folder
2670
+ - the `dirname` of destination is an existing folder
2671
+
2672
+ For this reason it is recommended to set `create_dir` to `true` for consistent behaviour between single and multiple items transfer, this is the default in `ascli`.
2673
+
2674
+ If a simple source file list is provided (no `destination` in `paths`, i.e. no `file_pair_list` provided), the destination folder is used as destination folder for each source file, and source file folder names are not preserved.
2675
+
2676
+ The inner structure of source items that are folder is preserved on destination.
2677
+
2678
+ A leading `/` on destination is ignored (relative to docroot) unless docroot is not set (relative to home).
2679
+
2680
+ In the following table source folder `d3` contains 2 files: `f1` and `d4/f2`.
2681
+
2682
+ | Source files | Destination | Folders on Dest. |`create_dir`| Destination Files |
2683
+ |--------------|-------------|-------------------|------------|-----------------------------|
2684
+ | f1 | d/f | - | false | Error: `d` does not exist. |
2685
+ | f1 | d/f | d | false | d/f (renamed) |
2686
+ | f1 | d/f/. | d | false | d/f (renamed) |
2687
+ | f1 | d/f | d/f | false | d/f/f1 |
2688
+ | f1 f2 | d | d | false | d/f1 d/f2 |
2689
+ | d3 | d | - | false | d/f1 d/f2 (renamed) |
2690
+ | f1 | d | - | true | d/f1 |
2691
+ | f1 f2 | d | - | true | d/f1 d/f2 |
2692
+ | d1/f1 d2/f2 | d | - | true | d/f1 d/f2 |
2693
+ | d3 | d | - | true | d/d3/f1 d/d3/d4/f2 |
2694
+
2695
+ If a file par list is provided then it is possible to rename or specify a different destination folder for each source (relative to the destination).
2696
+
2697
+ If transfer spec has a `src_base`, it has the side effect that the simple source file list is considered as a file pair list, and so the lower structure of source folders is preserved on destination.
2698
+
2699
+ | Source files | Destination |`src_base`| Destination Files |
2700
+ |-------------------|-------------|----------|-----------------------------|
2701
+ | d1/d2/f2 d1/d3/f3 | d | d1 | d/d2/f2 d/d3/f3 |
2702
+
2703
+ Advanced Example: Send files `./file1` and `./folder2/files2` to server (e.g. `/Upload`) and keep the original file names and folders, i.e. send `file1` to `/Upload/file1` and `files2` to `/Upload/folder2/files2`.
2704
+
2705
+ - If files are specified as `./file1 ./folder2/files2`, then destination will be: `/Upload/file1 /Upload/files2`
2706
+ - One possibility is to specify a file pair list: `--src-type=pair file1 file1 folder2/files2 folder2/files2`
2707
+ - Another possibility is to specify a source base: `--src-base=$PWD $PWD/file1 $PWD/folder2/files2` (note that `.` cannot be used as source base)
2708
+ - Similarly, create a temporary soft link (Linux): `ln -s . tmp_base` and use `--src-base=tmp_base tmp_base/file1 tmp_base/folder2/files2`
2709
+ - One can also similarly use `--sources=@ts` and specify the list of files in the `paths` field of transfer spec with both `source` and `destination` for each file.
2710
+
2464
2711
  #### <a id="multisession"></a>Support of multi-session
2465
2712
 
2466
2713
  Multi session, i.e. starting a transfer of a file set using multiple sessions (one `ascp` process per session) is supported on `direct` and `node` agents, not yet on connect.
@@ -2487,11 +2734,10 @@ When multi-session is used, one separate UDP port is used per session (refer to
2487
2734
 
2488
2735
  #### Content protection
2489
2736
 
2490
- Also known as Client-side encryption at rest (CSEAR), content protection allows a client to send files to a server
2491
- which will store them encrypted (upload), and decrypt files as they are being downloaded from a server, both
2492
- using a passphrase, only known by users sharing files. Files stay encrypted on server side.
2737
+ Also known as Client-side encryption at rest (CSEAR), content protection allows a client to send files to a server which will store them encrypted (upload), and decrypt files as they are being downloaded from a server, both using a passphrase, only known by users sharing files.
2738
+ Files stay encrypted on server side.
2493
2739
 
2494
- activating CSEAR consists in using transfer spec parameters:
2740
+ Activating CSEAR consists in using transfer spec parameters:
2495
2741
 
2496
2742
  - `content_protection` : activate encryption (`encrypt` for upload) or decryption (`decrypt` for download)
2497
2743
  - `content_protection_password` : the passphrase to be used.
@@ -2653,10 +2899,13 @@ One of the adapters, used in this manual, for testing, is `faux`. It is a pseudo
2653
2899
 
2654
2900
  ### <a id="faux_testing"></a>`faux:` for testing
2655
2901
 
2656
- This is an extract of the man page of `ascp`. This feature is a feature of `ascp`, not `ascli`.
2902
+ This is an extract of the man page of `ascp`.
2903
+ This feature is a feature of `ascp`, not `ascli`.
2657
2904
 
2658
2905
  This adapter can be used to simulate a file or a directory.
2659
2906
 
2907
+ To discard data at the destination, the destination argument is set to `faux://`.
2908
+
2660
2909
  To send uninitialized data in place of an actual source file, the source file is replaced with an argument of the form:
2661
2910
 
2662
2911
  ```bash
@@ -2710,8 +2959,6 @@ The sequence parameter is applied as follows:
2710
2959
 
2711
2960
  Filenames generated are of the form: `<file>_<00000 ... count>_<filesize>`
2712
2961
 
2713
- To discard data at the destination, the destination argument is set to `faux://` .
2714
-
2715
2962
  Examples:
2716
2963
 
2717
2964
  - Upload 20 gibibytes of random data to file myfile to directory /Upload
@@ -2737,7 +2984,7 @@ ascli server upload "faux:///mydir?file=testfile&count=1m&size=0&inc=2&seq=seque
2737
2984
  ```text
2738
2985
  ascli -h
2739
2986
  NAME
2740
- ascli -- a command line tool for Aspera Applications (v4.13.0)
2987
+ ascli -- a command line tool for Aspera Applications (v4.14.0)
2741
2988
 
2742
2989
  SYNOPSIS
2743
2990
  ascli COMMANDS [OPTIONS] [ARGS]
@@ -2767,52 +3014,52 @@ ARGS
2767
3014
  Some commands require mandatory arguments, e.g. a path.
2768
3015
 
2769
3016
  OPTIONS: global
2770
- --interactive=ENUM use interactive input of missing params: [no], yes
2771
- --ask-options=ENUM ask even optional options: [no], yes
2772
- --format=ENUM output format: text, nagios, ruby, json, jsonpp, yaml, [table], csv
2773
- --display=ENUM output only some information: [info], data, error
2774
- --fields=VALUE comma separated list of fields, or ALL, or DEF
2775
- --select=VALUE select only some items in lists, extended value: hash (column, value)
2776
- --table-style=VALUE table display style
2777
- --flat-hash=ENUM display hash values as additional keys: no, [yes]
2778
- --transpose-single=ENUM single object fields output vertically: no, [yes]
2779
- --show-secrets=ENUM show secrets on command output: [no], yes
2780
- -h, --help Show this message.
2781
- --bash-comp generate bash completion for command
2782
- --show-config Display parameters used for the provided action.
2783
- -r, --rest-debug more debug for HTTP calls
2784
- -v, --version display version
2785
- -w, --warnings check for language warnings
2786
- --ui=ENUM method to start browser: text, [graphical]
3017
+ --interactive=ENUM Use interactive input of missing params: [no], yes
3018
+ --ask-options=ENUM Ask even optional options: [no], yes
3019
+ --format=ENUM Output format: text, nagios, ruby, json, jsonpp, yaml, [table], csv
3020
+ --display=ENUM Output only some information: [info], data, error
3021
+ --fields=VALUE Comma separated list of fields, or ALL, or DEF
3022
+ --select=VALUE Select only some items in lists: column, value (Hash)
3023
+ --table-style=VALUE Table display style
3024
+ --flat-hash=ENUM Display deep values as additional keys: no, [yes]
3025
+ --transpose-single=ENUM Single object fields output vertically: no, [yes]
3026
+ --show-secrets=ENUM Show secrets on command output: [no], yes
3027
+ -h, --help Show this message
3028
+ --bash-comp Generate bash completion for command
3029
+ --show-config Display parameters used for the provided action
3030
+ -r, --rest-debug More debug for HTTP calls (REST)
3031
+ -v, --version Display version
3032
+ -w, --warnings Check for language warnings
3033
+ --ui=ENUM Method to start browser: text, [graphical]
2787
3034
  --log-level=ENUM Log level: debug, info, [warn], error, fatal, unknown
2788
- --logger=ENUM logging method: [stderr], stdout, syslog
2789
- --lock-port=VALUE prevent dual execution of a command, e.g. in cron
2790
- --http-options=VALUE options for http socket (extended value)
2791
- --insecure=ENUM do not validate HTTPS certificate: no, [yes]
2792
- --once-only=ENUM process only new items (some commands): [no], yes
2793
- --log-secrets=ENUM show passwords in logs: [no], yes
2794
- --cache-tokens=ENUM save and reuse Oauth tokens: no, [yes]
3035
+ --logger=ENUM Logging method: [stderr], stdout, syslog
3036
+ --lock-port=VALUE Prevent dual execution of a command, e.g. in cron
3037
+ --http-options=VALUE Options for http socket (Hash)
3038
+ --insecure=ENUM Do not validate HTTPS certificate: [no], yes
3039
+ --once-only=ENUM Process only new items (some commands): [no], yes
3040
+ --log-secrets=ENUM Show passwords in logs: [no], yes
3041
+ --cache-tokens=ENUM Save and reuse Oauth tokens: no, [yes]
2795
3042
 
2796
3043
  COMMAND: config
2797
- SUBCOMMANDS: ascp check_update coffee detect documentation echo email_test export_to_cli file flush_tokens folder gem genkey id initdemo list lookup open overview plugin preset proxy_check secure smtp_settings vault wizard
3044
+ SUBCOMMANDS: ascp check_update coffee detect documentation echo email_test file flush_tokens folder gem genkey initdemo open plugin preset proxy_check smtp_settings vault wizard
2798
3045
  OPTIONS:
2799
- --query=VALUE additional filter for API calls (extended value) (some commands)
2800
- --value=VALUE extended value for create, update, list filter
2801
- --property=VALUE name of property to set
2802
- --id=VALUE resource identifier (modify,delete,show)
3046
+ --query=VALUE Additional filter for for some commands (list/delete) (Hash)
3047
+ --value=VALUE Value for create, update, list filter (Hash) (deprecated: Use positional value for create/modify or option: query for list/delete)
3048
+ --property=VALUE Name of property to set (modify operation)
3049
+ --id=VALUE Resource identifier (deprecated: Use identifier after verb (modify,delete,show))
2803
3050
  --bulk=ENUM Bulk operation (only some): [no], yes
2804
- --bfail=ENUM Bulk operation error handling: [no], yes
2805
- --config-file=VALUE read parameters from file in YAML format, current=/usershome/.aspera/ascli/config.yaml
2806
- -N, --no-default do not load default configuration for plugin
3051
+ --bfail=ENUM Bulk operation error handling: no, [yes]
3052
+ --config-file=VALUE Read parameters from file in YAML format, current=/usershome/.aspera/ascli/config.yaml
3053
+ -N, --no-default Do not load default configuration for plugin
2807
3054
  --override=ENUM Wizard: override existing value: [no], yes
2808
- --use-generic-client=ENUM Wizard: AoC: use global or org specific jwt client id: [no], yes
2809
- --default=ENUM Wizard: set as default configuration for specified plugin (also: update): [no], yes
3055
+ --use-generic-client=ENUM Wizard: AoC: use global or org specific jwt client id: no, [yes]
3056
+ --default=ENUM Wizard: set as default configuration for specified plugin (also: update): no, [yes]
2810
3057
  --test-mode=ENUM Wizard: skip private key check step: [no], yes
2811
- -P, --presetVALUE load the named option preset from current config file
3058
+ -P, --presetVALUE Load the named option preset from current config file
2812
3059
  --pkeypath=VALUE Wizard: path to private key for JWT
2813
3060
  --ascp-path=VALUE Path to ascp
2814
3061
  --use-product=VALUE Use ascp from specified product
2815
- --smtp=VALUE SMTP configuration (extended value: hash)
3062
+ --smtp=VALUE SMTP configuration (Hash)
2816
3063
  --fpac=VALUE Proxy auto configuration script
2817
3064
  --proxy-credentials=VALUE HTTP proxy credentials (Array with user and password)
2818
3065
  --secret=VALUE Secret for access keys
@@ -2824,65 +3071,63 @@ OPTIONS:
2824
3071
  --notif-template=VALUE Email ERB template for notification of transfers
2825
3072
  --version-check-days=VALUE Period in days to check new version (zero to disable)
2826
3073
  --plugin-folder=VALUE Folder where to find additional plugins
2827
- --ts=VALUE Override transfer spec values (Hash, e.g. use @json: prefix), current={"create_dir"=>true}
3074
+ --ts=VALUE Override transfer spec values (Hash)
2828
3075
  --to-folder=VALUE Destination folder for transferred files
2829
3076
  --sources=VALUE How list of transferred files is provided (@args,@ts,Array)
2830
- --src-type=ENUM Type of file list: list, pair
2831
- --transfer=ENUM Type of transfer agent: direct, node, connect, httpgw, trsdk
3077
+ --src-type=ENUM Type of file list: [list], pair
3078
+ --transfer=ENUM Type of transfer agent: [direct], node, connect, httpgw, trsdk
2832
3079
  --transfer-info=VALUE Parameters for transfer agent (Hash)
2833
- --progress=ENUM Type of progress bar: none, native, multi
3080
+ --progress=ENUM Type of progress bar: none, [native], multi
2834
3081
 
2835
3082
 
2836
3083
  COMMAND: shares
2837
- SUBCOMMANDS: admin health repository
3084
+ SUBCOMMANDS: admin files health
2838
3085
  OPTIONS:
2839
3086
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2840
- --username=VALUE username to log in
2841
- --password=VALUE user's password
2842
- --type=ENUM Type of user/group for operations: any, local, ldap, saml
3087
+ --username=VALUE Username to log in
3088
+ --password=VALUE User's password
3089
+ --type=ENUM Type of user/group for operations: [any], local, ldap, saml
2843
3090
 
2844
3091
 
2845
3092
  COMMAND: node
2846
3093
  SUBCOMMANDS: access_key api_details asperabrowser async basic_token browse central delete download events health info license mkdir mkfile mklink rename search service space ssync stream sync transfer upload watch_folder
2847
3094
  OPTIONS:
2848
3095
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2849
- --username=VALUE username to log in
2850
- --password=VALUE user's password
2851
- --validator=VALUE identifier of validator (optional for central)
3096
+ --username=VALUE Username to log in
3097
+ --password=VALUE User's password
3098
+ --validator=VALUE Identifier of validator (optional for central)
2852
3099
  --asperabrowserurl=VALUE URL for simple aspera web ui
2853
- --sync-name=VALUE sync name
2854
- --path=VALUE file or folder path for gen4 operation "file"
2855
- --token-type=ENUM type of token used for transfers: aspera, basic, hybrid
2856
- --default-ports=ENUM use standard FASP ports or get from node api (gen4): [no], yes
3100
+ --sync-name=VALUE Sync name
3101
+ --default-ports=ENUM Use standard FASP ports or get from node api (gen4): no, [yes]
2857
3102
 
2858
3103
 
2859
3104
  COMMAND: orchestrator
2860
3105
  SUBCOMMANDS: health info plugins processes workflow
2861
3106
  OPTIONS:
2862
3107
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2863
- --username=VALUE username to log in
2864
- --password=VALUE user's password
2865
- --params=VALUE parameters hash table, use @json:{"param":"value"}
2866
- --result=VALUE specify result value as: 'work step:parameter'
2867
- --synchronous=ENUM work step:parameter expected as result: [no], yes
2868
- --ret-style=ENUM how return type is requested in api: header, arg, ext
2869
- --auth-style=ENUM authentication type: arg_pass, head_basic, apikey
3108
+ --username=VALUE Username to log in
3109
+ --password=VALUE User's password
3110
+ --params=VALUE Start parameters (Hash)
3111
+ --result=VALUE Specify result value as: 'work step:parameter'
3112
+ --synchronous=ENUM Work step:parameter expected as result: [no], yes
3113
+ --ret-style=ENUM How return type is requested in api: header, [arg], ext
3114
+ --auth-style=ENUM Authentication type: arg_pass, [head_basic], apikey
2870
3115
 
2871
3116
 
2872
3117
  COMMAND: bss
2873
3118
  SUBCOMMANDS: subscription
2874
3119
  OPTIONS:
2875
3120
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2876
- --username=VALUE username to log in
2877
- --password=VALUE user's password
3121
+ --username=VALUE Username to log in
3122
+ --password=VALUE User's password
2878
3123
 
2879
3124
 
2880
3125
  COMMAND: alee
2881
3126
  SUBCOMMANDS: entitlement
2882
3127
  OPTIONS:
2883
3128
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2884
- --username=VALUE username to log in
2885
- --password=VALUE user's password
3129
+ --username=VALUE Username to log in
3130
+ --password=VALUE User's password
2886
3131
 
2887
3132
 
2888
3133
  COMMAND: ats
@@ -2901,17 +3146,18 @@ COMMAND: faspex5
2901
3146
  SUBCOMMANDS: admin bearer_token gateway health packages postprocessing shared_folders user version
2902
3147
  OPTIONS:
2903
3148
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2904
- --username=VALUE username to log in
2905
- --password=VALUE user's password
3149
+ --username=VALUE Username to log in
3150
+ --password=VALUE User's password
2906
3151
  --client-id=VALUE OAuth client identifier
2907
3152
  --client-secret=VALUE OAuth client secret
2908
3153
  --redirect-uri=VALUE OAuth redirect URI for web authentication
2909
- --auth=ENUM OAuth type of authentication: boot, link, web, jwt
2910
- --box=VALUE Package inbox, either shared inbox name or one of ["inbox", "inbox_history", "inbox_all", "inbox_all_history", "outbox", "outbox_history", "pending", "pending_history", "all"]
3154
+ --auth=ENUM OAuth type of authentication: boot, link, web, [jwt]
2911
3155
  --private-key=VALUE OAuth JWT RSA private key PEM value (prefix file path with @file:)
2912
- --passphrase=VALUE RSA private key passphrase
2913
- --shared-folder=VALUE Shared folder source for package files
2914
- --link=VALUE public link for specific operation
3156
+ --passphrase=VALUE OAuth JWT RSA private key passphrase
3157
+ --link=VALUE Public link authorization (specific operations)
3158
+ --box=VALUE Package inbox, either shared inbox name or one of ["inbox", "inbox_history", "inbox_all", "inbox_all_history", "outbox", "outbox_history", "pending", "pending_history", "all"] or ALL
3159
+ --shared-folder=VALUE Send package with files from shared folder
3160
+ --group-type=ENUM Shared inbox or workgroup: [shared_inboxes], workgroups
2915
3161
 
2916
3162
 
2917
3163
  COMMAND: cos
@@ -2930,50 +3176,50 @@ COMMAND: faspex
2930
3176
  SUBCOMMANDS: address_book dropbox health login_methods me package source v4
2931
3177
  OPTIONS:
2932
3178
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2933
- --username=VALUE username to log in
2934
- --password=VALUE user's password
2935
- --link=VALUE public link for specific operation
2936
- --delivery-info=VALUE package delivery information (extended value)
2937
- --source-name=VALUE create package from remote source (by name)
3179
+ --username=VALUE Username to log in
3180
+ --password=VALUE User's password
3181
+ --link=VALUE Public link for specific operation
3182
+ --delivery-info=VALUE Package delivery information (Hash)
3183
+ --source-name=VALUE Create package from remote source (by name)
2938
3184
  --storage=VALUE Faspex local storage definition
2939
- --recipient=VALUE use if recipient is a dropbox (with *)
2940
- --box=ENUM package box: inbox, archive, sent
3185
+ --recipient=VALUE Use if recipient is a dropbox (with *)
3186
+ --box=ENUM Package box: [inbox], archive, sent
2941
3187
 
2942
3188
 
2943
3189
  COMMAND: preview
2944
3190
  SUBCOMMANDS: check events scan test trevents
2945
3191
  OPTIONS:
2946
3192
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2947
- --username=VALUE username to log in
2948
- --password=VALUE user's password
2949
- --skip-format=ENUM skip this preview format (multiple possible): png, mp4
2950
- --folder-reset-cache=ENUM force detection of generated preview by refresh cache: [no], header, read
2951
- --skip-types=VALUE skip types in comma separated list
2952
- --previews-folder=VALUE preview folder in storage root
2953
- --temp-folder=VALUE path to temp folder
2954
- --skip-folders=VALUE list of folder to skip
2955
- --case=VALUE basename of output for for test
2956
- --scan-path=VALUE subpath in folder id to start scan in (default=/)
2957
- --scan-id=VALUE folder id in storage to start scan in, default is access key main folder id
2958
- --mimemagic=ENUM use Mime type detection of gem mimemagic: [no], yes
2959
- --overwrite=ENUM when to overwrite result file: always, never, [mtime]
2960
- --file-access=ENUM how to read and write files in repository: [local], remote
2961
- --max-size=VALUE maximum size (in bytes) of preview file
2962
- --thumb-vid-scale=VALUE png: video: size (ffmpeg scale argument)
2963
- --thumb-vid-fraction=VALUE png: video: time percent position of snapshot
2964
- --thumb-img-size=VALUE png: non-video: height (and width)
2965
- --thumb-text-font=VALUE png: plaintext: font to render text with imagemagick convert (identify -list font)
2966
- --video-conversion=ENUM mp4: method for preview generation: [reencode], blend, clips
2967
- --video-png-conv=ENUM mp4: method for thumbnail generation: [fixed], animated
2968
- --video-scale=VALUE mp4: all: video scale (ffmpeg)
2969
- --video-start-sec=VALUE mp4: all: start offset (seconds) of video preview
2970
- --reencode-ffmpeg=VALUE mp4: reencode: options to ffmpeg
2971
- --blend-keyframes=VALUE mp4: blend: # key frames
2972
- --blend-pauseframes=VALUE mp4: blend: # pause frames
2973
- --blend-transframes=VALUE mp4: blend: # transition blend frames
2974
- --blend-fps=VALUE mp4: blend: frame per second
2975
- --clips-count=VALUE mp4: clips: number of clips
2976
- --clips-length=VALUE mp4: clips: length in seconds of each clips
3193
+ --username=VALUE Username to log in
3194
+ --password=VALUE User's password
3195
+ --skip-format=ENUM Skip this preview format (multiple possible): png, mp4
3196
+ --folder-reset-cache=ENUM Force detection of generated preview by refresh cache: [no], header, read
3197
+ --skip-types=VALUE Skip types in comma separated list
3198
+ --previews-folder=VALUE Preview folder in storage root
3199
+ --temp-folder=VALUE Path to temp folder
3200
+ --skip-folders=VALUE List of folder to skip
3201
+ --case=VALUE Basename of output for for test
3202
+ --scan-path=VALUE Subpath in folder id to start scan in (default=/)
3203
+ --scan-id=VALUE Folder id in storage to start scan in, default is access key main folder id
3204
+ --mimemagic=ENUM Use Mime type detection of gem mimemagic: [no], yes
3205
+ --overwrite=ENUM When to overwrite result file: always, never, [mtime]
3206
+ --file-access=ENUM How to read and write files in repository: [local], remote
3207
+ --max-size=VALUE Maximum size (in bytes) of preview file
3208
+ --thumb-vid-scale=VALUE Png: video: size (ffmpeg scale argument)
3209
+ --thumb-vid-fraction=VALUE Png: video: time percent position of snapshot
3210
+ --thumb-img-size=VALUE Png: non-video: height (and width)
3211
+ --thumb-text-font=VALUE Png: plaintext: font to render text with imagemagick convert (identify -list font)
3212
+ --video-conversion=ENUM Mp4: method for preview generation: [reencode], blend, clips
3213
+ --video-png-conv=ENUM Mp4: method for thumbnail generation: [fixed], animated
3214
+ --video-scale=VALUE Mp4: all: video scale (ffmpeg)
3215
+ --video-start-sec=VALUE Mp4: all: start offset (seconds) of video preview
3216
+ --reencode-ffmpeg=VALUE Mp4: reencode: options to ffmpeg
3217
+ --blend-keyframes=VALUE Mp4: blend: # key frames
3218
+ --blend-pauseframes=VALUE Mp4: blend: # pause frames
3219
+ --blend-transframes=VALUE Mp4: blend: # transition blend frames
3220
+ --blend-fps=VALUE Mp4: blend: frame per second
3221
+ --clips-count=VALUE Mp4: clips: number of clips
3222
+ --clips-length=VALUE Mp4: clips: length in seconds of each clips
2977
3223
 
2978
3224
 
2979
3225
  COMMAND: sync
@@ -2987,10 +3233,10 @@ COMMAND: aoc
2987
3233
  SUBCOMMANDS: admin automation bearer_token files gateway organization packages reminder servers tier_restrictions user
2988
3234
  OPTIONS:
2989
3235
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2990
- --username=VALUE username to log in
2991
- --password=VALUE user's password
2992
- --auth=ENUM OAuth type of authentication: web, jwt
2993
- --operation=ENUM client operation for transfers: push, pull
3236
+ --username=VALUE Username to log in
3237
+ --password=VALUE User's password
3238
+ --auth=ENUM OAuth type of authentication: web, [jwt]
3239
+ --operation=ENUM Client operation for transfers: [push], pull
2994
3240
  --client-id=VALUE OAuth API client identifier
2995
3241
  --client-secret=VALUE OAuth API client secret
2996
3242
  --redirect-uri=VALUE OAuth API client redirect URI
@@ -3002,26 +3248,25 @@ OPTIONS:
3002
3248
  --link=VALUE Public link to shared resource
3003
3249
  --new-user-option=VALUE New user creation option for unknown package recipients
3004
3250
  --from-folder=VALUE Source folder for Folder-to-Folder transfer
3005
- --validate-metadata=ENUM Validate shared inbox metadata: [no], yes
3251
+ --validate-metadata=ENUM Validate shared inbox metadata: no, [yes]
3006
3252
 
3007
3253
  COMMAND: node
3008
3254
  SUBCOMMANDS: access_key api_details asperabrowser async basic_token browse central delete download events health info license mkdir mkfile mklink rename search service space ssync stream sync transfer upload watch_folder
3009
3255
  OPTIONS:
3010
- --validator=VALUE identifier of validator (optional for central)
3256
+ --validator=VALUE Identifier of validator (optional for central)
3011
3257
  --asperabrowserurl=VALUE URL for simple aspera web ui
3012
- --sync-name=VALUE sync name
3013
- --path=VALUE file or folder path for gen4 operation "file"
3014
- --token-type=ENUM type of token used for transfers: aspera, basic, hybrid
3015
- --default-ports=ENUM use standard FASP ports or get from node api (gen4): [no], yes
3258
+ --sync-name=VALUE Sync name
3259
+ --default-ports=ENUM Use standard FASP ports or get from node api (gen4): no, [yes]
3016
3260
 
3017
3261
 
3018
3262
  COMMAND: server
3019
3263
  SUBCOMMANDS: browse cp delete df download du health info ls md5sum mkdir mv rename rm sync upload
3020
3264
  OPTIONS:
3021
3265
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
3022
- --username=VALUE username to log in
3023
- --password=VALUE user's password
3266
+ --username=VALUE Username to log in
3267
+ --password=VALUE User's password
3024
3268
  --ssh-keys=VALUE SSH key path list (Array or single)
3269
+ --passphrase=VALUE SSH private key passphrase
3025
3270
  --ssh-options=VALUE SSH options (Hash)
3026
3271
 
3027
3272
 
@@ -3029,10 +3274,10 @@ COMMAND: console
3029
3274
  SUBCOMMANDS: health transfer
3030
3275
  OPTIONS:
3031
3276
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
3032
- --username=VALUE username to log in
3033
- --password=VALUE user's password
3034
- --filter-from=DATE only after date
3035
- --filter-to=DATE only before date
3277
+ --username=VALUE Username to log in
3278
+ --password=VALUE User's password
3279
+ --filter-from=DATE Only after date
3280
+ --filter-to=DATE Only before date
3036
3281
 
3037
3282
 
3038
3283
  ```
@@ -3080,10 +3325,10 @@ For this, specify the option: `--use-generic-client=no`.
3080
3325
 
3081
3326
  This will guide you through the steps to create.
3082
3327
 
3083
- If the wizard does not detect the application but you know the application, you can force it using option `value`:
3328
+ If the wizard does not detect the application but you know the application, you can force it using option `query`:
3084
3329
 
3085
3330
  ```bash
3086
- ascli config wizard --value=aoc
3331
+ ascli config wizard --query=aoc
3087
3332
  ```
3088
3333
 
3089
3334
  ### <a id="aocmanual"></a>Configuration: using manual setup
@@ -3351,7 +3596,7 @@ To execute an action on a specific resource, select it using one of those method
3351
3596
 
3352
3597
  - *recommended*: give id directly on command line *after the action*: `aoc admin res node show 123`
3353
3598
  - give name on command line *after the action*: `aoc admin res node show name abc`
3354
- - provide option `id` : `aoc admin res node show --id=123`
3599
+ - provide option `id` : `aoc admin res node show 123`
3355
3600
  - provide option `name` : `aoc admin res node show --name=abc`
3356
3601
 
3357
3602
  #### <a id="res_create"></a>Creating a resource
@@ -3406,7 +3651,7 @@ The secret is provided using the `secret` option.
3406
3651
  For example in a command like:
3407
3652
 
3408
3653
  ```bash
3409
- ascli aoc admin res node --id=123 --secret="my_secret_here" v3 info
3654
+ ascli aoc admin res node 123 --secret="my_secret_here" v3 info
3410
3655
  ```
3411
3656
 
3412
3657
  It is also possible to store secrets in the [secret vault](#vault) and then automatically find the related secret using the [config finder](#config_finder).
@@ -3464,6 +3709,36 @@ The option `default_ports` ([yes]/no) allows ascli to retrieve the server ports
3464
3709
 
3465
3710
  Refer to section "Examples" of [ATS](#ats) and substitute command `ats` with `aoc admin ats`.
3466
3711
 
3712
+ #### Files with type `link`
3713
+
3714
+ Aspera on Cloud Shared folders are implemented through a special type of file: `link`.
3715
+ A `link` is the equivalent of a symbolic link on a file system: it points to another folder (not file).
3716
+
3717
+ Listing a link (in terminal position of path) will information on the link itself, not the content of the folder it points to.
3718
+ To list the target folder content, add a `/` a the end of the path.
3719
+
3720
+ Example:
3721
+
3722
+ ```console
3723
+ $ ascli aoc files br the_link
3724
+ Current Workspace: Default (default)
3725
+ +------------+------+----------------+------+----------------------+--------------+
3726
+ | name | type | recursive_size | size | modified_time | access_level |
3727
+ +------------+------+----------------+------+----------------------+--------------+
3728
+ | the_link | link | | | 2021-04-28T09:17:14Z | edit |
3729
+ +------------+------+----------------+------+----------------------+--------------+
3730
+ ```
3731
+
3732
+ ```console
3733
+ $ ascli aoc files br the_link/
3734
+ Current Workspace: Default (default)
3735
+ +-------------+------+----------------+------+----------------------+--------------+
3736
+ | name | type | recursive_size | size | modified_time | access_level |
3737
+ +-------------+------+----------------+------+----------------------+--------------+
3738
+ | file_inside | file | | | 2021-04-26T09:00:00Z | edit |
3739
+ +-------------+------+----------------+------+----------------------+--------------+
3740
+ ```
3741
+
3467
3742
  #### Example: Bulk creation of users
3468
3743
 
3469
3744
  ```bash
@@ -3507,7 +3782,7 @@ echo $thelist
3507
3782
  ```
3508
3783
 
3509
3784
  ```bash
3510
- ascli aoc admin res user --bulk=yes --id=@json:"$thelist" delete
3785
+ ascli aoc admin res user delete @json:"$thelist" --bulk=yes
3511
3786
  ```
3512
3787
 
3513
3788
  ```output
@@ -3548,13 +3823,13 @@ ascli aoc user workspaces list
3548
3823
  Creation of a sub-access key is like creation of access key with the following difference: authentication to node API is made with accesskey (master access key) and only the path parameter is provided: it is relative to the storage root of the master key. (id and secret are optional)
3549
3824
 
3550
3825
  ```bash
3551
- ascli aoc admin resource node --name=_node_name_ --secret=_secret_ v4 access_key create --value=@json:'{"storage":{"path":"/folder1"}}'
3826
+ ascli aoc admin resource node --name=_node_name_ --secret=_secret_ v4 access_key create @json:'{"storage":{"path":"/folder1"}}'
3552
3827
  ```
3553
3828
 
3554
3829
  #### Example: Display transfer events (ops/transfer)
3555
3830
 
3556
3831
  ```bash
3557
- ascli aoc admin res node --secret=_secret_ v3 transfer list --value=@json:'[["q","*"],["count",5]]'
3832
+ ascli aoc admin res node --secret=_secret_ v3 transfer list --query=@json:'[["q","*"],["count",5]]'
3558
3833
  ```
3559
3834
 
3560
3835
  Examples of query (TODO: cleanup):
@@ -3752,7 +4027,7 @@ jfqslfdjlfdjfhdjklqfhdkl
3752
4027
  #### Example: delete all registration keys
3753
4028
 
3754
4029
  ```bash
3755
- ascli aoc admin res client list --fields=id --format=csv|ascli aoc admin res client delete --bulk=yes --id=@lines:@stdin:
4030
+ ascli aoc admin res client list --fields=id --format=csv|ascli aoc admin res client delete @lines:@stdin: --bulk=yes
3756
4031
  ```
3757
4032
 
3758
4033
  ```output
@@ -3837,12 +4112,13 @@ The webmail-like application.
3837
4112
  General syntax:
3838
4113
 
3839
4114
  ```bash
3840
- ascli aoc packages send --value=[package extended value] [other parameters such as file list and transfer parameters]
4115
+ ascli aoc packages send [package extended value] [other parameters such as file list and transfer parameters]
3841
4116
  ```
3842
4117
 
3843
4118
  Notes:
3844
4119
 
3845
- - The `value` option can contain any supported package creation parameter. Refer to the AoC package creation API, or display an existing package in JSON to list attributes.
4120
+ - Package creation parameter are sent as positional mandatory parameter.
4121
+ Refer to the AoC package creation API, or display an existing package in JSON to list attributes.
3846
4122
  - List allowed shared inbox destinations with: `ascli aoc packages shared_inboxes list`
3847
4123
  - Use fields: `recipients` and/or `bcc_recipients` to provide the list of recipients: user or shared inbox.
3848
4124
  - Provide either ids as expected by API: `"recipients":[{"type":"dropbox","id":"1234"}]`
@@ -3854,19 +4130,19 @@ Notes:
3854
4130
  #### Example: Send a package with one file to two users, using their email
3855
4131
 
3856
4132
  ```bash
3857
- ascli aoc packages send --value=@json:'{"name":"my title","note":"my note","recipients":["laurent.martin.aspera@fr.ibm.com","other@example.com"]}' my_file.dat
4133
+ ascli aoc packages send @json:'{"name":"my title","note":"my note","recipients":["laurent.martin.aspera@fr.ibm.com","other@example.com"]}' my_file.dat
3858
4134
  ```
3859
4135
 
3860
4136
  #### Example: Send a package to a shared inbox with metadata
3861
4137
 
3862
4138
  ```bash
3863
- ascli aoc packages send --workspace=eudemo --value=@json:'{"name":"my pack title","recipients":["Shared Inbox With Meta"],"metadata":{"Project Id":"123","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' ~/Documents/Samples/200KB.1
4139
+ ascli aoc packages send --workspace=eudemo @json:'{"name":"my pack title","recipients":["Shared Inbox With Meta"],"metadata":{"Project Id":"123","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' ~/Documents/Samples/200KB.1
3864
4140
  ```
3865
4141
 
3866
4142
  It is also possible to use identifiers and API parameters:
3867
4143
 
3868
4144
  ```bash
3869
- ascli aoc packages send --workspace=eudemo --value=@json:'{"name":"my pack title","recipients":[{"type":"dropbox","id":"12345"}],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' ~/Documents/Samples/200KB.1
4145
+ ascli aoc packages send --workspace=eudemo @json:'{"name":"my pack title","recipients":[{"type":"dropbox","id":"12345"}],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' ~/Documents/Samples/200KB.1
3870
4146
  ```
3871
4147
 
3872
4148
  #### Example: List packages in a given shared inbox
@@ -3925,7 +4201,7 @@ ascli aoc files browse /src_folder
3925
4201
  Let's send a package with the file `10M.dat` from subfolder /src_folder in a package:
3926
4202
 
3927
4203
  ```bash
3928
- ascli aoc files node_info /src_folder --format=json --display=data | ascli aoc packages send --value=@json:'{"name":"test","recipients":["laurent.martin.aspera@fr.ibm.com"]}' 10M.dat --transfer=node --transfer-info=@json:@stdin:
4204
+ ascli aoc files node_info /src_folder --format=json --display=data | ascli aoc packages send @json:'{"name":"test","recipients":["laurent.martin.aspera@fr.ibm.com"]}' 10M.dat --transfer=node --transfer-info=@json:@stdin:
3929
4205
  ```
3930
4206
 
3931
4207
  #### <a id="aoccargo"></a>Receive new packages only (Cargo)
@@ -3933,10 +4209,10 @@ ascli aoc files node_info /src_folder --format=json --display=data | ascli aoc p
3933
4209
  It is possible to automatically download new packages, like using Aspera Cargo:
3934
4210
 
3935
4211
  ```bash
3936
- ascli aoc packages recv --id=ALL --once-only=yes --lock-port=12345
4212
+ ascli aoc packages recv ALL --once-only=yes --lock-port=12345
3937
4213
  ```
3938
4214
 
3939
- - `--id=ALL` (case sensitive) will download all packages
4215
+ - `ALL` (case sensitive) will download all packages
3940
4216
  - `--once-only=yes` keeps memory of any downloaded package in persistency files located in the configuration folder
3941
4217
  - `--lock-port=12345` ensures that only one instance is started at the same time, to avoid running two downloads in parallel
3942
4218
 
@@ -3965,46 +4241,28 @@ ascli aoc files download <single file path>
3965
4241
 
3966
4242
  #### Shared folders
3967
4243
 
3968
- Shared folder by users are managed through **permissions**.
4244
+ Shared folder created by users are managed through **permissions**.
3969
4245
  For creation, parameters are the same as for node api [permissions](https://developer.ibm.com/apis/catalog/aspera--aspera-node-api/api/API--aspera--node-api#post960739960).
3970
- `ascli` expects the same payload for creation, but it will automatically populated required tags if needed.
3971
- Also, the pseudo key `with` is added: it will lookup the name in the contacts and fill the proper type and id.
4246
+ `ascli` expects the same payload for creation, but it will automatically populate required tags if needed.
4247
+ Also, the pseudo key `with` is available: it will lookup the name in the contacts and fill the proper type and id.
3972
4248
  The pseudo parameter `link_name` allows changing default "shared as" name.
3973
4249
 
3974
4250
  - List permissions on a shared folder as user
3975
4251
 
3976
4252
  ```bash
3977
- ascli aoc files file --path=/shared_folder_test1 perm list
4253
+ ascli aoc files perm /shared_folder_test1 list
3978
4254
  ```
3979
4255
 
3980
4256
  - Share a personal folder with other users
3981
4257
 
3982
4258
  ```bash
3983
- ascli aoc files file --path=/shared_folder_test1 perm create @json:'{"with":"laurent"}'
4259
+ ascli aoc files perm /shared_folder_test1 create @json:'{"with":"laurent"}'
3984
4260
  ```
3985
4261
 
3986
4262
  - Revoke shared access
3987
4263
 
3988
4264
  ```bash
3989
- ascli aoc files file --path=/shared_folder_test1 perm delete 6161
3990
- ```
3991
-
3992
- - List shared folders in node
3993
-
3994
- ```bash
3995
- ascli aoc admin res node --id=8669 shared_folders
3996
- ```
3997
-
3998
- - List shared folders in workspace
3999
-
4000
- ```bash
4001
- ascli aoc admin res workspace --id=10818 shared_folders
4002
- ```
4003
-
4004
- - List members of shared folder
4005
-
4006
- ```bash
4007
- ascli aoc admin res node --id=8669 v4 perm 82 show
4265
+ ascli aoc files perm /shared_folder_test1 delete 6161
4008
4266
  ```
4009
4267
 
4010
4268
  #### Cross Organization transfers
@@ -4039,42 +4297,52 @@ Explanation:
4039
4297
 
4040
4298
  #### Find Files
4041
4299
 
4042
- The command `aoc files find [--value=expression]` will recursively scan storage to find files matching the expression criteria. It works also on node resource using the v4 command. (see examples)
4300
+ The command `aoc files find [--query=expression]` will recursively scan storage to find files matching the expression criteria. It works also on node resource using the v4 command. (see examples)
4043
4301
 
4044
4302
  The expression can be of 3 formats:
4045
4303
 
4046
4304
  - empty (default) : all files, equivalent to value: `exec:true`
4047
- - not starting with `exec:` : the expression is a regular expression, using [Ruby Regex](https://ruby-doc.org/core/Regexp.html) syntax. equivalent to value: `exec:f['name'].match(/expression/)`
4305
+ - not starting with `exec:` : the expression is a regular expression, using [Ruby Regex](https://ruby-doc.org/core/Regexp.html) syntax, equivalent to value: `exec:f['name'].match(/expression/)`
4048
4306
 
4049
- For instance, to find files with a special extension, use `--value='\.myext$'`
4307
+ For instance, to find files with a special extension, use `--query='\.myext$'`
4050
4308
 
4051
- - starting with `exec:` : the Ruby code after the prefix is executed for each entry found. The entry variable name is `f`. The file is displayed if the result of the expression is true;
4309
+ - starting with `exec:` : the Ruby code after the prefix is executed for each entry found. The entry variable name is `f`. The file is displayed if the result of the expression is true.
4052
4310
 
4053
- Examples of expressions: (using like this: `--value=exec:'<expression>'`)
4311
+ Examples of expressions: (using like this: `--query=exec:'<expression>'`)
4054
4312
 
4055
4313
  - Find files more recent than 100 days
4056
4314
 
4057
- ```bash
4058
- f["type"].eql?("file") and (DateTime.now-DateTime.parse(f["modified_time"]))<100
4059
- ```
4315
+ ```ruby
4316
+ f["type"].eql?("file") and (DateTime.now-DateTime.parse(f["modified_time"]))<100
4317
+ ```
4060
4318
 
4061
4319
  - Find files older than 1 year on a given node and store in file list
4062
4320
 
4063
- ```bash
4064
- ascli aoc admin res node --name='my node name' --secret='my_secret_here' v4 find / --fields=path --value='exec:f["type"].eql?("file") and (DateTime.now-DateTime.parse(f["modified_time"]))<100' --format=csv > my_file_list.txt
4065
- ```
4321
+ ```ruby
4322
+ f["type"].eql?("file") and (DateTime.now-DateTime.parse(f["modified_time"]))<100
4323
+ ```
4324
+
4325
+ ```bash
4326
+ ascli aoc admin res node --name='my node name' --secret='my_secret_here' v4 find / --fields=path --query='exec:<above expression here>' --format=csv > my_file_list.txt
4327
+ ```
4328
+
4329
+ - Find files larger than 1MB
4330
+
4331
+ ```ruby
4332
+ f["type"].eql?("file") and f["size"].to_i>1000000
4333
+ ```
4066
4334
 
4067
4335
  - Delete the files, one by one
4068
4336
 
4069
- ```bash
4070
- cat my_file_list.txt|while read path;do echo ascli aoc admin res node --name='my node name' --secret='my_secret_here' v4 delete "$path" ;done
4071
- ```
4337
+ ```bash
4338
+ cat my_file_list.txt|while read path;do echo ascli aoc admin res node --name='my node name' --secret='my_secret_here' v4 delete "$path" ;done
4339
+ ```
4072
4340
 
4073
4341
  - Delete the files in bulk
4074
4342
 
4075
- ```bash
4076
- cat my_file_list.txt | ascli aoc admin res node --name='my node name' --secret='my_secret_here' v3 delete @lines:@stdin:
4077
- ```
4343
+ ```bash
4344
+ cat my_file_list.txt | ascli aoc admin res node --name='my node name' --secret='my_secret_here' v3 delete @lines:@stdin:
4345
+ ```
4078
4346
 
4079
4347
  ### AoC sample commands
4080
4348
 
@@ -4113,18 +4381,18 @@ aoc admin res workspace_membership list
4113
4381
  aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret do browse /
4114
4382
  aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret do delete /folder1
4115
4383
  aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret do mkdir /folder1
4116
- aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret do v3 access_key create --value=@json:'{"id":"testsub1","storage":{"path":"/folder1"}}'
4384
+ aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret do v3 access_key create @json:'{"id":"testsub1","storage":{"path":"/folder1"}}'
4117
4385
  aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret do v3 events
4118
4386
  aoc admin resource node do name my_aoc_ak_name --secret=my_aoc_ak_secret v3 access_key delete testsub1
4119
4387
  aoc admin resource workspace list
4120
4388
  aoc admin resource workspace_membership list --fields=ALL --query=@json:'{"page":1,"per_page":50,"embed":"member","inherited":false,"workspace_id":11363,"sort":"name"}'
4121
4389
  aoc admin subscription
4122
- aoc automation workflow action my_wf_id create --value=@json:'{"name":"toto"}'
4123
- aoc automation workflow create --value=@json:'{"name":"test_workflow"}'
4390
+ aoc automation workflow action my_wf_id create @json:'{"name":"toto"}' \
4391
+ aoc automation workflow create @json:'{"name":"test_workflow"}'
4124
4392
  aoc automation workflow delete my_wf_id
4125
4393
  aoc automation workflow list
4394
+ aoc automation workflow list --query=@json:'{"show_org_workflows":"true"}' --scope=admin:all
4126
4395
  aoc automation workflow list --select=@json:'{"name":"test_workflow"}' --fields=id --format=csv --display=data
4127
- aoc automation workflow list --value=@json:'{"show_org_workflows":"true"}' --scope=admin:all
4128
4396
  aoc bearer_token --display=data --scope=user:all
4129
4397
  aoc faspex
4130
4398
  aoc files bearer /
@@ -4133,27 +4401,28 @@ aoc files browse /
4133
4401
  aoc files browse / --link=my_aoc_publink_folder
4134
4402
  aoc files delete /testsrc
4135
4403
  aoc files download --transfer=connect /200KB.1
4136
- aoc files file modify --path=my_aoc_test_folder
4137
- aoc files file permission --path=my_aoc_test_folder list
4138
- aoc files file show --path=/200KB.1
4139
- aoc files file show my_file_id
4140
- aoc files find / --value='\.partial$'
4404
+ aoc files find / --query='\.partial$'
4141
4405
  aoc files http_node_download --to-folder=. /200KB.1
4142
4406
  aoc files mkdir /testsrc
4407
+ aoc files modify my_aoc_test_folder
4408
+ aoc files permission my_aoc_test_folder list
4143
4409
  aoc files rename /somefolder testdst
4144
- aoc files short_link create --to-folder=/testdst --value=private
4145
- aoc files short_link create --to-folder=/testdst --value=public
4146
- aoc files short_link list --value=@json:'{"purpose":"shared_folder_auth_link"}'
4410
+ aoc files short_link create /testdst private
4411
+ aoc files short_link create testdst public
4412
+ aoc files short_link list /testdst private
4413
+ aoc files show %id:my_file_id
4414
+ aoc files show /200KB.1
4147
4415
  aoc files sync ad st --sync-info=@json:'{"name":"syncv2","reset":true,"direction":"pull","local":{"path":"my_local_sync_dir"},"remote":{"path":"/testdst"}}'
4148
4416
  aoc files sync ad st --sync-info=@json:'{"sessions":[{"name":"syncv1","direction":"pull","local_dir":"my_local_sync_dir","remote_dir":"/testdst","reset":true}]}'
4149
4417
  aoc files sync start --sync-info=@json:'{"name":"syncv2","reset":true,"direction":"pull","local":{"path":"my_local_sync_dir"},"remote":{"path":"/testdst"}}'
4150
4418
  aoc files sync start --sync-info=@json:'{"sessions":[{"name":"syncv1","direction":"pull","local_dir":"my_local_sync_dir","remote_dir":"/testdst","reset":true}]}'
4419
+ aoc files thumbnail my_aoc_media_file
4151
4420
  aoc files transfer --from-folder=/testsrc --to-folder=/testdst testfile.bin
4152
4421
  aoc files upload --to-folder=/ testfile.bin --link=my_aoc_publink_folder
4153
4422
  aoc files upload --to-folder=/testsrc testfile.bin
4154
4423
  aoc files upload Test.pdf --transfer=node --transfer-info=@json:@stdin:
4155
4424
  aoc files v3 info
4156
- aoc gateway --value=https://localhost:12345/aspera/faspex & jobs -p
4425
+ aoc gateway https://localhost:12345/aspera/faspex
4157
4426
  aoc org --link=my_aoc_publink_recv_from_aocuser
4158
4427
  aoc organization
4159
4428
  aoc packages browse "my_package_id" /contents
@@ -4162,13 +4431,13 @@ aoc packages list --query=@json:'{"dropbox_name":"my_aoc_shbx_name","sort":"-rec
4162
4431
  aoc packages recv "my_package_id" --to-folder=.
4163
4432
  aoc packages recv ALL --to-folder=. --once-only=yes --lock-port=12345
4164
4433
  aoc packages recv ALL --to-folder=. --once-only=yes --lock-port=12345 --query=@json:'{"dropbox_name":"my_aoc_shbx_name","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false}' --ts=@json:'{"resume_policy":"sparse_csum","target_rate_kbps":50000}'
4165
- aoc packages send --value=@json:'{"name":"Important files delivery","recipients":["my_email_external_user"]}' --new-user-option=@json:'{"package_contact":true}' testfile.bin
4166
- aoc packages send --value=@json:'{"name":"Important files delivery","recipients":["my_email_internal_user"],"note":"my note"}' testfile.bin
4167
- aoc packages send --value=@json:'{"name":"Important files delivery"}' testfile.bin --link=my_aoc_publink_send_aoc_user --password=my_aoc_publink_send_use_pass
4168
- aoc packages send --value=@json:'{"name":"Important files delivery"}' testfile.bin --link=my_aoc_publink_send_shd_inbox
4169
- aoc packages send --workspace="my_aoc_shbx_ws" --value=@json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' testfile.bin
4170
- aoc packages send --workspace="my_aoc_shbx_ws" --value=@json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"],"metadata":{"Project Id":"456","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' testfile.bin
4171
- aoc packages send --workspace="my_aoc_shbx_ws" --value=@json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"]}' testfile.bin
4434
+ aoc packages send --workspace="my_aoc_shbx_ws" @json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' testfile.bin
4435
+ aoc packages send --workspace="my_aoc_shbx_ws" @json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"],"metadata":{"Project Id":"456","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' testfile.bin
4436
+ aoc packages send --workspace="my_aoc_shbx_ws" @json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"]}' testfile.bin
4437
+ aoc packages send @json:'{"name":"Important files delivery","recipients":["my_email_external_user"]}' --new-user-option=@json:'{"package_contact":true}' testfile.bin
4438
+ aoc packages send @json:'{"name":"Important files delivery","recipients":["my_email_internal_user"],"note":"my note"}' testfile.bin
4439
+ aoc packages send @json:'{"name":"Important files delivery"}' testfile.bin --link=my_aoc_publink_send_aoc_user --password=my_aoc_publink_send_use_pass
4440
+ aoc packages send @json:'{"name":"Important files delivery"}' testfile.bin --link=my_aoc_publink_send_shd_inbox
4172
4441
  aoc packages shared_inboxes list
4173
4442
  aoc remind --username=my_aoc_user_email
4174
4443
  aoc servers
@@ -4295,7 +4564,7 @@ ascli ats access_key create --cloud=azure --region=eastus --params=@json:'{"id":
4295
4564
  delete all my access keys:
4296
4565
 
4297
4566
  ```bash
4298
- for k in $(ascli ats access_key list --field=id --format=csv);do ascli ats access_key id $k delete;done
4567
+ ascli ats access_key list --field=id --format=csv | ascli ats access_key delete @lines:@stdin: --bulk=yes
4299
4568
  ```
4300
4569
 
4301
4570
  The parameters provided to ATS for access key creation are the ones of [ATS API](https://developer.ibm.com/apis/catalog?search=%22aspera%20ats%22) for the `POST /access_keys` endpoint.
@@ -4384,7 +4653,7 @@ ascli server --url=ssh://_server_address_:33001 ... --ts=@json:'{"token":"Basic
4384
4653
 
4385
4654
  > **Note:** If you need to use the Aspera public keys, then specify an empty token: `--ts=@json:'{"token":""}'` : Aspera public SSH keys will be used, but the protocol will ignore the empty token.
4386
4655
 
4387
- The value of the `ssh_keys` option can be a single value or an array.
4656
+ The value of the `ssh_keys` option can be a single value or an `Array`.
4388
4657
  Each value is a **path** to a private key and is expanded (`~` is replaced with the user's home folder).
4389
4658
 
4390
4659
  Examples:
@@ -4433,6 +4702,9 @@ ascli server --ssh-options=@json:'{"use_agent": false}' ...
4433
4702
 
4434
4703
  > **Note:** This can also be set using a preset.
4435
4704
 
4705
+ If one of the SSH private keys is passphrase-protected, then option `passphrase` can be used.
4706
+ It is equivalent to setting both options `ssh_options.passphrase` and `ts.ssh_private_key_passphrase`.
4707
+
4436
4708
  ### Other session channels for `server`
4437
4709
 
4438
4710
  URL schemes `local` and `https` are also supported (mainly for testing purpose).
@@ -4455,6 +4727,12 @@ ascli server download /aspera-test-dir-large/200MB
4455
4727
 
4456
4728
  `initdemo` creates a [option preset](#lprt) `demoserver` and set it as default for plugin `server`.
4457
4729
 
4730
+ If an SSH private key is used for authentication with a passphrase, the passphrase needs to be provided to both options: `ssh_options`, for browsing, and `ts` for transfers:
4731
+
4732
+ ```bash
4733
+ ascli server --url=ssh://_server_address_here_:33001 --username=_user_here_ --ssh_keys=_private_key_path_here_ --passphrase=_passphrase_here_
4734
+ ```
4735
+
4458
4736
  ## <a id="node"></a>Plugin: `node`: IBM Aspera High Speed Transfer Server Node
4459
4737
 
4460
4738
  This plugin gives access to capabilities provided by HSTS node API.
@@ -4469,24 +4747,6 @@ It is possible to:
4469
4747
  - transfer (upload / download)
4470
4748
  - ...
4471
4749
 
4472
- For transfers, it is possible to control how transfer is authorized using option: `token_type`:
4473
-
4474
- - `aspera` : api `<upload|download>_setup` is called to create the transfer spec including the Aspera token, used as is.
4475
- - `hybrid` : same as `aspera`, but token is replaced with basic token like `basic`
4476
- - `basic` : transfer spec is created like this:
4477
-
4478
- ```json
4479
- {
4480
- "remote_host": "<address of node url>",
4481
- "remote_user": "xfer",
4482
- "ssh_port": 33001,
4483
- "token": "Basic <base 64 encoded user/pass>",
4484
- "direction": "[send|receive]"
4485
- }
4486
- ```
4487
-
4488
- > **Note:** the port is assumed to be the default Aspera SSH port `33001` and transfer user is assumed to be `xfer`.
4489
-
4490
4750
  ### Central
4491
4751
 
4492
4752
  The central subcommand uses the "reliable query" API (session and file).
@@ -4571,43 +4831,48 @@ When node api is used with an **Access key**, extra information can be retrieved
4571
4831
  > **Note:** Display of preview on terminal requires installation of extra gem: `rmagick`
4572
4832
 
4573
4833
  ```bash
4574
- gem install rmagick
4834
+ dnf install -y ImageMagick-devel
4835
+ gem install rmagick rainbow
4575
4836
  ```
4576
4837
 
4577
4838
  For example it is possible to display the preview of a file, if it exists, using:
4578
4839
 
4579
4840
  ```bash
4580
- ascli aoc files file thumbnail --path=/preview_samples/Aspera.mpg
4841
+ ascli aoc files thumbnail /preview_samples/Aspera.mpg
4581
4842
  ```
4582
4843
 
4583
4844
  Using direct node access and an access key , one can do:
4584
4845
 
4585
4846
  ```bash
4586
- ascli node access_key do self file thumbnail --path=/preview_samples/Aspera.mpg
4847
+ ascli node access_key do self thumbnail /preview_samples/Aspera.mpg
4587
4848
  ```
4588
4849
 
4850
+ > **Note:** To specify the file by its file id, use the selector syntax: `%id:_file_id_here_`
4851
+ >
4852
+ > **Note:** To force textual display of the preview on iTerm, prefix command with: `env -u TERM_PROGRAM -u LC_TERMINAL`
4853
+
4589
4854
  ### Create access key
4590
4855
 
4591
4856
  ```bash
4592
- ascli node access_key create --value=@json:'{"id":"myaccesskey","secret":"my_secret_here","storage":{"type":"local","path":"/data/mydir"}}'
4857
+ ascli node access_key create @json:'{"id":"myaccesskey","secret":"my_secret_here","storage":{"type":"local","path":"/data/mydir"}}'
4593
4858
  ```
4594
4859
 
4595
4860
  ### Node sample commands
4596
4861
 
4597
4862
  ```bash
4598
- node access_key create --value=@json:'{"id":"testingAK1","storage":{"type":"local","path":"/"}}'
4863
+ node access_key create @json:'{"id":"testingAK1","storage":{"type":"local","path":"/"}}'
4599
4864
  node access_key delete testingAK1
4600
4865
  node access_key do my_aoc_ak_name browse /
4601
4866
  node access_key do my_aoc_ak_name delete /folder2
4602
4867
  node access_key do my_aoc_ak_name delete testfile1
4603
4868
  node access_key do my_aoc_ak_name download testfile1 --to-folder=.
4604
- node access_key do my_aoc_ak_name file show --path=/testfile1
4605
- node access_key do my_aoc_ak_name file show 1
4606
- node access_key do my_aoc_ak_name file thumbnail --path=/testfile1
4607
4869
  node access_key do my_aoc_ak_name find /
4608
4870
  node access_key do my_aoc_ak_name mkdir /folder1
4609
4871
  node access_key do my_aoc_ak_name node_info /
4610
4872
  node access_key do my_aoc_ak_name rename /folder1 folder2
4873
+ node access_key do my_aoc_ak_name show %id:1
4874
+ node access_key do my_aoc_ak_name show /testfile1
4875
+ node access_key do my_aoc_ak_name thumbnail /testfile1
4611
4876
  node access_key do my_aoc_ak_name upload 'faux:///testfile1?1k' --default_ports=no
4612
4877
  node access_key list
4613
4878
  node api_details
@@ -4624,7 +4889,6 @@ node delete @list:,folder_1/todelete,folder_1/tdlink,folder_1/delfile
4624
4889
  node delete folder_1/10MB.2
4625
4890
  node delete testfile.bin
4626
4891
  node download testfile.bin --to-folder=.
4627
- node download testfile.bin --to-folder=. --token-type=hybrid
4628
4892
  node health
4629
4893
  node info --fpac='function FindProxyForURL(url,host){return "DIRECT"}'
4630
4894
  node license
@@ -4632,14 +4896,14 @@ node mkdir folder_1/todelete
4632
4896
  node mkfile folder_1/delfile1 "hello world"
4633
4897
  node mklink folder_1/todelete folder_1/tdlink
4634
4898
  node rename folder_1 delfile1 delfile
4635
- node search / --value=@json:'{"sort":"mtime"}'
4899
+ node search / --query=@json:'{"sort":"mtime"}'
4636
4900
  node service create @json:'{"id":"service1","type":"WATCHD","run_as":{"user":"user1"}}'
4637
4901
  node service delete service1
4638
4902
  node service list
4639
4903
  node space /
4640
4904
  node ssync bandwidth my_syncid
4641
4905
  node ssync counters my_syncid
4642
- node ssync create --value=@json:'{"configuration":{"name":"sync1","local":{"path":"my_local_path"},"remote":{"host":"my_host","port":my_port,"user":"my_username","pass":"my_password","path":"my_remote_path"}}}'
4906
+ node ssync create @json:'{"configuration":{"name":"sync1","local":{"path":"my_local_path"},"remote":{"host":"my_host","port":my_port,"user":"my_username","pass":"my_password","path":"my_remote_path"}}}'
4643
4907
  node ssync delete my_syncid
4644
4908
  node ssync files my_syncid
4645
4909
  node ssync list
@@ -4652,11 +4916,10 @@ node sync ad st --sync-info=@json:'{"name":"syncv2","reset":true,"direction":"pu
4652
4916
  node sync ad st --sync-info=@json:'{"sessions":[{"name":"syncv1","direction":"pull","local_dir":"my_local_sync_dir","remote_dir":"/aspera-test-dir-tiny","reset":true}]}'
4653
4917
  node sync start --sync-info=@json:'{"name":"syncv2","reset":true,"direction":"pull","local":{"path":"my_local_sync_dir"},"remote":{"path":"/aspera-test-dir-tiny"}}'
4654
4918
  node sync start --sync-info=@json:'{"sessions":[{"name":"syncv1","direction":"pull","local_dir":"my_local_sync_dir","remote_dir":"/aspera-test-dir-tiny","reset":true}]}'
4655
- node transfer list --value=@json:'{"active_only":true}'
4919
+ node transfer list --query=@json:'{"active_only":true}'
4656
4920
  node upload --to-folder=folder_1 --sources=@ts --ts=@json:'{"paths":[{"source":"/aspera-test-dir-small/10MB.2"}],"precalculate_job_size":true}' --transfer=node --transfer-info=@json:'{"url":"my_node_url","username":"my_node_user","password":"my_node_pass_here"}'
4657
- node upload --username=my_aoc_ak_name --password=my_aoc_ak_secret testfile.bin --token-type=basic
4921
+ node upload --username=my_aoc_ak_name --password=my_aoc_ak_secret testfile.bin
4658
4922
  node upload testfile.bin --to-folder=folder_1 --ts=@json:'{"target_rate_cap_kbps":10000}'
4659
- node upload testfile.bin --to-folder=folder_1 --ts=@json:'{"target_rate_cap_kbps":10000}' --token-type=hybrid
4660
4923
  ```
4661
4924
 
4662
4925
  ## <a id="faspex5"></a>Plugin: `faspex5`: IBM Aspera Faspex v5
@@ -4665,22 +4928,37 @@ IBM Aspera's newer self-managed application.
4665
4928
 
4666
4929
  3 authentication methods are supported:
4667
4930
 
4668
- - jwt
4669
- - web
4670
- - boot
4931
+ - jwt : general purpose, private-key based authentication
4932
+ - link : public link authentication
4933
+ - web : requires authentication with web browser
4934
+ - boot : use authentication token copied from browser (experimental)
4671
4935
 
4672
4936
  ### Faspex 5 JWT authentication
4673
4937
 
4674
- This is the **recommended** method to use.
4938
+ This is the general purpose and **recommended** method to use.
4675
4939
 
4676
- For `jwt`, create an API client in Faspex with JWT support:
4940
+ Activation is in two steps:
4677
4941
 
4678
- - Select a private key file: if you don't have any refer to section [Private Key](#private_key)
4679
- - Navigate to the web UI: Admin &rarr; Configurations &rarr; API Clients &rarr; Create
4680
- - Activate JWT
4681
- - Paste **public** key in the appropriate section
4682
- - Click on Create Button
4683
- - Take note of Client Id (and Client Secret, but not used in current version)
4942
+ - The admninistrator must create an API client in Faspex with JWT support
4943
+
4944
+ This operation is generally done only once:
4945
+
4946
+ - As Admin, Navigate to the web UI: Admin &rarr; Configurations &rarr; API Clients &rarr; Create
4947
+ - Give a name, like `ascli`
4948
+ - Activate JWT
4949
+ - There is an option to set a general public key allowing the owner of the private key to impersonate any user. Unless you want to do this, leave this field empty.
4950
+ - Click on `Create` Button
4951
+ - Take note of Client Id (and Client Secret, but not used in current version)
4952
+
4953
+ - The user uses a private key and sets the public key in his faspex 5 profile
4954
+
4955
+ This operation is done by each user using the CLI.
4956
+
4957
+ - As user, click on the user logo, left to the app switcher on top right.
4958
+ - Select `Account Settings`
4959
+ - on the bottom in the text field: `Public key in PEM format` paste the **public** key corresponding to the private key used by the user.
4960
+
4961
+ **Note:** If you don't have any refer to section [Private Key](#private_key)
4684
4962
 
4685
4963
  Then use these options:
4686
4964
 
@@ -4692,19 +4970,31 @@ Then use these options:
4692
4970
  --private-key=@file:.../path/to/key.pem
4693
4971
  ```
4694
4972
 
4695
- > **Note:** The `private_key` option must contain the PEM value of the private key which can be read from a file using the modifier: `@file:`, e.g. `@file:/path/to/key.pem`.
4973
+ > **Note:** The `private_key` option must contain the PEM **value** (not file path) of the private key which can be read from a file using the modifier: `@file:`, e.g. `@file:/path/to/key.pem`.
4974
+
4975
+ As usual, typically a user will create preset to avoid having to type these options each time.
4976
+
4977
+ Example:
4978
+
4979
+ ```bash
4980
+ ascli conf preset update myf5 --auth=jwt --client-id=_client_id_here_ --client-secret=my_secret_here --username=_username_here_ --private-key=@file:.../path/to/key.pem
4981
+
4982
+ ascli conf preset set default faspx5 myf5
4983
+
4984
+ ascli faspex5 user profile show
4985
+ ```
4696
4986
 
4697
4987
  ### Faspex 5 web authentication
4698
4988
 
4699
- For `web` method, create an API client in Faspex without JWT:
4989
+ The admninistrator must create an API client in Faspex for an external web app support:
4700
4990
 
4701
- - Navigate to the web UI: Admin &rarr; Configurations &rarr; API Clients &rarr; Create
4991
+ - As Admin, Navigate to the web UI: Admin &rarr; Configurations &rarr; API Clients &rarr; Create
4702
4992
  - Do not Activate JWT
4703
4993
  - Set **Redirect URI** to `https://127.0.0.1:8888`
4704
- - Click on Create Button
4994
+ - Click on `Create` Button
4705
4995
  - Take note of Client Id (and Client Secret, but not used in current version)
4706
4996
 
4707
- Then use options:
4997
+ The user will use the following options:
4708
4998
 
4709
4999
  ```text
4710
5000
  --auth=web
@@ -4717,7 +5007,7 @@ Then use options:
4717
5007
 
4718
5008
  For `boot` method: (will be removed in future)
4719
5009
 
4720
- - Open a Web Browser
5010
+ - As user: Open a Web Browser
4721
5011
  - Start developer mode
4722
5012
  - Login to Faspex 5
4723
5013
  - Find the first API call with `Authorization` header, and copy the value of the token (series of base64 values with dots)
@@ -4725,26 +5015,14 @@ For `boot` method: (will be removed in future)
4725
5015
  Use this token as password and use `--auth=boot`.
4726
5016
 
4727
5017
  ```bash
4728
- ascli conf id f5boot update --url=https://localhost/aspera/faspex --auth=boot --password=_token_here_
5018
+ ascli conf preset update f5boot --url=https://localhost/aspera/faspex --auth=boot --password=_token_here_
4729
5019
  ```
4730
5020
 
4731
- ### Faspex 5 packages
4732
-
4733
- The `value` option provided to command `faspex5 package send` is the same as for the Faspex 5 API: `POST /packages`.
4734
-
4735
- In addition, `ascli` adds some convenience: the field `recipients` is normally an Array of Hash, each with field `name` and optionally `recipient_type`, but it is also possible to provide an Array of String, with simply a recipient name.
4736
- Then `ascli` will lookup existing contacts, and if a single match is found will use it, and set the `name` and `recipient_type` accordingly.
4737
-
4738
- > **Note:** The lookup is case insensitive and on partial matches.
4739
-
4740
- On reception, option `box` (default to `inbox`) can be set to the same values as API accepts, or to the name of a shared inbox.
4741
- If the value `ALL` is provided to option `box`, then all packages are selected.
4742
-
4743
5021
  ### Faspex 5 sample commands
4744
5022
 
4745
5023
  Most commands are directly REST API calls.
4746
- Parameters to commands are carried through option `value`, as extended value.
4747
- Usually using JSON format with prefix `@json:`.
5024
+ Parameters to commands are carried through option `query`, as extended value, for `list`, or through positional parameter for creation.
5025
+ One can conveniently use the JSON format with prefix `@json:`.
4748
5026
 
4749
5027
  > **Note:** The API is listed in [Faspex 5 API Reference](https://developer.ibm.com/apis/catalog?search="faspex+5") under **IBM Aspera Faspex API**.
4750
5028
 
@@ -4757,80 +5035,182 @@ faspex5 admin res node list
4757
5035
  faspex5 admin res oauth_clients list
4758
5036
  faspex5 admin res registrations list
4759
5037
  faspex5 admin res saml_configs list
5038
+ faspex5 admin res shared_inboxes invite %name:'ascli shinbox' johnny@example.com
4760
5039
  faspex5 admin res shared_inboxes list
5040
+ faspex5 admin res shared_inboxes members %name:'ascli shinbox' create %name:john@example.com
5041
+ faspex5 admin res shared_inboxes members %name:'ascli shinbox' delete %name:john@example.com
5042
+ faspex5 admin res shared_inboxes members %name:'ascli shinbox' delete %name:johnny@example.com
5043
+ faspex5 admin res shared_inboxes members %name:'ascli shinbox' list
4761
5044
  faspex5 admin res workgroups list
4762
5045
  faspex5 admin smtp show
4763
5046
  faspex5 admin smtp test my_email_external
4764
5047
  faspex5 bearer_token
4765
- faspex5 gateway --value=https://localhost:12345/aspera/faspex &\
5048
+ faspex5 gateway https://localhost:12345/aspera/faspex
4766
5049
  faspex5 health
4767
- faspex5 packages list --value=@json:'{"mailbox":"inbox","state":["released"]}'
5050
+ faspex5 packages list --box=my_faspex5_shinbox
5051
+ faspex5 packages list --box=my_faspex5_workgroup --group-type=workgroups
5052
+ faspex5 packages list --query=@json:'{"mailbox":"inbox","state":["released"]}'
4768
5053
  faspex5 packages receive "my_package_id" --to-folder=. --ts=@json:'{"content_protection_password":"abc123_yo"}'
5054
+ faspex5 packages receive --box=my_faspex5_shinbox "my_package_id" --to-folder=.
5055
+ faspex5 packages receive --box=my_faspex5_workgroup --group-type=workgroups "my_package_id" --to-folder=.
4769
5056
  faspex5 packages receive ALL --once-only=yes --to-folder=.
4770
5057
  faspex5 packages receive INIT --once-only=yes
4771
- faspex5 packages send --value=@json:'{"title":"test title","recipients":["my_shinbox"],"metadata":{"Options":"Opt1","TextInput":"example text"}}' testfile.bin
4772
- faspex5 packages send --value=@json:'{"title":"test title","recipients":[{"name":"my_f5_user"}]}' testfile.bin --ts=@json:'{"content_protection_password":"my_passphrase_here"}'
5058
+ faspex5 packages send @json:'{"title":"test title","recipients":["my_shinbox"],"metadata":{"Options":"Opt1","TextInput":"example text"}}' testfile.bin
5059
+ faspex5 packages send @json:'{"title":"test title","recipients":["my_workgroup"]}' testfile.bin
5060
+ faspex5 packages send @json:'{"title":"test title","recipients":[{"name":"my_f5_user"}]}' testfile.bin --ts=@json:'{"content_protection_password":"my_passphrase_here"}'
4773
5061
  faspex5 packages show "my_package_id"
4774
- faspex5 postprocessing --value=@json:'{"url":"https://localhost:8443/domain","processing":{"script_folder":"tests"},"certificate":{"key":"../local/k","cert":"../local/c","chain":"../local/ch"}}' &\
5062
+ faspex5 packages show --box=my_faspex5_shinbox "my_package_id"
5063
+ faspex5 packages show --box=my_faspex5_workgroup --group-type=workgroups "my_package_id"
5064
+ faspex5 postprocessing @json:'{"url":"https://localhost:8443/domain","processing":{"script_folder":"tests"},"certificate":{"key":"../local/k","cert":"../local/c","chain":"../local/ch"}}'
4775
5065
  faspex5 user profile modify @json:'{"preference":{"connect_disabled":false}}'
4776
5066
  faspex5 user profile show
4777
5067
  ```
4778
5068
 
4779
- Other examples:
5069
+ ### Faspex 5: inbox selection
5070
+
5071
+ By default, package operations (send, receive, list) are done on the user's inbox.
5072
+
5073
+ To select another inbox, use option `box` with one of the following values:
5074
+
5075
+ - inbox
5076
+ - inbox_history
5077
+ - inbox_all
5078
+ - inbox_all_history
5079
+ - outbox
5080
+ - outbox_history
5081
+ - pending
5082
+ - pending_history
5083
+ - all
5084
+ - ALL (only admin)
5085
+ - name of a shared inbox or workgroup
5086
+
5087
+ > **Note:** specify if the box is a shared inbox or a workgroup using option `group_type` with either `shared_inboxes` or `workgroups`
5088
+
5089
+ ### Faspex 5: Send a package
5090
+
5091
+ The `Hash` creation parameter provided to command `faspex5 packages send` corresponds to the Faspex 5 API: `POST /packages`.
5092
+
5093
+ Required fields are `title` and `recipients`.
5094
+ Example using `@json:` format:
5095
+
5096
+ ```json
5097
+ {"title":"some title","recipients":[{"recipient_type":"user","name":"user@example.com"}]}
5098
+ ```
5099
+
5100
+ `recipient_type` is one of (Refer to API):
4780
5101
 
4781
- - list packages
5102
+ - user
5103
+ - workgroup
5104
+ - external_user
5105
+ - distribution_list
5106
+ - shared_inbox
4782
5107
 
4783
- The following parameters in option `value` are supported:
5108
+ `ascli` adds some convenience: The API expects the field `recipients` to be an `Array` of `Hash`, each with field `name` and optionally `recipient_type`.
5109
+ It is also possible to provide an `Array` of `String`, with simply a recipient name.
5110
+ Then `ascli` will lookup existing contacts among all possible types, use it if a single match is found, and set the `name` and `recipient_type` accordingly.
5111
+ Else an exception is sent.
4784
5112
 
4785
- - `q` : a filter on name (case insensitive, matches if value is contained in name)
4786
- - `max` : maximum number of items to retrieve (stop pages when the maximum is passed)
4787
- - `pmax` : maximum number of pages to request (stop pages when the maximum is passed)
4788
- - `offset` : native api parameter, in general do not use (added by `ascli`)
4789
- - `limit` : native api parameter, number of items par api call, in general do not use (added by `ascli`)
5113
+ > **Note:** The lookup is case insensitive and on partial matches.
5114
+
5115
+ ```json
5116
+ {"title":"some title","recipients":["user@example.com"]}
5117
+ ```
5118
+
5119
+ If the lookup needs to be only on certain types, you can specify the field: `recipient_types` with either a single value or an Array of values (from the list above). e.g. :
5120
+
5121
+ ```json
5122
+ {"title":"test title","recipient_types":"user","recipients":["user1@example.com","user2@example.com"]}
5123
+ ```
4790
5124
 
4791
- - Send a package with metadata
5125
+ ### Faspex 5: Send a package with metadata
4792
5126
 
4793
5127
  The interface is the one of the API (Refer to API documentation, or look at request in browser):
4794
5128
 
4795
5129
  ```bash
4796
- ascli faspex5 package send --value=@json:'{"title":"test title","recipients":["ascli shared inbox"],"metadata":{"Confidential":"Yes","Drop menu":"Option 1"}}' 'faux:///test1?k1'
5130
+ ascli faspex5 packages send @json:'{"title":"test title","recipients":["my shared inbox"],"metadata":{"Confidential":"Yes","Drop menu":"Option 1"}}' 'faux:///test1?k1'
4797
5131
  ```
4798
5132
 
4799
5133
  Basically, add the field `metadata`, with one key per metadata and the value is directly the metadata value.
4800
5134
 
4801
- - List all shared inboxes
5135
+ ### Faspex 5: Receive a package
5136
+
5137
+ The (numeric) identifier of the package t receive is given as argument to command `faspex5 packages receive`.
5138
+
5139
+ > **Note:** option `box` applies.
5140
+
5141
+ ### Faspex 5: List packages
5142
+
5143
+ The following parameters in option `query` are supported:
5144
+
5145
+ - `q` : a filter on name (case insensitive, matches if value is contained in name)
5146
+ - `max` : maximum number of items to retrieve (stop pages when the maximum is passed)
5147
+ - `pmax` : maximum number of pages to request (stop pages when the maximum is passed)
5148
+ - `offset` : native api parameter, in general do not use (added by `ascli`)
5149
+ - `limit` : native api parameter, number of items par api call, in general do not use (added by `ascli`)
5150
+
5151
+ Admin only: If the value `ALL` is provided to option `box`, then all packages are selected.
5152
+
5153
+ ### Faspex 5: List all shared inboxes
5154
+
5155
+ ```bash
5156
+ ascli faspex5 admin res shared list --query=@json:'{"all":true}' --fields=id,name
5157
+ ```
5158
+
5159
+ Shared inbox members can also be listed, added, removed, and external users can be invited to a shared inbox.
5160
+
5161
+ ```bash
5162
+ ascli faspex5 admin res shared_inboxes invite '%name:ascli shinbox' john@example.com
5163
+ ```
5164
+
5165
+ It is equivalent to:
4802
5166
 
4803
5167
  ```bash
4804
- ascli faspex5 admin res shared list --value=@json:'{"all":true}' --fields=id,name
5168
+ ascli faspex5 admin res shared_inboxes invite '%name:ascli shinbox' @json:'{"email_address":"john@example.com"}'
5169
+ ```
5170
+
5171
+ Other payload parameters are possible in Hash format:
5172
+
5173
+ ```json
5174
+ {"description":"blah","prevent_http_upload":true,"custom_link_expiration_policy":false,"invitation_expires_after_upload":false,"set_invitation_link_expiration":false,"invitation_expiration_days":3
4805
5175
  ```
4806
5176
 
4807
- - Create Metadata profile
5177
+ ### Faspex 5: Create Metadata profile
4808
5178
 
4809
5179
  ```bash
4810
- ascli faspex5 admin res metadata_profiles create --value=@json:'{"name":"the profile","default":false,"title":{"max_length":200,"illegal_chars":[]},"note":{"max_length":400,"illegal_chars":[],"enabled":false},"fields":[{"ordering":0,"name":"field1","type":"text_area","require":true,"illegal_chars":[],"max_length":100},{"ordering":1,"name":"fff2","type":"option_list","require":false,"choices":["opt1","opt2"]}]}'
5180
+ ascli faspex5 admin res metadata_profiles create @json:'{"name":"the profile","default":false,"title":{"max_length":200,"illegal_chars":[]},"note":{"max_length":400,"illegal_chars":[],"enabled":false},"fields":[{"ordering":0,"name":"field1","type":"text_area","require":true,"illegal_chars":[],"max_length":100},{"ordering":1,"name":"fff2","type":"option_list","require":false,"choices":["opt1","opt2"]}]}'
4811
5181
  ```
4812
5182
 
4813
- - Create a Shared inbox with specific metadata profile
5183
+ ### Faspex 5: Create a Shared inbox with specific metadata profile
4814
5184
 
4815
5185
  ```bash
4816
- ascli faspex5 admin res shared create --value=@json:'{"name":"the shared inbox","metadata_profile_id":1}'
5186
+ ascli faspex5 admin res shared create @json:'{"name":"the shared inbox","metadata_profile_id":1}'
4817
5187
  ```
4818
5188
 
4819
- - List content in Shared folder and send package from remote source
5189
+ ### Faspex 5: List content in Shared folder and send package from remote source
4820
5190
 
4821
5191
  ```bash
4822
5192
  ascli faspex5 shared_folders list
4823
5193
  ```
4824
5194
 
5195
+ ```markdown
5196
+ +----+----------+---------+-----+
5197
+ | id | name | node_id | ... |
5198
+ +----+----------+---------+-----+
5199
+ | 3 | partages | 2 | ... |
5200
+ +----+----------+---------+-----+
5201
+ ```
5202
+
4825
5203
  ```bash
4826
- ascli faspex5 shared_folders br 3 /folder
5204
+ ascli faspex5 shared_folders br %name:partages /folder
4827
5205
  ```
4828
5206
 
4829
5207
  ```bash
4830
- ascli faspex5 package send --value=@json:'{"title":"hello","recipients":[{"name":"_recipient_here_"}]}' --shared-folder=3 /folder/file
5208
+ ascli faspex5 packages send @json:'{"title":"hello","recipients":[{"name":"_recipient_here_"}]}' --shared-folder=%name:partages /folder/file
4831
5209
  ```
4832
5210
 
4833
- - receive all packages (cargo)
5211
+ > **Note:** The shared folder can be identified by its numerical `id` or by name using percent selector: `%<field>:<value>`. e.g. `--shared-folder=3`
5212
+
5213
+ ### Faspex 5: receive all packages (cargo)
4834
5214
 
4835
5215
  To receive all packages, only once, through persistency of already received packages:
4836
5216
 
@@ -4844,7 +5224,7 @@ To initialize, and skip all current package so that next time `ALL` is used, onl
4844
5224
  ascli faspex5 packages receive INIT --once-only=yes
4845
5225
  ```
4846
5226
 
4847
- ### Faspex 4-style postprocessing script with Faspex 5
5227
+ ### Faspex 5: Faspex 4-style postprocessing
4848
5228
 
4849
5229
  `ascli` provides command `postprocessing` in plugin `faspex5` to emulate Faspex 4 postprocessing.
4850
5230
  It implements Faspex 5 web hooks, and calls a local script with the same environment as Faspex 4.
@@ -4852,7 +5232,7 @@ It implements Faspex 5 web hooks, and calls a local script with the same environ
4852
5232
  It is invoked like this:
4853
5233
 
4854
5234
  ```bash
4855
- ascli faspex5 postprocessing --value=@json:'{"url":"http://localhost:8080/processing"}'
5235
+ ascli faspex5 postprocessing @json:'{"url":"http://localhost:8080/processing"}'
4856
5236
  ```
4857
5237
 
4858
5238
  The following parameters are supported:
@@ -4947,7 +5327,7 @@ The command is `package recv`, possible methods are:
4947
5327
  - provide a `faspe:` URI with option `link`
4948
5328
 
4949
5329
  ```bash
4950
- ascli faspex package recv --id=12345
5330
+ ascli faspex package recv 12345
4951
5331
  ascli faspex package recv --link=faspe://...
4952
5332
  ```
4953
5333
 
@@ -4996,9 +5376,9 @@ In this example the notification template is directly provided on command line.
4996
5376
  Example:
4997
5377
 
4998
5378
  ```bash
4999
- ascli faspex v4 dropbox create --value=@json:'{"dropbox":{"e_wg_name":"test1","e_wg_desc":"test1"}}'
5379
+ ascli faspex v4 dropbox create @json:'{"dropbox":{"e_wg_name":"test1","e_wg_desc":"test1"}}'
5000
5380
  ascli faspex v4 dropbox list
5001
- ascli faspex v4 dropbox delete --id=36
5381
+ ascli faspex v4 dropbox delete 36
5002
5382
  ```
5003
5383
 
5004
5384
  ### Remote sources
@@ -5036,7 +5416,7 @@ It is possible to tell `ascli` to download newly received packages, much like th
5036
5416
  cargo client, or drive. Refer to the [same section](#aoccargo) in the Aspera on Cloud plugin:
5037
5417
 
5038
5418
  ```bash
5039
- ascli faspex packages recv --id=ALL --once-only=yes --lock-port=12345
5419
+ ascli faspex packages recv ALL --once-only=yes --lock-port=12345
5040
5420
  ```
5041
5421
 
5042
5422
  ### Faspex 4 sample commands
@@ -5086,20 +5466,20 @@ shares admin group list
5086
5466
  shares admin node list
5087
5467
  shares admin share list --fields=-status,status_message
5088
5468
  shares admin share user_permissions 1 list
5089
- shares admin user add --type=ldap --value=the_name
5090
- shares admin user app_authorizations 1 modify --value=@json:'{"app_login":true}'
5469
+ shares admin user add --type=ldap the_name
5470
+ shares admin user app_authorizations 1 modify @json:'{"app_login":true}'
5091
5471
  shares admin user app_authorizations 1 show
5092
- shares admin user import --type=saml --value=@json:'{"id":"the_id","name_id":"the_name"}'
5472
+ shares admin user import --type=saml @json:'{"id":"the_id","name_id":"the_name"}'
5093
5473
  shares admin user list
5094
5474
  shares admin user share_permissions 1 list
5095
5475
  shares admin user share_permissions 1 show 1
5476
+ shares files browse /
5477
+ shares files delete my_shares_upload/testfile.bin
5478
+ shares files download --to-folder=. my_shares_upload/testfile.bin
5479
+ shares files download --to-folder=. my_shares_upload/testfile.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://my_http_gw_fqdn/aspera/http-gwy"}'
5480
+ shares files upload --to-folder=my_shares_upload testfile.bin
5481
+ shares files upload --to-folder=my_shares_upload testfile.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://my_http_gw_fqdn/aspera/http-gwy"}'
5096
5482
  shares health
5097
- shares repository browse /
5098
- shares repository delete my_shares_upload/testfile.bin
5099
- shares repository download --to-folder=. my_shares_upload/testfile.bin
5100
- shares repository download --to-folder=. my_shares_upload/testfile.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://my_http_gw_fqdn/aspera/http-gwy"}'
5101
- shares repository upload --to-folder=my_shares_upload testfile.bin
5102
- shares repository upload --to-folder=my_shares_upload testfile.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://my_http_gw_fqdn/aspera/http-gwy"}'
5103
5483
  ```
5104
5484
 
5105
5485
  ## <a id="console"></a>Plugin: `console`: IBM Aspera Console
@@ -5154,8 +5534,8 @@ If you have those parameters already, then following options shall be provided:
5154
5534
  For example, let us create a default configuration:
5155
5535
 
5156
5536
  ```bash
5157
- ascli conf id mycos update --bucket=mybucket --endpoint=https://s3.us-east.cloud-object-storage.appdomain.cloud --apikey=abcdefgh --crn=crn:v1:bluemix:public:iam-identity::a/xxxxxxx
5158
- ascli conf id default set cos mycos
5537
+ ascli conf preset update mycos --bucket=mybucket --endpoint=https://s3.us-east.cloud-object-storage.appdomain.cloud --apikey=abcdefgh --crn=crn:v1:bluemix:public:iam-identity::a/xxxxxxx
5538
+ ascli conf preset set default cos mycos
5159
5539
  ```
5160
5540
 
5161
5541
  Then, jump to the transfer example.
@@ -5218,8 +5598,8 @@ The required options for this method are:
5218
5598
  For example, let us create a default configuration:
5219
5599
 
5220
5600
  ```bash
5221
- ascli conf id mycos update --bucket=laurent --service-credentials=@val:@json:@file:~/service_creds.json --region=us-south
5222
- ascli conf id default set cos mycos
5601
+ ascli conf preset update mycos --bucket=laurent --service-credentials=@val:@json:@file:~/service_creds.json --region=us-south
5602
+ ascli conf preset set default cos mycos
5223
5603
  ```
5224
5604
 
5225
5605
  ### Operations, transfers
@@ -5347,7 +5727,7 @@ ascli preview check
5347
5727
  #### Image: ImageMagick and optipng
5348
5728
 
5349
5729
  ```bash
5350
- yum install -y ImageMagick optipng
5730
+ dnf install -y ImageMagick optipng
5351
5731
  ```
5352
5732
 
5353
5733
  You may also install `ghostscript` which adds fonts to ImageMagick.
@@ -5481,12 +5861,12 @@ ascli preview scan --skip-folders=@json:'["/not_here"]'
5481
5861
 
5482
5862
  The option `folder_reset_cache` forces the node service to refresh folder contents using various methods.
5483
5863
 
5484
- When scanning the option `value` has the same behavior as for the `node find` command.
5864
+ When scanning the option `query` has the same behavior as for the `node find` command.
5485
5865
 
5486
5866
  For instance to filter out files beginning with `._` do:
5487
5867
 
5488
5868
  ```bash
5489
- ... --value='exec:!f["name"].start_with?("._") or f["name"].eql?(".DS_Store")'
5869
+ --query='exec:!f["name"].start_with?("._") or f["name"].eql?(".DS_Store")'
5490
5870
  ```
5491
5871
 
5492
5872
  ### Preview File types
@@ -5547,10 +5927,10 @@ If the `mimemagic` gem complains about missing mime info file:
5547
5927
 
5548
5928
  - Close the `cmd` and restart a new one if needed to get refreshed env vars
5549
5929
 
5550
- - Linux:
5930
+ - Linux RHEL 8+:
5551
5931
 
5552
5932
  ```bash
5553
- yum install shared-mime-info
5933
+ dnf install shared-mime-info
5554
5934
  ```
5555
5935
 
5556
5936
  - macOS:
@@ -5597,8 +5977,9 @@ The `smtp` option is a hash table (extended value) with the following fields:
5597
5977
  | field | default | example | description |
5598
5978
  |--------------|---------------------|----------------------------|----------------------------------|
5599
5979
  | `server` | - | smtp.gmail.com | SMTP server address |
5600
- | `tls` | true | false | use of TLS |
5601
- | `port` | TLS: 587<br/>25 | 587 | port for service |
5980
+ | `tls` | true | true | enable STARTTLS (port 587) |
5981
+ | `ssl` | false | false | enable TLS (port 465) |
5982
+ | `port` | 587 or 465 or 25 | 587 | port for service |
5602
5983
  | `domain` | domain of server | gmail.com | email domain of user |
5603
5984
  | `username` | - | john@example.com | user to authenticate on SMTP server, leave empty for open auth. |
5604
5985
  | `password` | - | my_password_here | password for above username |
@@ -5812,7 +6193,7 @@ Interesting `ascp` features are found in its arguments: (see `ascp` manual):
5812
6193
  - `ascp` has an option to send only files not modified since the last X seconds: `--exclude-newer-than`, `--exclude-older-than` (`exclude_newer_than`,`exclude_older_than`)
5813
6194
  - `--src-base` (`src_base`) if top level folder name shall not be created on destination
5814
6195
 
5815
- > **Note:** `ascli` takes transfer parameters exclusively as a [*transfer-spec*](#transferspec), with `--ts` parameter.
6196
+ > **Note:** `ascli` takes transfer parameters exclusively as a [*transfer-spec*](#transferspec), with `ts` option.
5816
6197
  >
5817
6198
  > **Note:** Most, but not all, native `ascp` arguments are available as standard [*transfer-spec*](#transferspec) parameters.
5818
6199
  >