aspera-cli 4.24.1 → 4.25.0.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +1064 -745
  4. data/CONTRIBUTING.md +43 -100
  5. data/README.md +1281 -720
  6. data/bin/ascli +20 -1
  7. data/bin/asession +23 -27
  8. data/lib/aspera/agent/base.rb +10 -21
  9. data/lib/aspera/agent/connect.rb +2 -3
  10. data/lib/aspera/agent/desktop.rb +2 -2
  11. data/lib/aspera/agent/direct.rb +49 -32
  12. data/lib/aspera/agent/factory.rb +31 -0
  13. data/lib/aspera/api/aoc.rb +134 -76
  14. data/lib/aspera/api/cos_node.rb +3 -2
  15. data/lib/aspera/api/faspex.rb +213 -0
  16. data/lib/aspera/api/node.rb +107 -94
  17. data/lib/aspera/ascmd.rb +1 -2
  18. data/lib/aspera/ascp/installation.rb +73 -58
  19. data/lib/aspera/ascp/management.rb +119 -23
  20. data/lib/aspera/assert.rb +39 -11
  21. data/lib/aspera/cli/error.rb +4 -2
  22. data/lib/aspera/cli/extended_value.rb +91 -67
  23. data/lib/aspera/cli/formatter.rb +62 -27
  24. data/lib/aspera/cli/hints.rb +8 -0
  25. data/lib/aspera/cli/info.rb +4 -4
  26. data/lib/aspera/cli/main.rb +76 -84
  27. data/lib/aspera/cli/manager.rb +352 -248
  28. data/lib/aspera/cli/plugins/alee.rb +5 -4
  29. data/lib/aspera/cli/plugins/aoc.rb +175 -195
  30. data/lib/aspera/cli/plugins/ats.rb +4 -4
  31. data/lib/aspera/cli/plugins/base.rb +343 -0
  32. data/lib/aspera/cli/plugins/basic_auth.rb +45 -0
  33. data/lib/aspera/cli/plugins/config.rb +283 -269
  34. data/lib/aspera/cli/plugins/console.rb +27 -22
  35. data/lib/aspera/cli/plugins/cos.rb +3 -3
  36. data/lib/aspera/cli/plugins/factory.rb +78 -0
  37. data/lib/aspera/cli/plugins/faspex.rb +49 -46
  38. data/lib/aspera/cli/plugins/faspex5.rb +113 -225
  39. data/lib/aspera/cli/plugins/faspio.rb +19 -18
  40. data/lib/aspera/cli/plugins/httpgw.rb +14 -13
  41. data/lib/aspera/cli/plugins/node.rb +162 -149
  42. data/lib/aspera/cli/plugins/oauth.rb +48 -0
  43. data/lib/aspera/cli/plugins/orchestrator.rb +129 -45
  44. data/lib/aspera/cli/plugins/preview.rb +30 -50
  45. data/lib/aspera/cli/plugins/server.rb +21 -21
  46. data/lib/aspera/cli/plugins/shares.rb +45 -47
  47. data/lib/aspera/cli/sync_actions.rb +50 -39
  48. data/lib/aspera/cli/transfer_agent.rb +35 -49
  49. data/lib/aspera/cli/transfer_progress.rb +6 -6
  50. data/lib/aspera/cli/version.rb +3 -3
  51. data/lib/aspera/cli/wizard.rb +70 -55
  52. data/lib/aspera/colors.rb +6 -0
  53. data/lib/aspera/command_line_builder.rb +59 -61
  54. data/lib/aspera/command_line_converter.rb +2 -1
  55. data/lib/aspera/coverage.rb +2 -2
  56. data/lib/aspera/data_repository.rb +1 -1
  57. data/lib/aspera/environment.rb +51 -41
  58. data/lib/aspera/faspex_gw.rb +7 -5
  59. data/lib/aspera/faspex_postproc.rb +1 -1
  60. data/lib/aspera/keychain/factory.rb +1 -2
  61. data/lib/aspera/keychain/macos_security.rb +1 -1
  62. data/lib/aspera/log.rb +37 -9
  63. data/lib/aspera/markdown.rb +31 -0
  64. data/lib/aspera/nagios.rb +7 -6
  65. data/lib/aspera/oauth/base.rb +25 -28
  66. data/lib/aspera/oauth/factory.rb +9 -9
  67. data/lib/aspera/oauth/url_json.rb +2 -1
  68. data/lib/aspera/oauth/web.rb +2 -2
  69. data/lib/aspera/preview/file_types.rb +23 -37
  70. data/lib/aspera/products/connect.rb +7 -6
  71. data/lib/aspera/products/desktop.rb +1 -4
  72. data/lib/aspera/products/other.rb +9 -1
  73. data/lib/aspera/products/transferd.rb +0 -1
  74. data/lib/aspera/rest.rb +168 -113
  75. data/lib/aspera/rest_error_analyzer.rb +4 -4
  76. data/lib/aspera/ssh.rb +7 -4
  77. data/lib/aspera/ssl.rb +41 -0
  78. data/lib/aspera/sync/args.schema.yaml +46 -3
  79. data/lib/aspera/sync/conf.schema.yaml +307 -123
  80. data/lib/aspera/sync/database.rb +2 -1
  81. data/lib/aspera/sync/operations.rb +135 -79
  82. data/lib/aspera/temp_file_manager.rb +17 -5
  83. data/lib/aspera/transfer/error.rb +16 -7
  84. data/lib/aspera/transfer/parameters.rb +35 -22
  85. data/lib/aspera/transfer/resumer.rb +74 -0
  86. data/lib/aspera/transfer/spec.rb +5 -5
  87. data/lib/aspera/transfer/spec.schema.yaml +170 -59
  88. data/lib/aspera/transfer/spec_doc.rb +49 -43
  89. data/lib/aspera/uri_reader.rb +2 -2
  90. data/lib/aspera/web_auth.rb +6 -6
  91. data/lib/transferd_pb.rb +2 -2
  92. data.tar.gz.sig +0 -0
  93. metadata +26 -11
  94. metadata.gz.sig +0 -0
  95. data/lib/aspera/cli/basic_auth_plugin.rb +0 -43
  96. data/lib/aspera/cli/plugin.rb +0 -333
  97. data/lib/aspera/cli/plugin_factory.rb +0 -81
  98. data/lib/aspera/resumer.rb +0 -77
  99. data/lib/aspera/transfer/error_info.rb +0 -91
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  <!--
3
3
  DO NOT EDIT: THIS FILE IS GENERATED, edit docs/README.erb.md, for details, read docs/README.md
4
4
  PANDOC_META_BEGIN
5
- subtitle: "ascli 4.24.1"
5
+ subtitle: "ascli 4.25.0.pre"
6
6
  author: "Laurent MARTIN"
7
7
  PANDOC_META_END
8
8
  -->
@@ -10,26 +10,27 @@ PANDOC_META_END
10
10
 
11
11
  <!-- NOTE CAUTION WARNING IMPORTANT TIP INFO -->
12
12
 
13
+ <!-- markdownlint-disable MD028 -->
14
+
13
15
  [![Gem Version](https://badge.fury.io/rb/aspera-cli.svg)](https://badge.fury.io/rb/aspera-cli)
14
16
  [![unit tests](https://github.com/IBM/aspera-cli/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/IBM/aspera-cli/actions)
15
17
  [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5861/badge)](https://bestpractices.coreinfrastructure.org/projects/5861)
16
18
 
17
19
  ## Introduction
18
20
 
19
- ![Hootput the Owl](docs/ascli-impersonation-small.png)
21
+ ![Hootput the Owl](docs/ascli-impersonation.svg)
20
22
 
21
23
  Hootput lives in the terminal, watching over every command with wide, unblinking eyes.
22
24
  Known for concise output and sharp insight, this owl thrives where others get lost in the dark.
23
25
  It doesn’t chatter; it hoots—clear, precise, and always on time.
24
26
 
25
- Like ascli, Hootput is built for action: launching transfers, parsing options, and navigating APIs without hesitation.
27
+ Like `ascli`, Hootput is built for action: launching transfers, parsing options, and navigating APIs without hesitation.
26
28
  Light on feathers but heavy on wisdom, it turns complexity into simple one-liners.
27
29
  When you hear Hootput’s call, you know your data is already in flight.
28
30
 
29
31
  ---
30
32
 
31
-
32
- "Hey, I’m ascli — your data’s personal courier.
33
+ "Hey, I’m `ascli` — your data’s personal courier.
33
34
  I don’t do flashy dashboards; I’m happiest in a terminal window.
34
35
  Hand me a command, and I’ll zip your files across the network faster than you thought possible.
35
36
 
@@ -41,9 +42,9 @@ Need to debug? I’ll show you what’s going on under the hood.
41
42
 
42
43
  Think of me as Aspera’s command-line sidekick: quick, reliable, and a little no-nonsense. You bring the files; I’ll bring the horsepower."
43
44
 
44
- Version : 4.24.1
45
+ Version : 4.25.0.pre
45
46
 
46
- Laurent/2016-2025
47
+ Laurent/2016-2026
47
48
 
48
49
  The aspera-cli Ruby gem offers a powerful command-line interface (CLI, `ascli`) for IBM Aspera software, facilitating seamless interaction with Aspera APIs and enabling high-performance file transfers.
49
50
  It also serves as an excellent resource for developers seeking to explore and understand the Aspera API ecosystem.
@@ -62,7 +63,7 @@ Minimum required Ruby version: >= 3.1.
62
63
 
63
64
  Release notes: see [CHANGELOG.md](CHANGELOG.md)
64
65
 
65
- A PDF version of this documentation is available here: [docs/Manual.pdf](docs/Manual.pdf).
66
+ A PDF version of this documentation is delivered with [releases](https://github.com/IBM/aspera-cli/releases).
66
67
 
67
68
  ### BUGS, FEATURES, CONTRIBUTION
68
69
 
@@ -105,9 +106,10 @@ While `ascp` can be used directly, it is limited to basic send/receive operation
105
106
 
106
107
  ### Notations, Shell, Examples
107
108
 
108
- Command line operations examples are shown using a shell such as: `bash` or `zsh`.
109
+ Command line operations examples are shown using a shell such as: `bash` (Linux) or `zsh` (macOS).
110
+ Using [Windows PowerShell or cmd](#shell-parsing-for-windows) is also possible.
109
111
 
110
- Command line arguments beginning with `my_` in examples, e.g. `my_param_value`, are user-provided value and not fixed value commands.
112
+ Command line arguments beginning with `my_` in examples, e.g. `my_param_value`, are user-provided value, and not fixed value commands.
111
113
 
112
114
  `ascli` is an API **Client** toward the remote Aspera application **Server** (Faspex, HSTS, etc...)
113
115
 
@@ -116,7 +118,7 @@ The transfer is not directly implemented in `ascli`, rather `ascli` uses one of
116
118
 
117
119
  > [!NOTE]
118
120
  > A **[Transfer Agent](#transfer-clients-agents)** is a client for the remote Transfer Server (HSTS/HSTE).
119
- > It can be local or remote.
121
+ > It can be local, or remote.
120
122
  > For example a remote Aspera Transfer Server may be used as a transfer agent (using Node API).
121
123
  > i.e. using option `--transfer=node`
122
124
 
@@ -133,7 +135,7 @@ ascli --version
133
135
  ```
134
136
 
135
137
  ```text
136
- 4.24.1
138
+ 4.25.0.pre
137
139
  ```
138
140
 
139
141
  > [!NOTE]
@@ -143,7 +145,7 @@ ascli --version
143
145
 
144
146
  Once installation is completed, you can proceed to the first use with a demo server:
145
147
 
146
- If you want to test with Aspera on Cloud, jump to section: [Wizard](#configuration-using-wizard).
148
+ If you want to test with Aspera on Cloud, jump to section: [Wizard](#wizard).
147
149
 
148
150
  To test with Aspera demo transfer server, set up the environment and then test:
149
151
 
@@ -246,16 +248,31 @@ If you don't have internet for the installation, refer to section [Installation
246
248
 
247
249
  ### Single file executable
248
250
 
249
- It is planned to provide `ascli` as a single platform-dependent executable.
250
- [Beta releases can be found here](https://ibm.biz/aspera-cli-exe).
251
-
252
251
  > [!CAUTION]
253
252
  > This is a Beta feature.
254
- > On Linux, the executable requires a minimum GLIBC version.
253
+
254
+ `ascli` is available as a single **platform-dependent executable**.
255
+ [Beta releases can be found here](https://ibm.biz/aspera-cli-exe).
256
+
257
+ Installation:
258
+
259
+ ```shell
260
+ curl -o ascli https://eudemo.asperademo.com/download/aspera-cli/ascli.4.24.1.osx-arm64
261
+ chmod a+x ascli
262
+ ./ascli conf transferd install
263
+ ```
264
+
265
+ > [!NOTE]
266
+ > Replace the URL with the one for your platform.
255
267
  > Installation of `ascp` is still required separately.
256
268
  > Refer to [Install `ascp`](#installation-of-ascp-through-transferd).
257
- >
258
- > On Linux, check the minimum required GLIBC on this site: [repology.org](https://repology.org/project/glibc/versions), or check your GLIBC version with `ldd`:
269
+
270
+ #### Linux: GLIBC version
271
+
272
+ > [!CAUTION]
273
+ > On Linux, the executable requires a minimum GLIBC version, specified in the executable name on download site.
274
+
275
+ On Linux, check your system's GLIBC version on this site: [repology.org](https://repology.org/project/glibc/versions), or check your GLIBC version with `ldd`:
259
276
 
260
277
  ```shell
261
278
  ldd --version | head -n1
@@ -293,13 +310,13 @@ Required Ruby version: >= 3.1.
293
310
 
294
311
  **In priority**, refer to the official Ruby documentation:
295
312
 
296
- - [Download Ruby](https://www.ruby-lang.org/en/downloads/)
297
- - [Installation Guide](https://www.ruby-lang.org/en/documentation/installation/)
313
+ - [Official Ruby Download](https://www.ruby-lang.org/en/downloads/)
314
+ - [Official Ruby Installation Guide](https://www.ruby-lang.org/en/documentation/installation/)
298
315
 
299
316
  For convenience, you may refer to the following sections for a proposed method for specific operating systems.
300
317
 
301
318
  Latest version of `ascli` requires a Ruby version [at least under maintenance support](https://www.ruby-lang.org/en/downloads/branches/).
302
- If only an older Ruby version is available due to system constraints, then use an older version of `ascli` that supports it.
319
+ If only an older Ruby version must be used due to system constraints, then use an older version of `ascli` that supports it.
303
320
 
304
321
  #### Windows: Installer
305
322
 
@@ -321,46 +338,46 @@ Download the Ruby installer executable from <https://rubyinstaller.org/downloads
321
338
  rubyinstaller-devkit-3.2.2-1-x64.exe /silent /currentuser /noicons /dir=C:\aspera-cli
322
339
  ```
323
340
 
324
- #### macOS: `brew`
341
+ #### Windows: Chocolatey
342
+
343
+ If you use [Chocolatey](https://chocolatey.org/), then install Ruby with:
344
+
345
+ ```powershell
346
+ choco install ruby
347
+ ```
325
348
 
326
- **macOS** comes with Ruby 2.6.
327
- It is an old unsupported version and [Apple has deprecated it](https://developer.apple.com/documentation/macos-release-notes/macos-catalina-10_15-release-notes).
328
- It will be removed from macOS in the future.
329
- Do not use it.
349
+ #### macOS: `brew`
330
350
 
331
- The recommended way is to use [Homebrew](https://brew.sh/).
351
+ If you use [Homebrew](https://brew.sh/), then install Ruby with:
332
352
 
333
353
  ```shell
334
354
  brew install ruby
335
355
  ```
336
356
 
357
+ > [!NOTE]
358
+ > This is the recommended method.
359
+
360
+ > [!WARNING]
361
+ > **macOS** comes with Ruby 2.6.
362
+ > It is an old unsupported version and [Apple has deprecated it](https://developer.apple.com/documentation/macos-release-notes/macos-catalina-10_15-release-notes).
363
+ > It will be removed from macOS in the future.
364
+ > Do not use it.
365
+ > Use the required version of Ruby.
366
+
337
367
  This installs a recent Ruby suitable for `ascli`.
338
368
 
339
- To add PATH to Ruby on Apple Silicon, add this in your shell configuration file (e.g. `~/.bash_profile` or `~/.zshrc`):
340
-
341
- ```shell
342
- use_ruby(){
343
- local version=$1
344
- case $version in list) for r in $(brew list -1 | grep '^ruby'); do
345
- echo "$(brew info --json=v1 $r | jq -r '.[0].installed[0].version') : use_ruby $r"
346
- done|gsort -k1,1V;return;;; esac
347
- local prefix=$(brew --prefix ruby${version:+@}$version)
348
- if ! test -d "$prefix";then
349
- echo "No such ruby version: $version"
350
- brew list|grep ruby
351
- return 1
352
- fi
353
- PATH="$prefix/bin:$(echo "$PATH" | tr ':' '\n' | grep -v '/ruby' | paste -sd ':' -)"
354
- PATH="$(gem env gemdir)/bin:$PATH"
355
- export LDFLAGS="-L$prefix/lib"
356
- export CPPFLAGS="-I$prefix/include"
357
- export PKG_CONFIG_PATH="$prefix/lib/pkgconfig"
358
- echo "Using: $prefix"
359
- ruby -v
360
- }
361
- use_ruby
369
+ To add PATH to Ruby on Apple Silicon, add the following lines to your shell configuration file (i.e. `~/.zshrc` if you are using `zsh`, or `~/.bash_profile` for `bash`):
370
+
371
+ ```shell
372
+ export PATH="$(brew --prefix ruby)/bin:$PATH"
373
+ export PATH="$(gem env gemdir)/bin:$PATH"
362
374
  ```
363
375
 
376
+ > [!NOTE]
377
+ > Two separate lines are needed because the second one depends on the first one.
378
+ > This is what is displayed at the end of the installation of the ruby tap,
379
+ > same as message from: `brew info ruby`
380
+
364
381
  #### Linux: Package
365
382
 
366
383
  If your Linux distribution provides a standard Ruby package, you can use it provided that the version supported.
@@ -385,10 +402,11 @@ If your Linux distribution provides a standard Ruby package, you can use it prov
385
402
  dnf install -y make automake gcc gcc-c++ kernel-devel
386
403
  ```
387
404
 
388
- - Enable the Ruby version you want:
405
+ - Enable the Ruby version you selected:
389
406
 
390
407
  ```shell
391
- dnf module -y enable ruby:3.1
408
+ dnf module -y enable ruby:3.2
409
+
392
410
  dnf install -y ruby-devel
393
411
  ```
394
412
 
@@ -411,7 +429,7 @@ apt install -y ruby ruby-dev rubygems ruby-json
411
429
  One can remove all installed gems, for example to start fresh:
412
430
 
413
431
  ```shell
414
- gem uninstall -axI $(ls $(gem env gemdir)/gems/|sed -e 's/-[^-]*$//'|sort -u)
432
+ ls $(gem env gemdir)/gems/|sed -e 's/-[^-]*$//'|sort -u|xargs gem uninstall -axI
415
433
  ```
416
434
 
417
435
  #### Unix-like: RVM: Single user installation (not root)
@@ -569,27 +587,33 @@ Those are not installed as part of dependencies because they involve compilation
569
587
  See [Gemfile](Gemfile):
570
588
 
571
589
  | name | version | comment |
572
- | ---- | ------- | ------- |
590
+ |----------------------|---------|-----------------------------------------------------|
573
591
  | grpc | ~> 1.71 | (no jruby) for Aspera Transfer Daemon |
574
- | mimemagic | ~> 0.4 | for preview |
592
+ | marcel | ~> 1.1 | for preview |
575
593
  | rmagick | ~> 6.1 | (no jruby) for terminal view |
576
594
  | symmetric-encryption | ~> 4.6 | for encrypted hash file secrets |
577
595
  | bigdecimal | ~> 3.1 | if RUBY_VERSION >= '3.4' for symmetric-encryption ? |
578
596
  | sqlite3 | ~> 2.7 | (no jruby) for async DB |
579
597
  | jdbc-sqlite3 | ~> 3.46 | (jruby) for async DB |
580
598
  | sequel | ~> 5.96 | (jruby) for async DB |
599
+ | ed25519 | ~> 1.4 | (no jruby) for ed25519 and OpenSSH file format |
600
+ | bcrypt_pbkdf | ~> 1.1 | (no jruby) for ed25519 and OpenSSH file format |
601
+ | syslog | ~> 0.3 | (no jruby) for logger=syslog |
581
602
 
582
603
  Install like this:
583
604
 
584
605
  ```shell
585
606
  gem install grpc -v '~> 1.71'
586
- gem install mimemagic -v '~> 0.4'
607
+ gem install marcel -v '~> 1.1'
587
608
  gem install rmagick -v '~> 6.1'
588
609
  gem install symmetric-encryption -v '~> 4.6'
589
610
  gem install bigdecimal -v '~> 3.1'
590
611
  gem install sqlite3 -v '~> 2.7'
591
612
  gem install jdbc-sqlite3 -v '~> 3.46'
592
613
  gem install sequel -v '~> 5.96'
614
+ gem install ed25519 -v '~> 1.4'
615
+ gem install bcrypt_pbkdf -v '~> 1.1'
616
+ gem install syslog -v '~> 0.3'
593
617
  ```
594
618
 
595
619
  ### Ruby Gem: `aspera-cli`
@@ -597,7 +621,7 @@ gem install sequel -v '~> 5.96'
597
621
  Once you have Ruby and rights to install gems, install the `aspera-cli` gem and its dependencies:
598
622
 
599
623
  ```shell
600
- gem install aspera-cli
624
+ gem install aspera-cli --pre
601
625
  ```
602
626
 
603
627
  To upgrade to the latest version:
@@ -634,20 +658,35 @@ The user installs the gem with `HighSecurity` or `MediumSecurity`: this will suc
634
658
  gem install -P MediumSecurity aspera-cli
635
659
  ```
636
660
 
661
+ #### Beta release of gem
662
+
663
+ Beta version of gem can be found here: <https://ibm.biz/aspera-cli-beta>
664
+
665
+ On Linux/macOS, install in a terminal:
666
+
667
+ ```shell
668
+ curl -sLo aspera-cli-beta.gem https://ibm.biz/aspera-cli-beta
669
+ gem install aspera-cli-beta.gem
670
+ ```
671
+
672
+ On Windows, download the link, that saves the file: `aspera-cli-beta.gem`, then install with `gem install aspera-cli-beta.gem`.
673
+
637
674
  ### FASP Protocol: `ascp`
638
675
 
639
- Most file transfers will be executed using the **FASP** protocol, using `ascp`.
640
- Only two additional files are required to perform an Aspera Transfer, which are part of Aspera Transfer Daemon:
676
+ File transfers are primarily performed using the **FASP** protocol via the `ascp` utility.
641
677
 
642
- - `ascp`
643
- - `aspera-license` (in same folder, or `../etc`)
678
+ To execute an Aspera transfer, only two additional files are required, both included with the Aspera Transfer Daemon:
679
+
680
+ - `ascp` - the transfer executable
644
681
 
645
- This can be installed either be installing an Aspera transfer software or using an `ascli` command.
682
+ - `aspera-license` - the license file (located in the same directory as `ascp` or in `../etc`)
683
+
684
+ These components can be installed either by installing the Aspera transfer software or by running the `ascli` command.
646
685
 
647
686
  #### Installation of `ascp` through `transferd`
648
687
 
649
688
  The easiest option to install `ascp` is through the use of the IBM Aspera Transfer Daemon (`transferd`).
650
- Install using `ascli` for the current platform with:
689
+ Install it using `ascli` (for the current platform) with:
651
690
 
652
691
  ```shell
653
692
  ascli config transferd install
@@ -671,8 +710,8 @@ The installation of the transfer binaries follows those steps:
671
710
  - By default, the archive is extracted to `$HOME/.aspera/sdk`.
672
711
  - The destination folder can be changed by setting the `sdk_folder` option.
673
712
 
674
- | Option | Default | Description |
675
- |-----------------|---------|-------------|
713
+ | Option | Default | Description |
714
+ |-----------------|---------|--------------------------------------------------------|
676
715
  | `sdk_url` | `DEF` | URL to download the Aspera Transfer Daemon archive.<br/>`DEF` means: select from available archives. |
677
716
  | `locations_url` | `https://ibm.biz/sdk_location` | URL to get download URLs of Aspera Transfer Daemon from IBM official repository. |
678
717
  | `sdk_folder` | `$HOME/.aspera/sdk` | Folder where the SDK archive is extracted. |
@@ -713,6 +752,7 @@ If the embedded method is not used, the following packages are also suitable:
713
752
 
714
753
  - IBM Aspera Connect Client (Free)
715
754
  - IBM Aspera Desktop Client (Free)
755
+ - IBM Aspera for Desktop (Free)
716
756
  - IBM Aspera High Speed Transfer Server (Licensed)
717
757
  - IBM Aspera High Speed Transfer Endpoint (Licensed)
718
758
 
@@ -733,14 +773,15 @@ Refer to section: [Transfer Agents](#transfer-clients-agents)
733
773
 
734
774
  #### Gem files and dependencies
735
775
 
736
- The sample script: [windows/build_package.sh](windows/build_package.sh) can be used to download all necessary gems and dependencies in a `tar.gz`.
737
-
738
- ```shell
739
- ./build_package.sh aspera-cli 4.18.0
740
- ```
776
+ Necessary gems can be packed in a `tar.gz` like this:
741
777
 
742
- ```text
743
- Archive: aspera-cli-4.18.0-gems.tgz
778
+ ```bash
779
+ mkdir temp_folder
780
+ gem install aspera-cli:4.25.0.pre --no-document --install-dir temp_folder
781
+ find temp_folder
782
+ mv temp_folder/cache aspera-cli-4.25.0.pre-gems
783
+ rm -fr temp_folder
784
+ tar zcvf aspera-cli-4.25.0.pre-gems aspera-cli-4.25.0.pre-gems.tgz
744
785
  ```
745
786
 
746
787
  #### Unix-like
@@ -820,7 +861,7 @@ ascli config ascp install --sdk-url=file:///sdk.zip
820
861
  ```
821
862
 
822
863
  > [!NOTE]
823
- > An example of installation script is provided: [windows/install.bat](windows/install.bat)
864
+ > A beta version of a packaged installed is available.
824
865
 
825
866
  ### Container
826
867
 
@@ -863,7 +904,7 @@ That is simple, but there are limitations:
863
904
 
864
905
  #### Container: Details
865
906
 
866
- The container image is built from this [Dockerfile](container/Dockerfile.tmpl.erb).
907
+ The container image is built from this [Dockerfile](build/container/Dockerfile.tmpl.erb).
867
908
  The entry point is `ascli` and the default command is `help`.
868
909
 
869
910
  The container can 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)
@@ -885,7 +926,7 @@ ascli -v
885
926
  ```
886
927
 
887
928
  ```text
888
- 4.24.1
929
+ 4.25.0.pre
889
930
  ```
890
931
 
891
932
  In order to keep persistency of configuration on the host, you should specify your user's configuration folder as a volume for the container.
@@ -1275,7 +1316,7 @@ It's up to the program to split arguments:
1275
1316
  - [Windows: How Command Line Parameters Are Parsed](https://daviddeley.com/autohotkey/parameters/parameters.htm#RUBY)
1276
1317
  - [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/)
1277
1318
 
1278
- is a Ruby program, so Ruby parses the command line (receibed with `GetCommandLineW`) into arguments and provides them to the Ruby code (`$0` and `ARGV`).
1319
+ is a Ruby program, so Ruby parses the command line (received with `GetCommandLineW`) into arguments and provides them to the Ruby code (`$0` and `ARGV`).
1279
1320
  Ruby vaguely follows the Microsoft C/C++ parameter parsing rules.
1280
1321
  (See `w32_cmdvector` in Ruby source [`win32.c`](https://github.com/ruby/ruby/blob/master/win32/win32.c#L1766)) : <!--cspell:disable-line-->
1281
1322
 
@@ -1312,12 +1353,12 @@ Basically it handles I/O redirection (`<>|`), shell variables (`%`), multiple co
1312
1353
  Eventually, all those special characters are removed from the command line unless escaped with `^` or `"`.
1313
1354
  `"` are kept and given to the program.
1314
1355
 
1315
- #### Shell parsing for Windows: Powershell
1356
+ #### Shell parsing for Windows: PowerShell
1316
1357
 
1317
- For Powershell, it actually depends on the version of it (7.3+).
1358
+ For PowerShell, it actually depends on the version of it (5.1, 7.3+).
1318
1359
 
1319
- A difficulty is that Powershell parses the command line for its own use and manages special characters, but then it passes the command line to the program (Ruby) as a single string, possibly without the special characters.
1320
- Since we usually do not use powershell features, it is advised to use the "stop-parsing" token `--%`.
1360
+ A difficulty is that PowerShell parses the command line for its own use and manages special characters, but then it passes the command line to the program (Ruby) as a single string, possibly without the special characters.
1361
+ If not using PowerShell features (e.g. variable), one can use the "stop-parsing" token `--%`.
1321
1362
 
1322
1363
  Details can be found here:
1323
1364
 
@@ -1325,22 +1366,87 @@ Details can be found here:
1325
1366
 
1326
1367
  - [quoting rules](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules)
1327
1368
 
1328
- The following examples give the same result on Windows using Powershell:
1369
+ ##### PowserShell 5
1370
+
1371
+ - Check your powershell version:
1372
+
1373
+ ```powershell
1374
+ $psversiontable.psversion.Major
1375
+ ```
1376
+
1377
+ ```text
1378
+ 5
1379
+ ```
1380
+
1381
+ The following examples give the same result on Windows using PowerShell 5:
1382
+
1383
+ ```text
1384
+ ╭───────┬───────╮
1385
+ │ field │ value │
1386
+ ╞═══════╪═══════╡
1387
+ │ x │ true │
1388
+ │ k │ v │
1389
+ ╰───────┴───────╯
1390
+ ```
1391
+
1392
+ - Use PowerShell argument `--%` to place PowerShell in "stop-parsing" mode.
1329
1393
 
1330
1394
  ```powershell
1331
- PS C:\> echo $psversiontable.psversion
1395
+ ascli config echo --% @json:'{"k":"v","x":true}'
1396
+ ```
1397
+
1398
+ - Triple double quotes are replaced with a single double quote in normal mode:
1332
1399
 
1333
- Major Minor Build Revision
1334
- ----- ----- ----- --------
1335
- 5 1 19041 4046
1400
+ ```powershell
1401
+ ascli config echo @json:'{"""k""":"""v""","""x""":true}'
1402
+ ```
1336
1403
 
1337
- PS C:\> ascli config echo --% @json:'{"k":"v","x":"y"}'
1404
+ - To insert PowerShell variables in the JSON string, one can do:
1338
1405
 
1339
- PS C:\> ascli config echo @json:'{"""k""":"""v""","""x""":"""y"""}'
1406
+ ```powershell
1407
+ $var="v"
1408
+ ascli conf echo $('@json:{"""k""":"""' + $var + '""","""x""":true}')
1340
1409
  ```
1341
1410
 
1342
- > [!NOTE]
1343
- > The special Powershell argument `--%` places Powershell in "stop-parsing" mode.
1411
+ ##### PowserShell 7
1412
+
1413
+ - Check your powershell version:
1414
+
1415
+ ```powershell
1416
+ $psversiontable.psversion.Major
1417
+ ```
1418
+
1419
+ ```text
1420
+ 7
1421
+ ```
1422
+
1423
+ The following examples give the same result on Windows using PowerShell 7:
1424
+
1425
+ - Use PowerShell argument `--%` to place PowerShell in "stop-parsing" mode.
1426
+
1427
+ ```powershell
1428
+ ascli config echo --% @json:{"k":"v","x":true}
1429
+ ```
1430
+
1431
+ - Single quote protects double quote in normal mode:
1432
+
1433
+ ```powershell
1434
+ ascli config echo @json:'{"k":"v","x":true}'
1435
+ ```
1436
+
1437
+ - To insert PowerShell variables in the JSON string, one can do:
1438
+
1439
+ ```powershell
1440
+ $var="v"
1441
+ ascli conf echo $('@json:{"k":"' + $var + '","x":true}')
1442
+ ```
1443
+
1444
+ - Use PowerShell structure and then convert to JSON string:
1445
+
1446
+ ```powershell
1447
+ $var="v"
1448
+ ascli conf echo "@json:$(@{ k = $var; x = $true } | ConvertTo-Json -Compress)"
1449
+ ```
1344
1450
 
1345
1451
  #### Extended Values (JSON, Ruby, ...)
1346
1452
 
@@ -1366,7 +1472,7 @@ ascli config echo 1 2 3
1366
1472
  ERROR: Argument: unprocessed values: ["2", "3"]
1367
1473
  ```
1368
1474
 
1369
- `config echo` displays the value of the **first** argument using Ruby syntax: it surrounds a string with `"` and add `\` before special characters.
1475
+ `config echo` displays the value of the **first** argument using the current output `format`.
1370
1476
 
1371
1477
  > [!NOTE]
1372
1478
  > It gets its value after shell command line parsing and `ascli` extended value parsing.
@@ -1379,7 +1485,7 @@ Depending on the case, a different `format` option is used to display the actual
1379
1485
  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.
1380
1486
 
1381
1487
  Double quotes are processed by the shell to create a single string argument.
1382
- For **POSIX shells**, single quotes can also be used in this case, or protect the special character ` ` (space) with a backslash. <!-- markdownlint-disable-line -->
1488
+ For **POSIX shells**, single quotes can also be used in this case, or protect the special character ` ` (space) with a backslash.
1383
1489
 
1384
1490
  ```shell
1385
1491
  ascli config echo "Hello World" --format=text
@@ -1398,7 +1504,7 @@ Even if the variable contains spaces it results only in one argument for `ascli`
1398
1504
 
1399
1505
  > [!NOTE]
1400
1506
  > We use a simple shell variable in this example.
1401
- > Note that it does not need to be exported as an environment variable.
1507
+ > It does not need to be exported as an environment variable.
1402
1508
 
1403
1509
  ```shell
1404
1510
  MYVAR="Hello World"
@@ -1564,7 +1670,7 @@ The value of **Options** and **Positional Arguments** is evaluated with the [Ext
1564
1670
  - **Commands**, typically at the beginning
1565
1671
  - **Command Parameters**, mandatory arguments, e.g. creation data or entity identifier
1566
1672
 
1567
- When options are removed from the command line, the remaining arguments are typically **Positional Arguments** with a pre-defined order.
1673
+ When options are removed from the command line, the remaining arguments are typically **Positional Arguments** with a significant, pre-defined order.
1568
1674
 
1569
1675
  **Commands** are typically entity types (e.g. `users`) or verbs (e.g. `create`) to act on those entities.
1570
1676
  Its value is a `String` that must belong to a fixed list of values in a given context.
@@ -1581,14 +1687,13 @@ ascli config ascp info
1581
1687
  - `info` is the third level command: action to be performed
1582
1688
 
1583
1689
  Typically, **Commands** are located at the **beginning** of the command line.
1584
- Order is significant.
1585
1690
  The provided command must match one of the supported commands in the given context.
1586
1691
  If wrong, or no command is provided when expected, an error message is displayed and the list of supported commands is displayed.
1587
1692
 
1588
1693
  Standard **Commands** are: `create`, `show`, `list`, `modify`, `delete`.
1589
1694
  Some entities also support additional commands.
1590
1695
  When those additional commands are related to an entity also reachable in another context, then those commands are located below command `do`.
1591
- For example sub-commands appear after entity selection (identifier), e.g. `ascli aoc admin node do 1234 browse /`: `browse` is a sub-command of `node`.
1696
+ For example sub-commands appear after entity selection (identifier), e.g. `ascli aoc admin node do <node_id> browse /`: `browse` is a sub-command of `node`.
1592
1697
 
1593
1698
  **Command Parameters** are typically mandatory values for a command, such as entity creation data or entity identifier.
1594
1699
 
@@ -1603,6 +1708,29 @@ If a **Command Parameter** begins with `-`, then either use the `@val:` syntax (
1603
1708
 
1604
1709
  A few **Command Parameters** are optional, they are always located at the end of the command line.
1605
1710
 
1711
+ A special Extended Value `@:` has the following meaning:
1712
+
1713
+ - Take all remaining positional arguments
1714
+ - Expect each of them to have the format: `<path>=<value>`
1715
+ - `<path>` designates a path in a complex structure such as Hash or Array.
1716
+ `.` is the path separator.
1717
+ Each segment separated by a dot represents a key in a nested structure.
1718
+ Integer index denote Array, and other denote Hash index.
1719
+ - `ascli` tries to convert `<value>` to the simplest type (bool, int, float, string).
1720
+ If a specific type is required, it can be specified using the `@json:` or `@ruby:` syntax.
1721
+ For example, `--a.b.c=1` is equivalent to `--a=@json'{"b":{"c":1}}'`.
1722
+ This allows specifying nested keys directly on the command line using a concise **dot-separated** syntax.
1723
+
1724
+ Example:
1725
+
1726
+ ```bash
1727
+ ascli conf echo @: a.b=1 a.c=2 a.d.0=hello a.d.1=world --format=json
1728
+ ```
1729
+
1730
+ ```json
1731
+ {"a":{"b":1,"c":2,"d":["hello","world"]}}
1732
+ ```
1733
+
1606
1734
  #### Options
1607
1735
 
1608
1736
  Command-line options, such as `--log-level=debug`, follow these conventions:
@@ -1634,13 +1762,17 @@ Exceptions and Special Cases:
1634
1762
  - **Option Terminator**:
1635
1763
  The special option `--` ends option parsing.
1636
1764
  All subsequent arguments, including those starting with `-`, are treated as positional arguments.
1637
- - **Dot Notation for Hashes**:
1765
+ - **Dot Notation for Hash and Array**:
1638
1766
  If an option name contains a dot (`.`), it is interpreted as a `Hash`.
1639
1767
  Each segment separated by a dot represents a key in a nested structure.
1640
1768
  `ascli` tries to convert the value to the simplest type (bool, int, float, string).
1641
1769
  If a specific type is required, it can be specified using the `@json:` or `@ruby:` syntax.
1642
1770
  For example, `--a.b.c=1` is equivalent to `--a=@json'{"b":{"c":1}}'`.
1643
1771
  This allows specifying nested keys directly on the command line using a concise **dot-separated** syntax.
1772
+ - **Cummulative Hashes**:
1773
+ When an option of type `Hash` is set, the value is deep-merged to an existing or default value.
1774
+ Setting to `@none:` is equivalent to setting to `@json:{}`, i.e. an empty `Hash`.
1775
+ This can be used to start from an empty value, and not used existing default value.
1644
1776
 
1645
1777
  Example:
1646
1778
 
@@ -1672,6 +1804,7 @@ The value for **any** options can come from the following locations (in this ord
1672
1804
  Environment variable starting with prefix: ASCLI_ are taken as option values, e.g. `ASCLI_OPTION_NAME` is for `--option-name`.
1673
1805
 
1674
1806
  Option `show_config` dry runs the configuration, and then returns currently set values for options.
1807
+
1675
1808
  `ascli --show-config` outputs global options only, and `ascli [plugin] --show-config` outputs global and plugin default options.
1676
1809
  In addition, option `--show-config` can be added at the end of any full command line, this displays the options that would be used for the command.
1677
1810
 
@@ -1704,8 +1837,8 @@ To redirect results to a file, use option `output`.
1704
1837
 
1705
1838
  Depending on action, the output will contain:
1706
1839
 
1707
- | Result Type | Description |
1708
- |-----------------|-------------------|
1840
+ | Result Type | Description |
1841
+ |-----------------|-----------------------------------------------------------------------------------|
1709
1842
  | `single_object` | Displayed as a 2 dimensional table: one line per field, first column is field name, and second is field value. Nested hashes are collapsed. |
1710
1843
  | `object_list` | Displayed as a 2 dimensional table: one line per item, one column per field. |
1711
1844
  | `value_list` | A table with one column. |
@@ -1713,47 +1846,75 @@ Depending on action, the output will contain:
1713
1846
  | `status` | A message. |
1714
1847
  | `other_struct` | A complex structure that cannot be displayed as an array. |
1715
1848
 
1849
+ #### Enhanced display of special values
1850
+
1851
+ Special values are highlighted as follows in `format=table`:
1852
+
1853
+ | Value | Display |
1854
+ |----------------|------------------|
1855
+ | `nil` | `<null>` |
1856
+ | empty `String` | `<empty string>` |
1857
+ | empty `Array` | `<empty list>` |
1858
+ | empty `Hash` | `<empty dict>` |
1859
+
1860
+ Example:
1861
+
1862
+ ```shell
1863
+ ascli config echo @json:'{"ni":null,"es":"","ea":[],"eh":{}}'
1864
+ ```
1865
+
1866
+ ```text
1867
+ ╭───────┬────────────────╮
1868
+ │ field │ value │
1869
+ ╞═══════╪════════════════╡
1870
+ │ ni │ <null> │
1871
+ │ es │ <empty string> │
1872
+ │ ea │ <empty list> │
1873
+ │ eh │ <empty dict> │
1874
+ ╰───────┴────────────────╯
1875
+ ```
1876
+
1716
1877
  #### Option: `format`
1717
1878
 
1718
1879
  The style of output can be set using the `format` option:
1719
1880
 
1720
- | `format` | Output formatting |
1721
- |----------|----------------------|
1722
- | `table` | Text table (default) |
1723
- | `text` | Value as `String` |
1724
- | `ruby` | Ruby code |
1725
- | `json` | JSON code |
1726
- | `jsonpp` | JSON pretty printed |
1727
- | `yaml` | YAML |
1728
- | `csv` | Comma Separated Values |
1729
- | `image` | Image URL or data |
1730
- | `nagios` | Suitable for Nagios |
1881
+ | `format` | Output formatting |
1882
+ |----------|-------------------------|
1883
+ | `table` | Text table (default) |
1884
+ | `text` | Value as `String` |
1885
+ | `ruby` | Ruby code |
1886
+ | `json` | JSON code |
1887
+ | `jsonpp` | JSON pretty printed |
1888
+ | `yaml` | YAML |
1889
+ | `csv` | Comma Separated Values |
1890
+ | `image` | Image URL or data |
1891
+ | `nagios` | Suitable for Nagios |
1731
1892
 
1732
1893
  By default, result of type `single_object` and `object_list` are displayed using format `table`.
1733
1894
 
1734
1895
  #### Option: `table_style`
1735
1896
 
1736
- The table style can be customized with option: `table_style` which expects a `Hash`.
1897
+ The way `format`: `table` and `csv` are generated can be customized with option: `table_style` which expects a `Hash`.
1737
1898
 
1738
1899
  For `format=table`, options are the ones described in gem [`terminal-table`](https://github.com/tj/terminal-table).
1739
1900
 
1740
- For `format=csv`, options are described in gem [`csv`](https://ruby.github.io/csv/CSV.html#class-CSV-label-Options+for+Generating).
1741
-
1742
1901
  For example, to display a table with thick Unicode borders:
1743
1902
 
1744
1903
  ```shell
1745
1904
  ascli config preset over --table-style=@ruby:'{border: :unicode_thick_edge}'
1746
1905
  ```
1747
1906
 
1907
+ > [!NOTE]
1908
+ > Other border styles exist, not limited to: `:unicode`, `:unicode_round`.
1909
+
1910
+ For `format=csv`, options are described in gem [`csv`](https://ruby.github.io/csv/CSV.html#class-CSV-label-Options+for+Generating).
1911
+
1748
1912
  For example, to display a CSV with headers and quotes:
1749
1913
 
1750
1914
  ```shell
1751
1915
  ascli config echo @json:'[{"name":"foo","id":1},{"name":"bar","id":8}]' --format=csv --table=@json:'{"headers":true,"force_quotes":true}'
1752
1916
  ```
1753
1917
 
1754
- > [!NOTE]
1755
- > Other border styles exist, not limited to: `:unicode`, `:unicode_round`.
1756
-
1757
1918
  #### Option: `flat_hash`: Single level `Hash`
1758
1919
 
1759
1920
  This option controls how object fields are displayed for complex objects.
@@ -1801,57 +1962,29 @@ ascli config echo @json:'{"A":"a","B":[{"name":"B1","value":"b1"},{"name":"B2","
1801
1962
  ╰───────┴────────────────────────────────────────────────────────────────────────╯
1802
1963
  ```
1803
1964
 
1804
- #### Enhanced display of special values
1805
-
1806
- Special values are highlighted as follows::
1807
-
1808
- | Value | Display |
1809
- |----------------|------------------|
1810
- | `nil` | `<null>` |
1811
- | empty `String` | `<empty string>` |
1812
- | empty `Array` | `<empty list>` |
1813
- | empty `Hash` | `<empty dict>` |
1814
-
1815
- Example:
1816
-
1817
- ```shell
1818
- ascli config echo @json:'{"ni":null,"es":"","ea":[],"eh":{}}'
1819
- ```
1820
-
1821
- ```text
1822
- ╭───────┬────────────────╮
1823
- │ field │ value │
1824
- ╞═══════╪════════════════╡
1825
- │ ni │ <null> │
1826
- │ es │ <empty string> │
1827
- │ ea │ <empty list> │
1828
- │ eh │ <empty dict> │
1829
- ╰───────┴────────────────╯
1830
- ```
1831
-
1832
1965
  #### Option: `multi_single`
1833
1966
 
1834
1967
  This option controls how result fields are displayed as columns or lines, when option `format` is set to `table`.
1835
1968
  Default is `no`.
1836
1969
  There are two types of results that are affected by this option:
1837
1970
 
1838
- | Result | Description |
1839
- |-----------------|-------------|
1840
- | `single_object` | A single item with multiple fields. |
1971
+ | Result | Description |
1972
+ |-----------------|---------------------------------------------|
1973
+ | `single_object` | A single item with multiple fields. |
1841
1974
  | `object_list` | A list of items, each with multiple fields. |
1842
1975
 
1843
1976
  An item (object) is displayed in one of those 2 ways:
1844
1977
 
1845
- | Display | rows | columns |
1846
- |------------|--------|---------|
1978
+ | Display | rows | columns |
1979
+ |------------|--------|---------------------|
1847
1980
  | Simple | Fields | `field` and `value` |
1848
- | Transposed | Items | Fields |
1981
+ | Transposed | Items | Fields |
1849
1982
 
1850
1983
  The display of result is as follows:
1851
1984
 
1852
- | Result | `no` | `yes` | `single` |
1853
- |-----------------|------------|------------|----------|
1854
- | `single_object` | Simple | Simple | Simple |
1985
+ | Result | `no` | `yes` | `single` |
1986
+ |-----------------|------------|-------------|-------------------------------------|
1987
+ | `single_object` | Simple | Simple | Simple |
1855
1988
  | `object_list` | Transposed | Simple<br/>(Multiple objects) | Simple if 1 object,<br/>transposed if 2+ objects |
1856
1989
 
1857
1990
  This parameter can be set as a global default with:
@@ -2004,17 +2137,17 @@ In above example, the same result is obtained with option:
2004
2137
 
2005
2138
  Option `select` applies the filter after a possible "flattening" with option: `flat_hash`.
2006
2139
 
2007
- #### Percent selector
2140
+ ### Percent selector
2008
2141
 
2009
2142
  The percent selector allows identification of an entity by another unique identifier other than the native identifier.
2010
2143
 
2011
2144
  Syntax: `%<field>:<value>`
2012
2145
 
2013
2146
  When a command is executed on a single entity, the entity is identified by a unique identifier that follows the command.
2014
- For example, in the following command, `1234` is the user's identifier:
2147
+ For example, in the following command, `_my_user_id_` is the user's identifier:
2015
2148
 
2016
2149
  ```shell
2017
- ascli aoc admin user show 1234
2150
+ ascli aoc admin user show _my_user_id_
2018
2151
  ```
2019
2152
 
2020
2153
  Some commands provide the following capability:
@@ -2043,38 +2176,42 @@ Decoders act like a function with its parameter on right-hand side and are recog
2043
2176
 
2044
2177
  The following decoders are supported:
2045
2178
 
2046
- | Decoder | Parameter| Returns | Description |
2047
- |----------|----------|----------|-------------|
2048
- | `base64` | `String` | `String` | Decode a base64 encoded string |
2049
- | `csvt` | `String` | `Array` | Decode a titled CSV value |
2050
- | `env` | `String` | `String` | Read from a named env var name, e.g. `--password=@env:MYPASSVAR` |
2051
- | `file` | `String` | `String` | Read value from specified file (prefix `~/` is replaced with the users home folder), e.g. `--key=@file:~/.ssh/mykey` |
2052
- | `json` | `String` | Any | Decode JSON values (convenient to provide complex structures) |
2053
- | `lines` | `String` | `Array` | Split a string in multiple lines and return an array |
2054
- | `list` | `String` | `Array` | Split a string in multiple items taking first character as separator and return an array |
2055
- | `none` | None | Nil | A null value |
2056
- | `path` | `String` | `String` | Performs path expansion on specified path (prefix `~/` is replaced with the users home folder), e.g. `--config-file=@path:~/sample_config.yml` |
2179
+ | Decoder | Parameter| Returns | Description |
2180
+ |----------|----------|----------|------------------------------------------------------------------------------------------|
2181
+ | `base64` | `String` | `String` | Decode a base64 encoded string. |
2182
+ | `csvt` | `String` | `Array` | Decode a titled CSV value. |
2183
+ | `env` | `String` | `String` | Read from a named env var name. e.g. `--password=@env:MYPASSVAR` |
2184
+ | `file` | `String` | `String` | Read value from specified file (prefix `~/` is replaced with the users home folder). e.g. `--key=@file:~/.ssh/mykey` |
2185
+ | `json` | `String` | Any | Decode JSON values. Convenient to provide complex structures. |
2186
+ | `lines` | `String` | `Array` | Split a string in multiple lines and return an `Array`. |
2187
+ | `list` | `String` | `Array` | Split a string in multiple items taking first character as separator and return an `Array`. |
2188
+ | `none` | None | Nil | A `null` value. |
2189
+ | `path` | `String` | `String` | Performs path expansion on specified path (prefix `~/` is replaced with the user's home folder). e.g. `--config-file=@path:~/sample_config.yml` |
2057
2190
  | `preset` | `String` | `Hash` | Get whole option preset value by name. Sub-values can also be used, using `.` as separator. e.g. `foo.bar` is `conf[foo][bar]` |
2058
- | `extend` | `String` | `String` | Evaluates embedded extended value syntax in string |
2191
+ | `extend` | `String` | `String` | Evaluates embedded extended value syntax in string. |
2059
2192
  | `re` | `String` | `Regexp` | Ruby Regular Expression (short for `@ruby:/.../`) |
2060
- | `ruby` | `String` | Any | Execute specified Ruby code |
2061
- | `secret` | None | `String` | Ask password interactively (hides input) |
2062
- | `stdin` | None | `String` | Read from stdin in text mode (no value on right) |
2063
- | `stdbin` | None | `String` | Read from stdin in binary mode (no value on right) |
2064
- | `uri` | `String` | `String` | Read value from specified URL, e.g. `--fpac=@uri:http://serv/f.pac` |
2193
+ | `ruby` | `String` | Any | Execute specified Ruby code. |
2194
+ | `secret` | None | `String` | Ask password interactively (hides input). |
2195
+ | `stdin` | None | `String` | Read from stdin in text mode (no value on right). |
2196
+ | `stdbin` | None | `String` | Read from stdin in binary mode (no value on right). |
2197
+ | `uri` | `String` | `String` | Read value from specified URL. e.g. `--fpac=@uri:http://serv/f.pac` |
2065
2198
  | `val` | `String` | `String` | Prevent decoders on the right to be decoded. e.g. `--key=@val:@file:foo` sets the option `key` to value `@file:foo`. |
2066
- | `yaml` | `String` | Any | Decode YAML |
2067
- | `zlib` | `String` | `String` | Decompress data using zlib |
2199
+ | `yaml` | `String` | Any | Decode YAML. |
2200
+ | `zlib` | `String` | `String` | Decompress data using zlib. |
2201
+ | `p` | None | Any | Parses remaining arguments as `Hash` or `Array`. |
2068
2202
 
2069
2203
  > [!NOTE]
2070
2204
  > A few commands support a value of type `Proc` (lambda expression).
2071
- > For example, the **Extended Value** `@ruby:'->(i){i["attr"]}'` is a lambda expression that returns the value for key `attr` of the `Hash` `i`.
2205
+ > For example, the **Extended Value** `@ruby:'->(i){i["attr"]}'` is a lambda expression that returns the value for key `attr` of the `Hash` parameter named `i`.
2072
2206
 
2073
2207
  To display the result of an extended value, use the `config echo` command.
2074
2208
 
2075
2209
  The `extend` decoder is useful to evaluate embedded extended value syntax in a string.
2076
2210
  It expects a `@` to close the embedded extended value syntax.
2077
2211
 
2212
+ Option `parser` allows definition of a default parser when the positinal parameter or option expects a `Hash` or `Array`.
2213
+ For example, with `--parser=json`, the parameter `{}` will be parsed as an empty JSON Hash, even without prefix `@json:`.
2214
+
2078
2215
  Example: Create a `Hash` value with the convenient `@json:` decoder:
2079
2216
 
2080
2217
  ```shell
@@ -2151,15 +2288,17 @@ EOF
2151
2288
  {"key1":"value1","key2":["item1","item2"],"key3":{"key4":"value4","key5":"value5"}}
2152
2289
  ```
2153
2290
 
2154
- ### Configuration and Persistency Folder
2291
+ ### Main, configuration and Persistency Folder
2155
2292
 
2156
- `ascli` configuration and persistency files (token cache, file lists, persistency files) are stored by default in `[User's home folder]/.aspera/ascli`.
2293
+ `ascli` looks for configuration and persistency files (token cache, file lists, persistency files) in the folder specified using option `home`.
2294
+ The default value is `[User's home folder]/.aspera/ascli`.
2157
2295
 
2158
2296
  > [!NOTE]
2159
- > `[User's home folder]` is found using Ruby's `Dir.home` (`rb_w32_home_dir`).
2160
- > It uses the `HOME` env var primarily, and on MS Windows it also looks at `%HOMEDRIVE%%HOMEPATH%` and `%USERPROFILE%`.
2161
- > `ascli` sets the env var `%HOME%` to the value of `%USERPROFILE%` if set and exists.
2162
- > So, on Windows `%USERPROFILE%` is used as it is more reliable than `%HOMEDRIVE%%HOMEPATH%`.
2297
+ > The `[User's home folder]` is determined using Rubys `Dir.home` method.
2298
+ > Primary source: The HOME environment variable.
2299
+ > On Windows: Ruby also checks `%HOMEDRIVE%%HOMEPATH%` and `%USERPROFILE%` (via `rb_w32_home_dir`).
2300
+ > Additionally, `ascli` sets the `%HOME%` environment variable to the value of `%USERPROFILE%` if it exists and is valid.
2301
+ > Therefore, on Windows, `%USERPROFILE%` is preferred because it is generally more reliable than `%HOMEDRIVE%%HOMEPATH%`.
2163
2302
 
2164
2303
  The configuration folder can be displayed using :
2165
2304
 
@@ -2172,9 +2311,11 @@ ascli config folder
2172
2311
  ```
2173
2312
 
2174
2313
  > [!NOTE]
2175
- > This is equivalent to: `ascli --show-config --fields=home`
2314
+ > This is equivalent to display the value of the `home` option.
2176
2315
 
2177
- It can be overridden using option `home`.
2316
+ ```shell
2317
+ ascli --show-config --fields=home
2318
+ ```
2178
2319
 
2179
2320
  Example (Windows):
2180
2321
 
@@ -2186,11 +2327,28 @@ ascli config folder
2186
2327
  C:\Users\Kenji\.aspera\ascli
2187
2328
  ```
2188
2329
 
2189
- When OAuth is used (AoC, Faspex5) `ascli` keeps a cache of generated bearer tokens in folder `persist_store` in configuration folder by default.
2330
+ When OAuth is used (AoC, Faspex5) `ascli` keeps a cache of generated bearer tokens in folder `persist_store` located in the configuration folder by default.
2190
2331
  Option `cache_tokens` (**yes**/no) allows controlling if OAuth tokens are cached on file system, or generated for each request.
2191
2332
  The command `config tokens flush` clears that cache.
2192
2333
  Tokens are kept on disk for a maximum of 30 minutes (`TOKEN_CACHE_EXPIRY_SEC`) and garbage collected after that.
2193
- When a token has expired, then a new token is generated, either using a refresh_token if it is available, or by the default method.
2334
+ When a token has expired, then a new token is generated, either using a `refresh_token` if it is available, or by the default method.
2335
+
2336
+ ### Configuration file
2337
+
2338
+ On the first execution of `ascli`, an empty configuration file is created in the configuration folder (`ascli config folder`).
2339
+ There is no mandatory information required in this file.
2340
+ The use of it is optional as any option can be provided on the command line.
2341
+
2342
+ Although the file is a standard `YAML` file, `ascli` provides commands to read and modify it using the `config` command.
2343
+
2344
+ All options for `ascli` can be set on command line, or by env vars, or using [Option Preset](#option-preset) in the configuration file.
2345
+
2346
+ A configuration file provides a way to define default values, especially for authentication options, thus avoiding to always having to specify those options on the command line.
2347
+
2348
+ The default configuration file is: `$HOME/.aspera/ascli/config.yaml` (this can be overridden with option `--config-file=path` or its env var).
2349
+
2350
+ The configuration file is a catalog of named lists of options, called: [Option Preset](#option-preset).
2351
+ Then, instead of specifying some common options on the command line (e.g. address, credentials), it is possible to invoke the ones of an [Option Preset](#option-preset) (e.g. `mypreset`) using the option `preset`: `--preset=mypreset` or its shortcut: `-Pmypreset`.
2194
2352
 
2195
2353
  ### Invalid Filename Characters
2196
2354
 
@@ -2210,23 +2368,8 @@ The default value is `_<>:"/\|?*`, corresponding to replacement character `_` an
2210
2368
  Some temporary files may be needed during runtime.
2211
2369
  The temporary folder may be specified with option: `temp_folder`.
2212
2370
  Temporary files are deleted at the end of execution unless option: `clean_temp` is set to `no`.
2213
-
2214
- ### Configuration file
2215
-
2216
- On the first execution of `ascli`, an empty configuration file is created in the configuration folder (`ascli config folder`).
2217
- There is no mandatory information required in this file.
2218
- The use of it is optional as any option can be provided on the command line.
2219
-
2220
- Although the file is a standard `YAML` file, `ascli` provides commands to read and modify it using the `config` command.
2221
-
2222
- All options for `ascli` can be set on command line, or by env vars, or using [Option Preset](#option-preset) in the configuration file.
2223
-
2224
- A configuration file provides a way to define default values, especially for authentication options, thus avoiding to always having to specify those options on the command line.
2225
-
2226
- The default configuration file is: `$HOME/.aspera/ascli/config.yaml` (this can be overridden with option `--config-file=path` or its env var).
2227
-
2228
- The configuration file is a catalog of named lists of options, called: [Option Preset](#option-preset).
2229
- Then, instead of specifying some common options on the command line (e.g. address, credentials), it is possible to invoke the ones of an [Option Preset](#option-preset) (e.g. `mypreset`) using the option `preset`: `--preset=mypreset` or its shortcut: `-Pmypreset`.
2371
+ By default (`@sys`), the temporary folder is the system's temporary folder for the current user (Ruby `Etc.systmpdir`).
2372
+ A special value of `@env` will set the folder to Ruby `Dir.tmpdir` which uses regular env var to set the temp folder.
2230
2373
 
2231
2374
  #### Option Preset
2232
2375
 
@@ -2325,7 +2468,7 @@ ascli config preset get default _plugin_name_
2325
2468
  "_default_preset_for_plugin_"
2326
2469
  ```
2327
2470
 
2328
- #### Plugin: `config`: Configuration
2471
+ ### Plugin: `config`: Configuration
2329
2472
 
2330
2473
  Plugin `config` provides general commands for `ascli`:
2331
2474
 
@@ -2371,7 +2514,7 @@ ascli config preset set GLOBAL version_check_days 0
2371
2514
  ascli config preset set default config my_common_defaults
2372
2515
  ```
2373
2516
 
2374
- ### Tested commands for `config`
2517
+ #### Tested commands for `config`
2375
2518
 
2376
2519
  > [!NOTE]
2377
2520
  > Add `ascli config` in front of the following commands:
@@ -2394,11 +2537,14 @@ ascp show
2394
2537
  ascp spec
2395
2538
  check_update
2396
2539
  coffee
2540
+ coffee --log-level=trace2 --log-format=caller
2397
2541
  coffee --ui=text
2398
2542
  coffee --ui=text --image=@json:'{"text":true,"double":false}'
2399
2543
  coffee --ui=text --image=@json:'{"text":true}'
2400
2544
  detect https://faspex5.example.com/path
2545
+ detect https://faspex5.example.com/path faspex5
2401
2546
  detect https://node.example.com/path
2547
+ detect https://server.example.com/path server
2402
2548
  detect https://shares.example.com/path shares
2403
2549
  detect https://tst.example.com/path faspio
2404
2550
  detect https://tst.example.com/path httpgw
@@ -2415,10 +2561,12 @@ echo @json:'[{"user":{"id":1,"name":"foo"},"project":"bar"}]' --multi-single=yes
2415
2561
  echo @lines:@stdin:
2416
2562
  echo @list:,1,2,3
2417
2563
  echo @secret:
2564
+ echo @stdbin:
2418
2565
  echo @uri:/etc/hosts
2419
2566
  echo @uri:file:/etc/hosts
2420
2567
  echo @uri:http://ifconfig.me
2421
2568
  echo @uri:https://ifconfig.me
2569
+ echo @uri:https://ifconfig.me/ip --cert-stores=@ruby:[OpenSSL::X509::DEFAULT_CERT_DIR,OpenSSL::X509::DEFAULT_CERT_FILE] --http-options.ssl_options=@list:,CIPHER_SERVER_PREFERENCE,-NETSCAPE_CA_DN_BUG --insecure=yes
2422
2570
  echo @vault:my_preset.password
2423
2571
  echo @zlib:@stdin:
2424
2572
  echo hello
@@ -2437,7 +2585,7 @@ genkey my_key 4096
2437
2585
  image https://eudemo.asperademo.com/wallpaper.jpg
2438
2586
  initdemo
2439
2587
  open
2440
- plugins create my_command
2588
+ plugins create my_command .
2441
2589
  plugins list
2442
2590
  preset delete conf_name
2443
2591
  preset initialize conf_name @json:'{"p1":"v1","p2":"v2"}'
@@ -2455,9 +2603,9 @@ remote_certificate chain https://node.example.com/path
2455
2603
  remote_certificate name https://node.example.com/path
2456
2604
  remote_certificate only https://node.example.com/path
2457
2605
  smtp_settings
2606
+ sync spec
2458
2607
  tokens flush
2459
2608
  tokens list
2460
- tokens show foobar
2461
2609
  transferd install
2462
2610
  transferd list
2463
2611
  vault create @json:'{"label":"my_label","password":"my_password_here","description":"my secret"}'
@@ -2470,12 +2618,14 @@ wizard https://faspex4.example.com/path faspex --username=test --password=test
2470
2618
  wizard https://faspex5.example.com/path faspex5 --key-path=my_private_key
2471
2619
  wizard https://node.example.com/path node --username=test --password=test
2472
2620
  wizard https://orch.example.com/path orchestrator --username=test --password=test
2621
+ wizard https://server.example.com/path server --username=my_username --password=my_password
2473
2622
  wizard https://shares.example.com/path shares --username=test --password=test
2474
- wizard my_org aoc --key-path=my_private_key --username=my_user_email
2623
+ wizard https://tst.example.com/path faspio --username=my_username --password=my_password
2475
2624
  wizard my_org aoc --key-path=my_private_key --username=my_user_email --use-generic-client=yes
2625
+ wizard my_org aoc mypreset --key-path=my_private_key --username=my_user_email
2476
2626
  ```
2477
2627
 
2478
- #### Format of file
2628
+ #### Format of configuration file
2479
2629
 
2480
2630
  The configuration file is a `Hash` in a YAML file.
2481
2631
  Example:
@@ -2585,20 +2735,21 @@ The wizard is a command that asks the user for information and creates an [Optio
2585
2735
 
2586
2736
  It takes three optional arguments:
2587
2737
 
2588
- - The URL of the application, else it will ask for it;
2589
- - The plugin name: it limits detection to a given plugin, else it will try to detect known plugins from the URL
2590
- - The preset name: it will create a new [Option Preset](#option-preset) with this name, else it will use specific information to generate a unique preset name.
2738
+ |#| Parameter description | If not provided, `ascli` |
2739
+ |-|--------------------------------------------|--------------------------------------------|
2740
+ |1| **URL** or hostname of the application | ask for it. |
2741
+ |2| The **plugin name** to limit search to | tries to detect known plugins from the URL |
2742
+ |3| The **preset name** to save in config file | generates a unique preset name |
2591
2743
 
2592
- Special options are also available to the wizard:
2744
+ Options are also available for the wizard:
2593
2745
 
2594
- | Option | Value | Description |
2595
- |-------------|----------|-------------|
2596
- | `default` | [yes]/no | Set as default configuration for specified plugin. |
2746
+ | Option | Value | Description |
2747
+ |-------------|----------|---------------------------------------------------------------------|
2748
+ | `default` | [yes]/no | Set as default configuration for specified plugin. |
2597
2749
  | `override` | yes/[no] | Override existing default preset name for the plugin, if it exists. |
2598
- | `key-path` | path | Path to private key for JWT. |
2599
- | `test-mode` | yes/[no] | Skip private key check step. |
2750
+ | `key_path` | path | Path to private key for JWT. |
2600
2751
 
2601
- Other options can be provided to the wizard, such as `--username`, etc...
2752
+ Other plugin-specific options can be provided to the wizard, such as `--username`, etc...
2602
2753
  They will be added to the [Option Preset](#option-preset) created by the wizard.
2603
2754
 
2604
2755
  The simplest invocation is:
@@ -2607,6 +2758,9 @@ The simplest invocation is:
2607
2758
  ascli config wizard
2608
2759
  ```
2609
2760
 
2761
+ If the application requires a private key, the user can either provide the path to it with option `key_path`.
2762
+ The user is told where to place the associated public pey PEM in the application.
2763
+
2610
2764
  #### Example of configuration for a plugin
2611
2765
 
2612
2766
  For Faspex, Shares, Node (including ATS, Aspera Transfer Service), Console,
@@ -2713,8 +2867,8 @@ brew install hashicorp/tap/vault
2713
2867
  vault server -dev -dev-root-token-id=dev-only-token
2714
2868
  ```
2715
2869
 
2716
- | Parameter | Example | Description |
2717
- |-----------|----------|-------------|
2870
+ | Parameter | Example | Description |
2871
+ |-----------|-------------------------|---------------------------------------------------------------------|
2718
2872
  | `type` | `vault` | The type of the vault |
2719
2873
  | `url` | `http://127.0.0.1:8200` | The URL of the vault |
2720
2874
  | `token` | `dev-only-token` | The token for the vault, by default uses parameter `vault_password` |
@@ -2730,10 +2884,10 @@ vault server -dev -dev-root-token-id=dev-only-token
2730
2884
 
2731
2885
  It is possible to manage secrets in macOS keychain (only read supported currently).
2732
2886
 
2733
- | Parameter | Example | Description |
2734
- |-----------|----------|-------------|
2735
- | `type` | `system` | The type of the vault |
2736
- | `name` | ``ascli`` | The name of the keychain to use |
2887
+ | Parameter | Example | Description |
2888
+ |-----------|-------------|------------------------------------|
2889
+ | `type` | `system` | The type of the vault. |
2890
+ | `name` | ``ascli`` | The name of the keychain to use. |
2737
2891
 
2738
2892
  ```shell
2739
2893
  --vault=@json:'{"type":"system","name":"ascli"}'
@@ -2747,10 +2901,10 @@ It is possible to store and use secrets encrypted in a file using option `vault`
2747
2901
  {"type":"file","name":"vault.bin"}
2748
2902
  ```
2749
2903
 
2750
- | Parameter | Example | Description |
2751
- |-----------|--------------|-------------|
2752
- | `type` | `file` | The type of the vault |
2753
- | `name` | `vault.bin` | File path, absolute, or relative to the configuration folder `ASCLI_HOME` |
2904
+ | Parameter | Example | Description |
2905
+ |-----------|--------------|--------------------------------------------------------------------|
2906
+ | `type` | `file` | The type of the vault. |
2907
+ | `name` | `vault.bin` | File path, absolute, or relative to the configuration folder `ASCLI_HOME`. |
2754
2908
 
2755
2909
  #### Vault: Operations
2756
2910
 
@@ -2806,7 +2960,16 @@ It consists in using a pair of associated keys: a private key and a public key.
2806
2960
  The same pair can be used for multiple applications.
2807
2961
  The file containing the private key (key pair) can optionally be protected by a passphrase.
2808
2962
  If the key is protected by a passphrase, then it will be prompted when used.
2809
- (some plugins support option `passphrase`)
2963
+ Some plugins support option `passphrase`.
2964
+
2965
+ By default, `ascli` does not support `ed25519` type, nor OpenSSH encoded keys.
2966
+ See section: [Private key type ed25519](#private-key-type-ed25519-not-supported-by-default).
2967
+ It requires PEM encoded keys.
2968
+ To support `ed25519` and OpenSSH format (default on modern Linux), install those gems:
2969
+
2970
+ ```shell
2971
+ gem install ed25519 bcrypt_pbkdf
2972
+ ```
2810
2973
 
2811
2974
  The following sample commands use the shell variable `KEY_PAIR_PATH`.
2812
2975
  Set it to the desired safe location of the private key.
@@ -2827,6 +2990,7 @@ If another format is used, such as `DER`, it can be converted to `PEM`, e.g. usi
2827
2990
 
2828
2991
  The generated key is of type `RSA`, by default: **4096** bit.
2829
2992
  For convenience, the public key is also extracted with extension `.pub`.
2993
+ Files are PEM encoded.
2830
2994
  The key is not passphrase protected.
2831
2995
 
2832
2996
  ```shell
@@ -2888,12 +3052,12 @@ This server can server HTTP or HTTPS (with certificate):
2888
3052
 
2889
3053
  The following parameters are supported:
2890
3054
 
2891
- | Parameter | Type | Default | Description |
2892
- |-------------------|----------|---------|-----------------------------------------------------|
2893
- | `url` | `String` | `http://localhost:8080` | Base URL on which requests are listened, a path can be provided. | <!-- markdownlint-disable-line -->
2894
- | `cert` | `String` | - | (HTTPS) Path to certificate file (with ext. `.pfx` or `.p12` for PKCS12) |
2895
- | `key` | `String` | - | (HTTPS) Path to private key file (PEM), or passphrase for PKCS12 |
2896
- | `chain` | `String` | - | (HTTPS) Path to certificate chain (PEM only) |
3055
+ | Parameter | Type | Default | Description |
3056
+ |-------------------|----------|-------------------------|------------------------------------------------------------------|
3057
+ | `url` | `String` | `http://localhost:8080` | Base URL on which requests are listened, a path can be provided. | <!-- markdownlint-disable-line -->
3058
+ | `cert` | `String` | - | (HTTPS) Path to certificate file (with ext. `.pfx` or `.p12` for `PKCS12`). |
3059
+ | `key` | `String` | - | (HTTPS) Path to private key file (PEM), or passphrase for `PKCS12`. |
3060
+ | `chain` | `String` | - | (HTTPS) Path to certificate chain (PEM only). |
2897
3061
 
2898
3062
  Parameter `url` (base URL) defines:
2899
3063
 
@@ -2913,12 +3077,12 @@ This is available:
2913
3077
 
2914
3078
  The following options can be specified in the option `image`:
2915
3079
 
2916
- | Option | Type | Description |
2917
- |------------|---------|-------------|
2918
- | reserve | `Integer` | Lines reserved to display a status |
2919
- | text | `Bool` | Display text instead of image|
2920
- | double | `Bool` | Display double text resolution (half characters) |
2921
- | font_ratio | `Float` | Font height/width ratio in terminal |
3080
+ | Option | Type | Description |
3081
+ |------------|-----------|---------------------------------------------------|
3082
+ | reserve | `Integer` | Lines reserved to display a status. |
3083
+ | text | `Bool` | Display text instead of image. |
3084
+ | double | `Bool` | Display double text resolution (half characters). |
3085
+ | font_ratio | `Float` | Font height/width ratio in terminal. |
2922
3086
 
2923
3087
  ```shell
2924
3088
  ascli config image https://eudemo.asperademo.com/wallpaper.jpg --ui=text --image=@json:'{"text":true}'
@@ -2948,38 +3112,47 @@ It is also possible to force the graphical mode with option `--ui` :
2948
3112
  ### Logging, Debugging
2949
3113
 
2950
3114
  The gem is equipped with traces, mainly for debugging and learning APIs.
3115
+ The following options control logging:
3116
+
3117
+ | Option | Values | Description |
3118
+ |---------------|--------|-------------------------------------------------------------------------|
3119
+ | `logger` | `stdout`<br/>`stderr`<br/>`syslog` | Type of output.<br/>Default: `stderr` |
3120
+ | `log_level` | `trace2`<br/>`trace1`<br/>`debug`<br/>`info`<br/>`warn`<br/>`error` | Minimum level displayed.<br/>Default: `warn` |
3121
+ | `log_secrets` | `yes`<br/>`no` | Show or hide secrets in logs.<br/>Default: `no` (Hide) |
3122
+ | `log_format` | `Proc`<br/>`String` | The name of a formatter or a lambda function that formats the log (see below).<br/>Default: `default`<br/>Alternative: `standard` |
3123
+
3124
+ Option `logger` defines the destination of logs.
3125
+
3126
+ #### `log_level` and `log_secrets`
2951
3127
 
2952
3128
  To increase debug level, use option `log_level` (e.g. using command line `--log-level=xx`, env var `ASCLI_LOG_LEVEL`, or an [Option Preset](#option-preset)).
2953
3129
 
2954
3130
  > [!NOTE]
2955
- > When using the `direct` agent (`ascp`), additional transfer logs can be activated using `ascp` options and `ascp_args`, see [`direct`](#agent-direct).
3131
+ > When using the `direct` agent (`ascp`), additional transfer logs from `ascp` can be activated using `ascp` options and `ascp_args`, see [`direct`](#agent-direct).
2956
3132
 
2957
3133
  By default, passwords and secrets are redacted from logs.
2958
3134
  Set option `log_secrets` to `yes` to include secrets in logs.
2959
3135
 
2960
- | Option | Values | Description |
2961
- |---------------|--------|-------------|
2962
- | `logger` | `stdout`<br/>`stderr`<br/>`syslog` | Type of output.<br/>Default: `stderr` |
2963
- | `log_level` | `trace2`<br/>`trace1`<br/>`debug`<br/>`info`<br/>`warn`<br/>`error` | Minimum level displayed.<br/>Default: `warn` |
2964
- | `log_secrets` | `yes`<br/>`no` | Show or hide secrets in logs.<br/>Default: `no` (Hide) |
2965
- | `log_format` | `Proc`<br/>`String` | The name of a formatter or a lambda function that formats the log (see below).<br/>Default: `default`<br/>Alternative: `standard` |
3136
+ #### `log_format`
2966
3137
 
2967
- Option `log_format` is typically set using `@ruby:`.
2968
- It is a lambda that takes 4 arguments, see: [Ruby Formatter](https://github.com/ruby/logger/blob/master/lib/logger/formatter.rb) : `severity`, `time`, `progname`, `msg`.
3138
+ Option `log_format` support a few pre-defined formatters or a custom one using `@ruby:`.
3139
+ A customer formatter is a lambda that takes 4 arguments, see: [Ruby Formatter](https://github.com/ruby/logger/blob/master/lib/logger/formatter.rb) : `severity`, `time`, `progname`, `msg`.
2969
3140
  The default formatter is:
2970
3141
 
2971
3142
  ```ruby
2972
- ->(s, _d, _p, m){"#{s[0..2]} #{m}\n"}
3143
+ ->(s, _d, _p, m){"#{s[0..2]}#{s[-1]} #{m}\n"}
2973
3144
  ```
2974
3145
 
2975
- Availaible formatters for `log_format`:
3146
+ Available formatters for `log_format`:
2976
3147
 
2977
- | Name | Description |
2978
- |-----------|-----------------------------------------|
2979
- | `default` | Default formatter. |
2980
- | `standard`| Standard Ruby formatter. |
3148
+ | Name | Description |
3149
+ |-----------|----------------------------------------------------------------------------------|
3150
+ | `default` | Default formatter: Colorized 4 level level followed by message on the same line. |
3151
+ | `standard`| Standard Ruby formatter. |
3152
+ | `caller` | Colorized 4 level level followed by caller, and then on next line: message. |
3153
+ | `Proc` | Custom lambda. |
2981
3154
 
2982
- Examples:
3155
+ #### Logging examples
2983
3156
 
2984
3157
  - Display debugging log on `stdout`:
2985
3158
 
@@ -3020,20 +3193,22 @@ To disable this warning, set the option `warn_insecure` to `no`.
3020
3193
 
3021
3194
  HTTP connection parameters (not `ascp` WSS) can be adjusted using option `http_options`:
3022
3195
 
3023
- | Parameter | Type | Default | Handler |
3024
- |---------------------------|-----------|-----------------|-----------|
3025
- | `read_timeout` | `Integer` | `60` | Ruby |
3026
- | `write_timeout` | `Integer` | `60` | Ruby |
3027
- | `open_timeout` | `Integer` | `60` | Ruby |
3028
- | `keep_alive_timeout` | `Integer` | `2` | Ruby |
3029
- | `ssl_options` | `Array` | See below | Ruby |
3030
- | `user_agent` | `Integer` | `ascli` | `ascli` |
3031
- | `download_partial_suffix` | `Integer` | `.http_partial` | `ascli` |
3032
- | `retry_on_error` | `Bool` | `false` | `ascli` |
3033
- | `retry_on_timeout` | `Bool` | `true` | `ascli` |
3034
- | `retry_on_unavailable` | `Bool` | `true` | `ascli` |
3035
- | `retry_max` | `Integer` | `1` | `ascli` |
3036
- | `retry_sleep` | `Integer` | `4` | `ascli` |
3196
+ | Parameter | Type | Default | Handler |
3197
+ |-------------------------|---------|---------------|---------------|
3198
+ | `read_timeout` | `Integer` | `60` | Ruby |
3199
+ | `write_timeout` | `Integer` | `60` | Ruby |
3200
+ | `open_timeout` | `Integer` | `60` | Ruby |
3201
+ | `keep_alive_timeout` | `Integer` | `2` | Ruby |
3202
+ | `ssl_options` | `Array` | See below | Ruby |
3203
+ | `user_agent` | `Integer` | `ascli` | `ascli` Rest |
3204
+ | `download_partial_suffix` | `Integer` | `.http_partial` | `ascli` Rest |
3205
+ | `retry_on_error` | `Bool` | `false` | `ascli` Rest |
3206
+ | `retry_on_timeout` | `Bool` | `true` | `ascli` Rest |
3207
+ | `retry_on_unavailable` | `Bool` | `true` | `ascli` Rest |
3208
+ | `retry_max` | `Integer` | `1` | `ascli` Rest |
3209
+ | `retry_sleep` | `Integer` | `4` | `ascli` Rest |
3210
+ | `token_cache_max_age` | `Integer` | `1800` | `ascli` OAuth |
3211
+ | `token_refresh_threshold` | `Integer` | `120` | `ascli` OAuth |
3037
3212
 
3038
3213
  Time values are in set **seconds** and can be of type either `Integer` or `Float`.
3039
3214
  Default values are the ones of Ruby:
@@ -3047,11 +3222,11 @@ Example:
3047
3222
  ascli aoc admin package list --http-options=@json:'{"read_timeout":10.0}'
3048
3223
  ```
3049
3224
 
3050
- `ssl_options` corresponds to a list of options as listed in `man SSL_CTX_set_options`.
3225
+ The option `ssl_options` corresponds to a list of options as listed in `man SSL_CTX_set_options`.
3051
3226
  The default initial value is the default of Ruby as specified in `openssl/ssl.rb`.
3052
3227
  Each option can be specified as a `String` with the same name as in the OpenSSL library by removing the prefix: `SSL_OP_`, or an `Integer` (e.g. `0` resets to no option).
3053
3228
  If the name appears in the list, the option is set.
3054
- If the name appears in the list prefixed with a hyphen (`-`), the option is unset.
3229
+ If the name appears in the list prefixed with a hyphen (`-`), the option is cleared.
3055
3230
  For example to enable option `SSL_OP_CIPHER_SERVER_PREFERENCE`, add it to the list as `CIPHER_SERVER_PREFERENCE`.
3056
3231
  To disable option `SSL_OP_SAFARI_ECDHE_ECDSA_BUG`, add it as `-SAFARI_ECDHE_ECDSA_BUG`.
3057
3232
 
@@ -3116,7 +3291,7 @@ ascli config proxy_check --fpac='function FindProxyForURL(url, host) {return "PR
3116
3291
  ```
3117
3292
 
3118
3293
  ```text
3119
- PROXY proxy.example.com:1234;DIRECT
3294
+ PROXY proxy.example.com:8080;DIRECT
3120
3295
  ```
3121
3296
 
3122
3297
  ```shell
@@ -3175,11 +3350,6 @@ This is the reason why it is advised to install the Aspera Transfer Daemon durin
3175
3350
 
3176
3351
  By default, `ascli` uses the `ascp` binary found in **well known locations**, i.e. typical Aspera product installation paths.
3177
3352
 
3178
- The way to specify the location of `ascp` is to use either options:
3179
-
3180
- - `ascp_path`
3181
- - `use_product`
3182
-
3183
3353
  The `config` plugin allows finding and specifying the location of `ascp`.
3184
3354
  It provides the following commands for `ascp` sub-command:
3185
3355
 
@@ -3188,32 +3358,11 @@ It provides the following commands for `ascp` sub-command:
3188
3358
  - `products` : list Aspera transfer products available locally
3189
3359
  - `connect` : list and download connect client versions available on internet
3190
3360
 
3191
- #### Show path of currently used `ascp`
3192
-
3193
- ```shell
3194
- ascli config ascp show
3195
- ```
3196
-
3197
- ```text
3198
- /Users/laurent/.aspera/ascli/sdk/ascp
3199
- ```
3200
-
3201
- ```shell
3202
- ascli config ascp info
3203
- ```
3204
-
3205
- ```text
3206
- ╭─────────┬──────────────────────────────────────────────────╮
3207
- │ field │ value │
3208
- ╞═════════╪══════════════════════════════════════════════════╡
3209
- │ ascp │ /Users/john/.aspera/sdk/ascp │
3210
- ...
3211
- ╰─────────┴──────────────────────────────────────────────────╯
3212
- ```
3213
-
3214
3361
  #### Selection of `ascp` location for [`direct`](#agent-direct) agent
3215
3362
 
3216
- By default, `ascli` uses any found local product with `ascp`, including Transfer Daemon.
3363
+ Option: `ascp_path` is used to specify the location of `ascp`.
3364
+ The default value is: `product:FIRST`.
3365
+ By default, `ascli` uses any found local product with `ascp`, including Transfer Daemon (SDK).
3217
3366
 
3218
3367
  To override and use an alternate `ascp` path use option `ascp_path` (`--ascp-path=`)
3219
3368
 
@@ -3245,10 +3394,9 @@ Saved to default global preset global_common_defaults
3245
3394
 
3246
3395
  If the path has spaces, read section: [Shell and Command line parsing](#command-line-parsing-special-characters).
3247
3396
 
3248
- If option `ascp_path` is not set, then the product identified with option `use_product` is used.
3249
-
3250
- If `use_product` is not set, then the first product found is used,
3251
- this is equivalent to using option: `--use-product=FIRST`.
3397
+ A special value `product:<product name>` can be used for option `ascp_path`.
3398
+ It specifies to use `ascp` from the given product name.
3399
+ A special valuefor product name is `FIRST`, which means: use the first found.
3252
3400
 
3253
3401
  Locally installed Aspera products can be listed with:
3254
3402
 
@@ -3267,13 +3415,42 @@ ascli config ascp products list
3267
3415
  +---------------------------------------+----------------------------------------+
3268
3416
  ```
3269
3417
 
3270
- Using the option `use_product` finds the `ascp` binary of the selected product.
3271
-
3272
3418
  To permanently use the `ascp` of a product:
3273
3419
 
3274
3420
  ```shell
3275
- ascli config ascp products use 'Aspera Connect'
3276
- saved to default global preset /Users/laurent/Applications/Aspera Connect.app/Contents/Resources/ascp
3421
+ ascli config ascp products use 'IBM Aspera Connect'
3422
+ Updated: default: config <- global_common_defaults
3423
+ Updated: global_common_defaults: ascp_path <- product:IBM Aspera Connect
3424
+ Saving config file.
3425
+ ```
3426
+
3427
+ It is the same as executing:
3428
+
3429
+ ```shell
3430
+ ascli config preset set GLOBAL ascp_path 'product:IBM Aspera Connect'
3431
+ ```
3432
+
3433
+ To show the path of currently used `ascp`:
3434
+
3435
+ ```shell
3436
+ ascli config ascp show
3437
+ ```
3438
+
3439
+ ```text
3440
+ /Users/laurent/.aspera/ascli/sdk/ascp
3441
+ ```
3442
+
3443
+ ```shell
3444
+ ascli config ascp info
3445
+ ```
3446
+
3447
+ ```text
3448
+ ╭─────────┬──────────────────────────────────────────────────╮
3449
+ │ field │ value │
3450
+ ╞═════════╪══════════════════════════════════════════════════╡
3451
+ │ ascp │ /Users/john/.aspera/sdk/ascp │
3452
+ ...
3453
+ ╰─────────┴──────────────────────────────────────────────────╯
3277
3454
  ```
3278
3455
 
3279
3456
  #### Installation of Connect Client on command line
@@ -3326,8 +3503,8 @@ Transfers will be executed by a transfer client, here called **Transfer Agent**.
3326
3503
 
3327
3504
  The following agents are supported and selected with option `transfer`:
3328
3505
 
3329
- | `transfer` | location | Description of agent |
3330
- |------------------------------------|----------|-------------------------------|
3506
+ | `transfer` | location | Description of agent |
3507
+ |----------|----------|-------------------------------|
3331
3508
  | [`direct`](#agent-direct) | local | direct execution of `ascp` |
3332
3509
  | [`transferd`](#agent-transfer-daemon) | local | Aspera Transfer Daemon |
3333
3510
  | [`connect`](#agent-connect-client) | local | Aspera Connect Client |
@@ -3354,14 +3531,16 @@ This is the default agent for `ascli` (option `--transfer=direct`).
3354
3531
  `ascli` will locally search installed Aspera products, including SDK, and use `ascp` from that component.
3355
3532
  Refer to section [FASP](#fasp-configuration).
3356
3533
 
3534
+ ##### Agent: Direct: `transfer_info`
3535
+
3357
3536
  The `transfer_info` option accepts the following optional parameters to control multi-session, Web Socket Session, Resume policy and add any argument to `ascp`:
3358
3537
 
3359
- | Name | Type | Description |
3360
- |------------------------|---------|-------------|
3538
+ | Name | Type | Description |
3539
+ |------------------------|-----------|-----------------------------------------------------------------------------|
3361
3540
  | `wss` | `Bool` | Web Socket Session<br/>Enable use of web socket session in case it is available<br/>Default: `true` |
3362
3541
  | `quiet` | `Bool` | If `true`, then `ascp` progress bar is not shown.<br/>Default: `false` |
3363
3542
  | `trusted_certs` | `Array` | List of repositories for trusted certificates. |
3364
- | `client_ssh_key` | `String` | SSH Keys to use for token-based transfers.<br/>One of: `dsa_rsa`, `rsa`, `per_client`.<br/>Default: `rsa` |
3543
+ | `client_ssh_key` | `String` | SSH Keys to use for token-based transfers.<br/>One of: `dsa_rsa`, `rsa`, `per_client`.<br/>Default: `rsa` |
3365
3544
  | `ascp_args` | `Array` | `Array` of strings with native `ascp` arguments.<br/>Default: `[]` |
3366
3545
  | `spawn_timeout_sec` | `Float` | Multi session<br/>Verification time that `ascp` is running<br/>Default: `3` |
3367
3546
  | `spawn_delay_sec` | `Float` | Multi session<br/>Delay between startup of sessions<br/>Default: `2` |
@@ -3380,14 +3559,26 @@ Sleep between iterations is given by the following formula where `iter_index` is
3380
3559
  max( sleep_max, sleep_initial * sleep_factor ^ iter_index )
3381
3560
  ```
3382
3561
 
3383
- To display the native progress bar of `ascp`, use `--progress-bar=no --transfer-info=@json:'{"quiet":false}'`.
3562
+ To display the native progress bar of `ascp`, use:
3563
+
3564
+ ```shell
3565
+ --progress-bar=no --transfer-info=@json:'{"quiet":false}'`
3566
+ ```
3384
3567
 
3385
3568
  To skip usage of management port (which disables custom progress bar), set option `monitor` to `false`.
3386
- In that, use the native progress bar: `--transfer-info=@json:'{"monitor":false,"quiet":false}'`
3569
+ In that, use the native progress bar:
3570
+
3571
+ ```shell
3572
+ --transfer-info=@json:'{"monitor":false,"quiet":false}'`
3573
+ ```
3387
3574
 
3388
3575
  By default, Ruby's root CA store is used to validate any HTTPS endpoint used by `ascp` (e.g. WSS).
3389
3576
  In order to use a custom certificate store, use the `trusted_certs` option of direct agent's option `transfer_info`.
3390
- To use `ascp`'s default, use option: `--transfer-info=@json:'{"trusted_certs":null}'`.
3577
+ To use `ascp`'s default, use option:
3578
+
3579
+ ```shell
3580
+ --transfer-info=@json:'{"trusted_certs":null}'`.
3581
+ ```
3391
3582
 
3392
3583
  Some transfer errors are considered **retry-able** (e.g. timeout) and some other not (e.g. wrong password).
3393
3584
  The list of known protocol errors and retry level can be listed:
@@ -3434,6 +3625,36 @@ In addition to standard methods described in section [File List](#list-of-files-
3434
3625
  > [!NOTE]
3435
3626
  > Those methods have limitations: they apply **only** to the [`direct`](#agent-direct) transfer agent (i.e. local `ascp`) and not for Aspera on Cloud.
3436
3627
 
3628
+ ##### Agent: Direct: Management messages
3629
+
3630
+ By default, `ascli` gets notification from `ascp` on its management port.
3631
+ This can be de-activated with parameter: `monitor=false` of `transfer_info`.
3632
+
3633
+ It is also possible to send local messages to this management port.
3634
+ A typical use is to change the target rate of a running transfer.
3635
+
3636
+ The communication is done through a flat JSON file that shall be created in `ascli` config folder as displayed with:
3637
+
3638
+ ```shell
3639
+ ascli config folder
3640
+ ```
3641
+
3642
+ The name of the file shall be: `send_<PID>`, where `<PID>` is the process id of the running `ascli`.
3643
+
3644
+ If there is only one `ascli` running, one can get the PID like this:
3645
+
3646
+ ```shell
3647
+ ps -axo pid,command|grep ascli|grep -v grep|cut -f1 -d' '
3648
+ ```
3649
+
3650
+ Example to change the target rate:
3651
+
3652
+ ```shell
3653
+ echo '{"type":"RATE","Rate":300000}' > ~/.aspera/ascli/send_67470
3654
+ ```
3655
+
3656
+ When `ascli` detects this file, it uses it during a transfer and then deletes it.
3657
+
3437
3658
  ##### Agent: Direct: `aspera.conf`: Virtual Links
3438
3659
 
3439
3660
  This agent supports a local configuration file: `aspera.conf` where Virtual links can be configured:
@@ -3610,11 +3831,11 @@ By specifying option: `--transfer=httpgw`, `ascli` will start transfers using th
3610
3831
 
3611
3832
  Parameters provided in option `transfer_info` are:
3612
3833
 
3613
- | Name | Type | Description |
3614
- |---------------------|-----------|---------------------------------------|
3615
- | `url` | `String` | URL of the HTTP GW<br/>Mandatory |
3834
+ | Name | Type | Description |
3835
+ |---------------------|-----------|-----------------------------------------------------------|
3836
+ | `url` | `String` | URL of the HTTP GW<br/>Mandatory |
3616
3837
  | `upload_chunk_size` | `Integer` | Size in bytes of chunks for upload<br/>Default: `64000` |
3617
- | `api_version` | `String` | Force use of version (`v1`, `v2`)<br/>Default: `v2` |
3838
+ | `api_version` | `String` | Force use of version (`v1`, `v2`)<br/>Default: `v2` |
3618
3839
  | `synchronous` | `Bool` | Wait for each message acknowledgment<br/>Default: `false` |
3619
3840
 
3620
3841
  Example:
@@ -3635,8 +3856,8 @@ Set option `transfer` to `transferd`.
3635
3856
 
3636
3857
  Options for `transfer_info` are:
3637
3858
 
3638
- | Name | Type | Description |
3639
- |----------|----------|-------------|
3859
+ | Name | Type | Description |
3860
+ |----------|----------|----------------------------------------------|
3640
3861
  | `url` | `String` | IP address and port listened by the daemon<br/>Mandatory<br/>Default: `:0` |
3641
3862
  | `start` | `Bool` | Start a new daemon.<br/>Default: `true` |
3642
3863
  | `stop` | `Bool` | Stop daemon when exiting `ascli`<br/>Default: `true` |
@@ -3672,7 +3893,7 @@ On Windows the compilation may fail for various reasons (3.1.1):
3672
3893
 
3673
3894
  - `cannot find -lx64-ucrt-ruby310`
3674
3895
 
3675
- &rarr; copy the file `[Ruby main dir]\lib\libx64-ucrt-ruby310.dll.a` to `[Ruby main dir]\lib\libx64-ucrt-ruby310.a` (remove the `dll` extension)
3896
+ &rarr; copy the file `[Ruby main dir]\lib\libx64-ucrt-ruby310.dll.a` to (remove the `dll` extension) `[Ruby main dir]\lib\libx64-ucrt-ruby310.a`
3676
3897
 
3677
3898
  - `conflicting types for 'gettimeofday'`
3678
3899
 
@@ -3715,7 +3936,7 @@ The use of a [**transfer-spec**](#transfer-specification) instead of `ascp` comm
3715
3936
  - Common to all [Transfer Agent](#transfer-clients-agents)
3716
3937
  - Not dependent on command line limitations (special characters...)
3717
3938
 
3718
- ### Transfer Parameters
3939
+ #### Transfer Parameters
3719
3940
 
3720
3941
  All standard [**transfer-spec**](#transfer-specification) parameters can be specified.
3721
3942
  A [**transfer-spec**](#transfer-specification) can also be saved/overridden in the configuration file.
@@ -3747,8 +3968,10 @@ ascli config ascp schema transferd --format=jsonpp
3747
3968
 
3748
3969
  `ascp` argument or environment variable is provided in description.
3749
3970
 
3971
+ #### Transfer Specification Reference
3972
+
3750
3973
  | ID | Name |
3751
- | -- | ---- |
3974
+ |----|-----------|
3752
3975
  | A | Direct |
3753
3976
  | C | Connect |
3754
3977
  | D | Desktop |
@@ -3757,17 +3980,17 @@ ascli config ascp schema transferd --format=jsonpp
3757
3980
  | T | Transferd |
3758
3981
 
3759
3982
  | Field | Type | Description |
3760
- | ----- | ---- | ----------- |
3983
+ |--------------------------------|---------|----------------------------------------------------------------------------------|
3761
3984
  | apply_local_docroot | boolean | Apply local docroot to source paths.<br/>(A, T)<br/>(`--apply-local-docroot`) |
3762
3985
  | authentication | string | Set to `token` for SSH bypass keys, else password asked if not provided.<br/>(C) |
3763
3986
  | cipher | string | In transit encryption algorithms.<br/>Allowed values: `none`, `aes-128`, `aes-192`, `aes-256`, `aes-128-cfb`, `aes-192-cfb`, `aes-256-cfb`, `aes-128-gcm`, `aes-192-gcm`, `aes-256-gcm`<br/>(`-c (conversion){enum}`) |
3764
- | cipher_allowed | string | Returned by node API. Valid literals include `aes-128` and `none`.<br/>(C) |
3765
- | content_protection | string | Enable client-side encryption at rest (CSEAR). (content protection)<br/>Allowed values: `encrypt`, `decrypt`<br/>(`--file-crypt={enum}`) |
3766
- | content_protection_password | string | Specifies CSEAR password. (content protection)<br/>(env:`ASPERA_SCP_FILEPASS`) |
3987
+ | cipher_allowed | string | Returned by node API. Valid literals include `aes-128` and `none`.<br/>(C)<br/>Allowed values: `none`, `aes-128`, `aes-192`, `aes-256`, `aes-128-cfb`, `aes-192-cfb`, `aes-256-cfb`, `aes-128-gcm`, `aes-192-gcm`, `aes-256-gcm` |
3988
+ | content_protection | string | Enable client-side content protection (CSEAR, encryption-at-rest).<br/>For uploads, set to `encrypt` to transfer encrypted files and store them on the server with the extension `.aspera-env`. (`aspera.conf` parameter `transfer_encryption_content_protection_extension`). To download and decrypt encrypted files, set to `decrypt`<br/>`content_protection_password` must be specified if this option is set.<br/>Allowed values: `encrypt`, `decrypt`<br/>(`--file-crypt={enum}`) |
3989
+ | content_protection_password | string | Password for encryption/decryption of transferred assets.<br/>(env:`ASPERA_SCP_FILEPASS`) |
3767
3990
  | cookie | string | Metadata for transfer specified by application.<br/>(env:`ASPERA_SCP_COOKIE`) |
3768
- | create_dir | boolean | Specifies whether to create new directories.<br/>(`-d`) |
3991
+ | create_dir | boolean | Create target directory if it doesn't already exist.<br/>If **all** the following conditions are met, then the `destination_root` specifies a filename instead of destination folder:<br/>- `create_dir` is `false`<br/>- A single source file is given on **command line**<br/>- The target folder specified by `destination_root` does not exist<br/>In all other cases, `destination_root` specifies a folder, and it is created if it does not already exist. I.e. if **any** of those conditions is met:<br/>- `create_dir` is `true`<br/>- Multiple source files are provided<br/>- List of source files are provided in a file (list or pair), default for Node API and `ascli`.<br/>- The target folder exists<br/>(`-d`) |
3769
3992
  | delete_before_transfer | boolean | Before transfer, delete files that exist at the destination but not at the source.<br/>The source and destination arguments must be directories that have matching names.<br/>Objects on the destination that have the same name but different type or size as objects on the source are not deleted.<br/>(`--delete-before-transfer`) |
3770
- | delete_source | boolean | Remove transfered source files after transfer success. TODO equivalent to `remove_after_transfer` + `remove_empty_directories` + `remove_empty_source_directory`<br/>(A, N, T)<br/>(`--remove-after-transfer`) |
3993
+ | delete_source | boolean | Remove transfered source files after transfer success. Equivalent to `remove_after_transfer` + `remove_empty_directories` + `remove_empty_source_directory`. Take precedence over those.<br/>(A, N, T) |
3771
3994
  | destination_root | string | Destination root directory. |
3772
3995
  | destination_root_id | string | The file ID of the destination root directory.<br/>Required when using Bearer token auth for the destination node.<br/>(T) |
3773
3996
  | dgram_size | integer | UDP datagram size in bytes.<br/>(`-Z {integer}`) |
@@ -3783,16 +4006,16 @@ ascli config ascp schema transferd --format=jsonpp
3783
4006
  | https_fallback_port | integer | Specifies HTTPS port when cipher is used.<br/>(`-t {integer}`) |
3784
4007
  | icos | object | Configuration parameters for IBM Cloud Object Storage (ICOS).<br/>(T) |
3785
4008
  | keepalive | boolean | The session is running in persistent session mode.<br/>(A, T)<br/>(`--keepalive`) |
3786
- | lock_min_rate | boolean | TODO: remove ?<br/>(C) |
4009
+ | lock_min_rate | boolean | n/a<br/>(C) |
3787
4010
  | lock_min_rate_kbps | boolean | If `true`, lock the minimum transfer rate to the value set for min_rate_kbps.<br/>If `false`, users can adjust the transfer rate up to the value set for target_rate_cap_kbps.<br/>(C, T) |
3788
4011
  | lock_rate_policy | boolean | If `true`, lock the rate policy to the default value.<br/>(C, T) |
3789
- | lock_target_rate | boolean | TODO: remove ?<br/>(C) |
3790
- | lock_target_rate_kbps | boolean | If `true`, lock the target transfer rate to the default value set for target_rate_kbps.<br/>If `false`, users can adjust the transfer rate up to the value set for target_rate_cap_kbps.<br/>(C, T) |
4012
+ | lock_target_rate | boolean | n/a<br/>(C) |
4013
+ | lock_target_rate_kbps | boolean | If `true`, lock the target transfer rate to the default value set for `target_rate_kbps`.<br/>If `false`, users can adjust the transfer rate up to the value set for `target_rate_cap_kbps`.<br/>(C, T) |
3791
4014
  | min_rate_cap_kbps | integer | The highest minimum rate that an incoming transfer can request, in kilobits per second.<br/>Client minimum rate requests that exceed the minimum rate cap are ignored.<br/>The default value of unlimited applies no cap to the minimum rate. (Default: 0)<br/>(C, T) |
3792
4015
  | min_rate_kbps | integer | Set the minimum transfer rate in kilobits per second.<br/>(`-m {integer}`) |
3793
- | move_after_transfer | string | Move source files to the specified `archive-dir` directory after they are transferred correctly.<br/>Available as of 3.8.0. Details in ascp manual.<br/>Requires write permissions on the source.<br/>If `src_base` is specified, files are moved to `archive-dir`/`path-relative-to-srcbase`.<br/>`archive-dir` must be in the same file system (or cloud storage account) as the source files being transferred.<br/>`archive-dir` is subject to the same docroot restrictions as source files.<br/>`move_after_transfer` and `remove_after_transfer` are mutually exclusive options.<br/>After files have been moved to the archive, the original source directory structure is left in place. Empty directories are not saved to `archive-dir`. To remove empty source directories after a successful move operation, also set `remove_empty_directories` to `true`. When using `remove_empty_directories`, empty directory removal examination starts at the `srcbase` and proceeds down any subdirectories. If no `srcbase` is used and a file path (as opposed to a directory path) is specified, then only the immediate parent directory is examined and removed if it is empty following the move of the source file.<br/>(A, N, T)<br/>(`--move-after-transfer={string}`) |
3794
- | multi_session | integer | Use multi-session transfer. max 128.<br/>Each participant on one host needs an independent UDP (-O) port.<br/>Large files are split between sessions only when transferring with `resume_policy`=`none`. |
3795
- | multi_session_threshold | integer | Split files across multiple ascp sessions if their size in bytes is greater than or equal to the specified value.<br/>(0=no file is split)<br/>(A, N, T)<br/>(`--multi-session-threshold={integer}`) |
4016
+ | move_after_transfer | string | Move source files to the specified `archive-dir` directory after they are transferred correctly.<br/>Available as of 3.8.0. Details in `ascp` manual.<br/>Requires write permissions on the source.<br/>If `src_base` is specified, files are moved to `archive-dir`/`path-relative-to-srcbase`.<br/>`archive-dir` must be in the same file system (or cloud storage account) as the source files being transferred.<br/>`archive-dir` is subject to the same docroot restrictions as source files.<br/>`move_after_transfer` and `remove_after_transfer` are mutually exclusive options.<br/>After files have been moved to the archive, the original source directory structure is left in place. Empty directories are not saved to `archive-dir`. To remove empty source directories after a successful move operation, also set `remove_empty_directories` to `true`. When using `remove_empty_directories`, empty directory removal examination starts at the `srcbase` and proceeds down any subdirectories. If no `srcbase` is used and a file path (as opposed to a directory path) is specified, then only the immediate parent directory is examined and removed if it is empty following the move of the source file.<br/>(A, N, T)<br/>(`--move-after-transfer={string}`) |
4017
+ | multi_session | integer | Use multi-session transfer. max 128.<br/>Each participant on one host needs an independent UDP (-O) port.<br/>Large files are split between sessions only when transferring with `resume_policy`=`none`.<br/>(special:`-C {integer}`) |
4018
+ | multi_session_threshold | integer | Split files across multiple `ascp` sessions if their size in bytes is greater than or equal to the specified value.<br/>(0=no file is split)<br/>(A, N, T)<br/>(`--multi-session-threshold={integer}`) |
3796
4019
  | obfuscate_file_names | boolean | HTTP Gateway obfuscates file names when set to `true`.<br/>(H) |
3797
4020
  | overwrite | string | Overwrite files at the destination with source files of the same name based on the policy:<br/>- `always` : Always overwrite the file.<br/>- `never` : Never overwrite the file. If the destination contains partial files that are older or the same as the source files and resume is enabled, the partial files resume transfer. Partial files with checksums or sizes that differ from the source files are not overwritten.<br/>- `diff` : (default) Overwrite the file if it is different from the source, depending on the compare method (default is size). If the destination is object storage, `diff` has the same effect as always. If resume is not enabled, partial files are overwritten if they are different from the source, otherwise they are skipped. If resume is enabled, only partial files with different sizes or checksums from the source are overwritten; otherwise, files resume.<br/>- `diff+older` : Overwrite the file if it is older and different from the source, depending on the compare method (default is size). If resume is not enabled, partial files are overwritten if they are older and different from the source, otherwise they are skipped. If resume is enabled, only partial files that are different and older than the source are overwritten, otherwise they are resumed.<br/>- `older` : Overwrite the file if its timestamp is older than the source timestamp.<br/>If you set an overwrite policy of `diff` or `diff+older`, difference is determined by the value set for `resume_policy`:<br/>`none` : The source and destination files are always considered different and the destination file is always overwritten<br/>`attributes` : The source and destination files are compared based on file attributes <br/>`sparse_checksum` : The source and destination files are compared based on sparse checksums, (currently file size)<br/>`full_checksum` : The source and destination files are compared based on full checksums<br/>Allowed values: `never`, `always`, `diff`, `older`, `diff+older`<br/>(`--overwrite={enum}`) |
3798
4021
  | password | string | Password for local Windows user when transfer user associated with node API user is not the same as the one running `asperanoded`.<br/>Allows impersonating the transfer user and have access to resources (e.g. network shares).<br/>Windows only, node API only.<br/>(N) |
@@ -3801,7 +4024,7 @@ ascli config ascp schema transferd --format=jsonpp
3801
4024
  | preserve_access_time | boolean | Preserve the source-file access timestamps at the destination.<br/>Because source access times are updated by the transfer operation, the timestamp that is preserved is the one just before to the transfer.<br/>(`--preserve-access-time`) |
3802
4025
  | preserve_acls | string | Preserve access control lists.<br/>(A, T)<br/>Allowed values: `none`, `native`, `metafile`<br/>(`--preserve-acls={enum}`) |
3803
4026
  | preserve_creation_time | boolean | Preserve source-file creation timestamps at the destination.<br/>Only Windows systems retain information about creation time. If the destination is not a Windows computer, this option is ignored.<br/>(`--preserve-creation-time`) |
3804
- | preserve_extended_attrs | string | Preserve the extended attributes.<br/>(T, A)<br/>Allowed values: `none`, `native`, `metafile`<br/>(`--preserve-xattrs={enum}`) |
4027
+ | preserve_extended_attrs | string | Preserve the extended attributes.<br/>(A, T)<br/>Allowed values: `none`, `native`, `metafile`<br/>(`--preserve-xattrs={enum}`) |
3805
4028
  | preserve_file_owner_gid | boolean | Preserve the group ID for a file owner.<br/>(A, T)<br/>(`--preserve-file-owner-gid`) |
3806
4029
  | preserve_file_owner_uid | boolean | Preserve the user ID for a file owner.<br/>(A, T)<br/>(`--preserve-file-owner-uid`) |
3807
4030
  | preserve_modification_time | boolean | Set the modification time, the last time a file or directory was modified (written), of a transferred file to the modification of the source file or directory.<br/>Preserve source-file modification timestamps at the destination.<br/>(`--preserve-modification-time`) |
@@ -3830,9 +4053,9 @@ ascli config ascp schema transferd --format=jsonpp
3830
4053
  | source_root_id | string | The file ID of the source root directory. Required when using Bearer token auth for the source node.<br/>(N, T) |
3831
4054
  | src_base | string | Specify the prefix to be stripped off from each source object.<br/>The remaining portion of the source path is kept intact at the destination.<br/>Special care must be taken when used with cloud storage.<br/>(A, N, T)<br/>(`--src-base64=(conversion){string}`) |
3832
4055
  | src_base64 | string | The folder name below which the directory structure is preserved (base64 encoded).<br/>(A, T)<br/>(`--src-base64={string}`) |
3833
- | ssh_args | array | Array of arguments to pass to SSH. Use with caution.<br/>(T, A)<br/>(`--ssh-args={array}`) |
4056
+ | ssh_args | array | Add arguments to the command-line arguments passed to the external ssh program (implies -SSH). The arguments are inserted before any key file(s) supplied to `ascp` and before the user/host arguments.<br/>(A, T)<br/>(special:`--ssh-arg={array}`) |
3834
4057
  | ssh_port | integer | Specifies SSH (TCP) port.<br/>(`-P {integer}`) |
3835
- | ssh_private_key | string | Private key used for SSH authentication.<br/>Shall look like: -----BEGIN RSA PRIV4TE KEY-----\nMII...<br/>Note the JSON encoding: \n for newlines.<br/>(A, T)<br/>(env:`ASPERA_SCP_KEY`) |
4058
+ | ssh_private_key | string | Private key used for SSH authentication.<br/>Shall look like: -----BEGIN RSA PRIV4TE KEY-----&bsol;nMII...<br/>Note the JSON encoding: &bsol;n for newlines.<br/>(A, T)<br/>(env:`ASPERA_SCP_KEY`) |
3836
4059
  | ssh_private_key_passphrase | string | The passphrase associated with the transfer user's SSH private key. Available as of 3.7.2.<br/>(A, T)<br/>(env:`ASPERA_SCP_PASS`) |
3837
4060
  | ssh_private_key_path | string | Path to private key for SSH.<br/>(A, T)<br/>(`-i {string}`) |
3838
4061
  | sshfp | string | Check it against server SSH host key fingerprint.<br/>(`--check-sshfp={string}`) |
@@ -3843,10 +4066,10 @@ ascli config ascp schema transferd --format=jsonpp
3843
4066
  | target_rate_kbps | integer | Specifies desired speed for the transfer.<br/>(`-l {integer}`) |
3844
4067
  | title | string | Title of the transfer.<br/>(C, N, T) |
3845
4068
  | token | string | Authorization token. Type: Bearer, Basic or ATM. (Also arg -W)<br/>(env:`ASPERA_SCP_TOKEN`) |
3846
- | use_ascp4 | boolean | Specify version of protocol. Do not use ascp4.<br/>(A, N, T) |
3847
- | use_system_ssh | string | TODO, comment...<br/>(A, T)<br/>(`-SSH {string}`) |
3848
- | wss_enabled | boolean | Server has Web Socket service enabled. |
3849
- | wss_port | integer | TCP port used for websocket service feed. |
4069
+ | use_ascp4 | boolean | Specify version of protocol. Do not use `ascp4`.<br/>(A, N, T) |
4070
+ | use_system_ssh | boolean | Use an external `ssh` program instead of the built-in `libssh2` implementation to establish the connection to the remote host. The desired `ssh` program must be in the environment's `PATH`.<br/>To enable debugging of the `ssh` process, supply `-DD` and `--ssh-arg=-vv` arguments to `ascp`.<br/>(A, T)<br/>(`-SSH`) |
4071
+ | wss_enabled | boolean | Server has Web Socket service enabled.<br/>(special:`--ws-connect`) |
4072
+ | wss_port | integer | TCP port used for Web Socket service feed. |
3850
4073
  | xfer_max_retries | integer | Maximum number of retries, for node API initiated transfers. Shall not exceed aspera.conf `transfer_manager_max_retries` (default 5).<br/>(N) |
3851
4074
 
3852
4075
  #### Destination folder for transfers
@@ -3955,9 +4178,6 @@ Example: Source file `200KB.1` is renamed `sample1` on destination:
3955
4178
  ascli server upload --src-type=pair ~/Documents/Samples/200KB.1 /Upload/sample1
3956
4179
  ```
3957
4180
 
3958
- > [!NOTE]
3959
- > There are some specific rules to specify a file list when using **Aspera on Cloud**, refer to the AoC plugin section.
3960
-
3961
4181
  #### Source directory structure on destination
3962
4182
 
3963
4183
  This section is not specific to `ascli` it is `ascp` behavior.
@@ -3981,18 +4201,18 @@ A leading `/` on destination is ignored (relative to docroot) unless docroot is
3981
4201
 
3982
4202
  In the following table source folder `d3` contains 2 files: `f1` and `d4/f2`.
3983
4203
 
3984
- | Source files | Destination | Folders on Dest. | `create_dir` | Destination Files |
3985
- |--------------|-------------|-------------------|--------------|-----------------------------|
3986
- | `f1` | `d/f` | - | false | Error: `d` does not exist. |
3987
- | `f1` | `d/f` | `d` | false | `d/f` (renamed) |
3988
- | `f1` | `d/f/.` | `d` | false | `d/f` (renamed) |
3989
- | `f1` | `d/f` | `d/f` | false | `d/f/f1` |
3990
- | `f1` `f2` | `d` | `d` | false | `d/f1` `d/f2` |
3991
- | `d3` | `d` | - | false | `d/f1` `d/f2` (renamed) |
3992
- | `f1` | `d` | - | true | `d/f1` |
3993
- | `f1` `f2` | `d` | - | true | `d/f1` `d/f2` |
3994
- | `d1/f1` `d2/f2` | `d` | - | true | `d/f1` `d/f2` |
3995
- | `d3` | `d` | - | true | `d/d3/f1` `d/d3/d4/f2` |
4204
+ | Source files | Destination | Folders on Dest. | `create_dir` | Destination Files |
4205
+ |-----------------|-----|-----|------|-----------------------------------|
4206
+ | `f1` | `d/f` | - | false | Error: `d` does not exist. |
4207
+ | `f1` | `d/f` | `d` | false | `d/f` (renamed) |
4208
+ | `f1` | `d/f/.` | `d` | false | `d/f` (renamed) |
4209
+ | `f1` | `d/f` | `d/f` | false | `d/f/f1` |
4210
+ | `f1` `f2` | `d` | `d` | false | `d/f1` `d/f2` |
4211
+ | `d3` | `d` | - | false | `d/f1` `d/f2` (renamed) |
4212
+ | `f1` | `d` | - | true | `d/f1` |
4213
+ | `f1` `f2` | `d` | - | true | `d/f1` `d/f2` |
4214
+ | `d1/f1` `d2/f2` | `d` | - | true | `d/f1` `d/f2` |
4215
+ | `d3` | `d` | - | true | `d/d3/f1` `d/d3/d4/f2` |
3996
4216
 
3997
4217
  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).
3998
4218
 
@@ -4043,8 +4263,13 @@ When multi-session is used, one separate UDP port is used per session (refer to
4043
4263
 
4044
4264
  #### Content protection
4045
4265
 
4046
- 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.
4047
- Files stay encrypted on server side.
4266
+ Content protection (Client-Side Encryption at Rest, CSEAR)) ensures that files remain encrypted while stored on the server.
4267
+ With CSEAR, the client encrypts files during upload and decrypts files during download, using a passphrase known only to the users sharing the files.
4268
+
4269
+ - Upload: Files are encrypted on the client side before being sent to the server.
4270
+ - Download: Files are decrypted on the client side as they are retrieved from the server.
4271
+
4272
+ At all times, files remain encrypted on the server; encryption and decryption occur exclusively on the client side.
4048
4273
 
4049
4274
  Activating CSEAR consists in using transfer spec parameters:
4050
4275
 
@@ -4057,6 +4282,11 @@ Example: parameter to download a Faspex package and decrypt on the fly
4057
4282
  --ts=@json:'{"content_protection":"decrypt","content_protection_password":"my_password_here"}'
4058
4283
  ```
4059
4284
 
4285
+ > [!NOTE]
4286
+ > Faspex 5 requires package parameter `ear_enabled` set to `true` for CSEAR.
4287
+ > In that case the transfer spec parameter `content_protection` is automatically set.
4288
+ > `content_protection_password` is then required in all cases.
4289
+
4060
4290
  #### Transfer Spec Examples
4061
4291
 
4062
4292
  - Change target rate
@@ -4102,7 +4332,7 @@ It can be configured:
4102
4332
 
4103
4333
  - Using utility [`schtasks.exe`](https://learn.microsoft.com/fr-fr/windows-server/administration/windows-commands/schtasks-create)
4104
4334
 
4105
- - Using Powershell function [`scheduletasks`](https://learn.microsoft.com/en-us/powershell/module/scheduledtasks)
4335
+ - Using PowerShell function [`scheduletasks`](https://learn.microsoft.com/en-us/powershell/module/scheduledtasks)
4106
4336
 
4107
4337
  - Using `taskschd.msc` (UI)
4108
4338
 
@@ -4306,14 +4536,14 @@ where:
4306
4536
  - `dirname` is the folder name and can contain `/` to specify a subfolder.
4307
4537
  - Supported arguments are:
4308
4538
 
4309
- | Name | Type | Description |
4310
- |----------|-------|-------------|
4311
- | count | int | Number of files<br/>Mandatory |
4312
- | file | string| Basename for files<br/>Default: `file` |
4313
- | size | int | Size of first file.<br/>Default: 0 |
4314
- | inc | int | Increment applied to determine next file size<br/>Default: 0 |
4315
- | seq | enum | Sequence in determining next file size<br/>Values: `random`, `sequential`<br/>Default: `sequential` |
4316
- | buf_init | enum | How source data is initialized<br/>Option `none` is not allowed for downloads.<br/>Values:`none`, `zero`, `random`<br/>Default:`zero` |
4539
+ | Name | Type | Description |
4540
+ |----------|--------|----------------------------------------------------------------|
4541
+ | count | int | Number of files<br/>Mandatory |
4542
+ | file | string | Basename for files<br/>Default: `file` |
4543
+ | size | int | Size of first file.<br/>Default: 0 |
4544
+ | inc | int | Increment applied to determine next file size<br/>Default: 0 |
4545
+ | seq | enum | Sequence in determining next file size<br/>Values: `random`, `sequential`<br/>Default: `sequential` |
4546
+ | buf_init | enum | How source data is initialized<br/>Option `none` is not allowed for downloads.<br/>Values:`none`, `zero`, `random`<br/>Default:`zero` |
4317
4547
 
4318
4548
  The sequence parameter is applied as follows:
4319
4549
 
@@ -4365,7 +4595,7 @@ ascli server upload "faux:///mydir?file=testfile&count=1000&size=1" --to-folder=
4365
4595
  ```text
4366
4596
  ascli -h
4367
4597
  NAME
4368
- ascli -- a command line tool for Aspera Applications (v4.24.1)
4598
+ ascli -- a command line tool for Aspera Applications (v4.25.0.pre)
4369
4599
 
4370
4600
  SYNOPSIS
4371
4601
  ascli COMMANDS [OPTIONS] [ARGS]
@@ -4387,7 +4617,7 @@ COMMANDS
4387
4617
  OPTIONS
4388
4618
  Options begin with a '-' (minus), and value is provided on command line.
4389
4619
  Special values are supported beginning with special prefix @pfx:, where pfx is one of:
4390
- val, base64, csvt, env, file, uri, json, lines, list, none, path, re, ruby, secret, stdin, stdbin, yaml, zlib, extend, preset, vault
4620
+ val, base64, csvt, env, file, uri, json, lines, list, none, path, re, ruby, secret, stdin, stdbin, yaml, zlib, extend, preset, vault,
4391
4621
  Dates format is 'DD-MM-YY HH:MM:SS', or 'now' or '-<num>h'
4392
4622
 
4393
4623
  ARGS
@@ -4396,11 +4626,10 @@ ARGS
4396
4626
  OPTIONS: global
4397
4627
  --interactive=ENUM Use interactive input of missing params: [no], yes
4398
4628
  --ask-options=ENUM Ask even optional options: [no], yes
4399
- --struct-parser=ENUM Default parser when expected value is a struct: json, ruby
4400
4629
  --format=ENUM Output format: text, nagios, ruby, json, jsonpp, yaml, [table], csv, image
4401
- --output=VALUE Destination for results (String)
4630
+ --output=VALUE Destination for results
4402
4631
  --display=ENUM Output only some information: [info], data, error
4403
- --fields=VALUE Comma separated list of: fields, or ALL, or DEF (String, Array, Regexp, Proc)
4632
+ --fields=VALUE Comma separated list of: fields, or ALL, or DEF (Array, Regexp, Proc)
4404
4633
  --select=VALUE Select only some items in lists: column, value (Hash, Proc)
4405
4634
  --table-style=VALUE (Table) Display style (Hash)
4406
4635
  --flat-hash=ENUM (Table) Display deep values as additional keys: no, [yes]
@@ -4414,14 +4643,16 @@ OPTIONS: global
4414
4643
  --ui=ENUM Method to start browser: text, [graphical]
4415
4644
  --invalid-characters=VALUE Replacement character and invalid filename characters
4416
4645
  --log-level=ENUM Log level: trace2, trace1, debug, info, [warn], error, fatal, unknown
4417
- --log-format=VALUE Log formatter (Proc, Logger::Formatter, String)
4646
+ --log-format=VALUE Log formatter (Proc, Logger::Formatter)
4418
4647
  --logger=ENUM Logging method: [stderr], stdout, syslog
4419
4648
  --lock-port=VALUE Prevent dual execution of a command, e.g. in cron (Integer)
4420
4649
  --once-only=ENUM Process only new items (some commands): [no], yes
4421
4650
  --log-secrets=ENUM Show passwords in logs: [no], yes
4422
4651
  --clean-temp=ENUM Cleanup temporary files on exit: no, [yes]
4423
- --pid-file=VALUE Write process identifier to file, delete on exit (String)
4424
- --home=VALUE Home folder for tool (String)
4652
+ --temp-folder=VALUE Temporary folder
4653
+ --pid-file=VALUE Write process identifier to file, delete on exit
4654
+ --parser=ENUM Default parser for structured parameters and options: none, json, ruby, yaml
4655
+ --home=VALUE Home folder for tool
4425
4656
  --config-file=VALUE Path to YAML file with preset configuration
4426
4657
  --secret=VALUE Secret for access keys
4427
4658
  --vault=VALUE Vault for secrets (Hash)
@@ -4432,17 +4663,15 @@ OPTIONS: global
4432
4663
  --bfail=ENUM Bulk operation error handling: no, [yes]
4433
4664
  -N, --no-default Do not load default configuration for plugin
4434
4665
  -P, --presetVALUE Load the named option preset from current config file
4435
- --version-check-days=VALUE Period in days to check new version (zero to disable)
4666
+ --version-check-days=VALUE Period in days to check new version (zero to disable) (Integer)
4436
4667
  --plugin-folder=VALUE Folder where to find additional plugins
4437
4668
  --override=ENUM Wizard: override existing value: [no], yes
4438
4669
  --default=ENUM Wizard: set as default configuration for specified plugin (also: update): no, [yes]
4439
- --test-mode=ENUM Wizard: skip private key check step: [no], yes
4440
4670
  --key-path=VALUE Wizard: path to private key for JWT
4441
- --ascp-path=VALUE Ascp: Path to ascp
4442
- --use-product=VALUE Ascp: Use ascp from specified product
4443
4671
  --sdk-url=VALUE Ascp: URL to get Aspera Transfer Executables
4444
- --locations-url=VALUE Ascp: URL to get locations of Aspera Transfer Daemon
4445
- --sdk-folder=VALUE Ascp: SDK folder path
4672
+ --ascp-path=VALUE Ascp: Path to ascp (or product with "product:")
4673
+ --locations-url=VALUE Ascp: URL to get download locations of Aspera Transfer Daemon
4674
+ --sdk-folder=VALUE Ascp: SDK installation folder path
4446
4675
  --progress-bar=ENUM Display progress bar: [no], yes
4447
4676
  --smtp=VALUE Email: SMTP configuration (Hash)
4448
4677
  --notify-to=VALUE Email: Recipient for notification of transfers
@@ -4450,9 +4679,9 @@ OPTIONS: global
4450
4679
  --insecure=ENUM HTTP/S: Do not validate any certificate: [no], yes
4451
4680
  --ignore-certificate=VALUE HTTP/S: Do not validate certificate for these URLs (Array)
4452
4681
  --warn-insecure=ENUM HTTP/S: Issue a warning if certificate is ignored: no, [yes]
4453
- --cert-stores=VALUE HTTP/S: List of folder with trusted certificates (Array, String)
4682
+ --cert-stores=VALUE HTTP/S: List of folder with trusted certificates (Array)
4454
4683
  --http-options=VALUE HTTP/S: Options for HTTP/S socket (Hash)
4455
- --http-proxy=VALUE HTTP/S: URL for proxy with optional credentials (String)
4684
+ --http-proxy=VALUE HTTP/S: URL for proxy with optional credentials
4456
4685
  --cache-tokens=ENUM Save and reuse OAuth tokens: no, [yes]
4457
4686
  --fpac=VALUE Proxy auto configuration script
4458
4687
  --proxy-credentials=VALUE HTTP proxy credentials for fpac: user, password (Array)
@@ -4464,7 +4693,7 @@ OPTIONS: global
4464
4693
  --transfer-info=VALUE Parameters for transfer agent (Hash)
4465
4694
 
4466
4695
  COMMAND: config
4467
- SUBCOMMANDS: ascp check_update coffee detect documentation download echo email_test file folder gem genkey image initdemo open platform plugins preset proxy_check pubkey remote_certificate smtp_settings test tokens transferd vault wizard
4696
+ SUBCOMMANDS: ascp check_update coffee detect documentation download echo email_test file folder gem genkey image initdemo open platform plugins preset proxy_check pubkey remote_certificate smtp_settings sync test tokens transferd vault wizard
4468
4697
 
4469
4698
 
4470
4699
  COMMAND: shares
@@ -4476,7 +4705,7 @@ OPTIONS:
4476
4705
 
4477
4706
 
4478
4707
  COMMAND: node
4479
- SUBCOMMANDS: access_keys api_details asperabrowser async basic_token bearer_token browse cat central delete download events health info license mkdir mkfile mklink rename search service simulator slash space ssync stream sync telemetry transfer transport upload watch_folder
4708
+ SUBCOMMANDS: access_keys api_details asperabrowser async basic_token bearer_token browse cat central delete download events health info license mkdir mkfile mklink rename search service simulator slash space spec ssync stream sync telemetry transfer transport upload watch_folder
4480
4709
  OPTIONS:
4481
4710
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4482
4711
  --username=VALUE User's identifier
@@ -4502,7 +4731,7 @@ OPTIONS:
4502
4731
 
4503
4732
 
4504
4733
  COMMAND: orchestrator
4505
- SUBCOMMANDS: health info plugins processes workflow
4734
+ SUBCOMMANDS: health info monitors plugins processes workflows workorders workstep
4506
4735
  OPTIONS:
4507
4736
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4508
4737
  --username=VALUE User's identifier
@@ -4528,7 +4757,6 @@ OPTIONS:
4528
4757
  --instance=VALUE ATS instance in ibm cloud
4529
4758
  --ats-key=VALUE ATS key identifier (ats_xxx)
4530
4759
  --ats-secret=VALUE ATS key secret
4531
- --params=VALUE Parameters access key creation (@json:)
4532
4760
  --cloud=VALUE Cloud provider
4533
4761
  --region=VALUE Cloud region
4534
4762
 
@@ -4539,12 +4767,13 @@ OPTIONS:
4539
4767
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4540
4768
  --username=VALUE User's identifier
4541
4769
  --password=VALUE User's password
4770
+ --auth=ENUM OAuth type of authentication: web, [jwt], boot
4542
4771
  --client-id=VALUE OAuth client identifier
4543
4772
  --client-secret=VALUE OAuth client secret
4544
- --redirect-uri=VALUE OAuth redirect URI for web authentication
4545
- --auth=ENUM OAuth type of authentication: web, [jwt], boot
4546
- --private-key=VALUE OAuth JWT RSA private key PEM value (prefix file path with @file:)
4547
- --passphrase=VALUE OAuth JWT RSA private key passphrase
4773
+ --redirect-uri=VALUE OAuth (Web) redirect URI for web authentication
4774
+ --private-key=VALUE OAuth (JWT) RSA private key PEM value (prefix file path with @file:)
4775
+ --passphrase=VALUE OAuth (JWT) RSA private key passphrase
4776
+ --scope=VALUE OAuth scope for API calls
4548
4777
  --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
4549
4778
  --shared-folder=VALUE Send package with files from shared folder
4550
4779
  --group-type=ENUM Type of shared box: [shared_inboxes], workgroups
@@ -4588,12 +4817,11 @@ OPTIONS:
4588
4817
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4589
4818
  --username=VALUE User's identifier
4590
4819
  --password=VALUE User's password
4591
- --skip-format=ENUM Skip this preview format (multiple possible): png, mp4
4820
+ --skip-format=ENUM Skip this preview format: png, mp4
4592
4821
  --folder-reset-cache=ENUM Force detection of generated preview by refresh cache: [no], header, read
4593
- --skip-types=VALUE Skip types in comma separated list
4822
+ --skip-types=VALUE Skip generation for those types of files (Array)
4594
4823
  --previews-folder=VALUE Preview folder in storage root
4595
- --temp-folder=VALUE Path to temp folder
4596
- --skip-folders=VALUE List of folder to skip
4824
+ --skip-folders=VALUE List of folder to skip (Array)
4597
4825
  --base=VALUE Basename of output for for test
4598
4826
  --scan-path=VALUE Subpath in folder id to start scan in (default=/)
4599
4827
  --scan-id=VALUE Folder id in storage to start scan in, default is access key main folder id
@@ -4624,17 +4852,17 @@ OPTIONS:
4624
4852
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4625
4853
  --username=VALUE User's identifier
4626
4854
  --password=VALUE User's password
4627
- --auth=ENUM OAuth type of authentication: web, [jwt]
4628
- --client-id=VALUE OAuth API client identifier
4629
- --client-secret=VALUE OAuth API client secret
4630
- --scope=VALUE OAuth scope for AoC API calls
4631
- --redirect-uri=VALUE OAuth API client redirect URI
4632
- --private-key=VALUE OAuth JWT RSA private key PEM value (prefix file path with @file:)
4633
- --passphrase=VALUE RSA private key passphrase (String)
4634
- --workspace=VALUE Name of workspace (String, NilClass)
4855
+ --auth=ENUM OAuth type of authentication: web, [jwt], boot
4856
+ --client-id=VALUE OAuth client identifier
4857
+ --client-secret=VALUE OAuth client secret
4858
+ --redirect-uri=VALUE OAuth (Web) redirect URI for web authentication
4859
+ --private-key=VALUE OAuth (JWT) RSA private key PEM value (prefix file path with @file:)
4860
+ --passphrase=VALUE OAuth (JWT) RSA private key passphrase
4861
+ --scope=VALUE OAuth scope for API calls
4862
+ --workspace=VALUE Name of workspace
4635
4863
  --new-user-option=VALUE New user creation option for unknown package recipients (Hash)
4636
4864
  --validate-metadata=ENUM Validate shared inbox metadata: no, [yes]
4637
- --package-folder=VALUE Field of package to use as folder name, or @none: (String, NilClass)
4865
+ --package-folder=VALUE Field of package to use as folder name, or @none:
4638
4866
 
4639
4867
 
4640
4868
  COMMAND: server
@@ -4643,7 +4871,7 @@ OPTIONS:
4643
4871
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4644
4872
  --username=VALUE User's identifier
4645
4873
  --password=VALUE User's password
4646
- --ssh-keys=VALUE SSH key path list (Array or single)
4874
+ --ssh-keys=VALUE SSH key path list (Array)
4647
4875
  --passphrase=VALUE SSH private key passphrase
4648
4876
  --ssh-options=VALUE SSH options (Hash)
4649
4877
 
@@ -4670,18 +4898,17 @@ This option is available only for some resources: if you need it: try and see if
4670
4898
  ### Option: `query`
4671
4899
 
4672
4900
  The `query` option can generally be used to add URL parameters to commands that list resources.
4673
- It takes either a `Hash` or an `Array`, corresponding to key/value pairs that appear in the query part of request.
4901
+ It takes either a `Hash`, corresponding to key/value pairs that appear in the query part of request.
4674
4902
 
4675
4903
  For example: `--query=@json:'{"p1":"v1","p2":"v2"}'` leads to query: `?p1=v1&p2=v2`.
4676
4904
 
4677
- If the same parameter needs to be provided several times, then it's possible as well to provide an `Array` or 2-element `Array`: `--query=@json:'[["p1":,"v1"],["p2":"v2"]]'` leads to the same result as previously.
4905
+ If the same parameter needs to be provided several times, then it's possible as well to provide an `Array`.
4678
4906
 
4679
- If PHP's style array is used, then one can use either:
4907
+ For example: `--query=@json:'{"p":["v1","v2"]}'` leads to query: `?p=v1&p=v2`.
4680
4908
 
4681
- - `--query=@json:'{"a":["[]","v1","v2"]}'`
4682
- - `--query=@json:'[["a[]","v1"],["a[]","v2"]]'`
4909
+ If PHP's style array is expected in the API, then just add `[]` to the name of the parameter.
4683
4910
 
4684
- Both result in: `?a[]=v1&a[]=v2`.
4911
+ For example: `--query=@json:'{"p[]":["v1","v2"]}'` leads to query: `?p[]=v1&p[]=v2`.
4685
4912
 
4686
4913
  ### Plugins
4687
4914
 
@@ -4748,39 +4975,50 @@ Aspera on Cloud API requires the use of OAuth v2 mechanism for authentication (H
4748
4975
 
4749
4976
  It is recommended to use the wizard to set it up, although manual configuration is also possible.
4750
4977
 
4751
- ### Configuration: Using Wizard
4978
+ ### AoC configuration: Using Wizard
4752
4979
 
4753
4980
  `ascli` provides a configuration [wizard](#wizard).
4754
4981
 
4755
4982
  The wizard guides you through the steps to create a new configuration preset for Aspera on Cloud.
4756
4983
 
4757
- The first optional argument is the URL of your Aspera on Cloud instance, e.g. `https://_your_instance_.ibmaspera.com` or simply the organization name, and a second optional argument can also be provided to specify the plugin name, e.g. `aoc` for Aspera on Cloud.
4984
+ The first optional argument is the URL of your Aspera on Cloud instance or simply the organization name, i.e. one of those :
4985
+
4986
+ - `_your_organization_`
4987
+ - `_your_organization_.ibmaspera.com`
4988
+ - `https://_your_organization_.ibmaspera.com`
4989
+
4990
+ The second optional argument can also be provided to specify the plugin name, e.g. `aoc` for Aspera on Cloud.
4758
4991
  If optional arguments are not provided, the wizard will ask interactively and try to detect the application.
4759
4992
 
4760
4993
  Here is a sample invocation :
4761
4994
 
4762
- ```text
4763
- ascli config wizard
4764
- option: url> https://_your_instance_.ibmaspera.com
4765
- Detected: Aspera on Cloud
4766
- Preparing preset: aoc_myorg
4767
- Please provide path to your private RSA key, or empty to generate one:
4995
+ ```console
4996
+ $ ascli config wizard
4997
+ Using: Aspera on Cloud at https://_my_org_.ibmaspera.com
4998
+ Path to private RSA key (leave empty to generate):
4768
4999
  option: key_path>
4769
- using existing key:
4770
- /Users/myself/.aspera/ascli/aspera_aoc_key
5000
+ Using existing key:
5001
+ /home/john/.aspera/ascli/my_private_key.pem
5002
+ Please Log in as user laurent.martin.aspera@fr.ibm.com at: https://_my_org_.ibmaspera.com
5003
+ Navigate to: (User) → Account Settings → Profile → Public Key
5004
+ Check or update the value to (including BEGIN/END lines):
5005
+ -----BEGIN PUBLIC KEY-----
5006
+ MIICIjANBg....
5007
+ ....
5008
+ ....kCAwEAAQ==
5009
+ -----END PUBLIC KEY-----
5010
+ Once updated or validated, press [Enter].
5011
+
4771
5012
  Using global client_id.
4772
- option: username> john@example.com
4773
- Updating profile with new key
4774
- creating new config preset: aoc_myorg
4775
- Setting config preset as default for aspera
4776
- saving configuration file
4777
- Done.
5013
+ Preparing preset: aoc_my_org_ibmaspera_com_john_example_com
5014
+ Setting config preset as default for aoc
4778
5015
  You can test with:
4779
5016
  ascli aoc user profile show
5017
+ Saving config file.
4780
5018
  ```
4781
5019
 
4782
5020
  > [!NOTE]
4783
- > In above example, replace `https://_your_instance_.ibmaspera.com` with your actual AoC URL.
5021
+ > In above example, replace `https://_my_org_.ibmaspera.com` with your actual AoC URL.
4784
5022
 
4785
5023
  Optionally, it is possible to create a new organization-specific integration, i.e. client application identification.
4786
5024
  For this, specify the option: `--use-generic-client=no`.
@@ -4788,11 +5026,11 @@ For this, specify the option: `--use-generic-client=no`.
4788
5026
  If you already know the application, and want to limit the detection to it, provide URL and plugin name:
4789
5027
 
4790
5028
  ```shell
4791
- ascli config wizard _your_instance_ aoc
5029
+ ascli config wizard _my_org_ aoc
4792
5030
  ```
4793
5031
 
4794
5032
  > [!NOTE]
4795
- > In above example, replace `_your_instance_` with the first part of your actual AoC URL: `https://_your_instance_.ibmaspera.com`.
5033
+ > In above example, replace `_my_org_` with the first part of your actual AoC URL: `https://_my_org_.ibmaspera.com`.
4796
5034
 
4797
5035
  After successful completion of the wizard, a new configuration preset is created, and set as default for the `aoc` plugin.
4798
5036
  This can be verified with command:
@@ -4801,12 +5039,12 @@ This can be verified with command:
4801
5039
  ascli config preset over
4802
5040
  ```
4803
5041
 
4804
- ### Configuration: Using manual setup
5042
+ ### AoC configuration: Using manual setup
4805
5043
 
4806
5044
  > [!NOTE]
4807
5045
  > If you used the wizard (recommended): skip this section.
4808
5046
 
4809
- #### Configuration details
5047
+ #### AoC manual configuration: Details
4810
5048
 
4811
5049
  Several types of OAuth authentication are supported:
4812
5050
 
@@ -4836,7 +5074,7 @@ Else you can use a specific OAuth API `client_id`, the first step is to declare
4836
5074
 
4837
5075
  Let's start by a registration with web based authentication (auth=web):
4838
5076
 
4839
- - Open a web browser, log to your instance: e.g. `https://_your_instance_.ibmaspera.com/`
5077
+ - Open a web browser, log to your instance: e.g. `https://_my_org_.ibmaspera.com/`
4840
5078
  (use your actual AoC instance URL)
4841
5079
  - Go to Apps &rarr; Admin &rarr; Organization &rarr; Integrations
4842
5080
  - Click **Create New**
@@ -4861,14 +5099,14 @@ Let's create an [Option Preset](#option-preset) called: `my_aoc_org` using `ask`
4861
5099
 
4862
5100
  ```shell
4863
5101
  ascli config preset ask my_aoc_org url client_id client_secret
4864
- option: url> https://_your_instance_.ibmaspera.com/
5102
+ option: url> https://_my_org_.ibmaspera.com/
4865
5103
  option: client_id> my_client_id_here
4866
5104
  option: client_secret> my_client_secret_here
4867
5105
  updated: my_aoc_org
4868
5106
  ```
4869
5107
 
4870
5108
  > [!NOTE]
4871
- > In above example, replace `https://_your_instance_.ibmaspera.com` with your actual AoC URL.
5109
+ > In above example, replace `https://_my_org_.ibmaspera.com` with your actual AoC URL.
4872
5110
 
4873
5111
  (This can also be done in one line using the command `config preset update my_aoc_org --url=...`)
4874
5112
 
@@ -4896,7 +5134,7 @@ This can be done in two manners:
4896
5134
 
4897
5135
  - Graphically
4898
5136
 
4899
- - Open a web browser, log to your instance: `https://_your_instance_.ibmaspera.com/`
5137
+ - Open a web browser, log to your instance: `https://_my_org_.ibmaspera.com/`
4900
5138
  (Use your actual AoC instance URL)
4901
5139
  - Go to Apps &rarr; Admin &rarr; Organization &rarr; Integrations
4902
5140
  - Click on the previously created application
@@ -4939,7 +5177,7 @@ This can be done in two manners:
4939
5177
 
4940
5178
  Open the previously generated public key located here: `$HOME/.aspera/ascli/my_private_key.pub`
4941
5179
 
4942
- - Open a web browser, log to your instance: `https://_your_instance_.ibmaspera.com/`
5180
+ - Open a web browser, log to your instance: `https://_my_org_.ibmaspera.com/`
4943
5181
  (Use your actual AoC instance URL)
4944
5182
  - Click on the user's icon (top right)
4945
5183
  - Select **Account Settings**
@@ -5039,7 +5277,7 @@ ascli aoc files bearer_token_node /
5039
5277
  ```
5040
5278
 
5041
5279
  ```shell
5042
- ascli aoc admin node v4 1234 --secret=_ak_secret_here_ bearer_token_node /
5280
+ ascli aoc admin node v4 <node_id> --secret=_ak_secret_here_ bearer_token_node /
5043
5281
  ```
5044
5282
 
5045
5283
  ### Administration
@@ -5623,7 +5861,7 @@ ascli aoc packages shared_inboxes list
5623
5861
 
5624
5862
  Use fields: `recipients` and/or `bcc_recipients` to provide the list of recipients: **user** or **shared inbox**:
5625
5863
 
5626
- - Provide either IDs as expected by API: `"recipients":[{"type":"dropbox","id":"1234"}]`
5864
+ - Provide either IDs as expected by API: `"recipients":[{"type":"dropbox","id":"_my_shibox_id_"}]`
5627
5865
  - or just names: `"recipients":[{"The Dest"}]`.
5628
5866
 
5629
5867
  ascli will resolve the list of email addresses and dropbox names to the expected type/ID list, based on case-insensitive partial match.
@@ -5642,13 +5880,13 @@ ascli aoc packages send @json:'{"name":"my title","note":"my note","recipients":
5642
5880
  ##### Example: Send a package to a shared inbox with metadata
5643
5881
 
5644
5882
  ```shell
5645
- ascli aoc packages send --workspace="my ws" @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
5883
+ ascli aoc packages send --workspace="<workspace_name>" @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
5646
5884
  ```
5647
5885
 
5648
5886
  It is also possible to use identifiers and API parameters:
5649
5887
 
5650
5888
  ```shell
5651
- ascli aoc packages send --workspace="my ws" @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
5889
+ ascli aoc packages send --workspace="<workspace_name>" @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
5652
5890
  ```
5653
5891
 
5654
5892
  ##### Example: Send a package with files from the Files app
@@ -5693,12 +5931,12 @@ By default, all files in the package are downloaded, i.e. `.` is used as the fil
5693
5931
  Option `package_folder` defines the attribute of folder used as destination sub folder in the `to_folder` path (see description earlier).
5694
5932
  The following syntax is supported
5695
5933
 
5696
- | Syntax | Description |
5697
- |--------|-------------|
5698
- | `@none:` | No subfolder is created, files are downloaded directly into the specified `to_folder`. |
5699
- | `<field>` | A subfolder named after the package's specified field is created inside `to_folder`. |
5700
- | `<field1>+<field2>` | A subfolder named after the combination of two package fields with a `.` is created inside `to_folder`. |
5701
- | `<field1>+<field2>?` | A subfolder named after the package's specified field1 is created, unless it already exists. Else it falls back to the combination of both fields with `.`. |
5934
+ | Syntax | Description |
5935
+ |----------------------|----------------------------------------------------------------------------------------|
5936
+ | `@none:` | No subfolder is created, files are downloaded directly into the specified `to_folder`. |
5937
+ | `<field>` | A subfolder named after the package's specified field is created inside `to_folder`. |
5938
+ | `<field1>+<field2>` | A subfolder named after the combination of two package fields with a `.` is created inside `to_folder`. |
5939
+ | `<field1>+<field2>?` | A subfolder named after the package's specified field1 is created, unless it already exists.<br/>Else it falls back to the combination of both fields with `.`. |
5702
5940
 
5703
5941
  The special value `seq` for `<field2>` will append an incrementing number to the folder name starting at `1`.
5704
5942
  If `?` is used, then the sequence number is used only if the folder already exists.
@@ -5768,15 +6006,15 @@ ascli aoc package node_info <package ID here> / --format=json --show-secrets=yes
5768
6006
 
5769
6007
  By default, when using `aoc packages list` or `aoc packages receive ALL`, the following `query` is performed:
5770
6008
 
5771
- | Query parameter | Value |
5772
- |----------------------------|---------|
6009
+ | Query parameter | Value |
6010
+ |----------------------------|-----------------------------------------------|
5773
6011
  | `archived` | `false` |
5774
6012
  | `has_content` | `true` |
5775
6013
  | `received` | `true` |
5776
6014
  | `completed` | `true` |
5777
- | `workspace_id` | Set based on current workspace. |
6015
+ | `workspace_id` | Set based on current workspace. |
5778
6016
  | `dropbox_id` | Set according to `dropbox_name`, if provided. |
5779
- | `exclude_dropbox_packages` | `true` unless `dropbox_id` is provided. |
6017
+ | `exclude_dropbox_packages` | `true` unless `dropbox_id` is provided. |
5780
6018
 
5781
6019
  Parameters provided using option `query` override this query.
5782
6020
  To remove a parameter, set it to `null`.
@@ -5839,7 +6077,7 @@ ascli aoc files download <single file path>
5839
6077
 
5840
6078
  #### Shared folders
5841
6079
 
5842
- Like in AoC web UI, "Shared Folders" can be created and shared with either **Private** or **Public** links.
6080
+ Like in AoC web UI, **Shared Folders** can be created and shared with either **Private** or **Public** links.
5843
6081
  **Private** links require the collaborator to log in to access the shared folder.
5844
6082
  **Public** links include a passcode that enables the user to access the shared folder without login-in.
5845
6083
 
@@ -5866,19 +6104,19 @@ The basic payload to create a permission, i.e. a Shared Folder (last argument at
5866
6104
  `ascli` expects the same payload for creation.
5867
6105
  `ascli` automatically populates some payload fields and provides convenient additional fields that generate native fields:
5868
6106
 
5869
- | Field | Type | Description |
5870
- |-----------------|----------|-------------|
6107
+ | Field | Type | Description |
6108
+ |-----------------|----------|----------------------------------------------------------------------|
5871
6109
  | `file_id` | Native<br/>Auto | ID of the folder to share, as specified in the command line by path. |
5872
- | `access_levels` | Native<br/>Optional | List of access levels to set for the shared folder. Defaults to full access. |
6110
+ | `access_levels` | Native<br/>Optional | List of access levels to set for the shared folder.<br/>Defaults to full access. |
5873
6111
  | `tags` | Native<br/>Auto | Set with expected values for AoC: username who creates, and workspace in which the shared folder is created. |
5874
- | `access_type` | Native<br/>Required | Type of access, such as `user`, `group`, or `workspace`. Can be set with parameter `with`. |
6112
+ | `access_type` | Native<br/>Required | Type of access, such as `user`, `group`, or `workspace`.<br/>Can be set with parameter `with`. |
5875
6113
  | `access_id` | Native<br/>Required | ID of the user, group, or workspace (see `with`) |
5876
- | `with` | `ascli` | Recipient of shared folder. Can be a username, a group name, or a workspace name. `ascli` will resolve the name to the proper type and ID in fields `access_type` and `access_id`. If the value is the empty string, then it declares the shared folder in the workspace (first action to do, see below). |
6114
+ | `with` | `ascli` | Recipient of shared folder. Can be a username, a group name, or a workspace name.<br/>`ascli` will resolve the name to the proper type and ID in fields `access_type` and `access_id`.<br/>If the value is the empty string, then it declares the shared folder in the workspace (first action to do, see below). |
5877
6115
  | `link_name` | `ascli` | Name of the link file created in the user's home folder for private links. |
5878
6116
  | `as` | `ascli` | Name of the link file created in the user's home folder for admin shared folders. |
5879
6117
 
5880
- In order to declare/create the shared folder in the workspace, a special value for `access_id` is used: `ASPERA_ACCESS_KEY_ADMIN_WS_[workspace ID]]`.
5881
- This is conveniently set by `ascli` using an empty string for field `with`.
6118
+ In order to declare/create the shared folder in the workspace, a special value for `access_id` is used: `ASPERA_ACCESS_KEY_ADMIN_WS_[workspace ID]`, with a `access_type` of `user`.
6119
+ This is conveniently set by `ascli` using an **empty string** for field `with`.
5882
6120
  In order to share a folder with a different, special tags are set, but this is conveniently done by `ascli` using the `as` field.
5883
6121
 
5884
6122
  ##### User Shared Folders
@@ -5891,11 +6129,11 @@ ascli aoc files permission --workspace=<workspace name> <path to folder> ...
5891
6129
 
5892
6130
  > [!NOTE]
5893
6131
  > The workspace is identified by name, and folder by path, relative to the user's home.
5894
- > To use an identifier instead, one can use the percent selector, like `%id:1234`
6132
+ > To use an identifier instead, one can use the percent selector, like `%id:_my_ws_id_`.
5895
6133
 
5896
6134
  ##### Admin Shared Folders
5897
6135
 
5898
- Admin shared folders, created by administrators in a workspace follow the syntax:
6136
+ Admin shared folders, created by administrators in a workspace, follow the syntax:
5899
6137
 
5900
6138
  ```shell
5901
6139
  ascli aoc admin node do <node ID> permission --workspace=<workspace name> <path to folder>
@@ -5903,9 +6141,11 @@ ascli aoc admin node do <node ID> permission --workspace=<workspace name> <path
5903
6141
 
5904
6142
  > [!TIP]
5905
6143
  > The node is identified by identifier.
5906
- > To use an name instead, one can use the percent selector, like `%name:"my node"`
6144
+ > To use an name instead, one can use the percent selector, like `%name:"my node"`.
6145
+ > The path is identifier by a path, one can specify a file id, with `%id:123`.
6146
+ > If the id is left blank: `%id:`, then if means `*`, i.e. all.
5907
6147
 
5908
- ##### Example: List permissions on a shared folder
6148
+ ##### Example: List permissions on a user shared folder
5909
6149
 
5910
6150
  ```shell
5911
6151
  ascli aoc files permission /shared_folder_test1 list
@@ -5952,7 +6192,7 @@ To remove a password:
5952
6192
  > [!NOTE]
5953
6193
  > Access level cannot be customized in this version.
5954
6194
 
5955
- An expiration date can be set with parameter `expires_at`, using ISO 8601 format.
6195
+ An expiration date can be set with parameter `expires_at`, using [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
5956
6196
  E.g. `2025-08-29T08:10:31.000Z`.
5957
6197
  If only a date is provided, it will be set to midnight UTC of that date.
5958
6198
 
@@ -5960,16 +6200,16 @@ If only a date is provided, it will be set to midnight UTC of that date.
5960
6200
 
5961
6201
  First, identify the node ID where the shared folder will be created.
5962
6202
 
5963
- To get the node ID of the default node for workspace `my ws`, use the command:
6203
+ To get the node ID of the default node for workspace `<workspace_name>`, use the command:
5964
6204
 
5965
6205
  ```shell
5966
- ascli aoc admin workspace show %name:'my ws' --fields=node_id
6206
+ ascli aoc admin workspace show %name:'<workspace_name>' --fields=node_id
5967
6207
  ```
5968
6208
 
5969
6209
  Alternatively (longer):
5970
6210
 
5971
6211
  ```shell
5972
- ascli aoc admin workspace list --select=@json:'{"name":"my ws"}' --fields=node_id
6212
+ ascli aoc admin workspace list --select=@json:'{"name":"<workspace_name>"}' --fields=node_id
5973
6213
  ```
5974
6214
 
5975
6215
  Or select a node identifier manually from the list of nodes:
@@ -5980,24 +6220,22 @@ ascli aoc admin node list --fields=id,name
5980
6220
 
5981
6221
  In the following commands, replace:
5982
6222
 
5983
- - `1234` with the node ID
5984
- - `my ws` with the workspace name
5985
- - `/folder_on_node` with the name of the folder on the node: it can also be a folder deeper than level 1.
5986
-
5987
- The node can also be conveniently identified using the **percent selector** instead of numerical ID: `%name:"my node"`.
6223
+ - `<node_id>` with the node ID, or with `%name:<node_name>`.
6224
+ - `<workspace_name>` with the workspace name, or with `%id:<workspace_id>`.
6225
+ - `<folder_path>` with the path of the folder to share on the node (e.g. `/my_folder` or simply `my_folder`). It can also be a folder deeper than level 1.
5988
6226
 
5989
6227
  If the shared folder does not exist, then create it:
5990
6228
 
5991
6229
  ```shell
5992
- ascli aoc admin node do 1234 mkdir /folder_on_node
6230
+ ascli aoc admin node do <node_id> mkdir <folder_path>
5993
6231
  ```
5994
6232
 
5995
- Create the shared folder in workspace `my ws` (set `with` to empty string, or do not specify it).
5996
- Optionally use `as` to set the name of the shared folder if different from the folder name on the node.
6233
+ Create the shared folder in workspace `<workspace_name>` (set `with` to empty string, or do not specify it).
6234
+ **Optionally**, use `as` to set the name of the shared folder if different from the folder name on the node.
5997
6235
  For other options, refer to the previous section on shared folders.
5998
6236
 
5999
6237
  ```shell
6000
- ascli aoc admin node do 1234 permission /folder_on_node create @json:'{"with":"","as":"folder_for_users"}' --workspace="my ws"
6238
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"","as":"folder_for_users"}' --workspace="<workspace_name>"
6001
6239
  ```
6002
6240
 
6003
6241
  > [!NOTE]
@@ -6008,20 +6246,81 @@ The `"with"` parameter will perform a lookup, and set fields `access_type` and `
6008
6246
  The native fields `access_type` and `access_id` can also be used, instead of `with`.
6009
6247
 
6010
6248
  ```shell
6011
- ascli aoc admin node do 1234 permission /folder_on_node create @json:'{"with":"john@example.com","as":"folder_for_one_user"}' --workspace="my ws"
6249
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"john@example.com","as":"folder_for_one_user"}' --workspace="<workspace_name>"
6012
6250
  ```
6013
6251
 
6014
6252
  ```shell
6015
- ascli aoc admin node do 1234 permission /folder_on_node create @json:'{"with":"group 1","as":"folder_for_a_group"}' --workspace="my ws"
6253
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"group 1","as":"folder_for_a_group"}' --workspace="<workspace_name>"
6016
6254
  ```
6017
6255
 
6018
6256
  ```shell
6019
- ascli aoc admin node do 1234 permission /folder_on_node create @json:'{"with":"my ws","as":"folder_for_all_workspace"}' --workspace="my ws"
6257
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"<workspace_name>","as":"folder_for_all_workspace"}' --workspace="<workspace_name>"
6020
6258
  ```
6021
6259
 
6022
6260
  > [!NOTE]
6023
6261
  > In the previous commands, field `as` is optional.
6024
6262
 
6263
+ ##### Example: List all workspace admin shared folder in a workspace
6264
+
6265
+ ```shell
6266
+ ascli aoc admin workspace shared_folder %name:'<workspace_name>' list
6267
+ ```
6268
+
6269
+ ```text
6270
+ ╭───────┬───────────┬─────────┬─────────┬───────────┬──────────────────────────────────────╮
6271
+ │ id │ node_name │ node_id │ file_id │ file.path │ tags.aspera.files.workspace.share_as │
6272
+ ╞═══════╪═══════════╪═════════╪═════════╪═══════════╪══════════════════════════════════════╡
6273
+ │ 198 │ eudemo │ 8666 │ 2465 │ /project1 │ │
6274
+ │ 785 │ eudemo │ 8666 │ 9 │ /folder2 │ project2 │
6275
+ │ 4788 │ eudemo │ 8666 │ 3691 │ /backup │ │
6276
+ ╰───────┴───────────┴─────────┴─────────┴───────────┴──────────────────────────────────────╯
6277
+ ```
6278
+
6279
+ To list members:
6280
+
6281
+ ```shell
6282
+ ascli aoc admin workspace shared_folder %name:'<workspace_name>' member 198 list
6283
+ ```
6284
+
6285
+ ```text
6286
+ ╭─────────────┬──────────────────────────────────┬──────────────┬──────────────────────╮
6287
+ │ access_type │ access_id │ access_level │ last_updated_at │
6288
+ ╞═════════════╪══════════════════════════════════╪══════════════╪══════════════════════╡
6289
+ │ user │ ASPERA_ACCESS_KEY_ADMIN_WS_45071 │ edit │ 2020-11-29T22:48:49Z │
6290
+ │ group │ 160270 │ edit │ 2024-05-13T15:58:02Z │
6291
+ ╰─────────────┴──────────────────────────────────┴──────────────┴──────────────────────╯
6292
+ ```
6293
+
6294
+ If you have the node id of the shared folder, than it is equivalent to:
6295
+
6296
+ ```shell
6297
+ ascli aoc admin node do 8669 perm /project1 list --query=@json:'{"tag":"aspera.files.workspace.id=<workspace_id>"}'
6298
+ ```
6299
+
6300
+ ##### Example: List all workspace admin shared folder on a node
6301
+
6302
+ First get the workspace identifier:
6303
+
6304
+ ```shell
6305
+ ascli aoc admin workspace list --select=@json:'{"name":"<workspace_name>"}' --fields=id
6306
+ ```
6307
+
6308
+ ```text
6309
+ <workspace_id>
6310
+ ```
6311
+
6312
+ Then, identify the node id on which to list, see previous section.
6313
+
6314
+ Finally, list all shared folders, as permissions:
6315
+
6316
+ ```shell
6317
+ ascli aoc admin node do <node_id> perm %id: list --query=@json:'{"access_type":"user","access_id":"ASPERA_ACCESS_KEY_ADMIN_WS_<workspace_id>"}'
6318
+ ```
6319
+
6320
+ > [!NOTE]
6321
+ > Refer to Node API: `GET /permissions` for all `query` options.
6322
+ > The folder identifier is left empty `%id:`, to apply to all folders.
6323
+
6025
6324
  #### Cross Organization transfers
6026
6325
 
6027
6326
  It is possible to transfer files directly between organizations without having to first download locally and then upload...
@@ -6030,7 +6329,7 @@ Although optional, the creation of [Option Preset](#option-preset) is recommende
6030
6329
 
6031
6330
  Procedure to send a file from org1 to org2:
6032
6331
 
6033
- - Get access to Organization 1 and create an [Option Preset](#option-preset): e.g. `org1`, for instance, use the [Wizard](#configuration-using-wizard)
6332
+ - Get access to Organization 1 and create an [Option Preset](#option-preset): e.g. `org1`, for instance, use the [Wizard](#wizard)
6034
6333
  - Check that access works and locate the source file e.g. `mysourcefile`, e.g. using command `files browse`
6035
6334
  - Get access to Organization 2 and create an [Option Preset](#option-preset): e.g. `org2`
6036
6335
  - Check that access works and locate the destination folder `mydestfolder`
@@ -6072,12 +6371,12 @@ For instructions, refer to section `find` for plugin `node`.
6072
6371
  > Add `ascli aoc` in front of the following commands:
6073
6372
 
6074
6373
  ```bash
6075
- admin analytics transfers nodes
6374
+ admin analytics files organization '' aoc_transfer_id
6076
6375
  admin analytics transfers organization --query=@json:'{"status":"completed","direction":"receive","limit":2}' --notify-to=my_email_external --notify-template=@ruby:'%Q{From: <%=from_name%> <<%=from_email%>>\nTo: <<%=to%>>\nSubject: <%=ev["files_completed"]%> files received\n\n<%=ev.to_yaml%>}'
6077
6376
  admin analytics transfers users --once-only=yes
6078
6377
  admin application list
6079
- admin ats access_key create --cloud=aws --region=my_region --params=@json:'{"id":"ak_aws","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6080
- admin ats access_key create --cloud=softlayer --region=my_region --params=@json:'{"id":"ak1ibmcloud","secret":"my_secret_here","name":"my test key","storage":{"type":"ibm-s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6378
+ admin ats access_key create --cloud=aws --region=my_region @json:'{"id":"ak_aws_aoc","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6379
+ admin ats access_key create --cloud=softlayer --region=my_region @json:'{"id":"ak1ibmcloud","secret":"my_secret_here","name":"my test key","storage":{"type":"ibm-s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6081
6380
  admin ats access_key delete ak1ibmcloud
6082
6381
  admin ats access_key list --fields=name,id
6083
6382
  admin ats access_key node ak1ibmcloud --secret=my_secret_here browse /
@@ -6122,15 +6421,18 @@ admin subscription usage
6122
6421
  admin subscription usage MONTH
6123
6422
  admin user list
6124
6423
  admin user modify %name:my_user_email @json:'{"deactivated":false}'
6424
+ admin workspace dropbox %name:my_other_workspace list
6125
6425
  admin workspace list
6426
+ admin workspace shared_folder %name:my_other_workspace list
6427
+ admin workspace shared_folder %name:my_other_workspace member shared_folder_id list
6126
6428
  admin workspace_membership list
6127
6429
  admin workspace_membership list --fields=ALL --query=@json:'{"page":1,"per_page":50,"embed":"member","inherited":false,"workspace_id":11363,"sort":"name"}'
6128
- automation workflow action wf_id create @json:'{"name":"toto"}' \
6430
+ automation workflow action wf_id create @json:'{"name":"toto"}'
6129
6431
  automation workflow create @json:'{"name":"test_workflow"}'
6130
6432
  automation workflow delete wf_id
6131
6433
  automation workflow list
6132
6434
  automation workflow list --query=@json:'{"show_org_workflows":"true"}' --scope=admin:all
6133
- automation workflow list --select=@json:'{"name":"test_workflow"}' --fields=id --format=csv --display=data --output=test
6435
+ automation workflow list --select=@json:'{"name":"test_workflow"}' --fields=id
6134
6436
  bearer_token --display=data --scope=user:all
6135
6437
  files bearer /
6136
6438
  files bearer_token_node / --cache-tokens=no
@@ -6143,7 +6445,7 @@ files browse my_remote_folder
6143
6445
  files browse my_remote_folder/
6144
6446
  files cat testdst/test_file.bin
6145
6447
  files delete /testsrc
6146
- files down --to-folder=. testdst/test_file.bin testdst/test_file.bin
6448
+ files download --to-folder=. testdst/test_file.bin testdst/test_file.bin
6147
6449
  files download --transfer=connect testdst/test_file.bin
6148
6450
  files download --transfer=desktop testdst/test_file.bin
6149
6451
  files find /
@@ -6151,7 +6453,6 @@ files find / '\.partial$'
6151
6453
  files find / @ruby:'->(f){f["type"].eql?("file")}'
6152
6454
  files mkdir /testsrc
6153
6455
  files modify /some_folder @json:'{"mount_point":false}'
6154
- files modify my_test_folder
6155
6456
  files permission my_test_folder list
6156
6457
  files rename /some_folder testdst
6157
6458
  files short_link /testdst private create
@@ -6168,9 +6469,8 @@ files transfer push /testsrc --to-folder=/testdst test_file.bin
6168
6469
  files upload --to-folder=/ test_file.bin --url=my_public_link_folder_no_pass
6169
6470
  files upload --to-folder=/testsrc test_file.bin
6170
6471
  files upload --to-folder=/testsrc test_file.bin test_file.bin
6171
- files upload --workspace=my_other_workspace --to-folder=my_other_folder test_file.bin --transfer=node --transfer-info=@json:@stdin:
6172
6472
  files v3 info
6173
- gateway --pid-file=pid_aocfxgw @json:'{"url":"https://localhost:12345/aspera/faspex"}' &
6473
+ gateway @json:'{"url":"https://localhost:12345/aspera/faspex"}'
6174
6474
  organization
6175
6475
  organization --format=image --fields=background_image_url --ui=text
6176
6476
  organization --url=my_public_link_recv_from_aoc_user
@@ -6182,14 +6482,13 @@ packages receive ALL --once-only=yes --to-folder=. --lock-port=12345 --query=@js
6182
6482
  packages receive INIT --once-only=yes --query=@json:'{"dropbox_name":"my_shared_inbox_name"}'
6183
6483
  packages receive package_id3 --to-folder=.
6184
6484
  packages receive package_id3 --to-folder=. / --package-folder=name
6185
- packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_meta"],"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"]}]}' test_file.bin
6186
- packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_meta"],"metadata":{"Project Id":"456","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' test_file.bin
6187
- packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_meta"],"metadata":{"Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' test_file.bin
6188
- packages send --workspace=my_workspace_shared_inbox @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_name"]}' test_file.bin
6189
- packages send @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_email_external"]}' --new-user-option=@json:'{"package_contact":true}' test_file.bin
6190
- packages send @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_email_internal"],"note":"my note"}' test_file.bin
6191
- packages send @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE"}' test_file.bin --url=my_public_link_send_aoc_user --password=my_public_link_send_use_pass
6192
- packages send @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE"}' test_file.bin --url=my_public_link_send_shared_inbox
6485
+ packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"package title","recipients":["my_shared_inbox_meta"],"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"]}]}' test_file.bin
6486
+ packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"package title","recipients":["my_shared_inbox_meta"],"metadata":{"Project Id":"456","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' test_file.bin
6487
+ packages send --workspace=my_workspace_shared_inbox @json:'{"name":"package title","recipients":["my_shared_inbox_name"]}' test_file.bin
6488
+ packages send @json:'{"name":"package title","recipients":["my_email_external"]}' --new-user-option=@json:'{"package_contact":true}' test_file.bin
6489
+ packages send @json:'{"name":"package title","recipients":["my_email_internal"],"note":"my - note"}' test_file.bin
6490
+ packages send @json:'{"name":"package title"}' test_file.bin --url=my_public_link_send_aoc_user --password=my_public_link_send_use_pass
6491
+ packages send @json:'{"name":"package title"}' test_file.bin --url=my_public_link_send_shared_inbox
6193
6492
  packages shared_inboxes list
6194
6493
  packages shared_inboxes show %name:my_shared_inbox_name
6195
6494
  remind --username=my_user_email
@@ -6336,10 +6635,9 @@ The parameters provided to ATS for access key creation are the ones of [ATS API]
6336
6635
 
6337
6636
  ```bash
6338
6637
  access_key cluster ak2ibmcloud --secret=my_secret_here
6339
- access_key create --cloud=aws --region=my_region --params=@json:'{"id":"ak_aws","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6340
- access_key create --cloud=softlayer --region=my_region --params=@json:'{"id":"ak2ibmcloud","secret":"my_secret_here","name":"my test key","storage":{"type":"ibm-s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6638
+ access_key create --cloud=aws --region=my_region @json:'{"id":"ak_aws","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6639
+ access_key create --cloud=softlayer --region=my_region @json:'{"id":"ak2ibmcloud","secret":"my_secret_here","name":"my test key","storage":{"type":"ibm-s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6341
6640
  access_key delete ak2ibmcloud
6342
- access_key delete ak_aws
6343
6641
  access_key entitlement ak2ibmcloud
6344
6642
  access_key list --fields=name,id
6345
6643
  access_key node ak2ibmcloud browse / --secret=my_secret_here
@@ -6379,7 +6677,7 @@ ascli server --url=ssh://hsts.example.com:33001 --username=john --ssh-keys=~/.ss
6379
6677
 
6380
6678
  ```bash
6381
6679
  browse /
6382
- browse / --password=@none: --ssh-options=@json:'{"number_of_password_prompts":0}' --ssh-keys=$aspera_key_path
6680
+ browse / --password=@none: --ssh-options=@json:'{"number_of_password_prompts":0}' --ssh-keys=serv_key_path
6383
6681
  browse my_inside_folder/test_file.bin
6384
6682
  browse my_upload_folder/target_hot
6385
6683
  cp my_inside_folder/test_file.bin my_upload_folder/200KB.2
@@ -6389,24 +6687,26 @@ df
6389
6687
  download my_inside_folder/test_file.bin --to-folder=. --transfer-info=@json:'{"wss":false,"resume":{"iter_max":1}}'
6390
6688
  download my_large_file --to-folder=my_upload_folder --transfer=node --ts.resume_policy=none
6391
6689
  du /
6690
+ health transfer --to-folder=my_upload_folder
6392
6691
  health transfer --to-folder=my_upload_folder --format=nagios
6393
6692
  info
6394
6693
  md5sum my_inside_folder/test_file.bin
6395
6694
  mkdir my_inside_folder --logger=stdout
6396
6695
  mkdir my_upload_folder/target_hot
6397
6696
  mv my_upload_folder/200KB.2 my_upload_folder/to.delete
6697
+ sync admin file_info /data/local_sync
6698
+ sync admin overview /data/local_sync
6398
6699
  sync admin status /data/local_sync
6700
+ sync pull my_inside_folder --to-folder=/data/local_sync @json:'{"name":"serv_sync_pull_conf","reset":true,"transport":{"target_rate":my_bps}}'
6399
6701
  sync pull my_inside_folder --to-folder=/data/local_sync @json:'{"name":"serv_sync_pull_conf"}'
6400
- upload 'faux:///test1?100m' 'faux:///test2?100m' --to-folder=/Upload --ts=@json:'{"target_rate_kbps":1000000,"resume_policy":"none","precalculate_job_size":true}'
6401
- upload 'faux:///test1?100m' 'faux:///test2?100m' --to-folder=/Upload --ts=@json:'{"target_rate_kbps":1000000,"resume_policy":"none","precalculate_job_size":true}' --transfer-info=@json:'{"quiet":false}' --progress=no
6402
- upload 'test_file.bin' --to-folder=my_inside_folder --ts=@json:'{"multi_session":3,"multi_session_threshold":1,"resume_policy":"none","target_rate_kbps":100000}' --transfer-info=@json:'{"spawn_delay_sec":2.5,"multi_incr_udp":false}' --progress-bar=yes
6403
6702
  upload --sources=@ts --transfer-info=@json:'{"ascp_args":["--file-list","filelist.txt"]}' --to-folder=my_inside_folder
6404
6703
  upload --sources=@ts --transfer-info=@json:'{"ascp_args":["--file-pair-list","file_pair_list.txt"]}'
6405
6704
  upload --sources=@ts --ts=@json:'{"paths":[{"source":"test_file.bin","destination":"my_inside_folder/other_name_4"}]}' --transfer=transferd
6406
- upload --src-type=pair 'test_file.bin' my_inside_folder/other_name_2 --notify-to=my_email_external --transfer-info=@json:'{"ascp_args":["-l","100m"]}'
6407
6705
  upload --src-type=pair --sources=@json:'["test_file.bin","my_inside_folder/other_name_3"]' --transfer-info.quiet=false --progress=no
6706
+ upload --src-type=pair test_file.bin my_inside_folder/other_name_2 --notify-to=my_email_external --transfer-info=@json:'{"ascp_args":["-l","100m"]}'
6408
6707
  upload --src-type=pair test_file.bin my_upload_folder/other_name_5 --ts=@json:'{"cipher":"aes-192-gcm","content_protection":"encrypt","content_protection_password":"my_secret_here","cookie":"biscuit","create_dir":true,"delete_before_transfer":false,"delete_source":false,"exclude_newer_than":"-1","exclude_older_than":"-10000","fasp_port":33001,"http_fallback":false,"multi_session":0,"overwrite":"diff+older","precalculate_job_size":true,"preserve_access_time":true,"preserve_creation_time":true,"rate_policy":"fair","resume_policy":"sparse_csum","symlink_policy":"follow"}'
6409
6708
  upload --to-folder=my_upload_folder/target_hot --lock-port=12345 --transfer-info=@json:'{"ascp_args":["--remove-after-transfer","--remove-empty-directories","--exclude-newer-than=-8","--src-base","source_hot"]}' source_hot
6709
+ upload test_file.bin --to-folder=my_inside_folder --ts=@json:'{"multi_session":3,"multi_session_threshold":1,"resume_policy":"none","target_rate_kbps":100000}' --transfer-info=@json:'{"spawn_delay_sec":2.5,"multi_incr_udp":false}' --progress-bar=yes
6410
6710
  ```
6411
6711
 
6412
6712
  ### Authentication on Server with SSH session
@@ -6548,11 +6848,11 @@ Native API parameters can be placed in option `query`.
6548
6848
 
6549
6849
  Special parameters can be placed in option `query` for "gen3" browse:
6550
6850
 
6551
- | Parameter | Description |
6552
- |-------------|-------------|
6553
- | `recursive` | Recursively list files |
6554
- | `max` | Maximum number of files to list |
6555
- | `self` | Offset in the list |
6851
+ | Parameter | Description |
6852
+ |-------------|----------------------------------|
6853
+ | `recursive` | Recursively list files. |
6854
+ | `max` | Maximum number of files to list. |
6855
+ | `self` | Offset in the list. |
6556
6856
 
6557
6857
  Option `node_cache` can be set to `no` to avoid use of folder cache (Redis) and force actual read of file system.
6558
6858
 
@@ -6670,13 +6970,13 @@ By providing the `validator` option, offline transfer validation can be done.
6670
6970
 
6671
6971
  ### Sync
6672
6972
 
6673
- There are three commands related to file synchronisation:
6973
+ There are three commands related to file synchronization in `node`:
6674
6974
 
6675
6975
  | Command | `node` | `shares` | `aoc` | `server` | Description |
6676
- |---------|--------|----------|-------|----------|-------------|
6677
- | `sync` | Yes | Yes | Yes | Yes | Perform a local sync, by executing `async` locally. |
6678
- | `async` | Yes | | | | Uses API `/async`.<br/>Get status on sync operation on server side, like Aspera Console. |
6679
- | `ssync` | Yes | | | | Uses API `/asyncs`.<br/>It can start a sync operation on the server side, and monitor only those. |
6976
+ |-----|-----|-----|-----|-----|-----------------------------------------------|
6977
+ | `sync` | Yes | Yes | Yes | Yes | Perform a local sync, by executing `async` locally. |
6978
+ | `async` | Yes | | | | Uses API `/async`.<br/>Get status on sync operation on server side, like Aspera Console. |
6979
+ | `ssync` | Yes | | | | Uses API `/asyncs`.<br/>It can start a sync operation on the server side, and monitor only those. |
6680
6980
 
6681
6981
  For details on the `sync` action, refer to [IBM Aspera Sync](#ibm-aspera-sync).
6682
6982
 
@@ -6821,17 +7121,17 @@ Bearer tokens can be generated using `ascli` command `bearer_token`: it takes tw
6821
7121
  - The private key used to sign the token.
6822
7122
  - The token information, which is a `Hash` containing the following elements:
6823
7123
 
6824
- | Parameter | Default | Type | Description |
6825
- |--------------------|-------------------|-----------|----------------------------------|
6826
- | `_scope` | `user:all` | Special | Either `user:all` or `admin:all` |
6827
- | `_validity` | 86400 | Special | Validity in seconds from now. |
6828
- | `user_id` | - | Mandatory | Identifier of user |
6829
- | `scope` | `node.<access_key>:<_scope>` | Mandatory | API scope, e.g. `node.<access_key>:<node scope>` |
6830
- | `expires_at` | `now+<_validity>` | Mandatory | Format: `%Y-%m-%dT%H:%M:%SZ` e.g. `2021-12-31T23:59:59Z` |
6831
- | `auth_type` | `access_key` | Optional | `access_key`, `node_user` |
6832
- | `group_ids` | - | Optional | List of group IDs |
6833
- | `organization_id` | - | Optional | Organization ID |
6834
- | `watermarking_json_base64` | - | Optional | Watermarking information (not used) |
7124
+ | Parameter | Default | Type | Description |
7125
+ |----------------------|---------------------------|---------|---------------------------------------|
7126
+ | `_scope` | `user:all` | Special | Either `user:all` or `admin:all` |
7127
+ | `_validity` | 86400 | Special | Validity in seconds from now. |
7128
+ | `user_id` | - | Mandatory | Identifier of user |
7129
+ | `scope` | `node.<access_key>:<_scope>` | Mandatory | API scope<br/>e.g. `node.<access_key>:<node scope>` |
7130
+ | `expires_at` | `now+<_validity>` | Mandatory | Format: `%Y-%m-%dT%H:%M:%SZ`<br/>e.g. `2021-12-31T23:59:59Z` |
7131
+ | `auth_type` | `access_key` | Optional | `access_key`, `node_user` |
7132
+ | `group_ids` | - | Optional | List of group IDs |
7133
+ | `organization_id` | - | Optional | Organization ID |
7134
+ | `watermarking_json_base64` | - | Optional | Watermarking information (not used) |
6835
7135
 
6836
7136
  > [!NOTE]
6837
7137
  > For convenience, `ascli` provides additional parameters `_scope` and `_validity`.
@@ -6950,7 +7250,7 @@ ascli node -N --url=https://... --password="Bearer $(cat bearer.txt)" --root-id=
6950
7250
  > Add `ascli node` in front of the following commands:
6951
7251
 
6952
7252
  ```bash
6953
- --url=https://tst.example.com/path --password="Bearer bearer_666" --root-id=root_id access_key do self br /
7253
+ --url=https://tst.example.com/path --password='Bearer node_bearer_token' --root-id=bearer_root_id access_key do self browse /
6954
7254
  access_key create @json:'{"id":"my_username","secret":"my_password_here","storage":{"type":"local","path":"/"}}'
6955
7255
  access_key delete my_username
6956
7256
  access_key do my_ak_name browse /
@@ -6961,31 +7261,29 @@ access_key do my_ak_name find my_test_folder
6961
7261
  access_key do my_ak_name find my_test_folder @re:'\.jpg$'
6962
7262
  access_key do my_ak_name find my_test_folder @ruby:'->(f){f["name"].end_with?(".jpg")}'
6963
7263
  access_key do my_ak_name mkdir /tst_nd_ak
6964
- access_key do my_ak_name mkfile /mkfile.txt "hello world"
7264
+ access_key do my_ak_name mkfile /mkfile.txt 'hello world'
6965
7265
  access_key do my_ak_name mklink /mklink.txt --query=@json:'{"target":"/mkfile.txt","target_node_id":"123"}'
6966
7266
  access_key do my_ak_name node_info /
6967
7267
  access_key do my_ak_name rename /tst_nd_ak test_nd_ak2
6968
7268
  access_key do my_ak_name show %id:1
6969
- access_key do my_ak_name show /test_nd_ak3
6970
7269
  access_key do my_ak_name upload 'faux:///test_nd_ak3?100k' --default-ports=no
6971
- access_key do self permission %id:root_id create @json:'{"access_type":"user","access_id":"666"}'
7270
+ access_key do self permission %id:bearer_root_id create @json:'{"access_type":"user","access_id":"666"}'
7271
+ access_key do self permission / delete 1
6972
7272
  access_key do self permission / show 1
6973
- access_key do self show / --fields=id --output=root_id
6974
7273
  access_key list
6975
7274
  access_key set_bearer_key self @file:my_private_key
6976
7275
  access_key show %id:self
6977
7276
  api_details
6978
7277
  asperabrowser
6979
- async bandwidth %name:SYNC_NAME
6980
- async counters %name:SYNC_NAME
7278
+ async bandwidth %name:my_sync_session_name
7279
+ async counters %name:my_sync_session_name
6981
7280
  async delete ALL
6982
- async files %name:SYNC_NAME
6983
- async files %name:SYNC_NAME --once-only=yes
7281
+ async files %name:my_sync_session_name
7282
+ async files %name:my_sync_session_name --once-only=yes
6984
7283
  async list
6985
- async show %name:SYNC_NAME
7284
+ async show %name:my_sync_session_name
6986
7285
  async show ALL
6987
7286
  basic_token
6988
- bearer_token @file:my_private_key @json:'{"user_id":"666"}' --output=bearer_666
6989
7287
  browse / --log-level=trace2
6990
7288
  cat my_upload_folder/test_file.bin
6991
7289
  central file list
@@ -6998,7 +7296,7 @@ health
6998
7296
  info --fpac='function FindProxyForURL(url,host){return "DIRECT"}'
6999
7297
  license
7000
7298
  mkdir my_upload_folder/a_folder
7001
- mkfile my_upload_folder/a_file1 "hello world"
7299
+ mkfile my_upload_folder/a_file1 'hello world'
7002
7300
  mklink my_upload_folder/a_folder my_upload_folder/tdlink
7003
7301
  rename my_upload_folder a_file1 a_file
7004
7302
  search / --query=@json:'{"sort":"mtime"}'
@@ -7007,6 +7305,7 @@ service delete service1
7007
7305
  service list
7008
7306
  slash
7009
7307
  space /
7308
+ spec
7010
7309
  ssync bandwidth %name:my_node_sync
7011
7310
  ssync counters %name:my_node_sync
7012
7311
  ssync create @json:'{"configuration":{"name":"my_node_sync","local":{"path":"my_local_path_real"},"remote":{"host":"my_host","port":my_port,"user":"my_username","pass":"my_password_here","path":"my_remote_path"}}}'
@@ -7020,16 +7319,20 @@ ssync stop %name:my_node_sync
7020
7319
  ssync summary %name:my_node_sync
7021
7320
  stream list
7022
7321
  sync admin status /data/local_sync
7023
- sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"name":"SYNC_NAME","reset":true}'
7322
+ sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"name":"my_sync_session_name","reset":true}'
7024
7323
  sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"reset":true}'
7025
- transfer list --once-only=yes
7324
+ transfer bandwidth_average
7325
+ transfer cancel nd_xfer_id
7026
7326
  transfer list --query=@json:'{"active_only":true}'
7027
7327
  transfer list --query=@json:'{"reset":true}' --once-only=yes
7328
+ transfer modify nd_xfer_id @json:'{"target_rate_kbps":10000}'
7028
7329
  transfer sessions
7330
+ transfer show nd_xfer_id
7029
7331
  transport
7332
+ upload 'faux:///testfile1?1m' --to-folder=my_local_path
7030
7333
  upload --to-folder=my_upload_folder --sources=@ts --ts=@json:'{"paths":[{"source":"/aspera-test-dir-small/10MB.2"}],"precalculate_job_size":true}' --transfer=node --transfer-info=@json:'{"url":"https://node.example.com/path@","username":"my_username","password":"my_password_here"}'
7031
7334
  upload --username=my_ak_name --password=my_ak_secret test_file.bin
7032
- upload test_file.bin --to-folder=my_upload_folder --ts=@json:'{"target_rate_cap_kbps":10000}'
7335
+ upload my_mxf my_docx --ts=@json:'{"target_rate_kbps":1000000,"resume_policy":"none"}'
7033
7336
  watch_folder list
7034
7337
  ```
7035
7338
 
@@ -7044,10 +7347,10 @@ The `node` plugin supports Open Telemetry (OTel) for monitoring and tracing.
7044
7347
 
7045
7348
  The command expects the following parameters provided as a `Hash` positional parameter:
7046
7349
 
7047
- | Parameter | Type | Default | Description |
7048
- |-------------|----------|---------|---------------------------------------------------|
7049
- | `url` | `String` | - | URL of the Instana HTTPS backend for OTel. |
7050
- | `key` | `String` | - | Agent key for the backend. |
7350
+ | Parameter | Type | Default | Description |
7351
+ |-------------|----------|---------|----------------------------------------------|
7352
+ | `url` | `String` | - | URL of the Instana HTTPS backend for OTel. |
7353
+ | `key` | `String` | - | Agent key for the backend. |
7051
7354
  | `interval` | `Float` | 10 | Polling interval in seconds.<br/>`0` for single shot. |
7052
7355
 
7053
7356
  To retrieve OTel backend information: Go to the Instana web interface, **More** &rarr; **Agents** &rarr; **Docker** and identify the agent endpoint and key, e.g. `endpoint=ingress-blue-saas.instana.io`.
@@ -7085,7 +7388,9 @@ IBM Aspera's newer self-managed application.
7085
7388
  | `boot` | Use authentication token copied from browser (experimental) |
7086
7389
 
7087
7390
  > [!TIP]
7088
- > If you have a Faspex 5 public link, provide it, unchanged, through the option `url`
7391
+ > If you have a Faspex 5 public link, provide it, as-is, through the option `url`.
7392
+
7393
+ ### Faspex 5 quick start with wizard
7089
7394
 
7090
7395
  For a quick start, one can use the wizard, which will help to create an [Option Preset](#option-preset):
7091
7396
 
@@ -7093,8 +7398,15 @@ For a quick start, one can use the wizard, which will help to create an [Option
7093
7398
  ascli config wizard
7094
7399
  ```
7095
7400
 
7401
+ Then, answer questions interactively:
7402
+
7096
7403
  ```text
7097
7404
  argument: url> faspex5.example.com
7405
+ ```
7406
+
7407
+ Potentially, multiple applications may be detected, or if only Faspex is detected, it would skip this step:
7408
+
7409
+ ```text
7098
7410
  Multiple applications detected:
7099
7411
  +---------+-------------------------------------------+-------------+
7100
7412
  | product | url | version |
@@ -7103,12 +7415,28 @@ Multiple applications detected:
7103
7415
  | server | ssh://faspex5.example.com:22 | OpenSSH_8.3 |
7104
7416
  +---------+-------------------------------------------+-------------+
7105
7417
  product> faspex5
7418
+ ```
7419
+
7420
+ When Faspex is detected, it would ask for the path to a private key.
7421
+ If you don't have a private key, then leave that field blank, and it will generate one or use one that was previously generated.
7422
+
7423
+ ```test
7106
7424
  Using: Faspex at https://faspex5.example.com/aspera/faspex
7107
7425
  Please provide the path to your private RSA key, or nothing to generate one:
7108
7426
  option: key_path>
7109
7427
  Using existing key:
7110
7428
  /Users/someuser/.aspera/ascli/my_key
7429
+ ```
7430
+
7431
+ Then, the email of the user shall be provided:
7432
+
7433
+ ```text
7111
7434
  option: username> someuser@example.com
7435
+ ```
7436
+
7437
+ The administrator of Faspex shall provide you with a `client_id`, as specified below.
7438
+
7439
+ ```text
7112
7440
  Ask the ascli client ID and secret to your Administrator.
7113
7441
  Admin should login to: https://faspex5.example.com/aspera/faspex
7114
7442
  Navigate to: :: → Admin → Configurations → API clients
@@ -7132,10 +7460,16 @@ Saving configuration file.
7132
7460
  ```
7133
7461
 
7134
7462
  > [!NOTE]
7135
- > Paste the entire public key, including the BEGIN and END lines, into the user profile.
7463
+ > Paste the entire public key, including the BEGIN and END lines, into the user's profile.
7136
7464
 
7137
7465
  For more information on the JWT method, refer to the section below.
7138
7466
 
7467
+ If you have generated a private key with the wizard and lost the public key, you can retrieve the public key like this:
7468
+
7469
+ ```shell
7470
+ ascli faspex5 --show-config --show-secrets=yes --fields=private_key | ascli conf pubkey @stdin: --show-secrets=yes
7471
+ ```
7472
+
7139
7473
  ### Faspex 5 JWT authentication
7140
7474
 
7141
7475
  This is the general purpose and **recommended** method to use.
@@ -7156,15 +7490,15 @@ Activation is in two steps:
7156
7490
 
7157
7491
  - The user will authenticate with a private key and set the public key in his Faspex 5 profile.
7158
7492
 
7159
- > [!TIP]
7160
- > If you don’t have a private key, see [Private Key](#private-key) to generate one.
7161
-
7162
7493
  This operation is done by each user using the CLI.
7163
7494
 
7164
7495
  - As a user, click the user logo located to the left of the app switcher in the top-right corner.
7165
7496
  - Select `Account Settings`.
7166
7497
  - At the bottom, in the `Public key in PEM format` field, paste the **public key** that corresponds to the private key assigned to your account.
7167
7498
 
7499
+ > [!TIP]
7500
+ > If you don’t have a private key, see [Private Key](#private-key) to generate one.
7501
+
7168
7502
  Then use these options:
7169
7503
 
7170
7504
  ```text
@@ -7210,6 +7544,16 @@ The user will use the following options:
7210
7544
  --redirect-uri=https://127.0.0.1:8888
7211
7545
  ```
7212
7546
 
7547
+ ### Faspex 5 public link authentication
7548
+
7549
+ If all you have is a public link received by email or other, you can still do authorized actins with it.
7550
+
7551
+ For example, for a public link to post a package:
7552
+
7553
+ ```shell
7554
+ ascli faspex5 packages send --url='https://faspex5.example.com/?context=_some_long_string_here_'
7555
+ ```
7556
+
7213
7557
  ### Faspex 5 bootstrap authentication
7214
7558
 
7215
7559
  For `boot` method: (will be removed in future)
@@ -7242,8 +7586,8 @@ admin distribution_lists delete %name:test4
7242
7586
  admin distribution_lists list --query=@json:'{"type":"global"}'
7243
7587
  admin email_notifications list
7244
7588
  admin email_notifications show welcome_email
7245
- admin event app --query=@json:'{"max":20}'
7246
- admin event web
7589
+ admin event application --query=@ruby:'{"event_type[]"=>["login_success"],"created_at_start"=>(Time.now.utc-60).strftime("%Y-%m-%dT%H:%M:%S.%LZ")}'
7590
+ admin event webhook
7247
7591
  admin jobs list --query=@json:'{"job_type":"email","status":"failed"}' --fields=id,error_desc
7248
7592
  admin metadata_profiles list
7249
7593
  admin node browse %name:Local
@@ -7258,7 +7602,7 @@ admin saml_configs list
7258
7602
  admin shared_inboxes invite %name:my_shared_box_name johnny@example.com
7259
7603
  admin shared_inboxes list
7260
7604
  admin shared_inboxes list --query=@json:'{"all":true}'
7261
- admin shared_inboxes members %name:my_shared_box_name create %name:john@example.com
7605
+ admin shared_inboxes members %name:my_shared_box_name create %name:john@example.com submit_only
7262
7606
  admin shared_inboxes members %name:my_shared_box_name delete %name:john@example.com
7263
7607
  admin shared_inboxes members %name:my_shared_box_name delete %name:johnny@example.com
7264
7608
  admin shared_inboxes members %name:my_shared_box_name list
@@ -7268,38 +7612,40 @@ admin smtp show
7268
7612
  admin smtp test my_email_external
7269
7613
  admin workgroups list
7270
7614
  bearer_token
7271
- gateway --pid-file=pid_f5_fxgw @json:'{"url":"https://localhost:12346/aspera/faspex"}' &
7272
- health
7615
+ gateway @json:'{"url":"https://localhost:12346/aspera/faspex"}'
7616
+ health --url=https://faspex5.example.com/path
7273
7617
  invitation list
7274
7618
  invitations create @json:'{"email_address":"aspera.user1+u@gmail.com"}'
7275
- packages browse f5_pack_id --query=@json:'{"recursive":true}'
7276
- packages delete f5_pack_id
7619
+ packages browse f5_package_id --query=@json:'{"recursive":true}'
7620
+ packages delete f5_package_id
7277
7621
  packages list --box=ALL
7278
7622
  packages list --box=my_shared_box_name
7279
7623
  packages list --box=my_workgroup --group-type=workgroups
7280
7624
  packages list --box=outbox --fields=DEF,sender.email,recipients.0.recipient_type
7281
7625
  packages list --query=@json:'{"mailbox":"inbox","status":"completed"}'
7282
- packages receive --box=my_shared_box_name package_box_id1 --to-folder=.
7626
+ packages receive --box=my_shared_box_name f5_pack_shboxc --to-folder=.
7283
7627
  packages receive --box=my_workgroup --group-type=workgroups workgroup_package_id1 --to-folder=.
7284
7628
  packages receive ALL --once-only=yes --to-folder=.
7285
7629
  packages receive INIT --once-only=yes
7286
- packages receive f5_pack_id --to-folder=. --ts=@json:'{"content_protection_password":"my_secret_here"}'
7287
- packages send --shared-folder=%name:my_shared_folder_name @json:'{"title":"test title","recipients":["my_email_internal"]}' my_shared_folder_file --fields=id --display=data --output=f5_pack_id
7630
+ packages receive f5_package_id --to-folder=. --ts=@json:'{"content_protection_password":"my_secret_here"}'
7288
7631
  packages send --url=my_public_link_send_f5_user @json:'{"title":"test title"}' test_file.bin
7289
7632
  packages send --url=my_public_link_send_shared_box @json:'{"title":"test title"}' test_file.bin
7290
7633
  packages send @json:'{"title":"test title","recipients":["my_shared_box_name"],"metadata":{"Options":"Opt1","TextInput":"example text"}}' test_file.bin
7291
7634
  packages send @json:'{"title":"test title","recipients":["my_workgroup"]}' test_file.bin
7292
7635
  packages send @json:'{"title":"test title","recipients":[{"name":"my_username"}]my_meta}' test_file.bin --ts=@json:'{"content_protection_password":"my_secret_here"}'
7293
- packages show --box=my_shared_box_name package_box_id1
7636
+ packages send @json:'{"title":"test_webhook_ascli","recipients":["my_shared_box_name"]}' 'faux:///test1?1m'
7637
+ packages show --box=my_shared_box_name f5_pack_shboxc
7294
7638
  packages show --box=my_workgroup --group-type=workgroups workgroup_package_id1
7295
- packages show f5_pack_id
7296
- packages status f5_pack_id
7297
- postprocessing --pid-file=pid_f5_postproc @json:'{"url":"https://localhost:8553/asclihook","script_folder":"","cert":"localhost.p12","key":"changeit"}' &
7639
+ packages show f5_package_id
7640
+ packages status f5_p3a @list:,failed,completed
7641
+ packages status f5_package_id
7642
+ postprocessing @json:'{"url":"https://localhost:8553/asclihook","script_folder":"$(TST)","cert":"$(TMP / "localhost.p12")","key":"changeit"}'
7298
7643
  shared browse %name:my_src
7299
7644
  shared list
7300
7645
  shared_folders browse %name:my_shared_folder_name
7301
7646
  shared_folders list
7302
7647
  user account
7648
+ user account --query.expand=true
7303
7649
  user profile modify @json:'{"preference":{"connect_disabled":false}}'
7304
7650
  user profile show
7305
7651
  version
@@ -7319,7 +7665,7 @@ By default, package operations (`send`, `receive`, `list`) are performed on the
7319
7665
  To select another inbox, use option `box` with one of the following values:
7320
7666
 
7321
7667
  | `box` | Comment |
7322
- |---------------------|---------|
7668
+ |---------------------|----------------------------------------------------------------------|
7323
7669
  | `inbox` | Default |
7324
7670
  | `inbox_history` | |
7325
7671
  | `inbox_all` | |
@@ -7329,8 +7675,8 @@ To select another inbox, use option `box` with one of the following values:
7329
7675
  | `pending` | |
7330
7676
  | `pending_history` | |
7331
7677
  | `all` | |
7332
- | `ALL` | **admin only**, all inboxes of all users |
7333
- | Open value | Name of a shared inbox if `group_type` is `shared_inboxes` (default)<br/>or workgroup if `group_type` is `workgroups` |
7678
+ | `ALL` | All inboxes of all users. **admin only**. |
7679
+ | Open value | If `group_type` is `shared_inboxes`: name of a shared inbox (default)<br/>If `group_type` is `workgroups`: workgroup name |
7334
7680
 
7335
7681
  > [!NOTE]
7336
7682
  > In case the name of the `box` is an open value, use option `group_type` set to either `shared_inboxes` or `workgroups`.
@@ -7386,6 +7732,14 @@ If the lookup needs to be only on certain types, you can specify the field: `rec
7386
7732
  {"title":"test title","recipient_types":"user","recipients":["user1@example.com","user2@example.com"]}
7387
7733
  ```
7388
7734
 
7735
+ To enable content protection (CSEAR), set parameter `ear_enabled` to `true` in the package creation payload (refer to Faspex package creation API).
7736
+
7737
+ The following error is returned by Faspex, if CSEAR was not specified in the package creation and if it is configured as mandatory on the server:
7738
+
7739
+ ```text
7740
+ the provided encryption value (no) does not match the expected server side encryption value (yes)
7741
+ ```
7742
+
7389
7743
  ### Faspex 5: Send a package with metadata
7390
7744
 
7391
7745
  It's the same as sending a package, but with an extra field `metadata` in the package info.
@@ -7403,14 +7757,14 @@ Option `box` can be used to list packages from a specific box (see [Inbox Select
7403
7757
 
7404
7758
  Option `query` can be used to filter the list of packages, based on native API parameters, directly sent to [Faspex 5 API `GET /packages`](https://developer.ibm.com/apis/catalog/aspera--ibm-aspera-faspex-5-0-api/api/API--aspera--ibm-aspera-faspex-api#getAllPackages).
7405
7759
 
7406
- | Parameter | Type | Description |
7407
- |-----------|---------|-------------|
7408
- | `offset` | Native | Managed by `ascli`: Offset of first package. Default: 0 |
7409
- | `limit` | Native | Managed by `ascli`: # of packages per API call. Default: 100 |
7410
- | `q` | Native | General search string (case-insensitive, matches if value is contained in several fields) |
7411
- | ... | Native | Other native parameters are supported (Refer to API documentation) |
7412
- | `max` | Special | Maximum number of items to retrieve (stop pages when the maximum is passed) |
7413
- | `pmax` | Special | Maximum number of pages to request (stop pages when the maximum is passed) |
7760
+ | Parameter | Type | Description |
7761
+ |---------|---------|-----------------------------------------------------------------------|
7762
+ | `offset`| Native | Managed by `ascli`: Offset of first package. Default: 0 |
7763
+ | `limit` | Native | Managed by `ascli`: # of packages per API call. Default: 100 |
7764
+ | `q` | Native | General search string<br/>case-insensitive, matches if value is contained in several fields |
7765
+ | ... | Native | Other native parameters are supported (Refer to API documentation) |
7766
+ | `max` | Special | Maximum number of items to retrieve (stop pages when the maximum is passed) |
7767
+ | `pmax` | Special | Maximum number of pages to request (stop pages when the maximum is passed) |
7414
7768
 
7415
7769
  A **Command Parameter** in last position, of type `Proc`, can be used to filter the list of packages.
7416
7770
  This advantage of this method is that the expression can be any test, even complex, as it is Ruby code.
@@ -7438,15 +7792,15 @@ By default, paging is used.
7438
7792
 
7439
7793
  Option `query` is available with parameters supported by the API and `ascli` :
7440
7794
 
7441
- | Parameter | Evaluation | Description |
7442
- |--------------|--------------|-------------|
7443
- | `paging` | `ascli` | Use paging API. Default: `true` |
7444
- | `recursive` | `ascli` | List inside folders. Default: `false` |
7445
- | `max` | `ascli` | Maximum number of items. |
7446
- | `filter` | API | Refer to API doc. Default: `{"basenames":[]}` |
7447
- | `offset` | API (legacy) | Index of first item. Default: `0` |
7448
- | `limit` | API (legacy) | Number of items in one API call result. Default: `500` |
7449
- | `per_page` | API (paging) | Number of items in one API call result. Default: `500` |
7795
+ | Parameter | Evaluation | Default | Description |
7796
+ |-----------|--------------|-------------------| ----------------------------------------|
7797
+ | `paging` | `ascli` | `true` | Use paging API. |
7798
+ | `recursive`| `ascli` | `false` | List inside folders. |
7799
+ | `max` | `ascli` | - | Maximum number of items. |
7800
+ | `filter` | API | `{"basenames":[]}`| Refer to API doc. |
7801
+ | `offset` | API (legacy) | `0` | Index of first item. |
7802
+ | `limit` | API (legacy) | `500` | Number of items in one API call result. |
7803
+ | `per_page`| API (paging) | `500` | Number of items in one API call result. |
7450
7804
 
7451
7805
  ### Faspex 5: Content of a received Package
7452
7806
 
@@ -7743,8 +8097,8 @@ A user can receive a package because the recipient is:
7743
8097
 
7744
8098
  As inboxes may be large, it is possible to use the following query parameters:
7745
8099
 
7746
- | Parameter | Evaluation | Description |
7747
- |--------------|------------|-------------|
8100
+ | Parameter | Evaluation | Description |
8101
+ |--------------|------------|----------------------------------------------------------------------|
7748
8102
  | `count` | API | Number of items in one API call result (default=0, equivalent to 10) |
7749
8103
  | `page` | API | ID of page in call (default=0) |
7750
8104
  | `startIndex` | API | Index of item to start (default=0) |
@@ -7887,27 +8241,23 @@ ascli faspex packages recv ALL --once-only=yes --lock-port=12345
7887
8241
 
7888
8242
  ```bash
7889
8243
  address_book
7890
- dropbox list --recipient="*my_dbx"
8244
+ dropbox list --recipient='*my_dbx'
7891
8245
  health
7892
8246
  login_methods
7893
8247
  me
7894
- package list --box=sent --query.max=1 --fields=package_id --display=data --format=csv --output=f4_prs2
7895
- package list --query.max=1 --fields=package_id --display=data --format=csv --output=f4_prs1
7896
8248
  package list --query.max=5
7897
- package list --recipient="*my_dbx" --format=csv --fields=package_id --query.max=1 --output=f4_db_id1
7898
- package list --recipient="*my_wkg" --format=csv --fields=package_id --query.max=1 --output=f4_db_id2
7899
- package receive --to-folder=. --link=https://app.example.com/recv_from_user_path
7900
8249
  package receive ALL --once-only=yes --to-folder=. --query=@json:'{"max":10}'
7901
- package receive f4_db_id1 --recipient="*my_dbx" --to-folder=.
7902
- package receive f4_db_id2 --recipient="*my_wkg" --to-folder=.
7903
- package receive f4_pri1 --to-folder=.
7904
- package receive f4_prs2 --to-folder=. --box=sent
7905
- package send --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["*my_dbx"]}' test_file.bin
7906
- package send --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["*my_wkg"]}' test_file.bin
7907
- package send --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_email_internal","my_username"]}' test_file.bin
7908
- package send --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_email_internal"]}' --remote-source=%name:my_src sample_source.txt
7909
- package send --link=https://app.example.com/send_to_dropbox_path --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE"}' test_file.bin
7910
- package send --link=https://app.example.com/send_to_user_path --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE"}' test_file.bin
8250
+ package receive f4_db1c --recipient='*my_dbx' --to-folder=.
8251
+ package receive f4_db1g --recipient='*my_wkg' --to-folder=.
8252
+ package receive f4_pria --to-folder=.
8253
+ package receive f4_prs --to-folder=.
8254
+ package receive f4_prsc --to-folder=. --box=sent
8255
+ package send --delivery-info=@json:'{"title":"package title","recipients":["my_email_internal","my_username"]}' test_file.bin
8256
+ package send --delivery-info=@json:'{"title":"package title","recipients":["my_email_internal"]}' --remote-source=%name:my_src sample_source.txt
8257
+ package send --delivery-info=@json:'{"title":"package title","recipients":[*my_dbx]}' test_file.bin
8258
+ package send --delivery-info=@json:'{"title":"package title","recipients":[*my_wkg]}' test_file.bin
8259
+ package send --link=https://app.example.com/send_to_dropbox_path --delivery-info=@json:'{"title":"package title"}' test_file.bin
8260
+ package send --link=https://app.example.com/send_to_user_path --delivery-info=@json:'{"title":"package title"}' test_file.bin
7911
8261
  source info %name:my_src --storage=@preset:faspex4_storage
7912
8262
  source list
7913
8263
  source node %name:my_src br / --storage=@preset:faspex4_storage
@@ -7931,17 +8281,17 @@ The payload for creation is the same as for the API, parameters are provided as
7931
8281
 
7932
8282
  Example: Create a Node: Attributes are like API:
7933
8283
 
7934
- | Attribute | Required | Default |
7935
- |-----------|----------|---------|
7936
- | `name` | Yes | |
7937
- | `host` | Yes | |
7938
- | `api_username` | Yes | |
7939
- | `api_password` | Yes | |
7940
- | `port` | | `9092` |
7941
- | `ssl` | | `true` |
7942
- | `verify_ssl` | | `false` |
7943
- | `timeout` | | `30s` |
7944
- | `open_timeout` | | `10s` |
8284
+ | Attribute | Required | Default |
8285
+ |--------------|----------|---------|
8286
+ | `name` | Yes | |
8287
+ | `host` | Yes | |
8288
+ | `api_username` | Yes | |
8289
+ | `api_password` | Yes | |
8290
+ | `port` | | `9092` |
8291
+ | `ssl` | | `true` |
8292
+ | `verify_ssl` | | `false` |
8293
+ | `timeout` | | `30s` |
8294
+ | `open_timeout` | | `10s` |
7945
8295
 
7946
8296
  Example: Create a share and add a user to it.
7947
8297
 
@@ -7964,12 +8314,12 @@ ascli shares admin share user_permissions $share_id create @json:'{"user_id":'$u
7964
8314
  admin group all list
7965
8315
  admin node list
7966
8316
  admin share list --fields=DEF,-status,status_message
7967
- admin share user_permissions 1 list
7968
- admin user all app_authorizations 1 modify @json:'{"app_login":true}'
7969
- admin user all app_authorizations 1 show
8317
+ admin share user_permissions %name:my_share list
8318
+ admin user all app_authorizations %username:my_username modify @json:'{"app_login":true}'
8319
+ admin user all app_authorizations %username:my_username show
7970
8320
  admin user all list
7971
- admin user all share_permissions 1 list
7972
- admin user all share_permissions 1 show 1
8321
+ admin user all share_permissions %username:my_username list
8322
+ admin user all share_permissions %username:my_username show %name:my_share
7973
8323
  admin user ldap add the_name
7974
8324
  admin user local list
7975
8325
  admin user saml import @json:'{"id":"the_id","name_id":"the_name"}'
@@ -7981,10 +8331,10 @@ files download --to-folder=. my_share_folder/test_file.bin my_share_folder/test_
7981
8331
  files mkdir my_share_folder/new_folder
7982
8332
  files sync push /data/local_sync --to-folder=my_share_folder/synctst
7983
8333
  files sync push /data/local_sync --to-folder=my_share_folder/synctst @json:'{"reset":true}'
7984
- files upload --to-folder=my_share_folder 'faux:///testfile?1m' --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@","synchronous":true,"api_version":"v1","upload_chunk_size":100000}'
7985
- files upload --to-folder=my_share_folder sendfolder --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@","synchronous":true,"api_version":"v1","upload_chunk_size":100000}'
8334
+ files upload 'faux:///testfile?1m' --to-folder=my_share_folder --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@","synchronous":true,"api_version":"v1","upload_chunk_size":100000}'
7986
8335
  files upload --to-folder=my_share_folder test_file.bin
7987
8336
  files upload --to-folder=my_share_folder test_file.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@"}'
8337
+ files upload sendfolder --to-folder=my_share_folder --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@","synchronous":true,"api_version":"v1","upload_chunk_size":100000}'
7988
8338
  health
7989
8339
  ```
7990
8340
 
@@ -8012,7 +8362,7 @@ transfer current list --query.filter='(transfer_name contain aoc)'
8012
8362
  transfer current list --query=@json:'{"filter1":"transfer_name","comp1":"contain","val1":"aoc"}'
8013
8363
  transfer current show console_xfer_id
8014
8364
  transfer smart list
8015
- transfer smart sub my_smart_id @json:'{"source":{"paths":["my_smart_file"]},"source_type":"user_selected"}'
8365
+ transfer smart sub my_smart_id @: source.paths.0=my_smart_file source_type=user_selected
8016
8366
  ```
8017
8367
 
8018
8368
  ## Plugin: `orchestrator`:IBM Aspera Orchestrator
@@ -8039,39 +8389,45 @@ workflow status my_workflow_id
8039
8389
 
8040
8390
  ## Plugin: `cos`: IBM Cloud Object Storage
8041
8391
 
8042
- The IBM Cloud Object Storage provides the possibility to execute transfers using FASP.
8043
- It uses the same transfer service as Aspera on Cloud, called Aspera Transfer Service (ATS).
8044
- Available ATS regions: [https://status.aspera.io](https://status.aspera.io)
8392
+ IBM Cloud Object Storage supports high-speed transfers using the FASP protocol.
8393
+ These transfers leverage the same service used by Aspera on Cloud, called the Aspera Transfer Service (ATS).
8394
+ You can check the list of available ATS regions here: <https://status.aspera.io>.
8395
+ There are two ways to provide credentials:
8396
+
8397
+ - Using existing credentials
8045
8398
 
8046
- There are two possibilities to provide credentials.
8047
- If you already have the endpoint, API key and Resource Instance ID (CRN), use the first method.
8048
- If you don't have credentials but have access to the IBM Cloud console, then use the second method.
8399
+ If you already have the endpoint, API key, and Resource Instance ID (CRN), use this method.
8400
+
8401
+ - Using IBM Cloud Console access
8402
+
8403
+ If you do not have credentials but have access to the IBM Cloud Console, use this alternative method.
8049
8404
 
8050
8405
  ### Using endpoint, API key and Resource Instance ID (CRN)
8051
8406
 
8052
- If you have those parameters already, then following options shall be provided:
8407
+ If you already have these parameters, provide the following options to `ascli`:
8053
8408
 
8054
- | Option | Description |
8055
- |------------|-------------|
8056
- | `bucket` | Bucket name |
8409
+ | Option | Description |
8410
+ |------------|---------------------------------------------------|
8411
+ | `bucket` | Bucket name |
8057
8412
  | `endpoint` | Storage endpoint URL<br/>e.g. `https://s3.hkg02.cloud-object-storage.appdomain.cloud` |
8058
- | `apikey` | API Key |
8059
- | `crn` | Resource instance ID |
8413
+ | `apikey` | API Key |
8414
+ | `crn` | Resource instance ID |
8060
8415
 
8061
- For example, let us create a default configuration:
8416
+ Example: Create a Default Configuration
8062
8417
 
8063
8418
  ```shell
8064
8419
  ascli config 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
8065
8420
  ascli config preset set default cos mycos
8066
8421
  ```
8067
8422
 
8068
- Then, jump to the [transfer example](#operations-transfers).
8423
+ Once configured, proceed to the [transfer example](#operations-transfers).
8069
8424
 
8070
8425
  ### Using service credential file
8071
8426
 
8072
- If you are the COS administrator and don't have yet the credential:
8073
- Service credentials are directly created using the IBM cloud Console (web UI).
8074
- Navigate to:
8427
+ If you are the COS administrator and do not yet have credentials,
8428
+ you can create them directly from the IBM Cloud Console (Web UI):
8429
+
8430
+ Steps:
8075
8431
 
8076
8432
  - &rarr; Navigation Menu
8077
8433
  - &rarr; [Resource List](https://cloud.ibm.com/resources)
@@ -8081,7 +8437,7 @@ Navigate to:
8081
8437
  - &rarr; New credentials (Leave default role: Writer, no special options)
8082
8438
  - &rarr; Copy to clipboard
8083
8439
 
8084
- Then save the copied value to a file, e.g. : `$HOME/cos_service_creds.json`
8440
+ Save the copied JSON value to a file, for example: `$HOME/cos_service_creds.json`
8085
8441
 
8086
8442
  or using the IBM Cloud CLI:
8087
8443
 
@@ -8090,9 +8446,10 @@ ibmcloud resource service-keys
8090
8446
  ibmcloud resource service-key _service_key_name_here_ --output JSON|jq '.[0].credentials'>$HOME/service_creds.json
8091
8447
  ```
8092
8448
 
8093
- (if you don't have `jq` installed, extract the structure as follows)
8449
+ > [!NOTE]
8450
+ > If `jq` is not installed, you can manually extract the credentials section from the JSON output.
8094
8451
 
8095
- It consists in the following structure:
8452
+ The service credential file consists of the following structure:
8096
8453
 
8097
8454
  ```json
8098
8455
  {
@@ -8110,33 +8467,32 @@ It consists in the following structure:
8110
8467
  }
8111
8468
  ```
8112
8469
 
8113
- The field `resource_instance_id` is for option `crn`
8470
+ The field mappings are as follows:
8114
8471
 
8115
- The field `apikey` is for option `apikey`
8472
+ - `resource_instance_id` &rarr; option `crn`
8473
+ - `apikey` &rarr; option `apikey`
8116
8474
 
8117
8475
  > [!NOTE]
8118
- > Endpoints for regions can be found by querying the `endpoints` URL from file or from the IBM Cloud Console.
8476
+ > Endpoints for regions can be found by querying the `endpoints` URL in the JSON file or from the IBM Cloud Console.
8119
8477
 
8120
8478
  The required options for this method are:
8121
8479
 
8122
- | Option | Description |
8123
- |-----------------------|-------------|
8124
- | `bucket` | Bucket name |
8125
- | `region` | Bucket region<br/>e.g. `eu-de` |
8480
+ | Option | Description |
8481
+ |-----------------------|------------------------------------------------|
8482
+ | `bucket` | Bucket name |
8483
+ | `region` | Bucket region<br/>e.g. `eu-de` |
8126
8484
  | `service_credentials` | JSON information saved from IBM Cloud console. |
8127
8485
 
8128
- For example, let us create a default configuration:
8486
+ Example: Create a Default Configuration
8129
8487
 
8130
8488
  ```shell
8131
- ascli config preset update mycos --bucket=laurent --service-credentials=@val:@json:@file:~/service_creds.json --region=us-south
8489
+ ascli config preset update mycos --bucket=mybucket --service-credentials=@val:@json:@file:~/service_creds.json --region=us-south
8132
8490
  ascli config preset set default cos mycos
8133
8491
  ```
8134
8492
 
8135
8493
  ### Operations, transfers
8136
8494
 
8137
- Let's assume you created a default configuration from one of the two previous steps (else specify the access options on command lines).
8138
-
8139
- A subset of `node` plugin operations are supported, basically Node API:
8495
+ Once you have created a default configuration using one of the previous methods (otherwise, specify the access options directly on the command line), you can perform a subset of `node` plugin operations, which correspond to the Node API.
8140
8496
 
8141
8497
  ```shell
8142
8498
  ascli cos node info
@@ -8144,7 +8500,8 @@ ascli cos node upload 'faux:///sample1G?1g'
8144
8500
  ```
8145
8501
 
8146
8502
  > [!NOTE]
8147
- > A dummy file `sample1G` of size 2 GB is generated using the `faux` PVCL scheme (see previous section and `man ascp`), but you can, of course, send a real file by specifying a real file path instead.
8503
+ > The file `sample1G` is a dummy file of size 2 GB, generated using the `faux` PVCL scheme (see previous section and `man ascp`).
8504
+ > To upload a real file, simply replace the `faux:///...` URI with the actual file path.
8148
8505
 
8149
8506
  ### Tested commands for `cos`
8150
8507
 
@@ -8173,6 +8530,10 @@ info
8173
8530
 
8174
8531
  ## Plugin: `faspio`: Faspio Gateway
8175
8532
 
8533
+ IBM Aspera faspio Gateway is a high-performance proxy that bridges traditional TCP/UDP applications with the Aspera FASP protocol, enabling secure, ultra-fast transfers over any network, even with high latency or packet loss.
8534
+ It integrates seamlessly into existing workflows and supports use cases such as server-to-server transfers, database replication, and messaging systems.
8535
+ Using `ascli`, you can remotely create and manage bridges on faspio Gateway, simplifying configuration and automation.
8536
+
8176
8537
  ### Tested commands for `faspio`
8177
8538
 
8178
8539
  > [!NOTE]
@@ -8180,7 +8541,7 @@ info
8180
8541
 
8181
8542
  ```bash
8182
8543
  bridges create @json:'{"name":"test1","local":{"protocol":"tcp","tls_enabled":false,"port":"3000","bind_address":"127.0.0.1"},"forward":{"protocol":"fasp","tls_enabled":false,"port":"3994","bind_address":"127.0.0.1","host":["10.0.0.1"]}}'
8183
- bridges delete --bulk=yes @json:@stdin:
8544
+ bridges delete --bulk=yes @json:faspio_bclean_list
8184
8545
  bridges list
8185
8546
  health
8186
8547
  ```
@@ -8196,20 +8557,34 @@ Retrieve information on subscription.
8196
8557
 
8197
8558
  ```bash
8198
8559
  entitlement
8199
- health -N
8560
+ health
8200
8561
  ```
8201
8562
 
8202
8563
  ## Plugin: `preview`: Preview generator for AoC
8203
8564
 
8204
- The `preview` generates thumbnails (office, images, video) and video previews on storage for use primarily in the Aspera on Cloud application.
8205
- It uses the **Node API** of Aspera HSTS and requires use of Access Keys and its **storage root**.
8206
- Several options can be used to tune several aspects:
8565
+ The `preview` plugin is responsible for generating thumbnails (Office documents, images, videos) and video previews on storage, primarily for use within the Aspera on Cloud (AoC) application.
8566
+ This plugin leverages the **Node API** of Aspera HSTS and requires:
8567
+
8568
+ - An Access Key
8569
+ - The associated **storage root**
8570
+
8571
+ ### Key Features and Options
8572
+
8573
+ You can configure several aspects of the preview generation process:
8207
8574
 
8208
- - Methods for detection of new files needing generation
8209
- - Methods for generation of video preview
8210
- - Parameters for video handling
8575
+ - File Detection Methods
8211
8576
 
8212
- See also <https://github.com/IBM/aspera-on-cloud-file-previews>
8577
+ Define how new files requiring previews are identified.
8578
+
8579
+ - Video Preview Generation Methods
8580
+
8581
+ Choose the approach for creating video previews (e.g., transcoding options).
8582
+
8583
+ - Video Handling Parameters
8584
+
8585
+ Fine-tune video processing, such as resolution, bitrate, and format.
8586
+
8587
+ Using `ascli` is an alternative to <https://github.com/IBM/aspera-on-cloud-file-previews>.
8213
8588
 
8214
8589
  ### Aspera Server configuration
8215
8590
 
@@ -8534,7 +8909,7 @@ If the preview generator does not have access to files on the file system (it is
8534
8909
  check --skip-types=office
8535
8910
  events --once-only=yes --skip-types=office --log-level=info
8536
8911
  scan --scan-id=1 --skip-types=office --log-level=info --file-access=remote --ts=@json:'{"target_rate_kbps":1000000}'
8537
- scan --skip-types=office --log-level=info
8912
+ scan --skip-types=office --log-level=info --skip-folder=/special/folder
8538
8913
  show --base=test /etc/hosts
8539
8914
  show --base=test my_docx
8540
8915
  show --base=test my_mpg --video-png-conv=animated
@@ -8561,8 +8936,8 @@ An interface for the `async` utility is provided in the following plugins:
8561
8936
  The `sync` command, available in above plugins, performs the following actions:
8562
8937
 
8563
8938
  - Start a local Sync session by executing the `async` command with the appropriate parameters.
8564
- - Get local Sync session information using the `asyncadmin` command, if available.
8565
8939
  - Get local Sync session information accessing directly the Async snap database.
8940
+ - Get local Sync session information using the `asyncadmin` command, if available.
8566
8941
 
8567
8942
  One advantage of using `ascli` over the `async` command line is the possibility to use a configuration file, using standard options of `ascli`.
8568
8943
  Moreover, `ascli` supports sync with application requiring token-based authorization.
@@ -8575,9 +8950,15 @@ Some `sync` parameters are filled by the related plugin using transfer spec para
8575
8950
 
8576
8951
  ### Starting a sync session
8577
8952
 
8578
- To start a sync session, use one of the three sync directions followed by a folder path (remote path for `pull`, local path elsewise).
8953
+ To start a sync session, use one of the three sync directions followed by a folder path (remote path for `pull`, local path otherwise).
8579
8954
  The path on the other side is specified using option: `to_folder`.
8580
8955
 
8956
+ The general syntax is:
8957
+
8958
+ ```shell
8959
+ ascli ... sync <direction> <path> [<sync_info>] [--to-folder=<path>]
8960
+ ```
8961
+
8581
8962
  | Direction<br/>(parameter) | Path<br/>(parameter) | `to_folder`<br/>(option) |
8582
8963
  |-----------|--------|-------------|
8583
8964
  | `push` | Local | Remote |
@@ -8588,6 +8969,11 @@ An optional positional `Hash` argument (`sync_info`) can be provided in either `
8588
8969
 
8589
8970
  A single session can be specified using either formats.
8590
8971
 
8972
+ If argument `<sync_info>` is not provided, then a default configuration is generated in the `conf` format as specified in the next sectin.
8973
+
8974
+ If argument `<sync_info>` is provided, it defines the format to use.
8975
+ If parameter `sessions` or `instance` is present, then `args` is used, else `conf` is used.
8976
+
8591
8977
  #### `sync_info`: `conf` format
8592
8978
 
8593
8979
  This is the **preferred** syntax.
@@ -8595,7 +8981,155 @@ It is the same payload as specified on the `async` option `--conf` or in Node AP
8595
8981
 
8596
8982
  Documentation on Async Node API can be found on [IBM Developer Portal](https://developer.ibm.com/apis/catalog?search=%22aspera%20sync%20api%22).
8597
8983
 
8598
- Parameters `local.path` and `remote.path` are not allowed since they are provided on command line.
8984
+ The following parameters are automatically filled from mandatory arguments, and are not allowed:
8985
+
8986
+ - `direction`
8987
+ - `local.path`
8988
+ - `remote.path`
8989
+
8990
+ Parameter `name` is set to a default value if not provided in `sync_info`.
8991
+ Parameter `quiet` is set to `false` if not provided in `sync_info` and a terminal is detected.
8992
+
8993
+ The documentation is available in the terminal with:
8994
+
8995
+ ```shell
8996
+ ascli config sync spec
8997
+ ```
8998
+
8999
+ | Field | Type | Description |
9000
+ |------------------------------------------|---------|----------------------------------------------------------------------------------|
9001
+ | ascp_dir | string | Directory containing ascp executable to use. |
9002
+ | assume_no_mods | boolean | Assume that the directory structure has not been modified.<br/>(`--assume-no-mods`) |
9003
+ | checksum | string | Use the specified checksum type. Default is none on cloud storage.<br/>Allowed values: `sha1`, `md5`, `sha1_sparse`, `md5_sparse`, `none`<br/>(`--checksum={enum}`)(-k) |
9004
+ | clean_excluded | boolean | Removes any existing entries in the snapshot database for excluded paths<br/>(`--clean-excluded`) |
9005
+ | cookie | string | User-defined identification string.<br/>(`--cookie={string}`) |
9006
+ | cooloff_max_seconds | integer | Wait up to the specified time for a file to stop changing before skipping synchronization of the file. 0 for disabled<br/>(`--cooloff-max={integer}`) |
9007
+ | cooloff_seconds | integer | Delay the start of the transfer to confirm that the content is not changing. Value must be between 0 and 60<br/>(`--cooloff={integer}`) |
9008
+ | create_dir | boolean | Create the source directory, target directory, or both, if they do not exist.<br/>(`--create-dir`) |
9009
+ | db_cache_size | integer | Specify DB cache size. |
9010
+ | db_journal_off | boolean | Turn off DB journal. |
9011
+ | db_sync_on | boolean | Enable synchronous write in DB. |
9012
+ | dedup | string | Take the specified action when async detects duplicate files on the source.<br/>Allowed values: `copy`, `inode`, `hardlink`, `none`<br/>(`--dedup={enum}`) |
9013
+ | delete_before | boolean | Schedule deletes before transfers.<br/>(`--delete-before`) |
9014
+ | delete_delay | boolean | Delay actual deletes until the end of the synchronization.<br/>(`--delete-delay`) |
9015
+ | direction | string | The direction of replication relative to the local.<br/>Allowed values: `bidi`, `pull`, `push`<br/>(`--direction={enum}`)(-K) |
9016
+ | exclude_dirs_older_than | object | Don't scan directories with a recursive modified time older than absolute or async start time - relative_seconds |
9017
+ | exclude_dirs_older_than.absolute | string | UTC timestamp. Empty value for disabled. |
9018
+ | exclude_dirs_older_than.relative_seconds | integer | Relative to async start time. `-1` for disabled. |
9019
+ | filters | array | The filters allow to further specify which files have to be excluded and included from the transfer list. Each filter is defined by a rule and a value. Order of filters matters |
9020
+ | filters[].rule | string | The rule for the filter.<br/>Allowed values: `include`, `exclude`, `include_from`, `exclude_from` |
9021
+ | filters[].value | string | On include or exclude, the filter's pattern. On include_from or exclude_from, the path containing filter specifications |
9022
+ | ignore_delete | boolean | Do not copy removals to the peer.<br/>(`--ignore-delete`) |
9023
+ | ignore_mode | boolean | Source files that have had their mode changed after the initial. transfer will not update the destination file mode.<br/>(`--ignore-mode`) |
9024
+ | ignore_remote_host_sync_name | boolean | Do not check that the remote host being used for the current. transfer matches the host used when the local database was created |
9025
+ | local | object | &nbsp; |
9026
+ | local.pass | string | Authenticate the local async with the specified password. |
9027
+ | local.path | string | The directory to be synchronized on the local host.<br/>(`--local-dir={string}`)(-d) |
9028
+ | local_apply_docroot | boolean | Prepend the docroot to the directory on the local host.<br/>(`--apply-local-docroot`) |
9029
+ | local_checksum_threads | integer | Maximum number of threads to do checksum on the local host. Value must be between 1 and 99.<br/>(`--local-checksum-threads={integer}`) |
9030
+ | local_db_dir | string | Use the specified database directory on the local host. Default is `.private-asp` at the root level of the synchronized directory.<br/>(`--local-db-dir={string}`)(-b) |
9031
+ | local_db_store_dir | string | Store/Restore the database to/from the specified directory on the local host. The value can be an absolute path, an URI or - (use the local sync dir)<br/>(`--local-db-store-dir={string}`) |
9032
+ | local_force_stat | boolean | Forces the local async to retrieve file information even when no changes are detected by the scanner or monitor.<br/>(`--local-force-stat`) |
9033
+ | local_fs_threads | integer | Maximum number of threads to do file system operations on the local host. Value must be between 1 and 99.<br/>(`--local-fs-threads={integer}`) |
9034
+ | local_keep_dir | string | Move deleted files into the specified directory on the local host.<br/>(`--keep-dir-local={string}`) |
9035
+ | local_mount_signature | string | Verify that the file system is mounted by the existence of this file on the local host.<br/>(`--local-mount-signature={string}`) |
9036
+ | local_move_cache_timeout_seconds | integer | Delay in seconds before aborting moving a file from local cache to final destination. `-1` for disabled.<br/>(`--local-move-cache-timeout={integer}`) |
9037
+ | local_preserve_acls | string | Preserve access control lists on the local host.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--preserve-acls={enum}`) |
9038
+ | local_preserve_xattrs | string | Preserve extended attributes on the local.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--preserve-xattrs={enum}`) |
9039
+ | local_scan_interval_milliseconds | integer | Enable periodic scans on the local host during a continuous sync. `-1` for disabled<br/>(`--scan-interval={integer}`) |
9040
+ | local_scan_threads | integer | Number of directory scanning threads on the local host. Value must be between 1 and 99<br/>(`--scan-threads={integer}`) |
9041
+ | local_stat_cache_size | integer | Set stat cache size on the local host. 0 for disabled. |
9042
+ | log | object | &nbsp; |
9043
+ | log.level | string | Use the specified log level.<br/>Allowed values: `log`, `dbg1`, `dbg2`<br/>(special:`-D`) |
9044
+ | log.local_dir | string | Use the specified logging directory on the local host.<br/>(`--alt-logdir={string}`)(-L) |
9045
+ | log.remote_dir | string | Use the specified logging directory on the remote host.<br/>(`--remote-logdir={string}`)(-R) |
9046
+ | manifest_path | string | A directory path where ascp will create manifest TEXT files (passed to ascp as --file-manifest-path) |
9047
+ | mirror | boolean | Force the pulling side to be exactly like the pushing side, removing files on the destination that don't exist on the source and resending source files that don't have an exact match on the destination. Cannot be used in bi-directional mode.<br/>(`--mirror`) |
9048
+ | mode | string | Specify whether async runs continuously or not. In `one_time` mode, async stops after the first full synchronization. `continuous` supported only if the source is Windows or Linux.<br/>Allowed values: `one_time`, `continuous`<br/>(special:`--continuous`)(-C) |
9049
+ | monitor_buffer_size | integer | Bytes to allocate for the change monitor buffer. Applies to any Windows machine on either side. `-1` to use the computed value. |
9050
+ | name | string | Name of the synchronization pair.<br/>(`--name={string}`)(-N) |
9051
+ | no_log | string | Suppress log messages for ITEM. The only currently supported ITEM is 'stats', which suppresses both STATS and PROG log messages.<br/>(`--no-log={string}`) |
9052
+ | no_preserve_root_attrs | boolean | Disable the preservation of attributes on the Sync root.<br/>(`--no-preserve-root-attrs`) |
9053
+ | no_scan | boolean | Skip initial scanning.<br/>(`--no-scan`) |
9054
+ | notifications_sharing_retry_max | integer | Retry processing filesystem notifications up to the specified maximum number after a sharing violation. |
9055
+ | overwrite | string | Overwrite files according to the specified policy. Default is determined by the direction: `conflict` for `bidi`, otherwise `always`.<br/>Allowed values: `always`, `older`, `conflict`<br/>(`--overwrite={enum}`)(-o) |
9056
+ | pending_max | integer | Allow the maximum number of files that are pending transfer to be no more than the specified number.<br/>(`--pending-max={integer}`) |
9057
+ | preserve_access_time | boolean | Preserve file access time from the source to the destination.<br/>(`--preserve-access-time`) |
9058
+ | preserve_creation_time | boolean | Preserve file creation time from the source to the destination.<br/>(`--preserve-creation-time`) |
9059
+ | preserve_gid | boolean | Preserve the file owner's GID.<br/>(`--preserve-gid`)(-j) |
9060
+ | preserve_modification_time | boolean | Preserve file modification time from the source to the destination.<br/>(`--preserve-modification-time`) |
9061
+ | preserve_object_lock_legal_hold | boolean | Preserve object lock legal hold status from the source to the destination.<br/>(`--preserve-object-lock-legal-hold`) |
9062
+ | preserve_object_lock_retention | boolean | Preserve object lock retention from the source to the destination.<br/>(`--preserve-object-lock-retention`) |
9063
+ | preserve_object_metadata | boolean | Preserve object metadata from the source to the destination.<br/>(`--preserve-object-metadata`) |
9064
+ | preserve_uid | boolean | Preserve the file owner's UID.<br/>(`--preserve-uid`)(-u) |
9065
+ | quiet | boolean | Disable progress display.<br/>(`--quiet`)(-q) |
9066
+ | remote | object | &nbsp; |
9067
+ | remote.connect_mode | string | Define how to connect to the remote.<br/>Allowed values: `ssh`, `ws`<br/>(special:`--ws-connect`) |
9068
+ | remote.fingerprint | string | Check it against server SSH host key fingerprint. |
9069
+ | remote.host | string | Use the specified host name or address of the remote host.<br/>(`--host={string}`) |
9070
+ | remote.pass | string | Authenticate the transfer with the specified password.<br/>(`--pass={string}`)(-w) |
9071
+ | remote.path | string | Synchronize the specified directory on the remote host.<br/>(`--remote-dir={string}`)(-r) |
9072
+ | remote.port | integer | Use the specified TCP port for SSH. Used when connect_mode is `ssh`<br/>(`--tcp-port={integer}`)(-P) |
9073
+ | remote.private_key_paths | array | Authenticate with the specified SSH private key file.<br/>(`--private-key-path={array}`)(-i) |
9074
+ | remote.proxy | object | Specify the address of the Aspera high-speed proxy server.<br/>(special:`--proxy={object}`) |
9075
+ | remote.proxy.host | string | Use the specified host name or address of the proxy. |
9076
+ | remote.proxy.pass | string | Authenticate to the proxy with the specified password. |
9077
+ | remote.proxy.port | integer | Use the specified port, default is 9091 for dnat, 9092. for dnats |
9078
+ | remote.proxy.protocol | string | The protocol to be used.<br/>Allowed values: `none`, `dnat`, `dnats` |
9079
+ | remote.proxy.user | string | Authenticate to the proxy with the specified username. |
9080
+ | remote.token | string | Token string passed to server's authentication service. |
9081
+ | remote.token_node_user | string | Node API user identity associated with the token. Required for node user bearer tokens |
9082
+ | remote.user | string | Authenticate the transfer with the specified username.<br/>(`--user={string}`) |
9083
+ | remote.ws_port | integer | Use the specified port for Websocket. Used when connect_mode is `ws`. |
9084
+ | remote_checksum_threads | integer | Maximum number of threads to do checksum on the remote host. Value must be between 1 and 99<br/>(`--remote-checksum-threads={integer}`) |
9085
+ | remote_db_dir | string | Use the specified database directory on the remote host. Default is `.private-asp` at the root level of the synchronized directory.<br/>(`--remote-db-dir={string}`)(-B) |
9086
+ | remote_db_store_dir | string | Store/Restore the database to/from the specified directory on the remote host. The value can be an absolute path, an URI or - (use the remote sync dir).<br/>(`--remote-db-store-dir={string}`) |
9087
+ | remote_force_stat | boolean | Forces the remote async to retrieve file information even when no changes are detected by the scanner or monitor.<br/>(`--remote-force-stat`) |
9088
+ | remote_fs_threads | integer | Maximum number of threads to do file system operations on the remote host. Value must be between 1 and 99.<br/>(`--remote-fs-threads={integer}`) |
9089
+ | remote_keep_dir | string | Move deleted files into the specified directory on the remote host.<br/>(`--keep-dir-remote={string}`) |
9090
+ | remote_mount_signature | string | Verify that the file system is mounted by the existence of this file on the remote host.<br/>(`--remote-mount-signature={string}`) |
9091
+ | remote_move_cache_timeout_seconds | integer | Delay in seconds before aborting moving a file from remote cache to final destination. `-1` for disabled.<br/>(`--remote-move-cache-timeout={integer}`) |
9092
+ | remote_preserve_acls | string | Preserve access control lists on the remote host. If not specified, the default behavior is to use the same storage mode as specified by `preserve_acls`.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--remote-preserve-acls={enum}`) |
9093
+ | remote_preserve_xattrs | string | Preserve extended attributes on the remote host. If not specified, the default behavior is to use the same storage mode as specified by `preserve_xattrs`.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--remote-preserve-xattrs={enum}`) |
9094
+ | remote_scan_interval_milliseconds | integer | Enable periodic scans on the remote host. `-1` for disabled.<br/>(special:`--remote-scan-interval={integer}`) |
9095
+ | remote_scan_threads | integer | Number of directory scanning threads on the remote host. Value must be between 1 and 99.<br/>(`--remote-scan-threads={integer}`) |
9096
+ | remote_stat_cache_size | integer | Set stat cache size on the remote host. 0 for disabled. |
9097
+ | remove_after_transfer | boolean | Remove source files after they are successfully synchronized.<br/>(`--remove-after-transfer`) |
9098
+ | reset | boolean | Clear the snapshot database and rescan the synchronized directories and files to create a fresh snapshot<br/>(`--reset`)(-x) |
9099
+ | resume | object | Partial transfers may exist if communication disruptions caused the underlying ascp processes to terminate early. Note that transfer resumption can only happen if the `reset` option is disabled. If an async session starts with `reset` enabled and resume enabled, transfers interrupted during that session will be resumeable, but only if async is then restarted with 'reset' disabled. |
9100
+ | resume.enabled | boolean | Enable the possibility of resuming individual file transfers between async sessions. |
9101
+ | resume.max_age | integer | Sets the age limit in days for temporary files that will be preserved on cleanup (usually at async's start and stop) for potential transfer resume. Temp files older than the given value will be removed regardless of whether they might be resumeable.<br/>(`--resume-age-days={integer}`) |
9102
+ | resume.min_size | integer | This field specifies the minimum size of files that will be allowed to resume.<br/>(`--support-resume={integer}`) |
9103
+ | resume_scan | boolean | Resume the scan from where the previous execution left off.<br/>(`--resume-scan`) |
9104
+ | scan_dir_rename | boolean | Enable the detection of renamed directories and files compared. to the previous scan, based on matching inodes<br/>(`--scan-dir-rename`) |
9105
+ | scan_file_rename | boolean | Enable the detection of renamed files compared to the previous scan, based on matching inodes.<br/>(`--scan-file-rename`) |
9106
+ | scan_intensity | string | Scan at the set intensity. `vlow` minimizes system activity. `vhigh` maximizes system activity by continuously scanning files without rest.<br/>Allowed values: `vlow`, `low`, `medium`, `high`, `vhigh`<br/>(`--scan-intensity={enum}`)(-H) |
9107
+ | sharing_retry_max | integer | Retry synchronizations up to the specified maximum number after a sharing violation.<br/>(`--sharing-retry-max={integer}`) |
9108
+ | store_metadata_records | boolean | Store the acls or xattrs in the snapshot database.<br/>(`--store-metadata-records`) |
9109
+ | symbolic_links | string | Handle symbolic links with the specified method. Default is `skip` on windows, `copy` otherwise.<br/>Allowed values: `copy`, `skip`, `follow`<br/>(`--symbolic-links={enum}`)(-n) |
9110
+ | tags | object | User-defined metadata tags.<br/>(special:`--tags64={object}`) |
9111
+ | transfer_threads | array | Use the specified number of dedicated transfer threads to process files smaller or equal to the specified size<br/>(special:`--transfer-threads={array}`) |
9112
+ | transfer_threads[].size | integer | Upper limit. `-1` for infinity. |
9113
+ | transfer_threads[].threads | integer | The number of threads. |
9114
+ | transport | object | &nbsp; |
9115
+ | transport.cipher | string | Specify encryption algorithm for file data.<br/>Allowed values: `none`, `aes128`, `aes192`, `aes256`, `aes128cfb`, `aes192cfb`, `aes256cfb`, `aes128gcm`, `aes192gcm`, `aes256gcm`<br/>(`--cipher={enum}`)(-c) |
9116
+ | transport.compression | string | Compress a file before transfer using the specified MODE.<br/>Allowed values: `none`, `zlib`<br/>(`--compression={enum}`) |
9117
+ | transport.datagram_size | integer | Specify the datagram size (MTU) for FASP. By default it uses the detected path MTU.<br/>(`--datagram-size={integer}`)(-Z) |
9118
+ | transport.min_rate | integer | Attempt to transfer no slower than the specified rate (in bps).<br/>(`--min-rate={integer}`)(-m) |
9119
+ | transport.rate_policy | string | Defines how `ascp` will manage the bandwidth.<br/>Allowed values: `fair`, `fixed`, `high`, `low`<br/>(`--rate-policy={enum}`)(-a) |
9120
+ | transport.raw_options | array | Pass arbitrary arguments to `ascp`.<br/>(special:`--raw-options={array}`) |
9121
+ | transport.read_block_size | integer | Use the specified block size (in bytes) for reading. Default is determined by `aspera.conf`.<br/>(`--read-block-size={integer}`)(-g) |
9122
+ | transport.rexmsg_size | integer | Use the specified size (in bytes) for a retransmission request. Default is determined by `aspera.conf`.<br/>(`--rexmsg-size={integer}`)(-X) |
9123
+ | transport.target_rate | integer | Transfer no faster than the specified rate (in bps).<br/>(`--target-rate={integer}`)(-l) |
9124
+ | transport.udp_port | integer | Use the specified UDP port for FASP data transfer.<br/>(`--udp-port={integer}`)(-O) |
9125
+ | transport.write_block_size | integer | Use the specified block size (in bytes) for writing. Default is determined by `aspera.conf`.<br/>(`--write-block-size={integer}`)(-G) |
9126
+ | watchd | object | When connection is configured, `asperawatchd` is used to detect the changes on the source directory.<br/>(special:`--watchd={object}`) |
9127
+ | watchd.datastore | string | Specify the type of datastore, `none` for disabled.<br/>Allowed values: `none`, `redis`, `scalekv` |
9128
+ | watchd.domain | string | Specify the domain. Default is the current username. |
9129
+ | watchd.host | string | Use the specified host name or address to connect to the datastore. |
9130
+ | watchd.port | integer | Use the specified port. |
9131
+ | write_gid | string | Try to write files as the specified group.<br/>(`--write-gid={string}`) |
9132
+ | write_uid | string | Try to write files as the specified user.<br/>(`--write-uid={string}`) |
8599
9133
 
8600
9134
  #### `sync_info`: `args` format
8601
9135
 
@@ -8606,19 +9140,39 @@ Technically, it allows definition of multiple sync sessions in a single command,
8606
9140
 
8607
9141
  This is the mode selection if there are either keys `sessions` or `instance` in option `sync_info`.
8608
9142
 
8609
- Parameters `local_dir` and `remote_dir` are not allowed since they are provided on command line.
9143
+ The following parameters are automatically filled from mandatory arguments, and are not allowed:
8610
9144
 
8611
- ### Sync management and monitoring
9145
+ - `direction`
9146
+ - `local_dir`
9147
+ - `remote_dir`
8612
9148
 
8613
- The `admin` command provides several sub commands:
9149
+ Parameter `name` is set to a default value if not provided in `sync_info`.
8614
9150
 
8615
- - `status`: Uses the utility `asyncadmin`, available only on server products.
8616
- - Other commands access directly the Async snap database (`snap.db`).
9151
+ ### Sync management and monitoring: `admin`
8617
9152
 
8618
- For those commands, the user must provide the path to the database folder, i.e. a folder containing a subfolder named `.private-asp`.
8619
- By default it is the local synchronized folder.
8620
- If this folder contains only one session information (i.e. a folder containing the `snap.db` file), it will be used by default.
8621
- Else, the user must specify a session name in the optional `Hash`, in `name`.
9153
+ The `admin` command provides several sub commands that access directly the Async snap database (`snap.db`).
9154
+ (With the exception of `status` which uses the utility `asyncadmin`, available only on server products.)
9155
+
9156
+ This command does not require any communication to the server and accesses only the local database.
9157
+ It can be executed also from the `config` plugin:
9158
+
9159
+ ```shell
9160
+ ascli config sync admin
9161
+ ```
9162
+
9163
+ To use the `admin` command, the gem `sqlite3` shall be installed:
9164
+
9165
+ ```shell
9166
+ gem install sqlite3
9167
+ ```
9168
+
9169
+ In order to use the `admin` commands, the user must provide the path to the database folder:
9170
+
9171
+ - i.e. a folder containing a subfolder named `.private-asp`.
9172
+ - By default it is the local synchronized folder.
9173
+ - If an alternate folder is specified for the database, then specify it.
9174
+ - If this folder contains only one session information (i.e. a folder containing the `snap.db` file), it will be used by default.
9175
+ - Else, the user must specify a session name in the optional `Hash`, in the `name` key.
8622
9176
 
8623
9177
  ## Hot folder
8624
9178
 
@@ -8757,17 +9311,17 @@ This is done with option `smtp`.
8757
9311
  The `smtp` option is a `Hash` (extended value) with the following fields:
8758
9312
 
8759
9313
  <!-- markdownlint-disable MD034 -->
8760
- | Field | Default | Example | Description |
8761
- |--------------|---------------------|----------------------------|----------------------------------|
8762
- | `server` | - | `smtp.gmail.com` | SMTP server address |
8763
- | `tls` | `true` | `true` | Enable `STARTTLS` (port 587) |
8764
- | `ssl` | `false` | `false` | Enable `TLS` (port 465) |
8765
- | `port` | `587` or `465` or `25` | `587` | Port for service |
8766
- | `domain` | _domain of server_ | gmail.com | Email domain of user |
8767
- | `username` | - | john@example.com | User to authenticate on SMTP server, leave empty for open auth. |
8768
- | `password` | - | my_password_here | Password for above username |
8769
- | `from_email` | username if defined | johnny@example.com | Address used if receiver replies |
8770
- | `from_name` | same as email | John Wayne | Display name of sender |
9314
+ | Field | Default | Example | Description |
9315
+ |--------------|--------------------|------------------|----------------------------------|
9316
+ | `server` | - | `smtp.gmail.com` | SMTP server address |
9317
+ | `tls` | `true` | `true` | Enable `STARTTLS` (port 587) |
9318
+ | `ssl` | `false` | `false` | Enable `TLS` (port 465) |
9319
+ | `port` | `587`<br/>`465`<br/>`25` | `587` | Port for service |
9320
+ | `domain` | _domain of_ `server` | gmail.com | Email domain of user |
9321
+ | `username` | - | john@example.com | User to authenticate on SMTP server<br/>Leave empty for open auth. |
9322
+ | `password` | - | my_password_here | Password for above username |
9323
+ | `from_email` | username if defined|johnny@example.com| Address used if receiver replies |
9324
+ | `from_name` | same as email | John Wayne | Display name of sender |
8771
9325
  <!-- markdownlint-enable MD034 -->
8772
9326
 
8773
9327
  ### Example of configuration
@@ -8873,22 +9427,23 @@ During execution, it generates all low level events, one per line, in JSON forma
8873
9427
 
8874
9428
  Top level parameters supported by `asession`:
8875
9429
 
8876
- | Parameter | Description |
8877
- |------------|-------------|
8878
- | `spec` | The [**transfer-spec**](#transfer-specification) |
8879
- | `agent` | Same parameters as transfer-info for agent `direct` |
8880
- | `loglevel` | Log level of `asession` |
8881
- | `file_list_folder` | The folder used to store (for garbage collection) generated file lists.<br/>By default, it is `[system tmp folder]/[username]_asession_filelists` |
9430
+ | Parameter | Description |
9431
+ |--------------------|------------------------------------------------------------------------|
9432
+ | `spec` | The [**transfer-spec**](#transfer-specification) |
9433
+ | `agent` | Same parameters as transfer-info for agent `direct` |
9434
+ | `loglevel` | Log level of `asession` |
9435
+ | `file_list_folder` | The folder used to store (for garbage collection) generated file lists.<br/>Default: `[system tmp folder]/[username]_asession_filelists` |
8882
9436
 
8883
9437
  ### Comparison of interfaces
8884
9438
 
8885
- | feature/tool | Transfer Daemon | FASPManager | `ascp` | `asession` |
8886
- |-----------------------|--------------|---------------------------------|--------|------------|
8887
- | language integration | Many | C/C++<br/>C#/.net<br/>Go<br/>Python<br/>java<br/> | Any | Any |
8888
- | required additional components to `ascp` | Daemon | Library<br/>(+headers) | - | Ruby<br/>Aspera gem |
8889
- | startup | Daemon | API | Command line arguments | JSON on stdin<br/>(standard APIs:<br/>JSON.generate<br/>Process.spawn) |
8890
- | events | Poll | Callback | Possibility to open management port<br/>and proprietary text syntax | JSON on stdout |
8891
- | platforms | Any with `ascp` and transfer daemon | Any with `ascp` (and SDK if compiled) | Any with `ascp` | Any with Ruby and `ascp` |
9439
+ | Feature/Tool | Transfer Daemon | FASPManager | `ascp` | `asession` |
9440
+ |------------|-------------|-------------|-------------|-------------|
9441
+ | status | Supported | Deprecated | Supported | Deprecated |
9442
+ | language integration | Many | C/C++<br/>C#/.net<br/>Go<br/>Python<br/>java<br/> | Any | Any |
9443
+ | required additional components to `ascp` | Daemon | Library<br/>(+headers) | - | Ruby<br/>Aspera gem |
9444
+ | startup | Daemon | API | Command line arguments | JSON on stdin<br/>(standard APIs:<br/>JSON.generate<br/>Process.spawn) |
9445
+ | events | Poll | Callback | Possibility to open management port<br/>and proprietary text syntax | JSON on stdout |
9446
+ | platforms | Like `ascp` and `transferd` | Like `ascp` and lib (if compiled) | Any with `ascp` | Any with Ruby and `ascp` |
8892
9447
 
8893
9448
  ### Simple session
8894
9449
 
@@ -9024,24 +9579,30 @@ This also requires Ruby header files.
9024
9579
  If Ruby was installed as a Linux Packages, then also install Ruby development package:
9025
9580
  `ruby-dev` or `ruby-devel`, depending on distribution.
9026
9581
 
9027
- ### ED25519 key not supported
9582
+ ### Private key type: `ed25519` not supported by default
9028
9583
 
9029
- ED25519 keys are deactivated since `ascli` version 0.9.24 as it requires additional gems that require native compilation and thus caused problems.
9030
- This type of key will just be ignored.
9584
+ There are a few aspects concerning ED25519 keys.
9031
9585
 
9032
- To re-activate, set env var `ASCLI_ENABLE_ED25519` to `true`.
9586
+ By default, the `aspera-cli` gem does not depend on the `ed25519` gem because it requires compilation of native code which can cause problems and prevent the installation of `ascli`, especially when using JRuby.
9587
+ Refer to [this](https://github.com/net-ssh/net-ssh/issues/565).
9588
+ If you want to use `ed25519` keys, then install the required gems:
9033
9589
 
9034
- Without this deactivation, if such key was present in user's `.ssh` folder then the following error was generated:
9590
+ ```shell
9591
+ gem install ed25519 bcrypt_pbkdf
9592
+ ```
9593
+
9594
+ In addition, if those two gems are not installed, and if you are using Private Keys encoded using the OpenSSH format, then you'll get the message:
9035
9595
 
9036
9596
  ```text
9037
- OpenSSH keys only supported if ED25519 is available
9597
+ OpenSSH keys only supported if ED25519 is available (NotImplementedError)
9598
+ net-ssh requires the following gems for ed25519 support:
9599
+ * ed25519 (>= 1.2, < 2.0)
9600
+ * bcrypt_pbkdf (>= 1.0, < 2.0)
9601
+ See https://github.com/net-ssh/net-ssh/issues/565 for more information
9038
9602
  ```
9039
9603
 
9040
- Which meant that you do not have Ruby support for ED25519 SSH keys.
9041
- You may either install the suggested Gems, or remove your ed25519 key from your `.ssh` folder to solve the issue.
9042
-
9043
- In addition, host keys of type: `ecdsa-sha2` and `ecdh-sha2` are also deactivated by default.
9044
- To re-activate, set env var `ASCLI_ENABLE_ECDSHA2` to `true`.
9604
+ In addition, if **JRuby** is used, host keys of type: `ecdsa-sha2` and `ecdh-sha2` are also deactivated by default.
9605
+ To activate, set env var `ASCLI_ENABLE_ECDSHA2` to `true`.
9045
9606
 
9046
9607
  ### JRuby: `net-ssh`: Unsupported algorithm
9047
9608
 
@@ -9068,11 +9629,11 @@ To deactivate this error, enable option `IGNORE_UNEXPECTED_EOF` for `ssl_options
9068
9629
  --http-options=@json:'{"ssl_options":["IGNORE_UNEXPECTED_EOF"]}'
9069
9630
  ```
9070
9631
 
9071
- ### Error: `ascp`: /lib64/libc.so.6: version `GLIBC_2.28' not found
9632
+ ### Error: `ascp`: `/lib64/libc.so.6`: version `GLIBC_2.28` not found
9072
9633
 
9073
9634
  This happens on Linux x86 if you try to install `transferd` on a Linux version too old to support a newer `ascp` executable.
9074
9635
 
9075
- Workaround: Install an older version:
9636
+ Workaround: Install an older version of `transferd`:
9076
9637
 
9077
9638
  ```shell
9078
9639
  ascli config transferd install 1.1.2