aspera-cli 4.24.1 → 4.24.2

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 (87) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +15 -2
  4. data/README.md +745 -436
  5. data/bin/ascli +20 -1
  6. data/bin/asession +23 -27
  7. data/lib/aspera/agent/base.rb +10 -21
  8. data/lib/aspera/agent/connect.rb +2 -3
  9. data/lib/aspera/agent/desktop.rb +2 -2
  10. data/lib/aspera/agent/direct.rb +49 -32
  11. data/lib/aspera/agent/factory.rb +31 -0
  12. data/lib/aspera/api/aoc.rb +79 -49
  13. data/lib/aspera/api/faspex.rb +212 -0
  14. data/lib/aspera/api/node.rb +99 -84
  15. data/lib/aspera/ascp/installation.rb +22 -21
  16. data/lib/aspera/ascp/management.rb +119 -23
  17. data/lib/aspera/assert.rb +14 -8
  18. data/lib/aspera/cli/extended_value.rb +15 -15
  19. data/lib/aspera/cli/formatter.rb +7 -5
  20. data/lib/aspera/cli/hints.rb +8 -0
  21. data/lib/aspera/cli/info.rb +4 -4
  22. data/lib/aspera/cli/main.rb +55 -70
  23. data/lib/aspera/cli/manager.rb +7 -4
  24. data/lib/aspera/cli/plugins/alee.rb +2 -1
  25. data/lib/aspera/cli/plugins/aoc.rb +110 -186
  26. data/lib/aspera/cli/plugins/ats.rb +4 -4
  27. data/lib/aspera/cli/plugins/base.rb +335 -0
  28. data/lib/aspera/cli/plugins/basic_auth.rb +45 -0
  29. data/lib/aspera/cli/plugins/config.rb +249 -220
  30. data/lib/aspera/cli/plugins/console.rb +15 -15
  31. data/lib/aspera/cli/plugins/cos.rb +2 -2
  32. data/lib/aspera/cli/plugins/factory.rb +78 -0
  33. data/lib/aspera/cli/plugins/faspex.rb +17 -20
  34. data/lib/aspera/cli/plugins/faspex5.rb +79 -193
  35. data/lib/aspera/cli/plugins/faspio.rb +14 -13
  36. data/lib/aspera/cli/plugins/httpgw.rb +13 -12
  37. data/lib/aspera/cli/plugins/node.rb +34 -32
  38. data/lib/aspera/cli/plugins/oauth.rb +48 -0
  39. data/lib/aspera/cli/plugins/orchestrator.rb +15 -13
  40. data/lib/aspera/cli/plugins/preview.rb +4 -4
  41. data/lib/aspera/cli/plugins/server.rb +15 -13
  42. data/lib/aspera/cli/plugins/shares.rb +18 -15
  43. data/lib/aspera/cli/sync_actions.rb +1 -1
  44. data/lib/aspera/cli/transfer_agent.rb +24 -20
  45. data/lib/aspera/cli/transfer_progress.rb +6 -6
  46. data/lib/aspera/cli/version.rb +3 -3
  47. data/lib/aspera/cli/wizard.rb +65 -53
  48. data/lib/aspera/colors.rb +6 -0
  49. data/lib/aspera/command_line_builder.rb +45 -50
  50. data/lib/aspera/command_line_converter.rb +2 -1
  51. data/lib/aspera/coverage.rb +1 -1
  52. data/lib/aspera/data_repository.rb +1 -1
  53. data/lib/aspera/environment.rb +10 -7
  54. data/lib/aspera/faspex_gw.rb +6 -4
  55. data/lib/aspera/faspex_postproc.rb +1 -1
  56. data/lib/aspera/keychain/macos_security.rb +1 -1
  57. data/lib/aspera/log.rb +37 -9
  58. data/lib/aspera/nagios.rb +1 -1
  59. data/lib/aspera/oauth/base.rb +17 -10
  60. data/lib/aspera/oauth/factory.rb +8 -8
  61. data/lib/aspera/oauth/web.rb +2 -2
  62. data/lib/aspera/products/connect.rb +4 -3
  63. data/lib/aspera/products/desktop.rb +1 -4
  64. data/lib/aspera/products/other.rb +9 -1
  65. data/lib/aspera/products/transferd.rb +0 -1
  66. data/lib/aspera/rest.rb +126 -83
  67. data/lib/aspera/ssh.rb +3 -3
  68. data/lib/aspera/sync/args.schema.yaml +46 -3
  69. data/lib/aspera/sync/conf.schema.yaml +130 -94
  70. data/lib/aspera/sync/operations.rb +16 -16
  71. data/lib/aspera/temp_file_manager.rb +17 -5
  72. data/lib/aspera/transfer/error.rb +16 -7
  73. data/lib/aspera/transfer/parameters.rb +34 -20
  74. data/lib/aspera/transfer/resumer.rb +74 -0
  75. data/lib/aspera/transfer/spec.rb +4 -3
  76. data/lib/aspera/transfer/spec.schema.yaml +132 -51
  77. data/lib/aspera/transfer/spec_doc.rb +41 -35
  78. data/lib/aspera/uri_reader.rb +1 -1
  79. data/lib/aspera/web_auth.rb +6 -6
  80. data.tar.gz.sig +0 -0
  81. metadata +9 -7
  82. metadata.gz.sig +0 -0
  83. data/lib/aspera/cli/basic_auth_plugin.rb +0 -43
  84. data/lib/aspera/cli/plugin.rb +0 -333
  85. data/lib/aspera/cli/plugin_factory.rb +0 -81
  86. data/lib/aspera/resumer.rb +0 -77
  87. 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.24.2"
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,7 +42,7 @@ 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.24.2
45
46
 
46
47
  Laurent/2016-2025
47
48
 
@@ -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.24.2
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
 
@@ -323,44 +340,33 @@ rubyinstaller-devkit-3.2.2-1-x64.exe /silent /currentuser /noicons /dir=C:\asper
323
340
 
324
341
  #### macOS: `brew`
325
342
 
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.
330
-
331
343
  The recommended way is to use [Homebrew](https://brew.sh/).
332
344
 
333
345
  ```shell
334
346
  brew install ruby
335
347
  ```
336
348
 
349
+ > [!WARNING]
350
+ > **macOS** comes with Ruby 2.6.
351
+ > 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).
352
+ > It will be removed from macOS in the future.
353
+ > Do not use it.
354
+ > Use the required version of Ruby.
355
+
337
356
  This installs a recent Ruby suitable for `ascli`.
338
357
 
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
358
+ 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`):
359
+
360
+ ```shell
361
+ export PATH="$(brew --prefix ruby)/bin:$PATH"
362
+ export PATH="$(gem env gemdir)/bin:$PATH"
362
363
  ```
363
364
 
365
+ > [!NOTE]
366
+ > Two separate lines are needed because the second one depends on the first one.
367
+ > This is what is displayed at the end of the installation of the ruby tap, same as message from:
368
+ > `brew info ruby`
369
+
364
370
  #### Linux: Package
365
371
 
366
372
  If your Linux distribution provides a standard Ruby package, you can use it provided that the version supported.
@@ -569,7 +575,7 @@ Those are not installed as part of dependencies because they involve compilation
569
575
  See [Gemfile](Gemfile):
570
576
 
571
577
  | name | version | comment |
572
- | ---- | ------- | ------- |
578
+ | -------------------- | ------- | --------------------------------------------------- |
573
579
  | grpc | ~> 1.71 | (no jruby) for Aspera Transfer Daemon |
574
580
  | mimemagic | ~> 0.4 | for preview |
575
581
  | rmagick | ~> 6.1 | (no jruby) for terminal view |
@@ -578,6 +584,8 @@ See [Gemfile](Gemfile):
578
584
  | sqlite3 | ~> 2.7 | (no jruby) for async DB |
579
585
  | jdbc-sqlite3 | ~> 3.46 | (jruby) for async DB |
580
586
  | sequel | ~> 5.96 | (jruby) for async DB |
587
+ | ed25519 | ~> 1.4 | (no jruby) for ed25519 |
588
+ | bcrypt_pbkdf | ~> 1.1 | (no jruby) for ed25519 |
581
589
 
582
590
  Install like this:
583
591
 
@@ -590,6 +598,8 @@ gem install bigdecimal -v '~> 3.1'
590
598
  gem install sqlite3 -v '~> 2.7'
591
599
  gem install jdbc-sqlite3 -v '~> 3.46'
592
600
  gem install sequel -v '~> 5.96'
601
+ gem install ed25519 -v '~> 1.4'
602
+ gem install bcrypt_pbkdf -v '~> 1.1'
593
603
  ```
594
604
 
595
605
  ### Ruby Gem: `aspera-cli`
@@ -634,15 +644,30 @@ The user installs the gem with `HighSecurity` or `MediumSecurity`: this will suc
634
644
  gem install -P MediumSecurity aspera-cli
635
645
  ```
636
646
 
647
+ #### Beta release of gem
648
+
649
+ Beta version of gem can be found here: <https://ibm.biz/aspera-cli-beta>
650
+
651
+ On Linux/macOS, install in a terminal:
652
+
653
+ ```shell
654
+ curl -sLo aspera-cli-beta.gem https://ibm.biz/aspera-cli-beta
655
+ gem install aspera-cli-beta.gem
656
+ ```
657
+
658
+ On Windows, download the link, that saves the file: `aspera-cli-beta.gem`, then install with `gem install aspera-cli-beta.gem`.
659
+
637
660
  ### FASP Protocol: `ascp`
638
661
 
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:
662
+ File transfers are primarily performed using the **FASP** protocol via the `ascp` utility.
641
663
 
642
- - `ascp`
643
- - `aspera-license` (in same folder, or `../etc`)
664
+ To execute an Aspera transfer, only two additional files are required, both included with the Aspera Transfer Daemon:
665
+
666
+ - `ascp` - the transfer executable
644
667
 
645
- This can be installed either be installing an Aspera transfer software or using an `ascli` command.
668
+ - `aspera-license` - the license file (located in the same directory as `ascp` or in `../etc`)
669
+
670
+ These components can be installed either by installing the Aspera transfer software or by executing the `ascli` command.
646
671
 
647
672
  #### Installation of `ascp` through `transferd`
648
673
 
@@ -671,8 +696,8 @@ The installation of the transfer binaries follows those steps:
671
696
  - By default, the archive is extracted to `$HOME/.aspera/sdk`.
672
697
  - The destination folder can be changed by setting the `sdk_folder` option.
673
698
 
674
- | Option | Default | Description |
675
- |-----------------|---------|-------------|
699
+ | Option | Default | Description |
700
+ |-----------------|---------|--------------------------------------------------------|
676
701
  | `sdk_url` | `DEF` | URL to download the Aspera Transfer Daemon archive.<br/>`DEF` means: select from available archives. |
677
702
  | `locations_url` | `https://ibm.biz/sdk_location` | URL to get download URLs of Aspera Transfer Daemon from IBM official repository. |
678
703
  | `sdk_folder` | `$HOME/.aspera/sdk` | Folder where the SDK archive is extracted. |
@@ -885,7 +910,7 @@ ascli -v
885
910
  ```
886
911
 
887
912
  ```text
888
- 4.24.1
913
+ 4.24.2
889
914
  ```
890
915
 
891
916
  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 +1300,7 @@ It's up to the program to split arguments:
1275
1300
  - [Windows: How Command Line Parameters Are Parsed](https://daviddeley.com/autohotkey/parameters/parameters.htm#RUBY)
1276
1301
  - [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
1302
 
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`).
1303
+ 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
1304
  Ruby vaguely follows the Microsoft C/C++ parameter parsing rules.
1280
1305
  (See `w32_cmdvector` in Ruby source [`win32.c`](https://github.com/ruby/ruby/blob/master/win32/win32.c#L1766)) : <!--cspell:disable-line-->
1281
1306
 
@@ -1312,12 +1337,12 @@ Basically it handles I/O redirection (`<>|`), shell variables (`%`), multiple co
1312
1337
  Eventually, all those special characters are removed from the command line unless escaped with `^` or `"`.
1313
1338
  `"` are kept and given to the program.
1314
1339
 
1315
- #### Shell parsing for Windows: Powershell
1340
+ #### Shell parsing for Windows: PowerShell
1316
1341
 
1317
- For Powershell, it actually depends on the version of it (7.3+).
1342
+ For PowerShell, it actually depends on the version of it (5.1, 7.3+).
1318
1343
 
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 `--%`.
1344
+ 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.
1345
+ If not using PowerShell features (e.g. variable), one can use the "stop-parsing" token `--%`.
1321
1346
 
1322
1347
  Details can be found here:
1323
1348
 
@@ -1325,7 +1350,9 @@ Details can be found here:
1325
1350
 
1326
1351
  - [quoting rules](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules)
1327
1352
 
1328
- The following examples give the same result on Windows using Powershell:
1353
+ The following examples give the same result on Windows using PowerShell:
1354
+
1355
+ - Check your powershell version:
1329
1356
 
1330
1357
  ```powershell
1331
1358
  PS C:\> echo $psversiontable.psversion
@@ -1333,14 +1360,26 @@ PS C:\> echo $psversiontable.psversion
1333
1360
  Major Minor Build Revision
1334
1361
  ----- ----- ----- --------
1335
1362
  5 1 19041 4046
1363
+ ```
1364
+
1365
+ - Use PowerShell argument `--%` to place PowerShell in "stop-parsing" mode.
1336
1366
 
1367
+ ```powershell
1337
1368
  PS C:\> ascli config echo --% @json:'{"k":"v","x":"y"}'
1369
+ ```
1370
+
1371
+ - Triple double quotes are replaced with a single double quote in normal mode:
1338
1372
 
1373
+ ```powershell
1339
1374
  PS C:\> ascli config echo @json:'{"""k""":"""v""","""x""":"""y"""}'
1340
1375
  ```
1341
1376
 
1342
- > [!NOTE]
1343
- > The special Powershell argument `--%` places Powershell in "stop-parsing" mode.
1377
+ - To insert PowerShell variables in the JSON string, one can do:
1378
+
1379
+ ```powershell
1380
+ $email="john@example.com"
1381
+ ascli conf echo $('@json:{"""address""":"""' + $email + '""","""vip""":true}')
1382
+ ```
1344
1383
 
1345
1384
  #### Extended Values (JSON, Ruby, ...)
1346
1385
 
@@ -1366,7 +1405,7 @@ ascli config echo 1 2 3
1366
1405
  ERROR: Argument: unprocessed values: ["2", "3"]
1367
1406
  ```
1368
1407
 
1369
- `config echo` displays the value of the **first** argument using Ruby syntax: it surrounds a string with `"` and add `\` before special characters.
1408
+ `config echo` displays the value of the **first** argument using the current output `format`.
1370
1409
 
1371
1410
  > [!NOTE]
1372
1411
  > It gets its value after shell command line parsing and `ascli` extended value parsing.
@@ -1379,7 +1418,7 @@ Depending on the case, a different `format` option is used to display the actual
1379
1418
  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
1419
 
1381
1420
  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 -->
1421
+ For **POSIX shells**, single quotes can also be used in this case, or protect the special character ` ` (space) with a backslash.
1383
1422
 
1384
1423
  ```shell
1385
1424
  ascli config echo "Hello World" --format=text
@@ -1398,7 +1437,7 @@ Even if the variable contains spaces it results only in one argument for `ascli`
1398
1437
 
1399
1438
  > [!NOTE]
1400
1439
  > We use a simple shell variable in this example.
1401
- > Note that it does not need to be exported as an environment variable.
1440
+ > It does not need to be exported as an environment variable.
1402
1441
 
1403
1442
  ```shell
1404
1443
  MYVAR="Hello World"
@@ -1588,7 +1627,7 @@ If wrong, or no command is provided when expected, an error message is displayed
1588
1627
  Standard **Commands** are: `create`, `show`, `list`, `modify`, `delete`.
1589
1628
  Some entities also support additional commands.
1590
1629
  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`.
1630
+ For example sub-commands appear after entity selection (identifier), e.g. `ascli aoc admin node do _my_node_id_ browse /`: `browse` is a sub-command of `node`.
1592
1631
 
1593
1632
  **Command Parameters** are typically mandatory values for a command, such as entity creation data or entity identifier.
1594
1633
 
@@ -1672,6 +1711,7 @@ The value for **any** options can come from the following locations (in this ord
1672
1711
  Environment variable starting with prefix: ASCLI_ are taken as option values, e.g. `ASCLI_OPTION_NAME` is for `--option-name`.
1673
1712
 
1674
1713
  Option `show_config` dry runs the configuration, and then returns currently set values for options.
1714
+
1675
1715
  `ascli --show-config` outputs global options only, and `ascli [plugin] --show-config` outputs global and plugin default options.
1676
1716
  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
1717
 
@@ -1704,8 +1744,8 @@ To redirect results to a file, use option `output`.
1704
1744
 
1705
1745
  Depending on action, the output will contain:
1706
1746
 
1707
- | Result Type | Description |
1708
- |-----------------|-------------------|
1747
+ | Result Type | Description |
1748
+ |-----------------|-----------------------------------------------------------------------------------|
1709
1749
  | `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
1750
  | `object_list` | Displayed as a 2 dimensional table: one line per item, one column per field. |
1711
1751
  | `value_list` | A table with one column. |
@@ -1713,47 +1753,75 @@ Depending on action, the output will contain:
1713
1753
  | `status` | A message. |
1714
1754
  | `other_struct` | A complex structure that cannot be displayed as an array. |
1715
1755
 
1756
+ #### Enhanced display of special values
1757
+
1758
+ Special values are highlighted as follows in `format=table`:
1759
+
1760
+ | Value | Display |
1761
+ |----------------|------------------|
1762
+ | `nil` | `<null>` |
1763
+ | empty `String` | `<empty string>` |
1764
+ | empty `Array` | `<empty list>` |
1765
+ | empty `Hash` | `<empty dict>` |
1766
+
1767
+ Example:
1768
+
1769
+ ```shell
1770
+ ascli config echo @json:'{"ni":null,"es":"","ea":[],"eh":{}}'
1771
+ ```
1772
+
1773
+ ```text
1774
+ ╭───────┬────────────────╮
1775
+ │ field │ value │
1776
+ ╞═══════╪════════════════╡
1777
+ │ ni │ <null> │
1778
+ │ es │ <empty string> │
1779
+ │ ea │ <empty list> │
1780
+ │ eh │ <empty dict> │
1781
+ ╰───────┴────────────────╯
1782
+ ```
1783
+
1716
1784
  #### Option: `format`
1717
1785
 
1718
1786
  The style of output can be set using the `format` option:
1719
1787
 
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 |
1788
+ | `format` | Output formatting |
1789
+ |----------|-------------------------|
1790
+ | `table` | Text table (default) |
1791
+ | `text` | Value as `String` |
1792
+ | `ruby` | Ruby code |
1793
+ | `json` | JSON code |
1794
+ | `jsonpp` | JSON pretty printed |
1795
+ | `yaml` | YAML |
1796
+ | `csv` | Comma Separated Values |
1797
+ | `image` | Image URL or data |
1798
+ | `nagios` | Suitable for Nagios |
1731
1799
 
1732
1800
  By default, result of type `single_object` and `object_list` are displayed using format `table`.
1733
1801
 
1734
1802
  #### Option: `table_style`
1735
1803
 
1736
- The table style can be customized with option: `table_style` which expects a `Hash`.
1804
+ The way `format`: `table` and `csv` are generated can be customized with option: `table_style` which expects a `Hash`.
1737
1805
 
1738
1806
  For `format=table`, options are the ones described in gem [`terminal-table`](https://github.com/tj/terminal-table).
1739
1807
 
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
1808
  For example, to display a table with thick Unicode borders:
1743
1809
 
1744
1810
  ```shell
1745
1811
  ascli config preset over --table-style=@ruby:'{border: :unicode_thick_edge}'
1746
1812
  ```
1747
1813
 
1814
+ > [!NOTE]
1815
+ > Other border styles exist, not limited to: `:unicode`, `:unicode_round`.
1816
+
1817
+ For `format=csv`, options are described in gem [`csv`](https://ruby.github.io/csv/CSV.html#class-CSV-label-Options+for+Generating).
1818
+
1748
1819
  For example, to display a CSV with headers and quotes:
1749
1820
 
1750
1821
  ```shell
1751
1822
  ascli config echo @json:'[{"name":"foo","id":1},{"name":"bar","id":8}]' --format=csv --table=@json:'{"headers":true,"force_quotes":true}'
1752
1823
  ```
1753
1824
 
1754
- > [!NOTE]
1755
- > Other border styles exist, not limited to: `:unicode`, `:unicode_round`.
1756
-
1757
1825
  #### Option: `flat_hash`: Single level `Hash`
1758
1826
 
1759
1827
  This option controls how object fields are displayed for complex objects.
@@ -1801,57 +1869,29 @@ ascli config echo @json:'{"A":"a","B":[{"name":"B1","value":"b1"},{"name":"B2","
1801
1869
  ╰───────┴────────────────────────────────────────────────────────────────────────╯
1802
1870
  ```
1803
1871
 
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
1872
  #### Option: `multi_single`
1833
1873
 
1834
1874
  This option controls how result fields are displayed as columns or lines, when option `format` is set to `table`.
1835
1875
  Default is `no`.
1836
1876
  There are two types of results that are affected by this option:
1837
1877
 
1838
- | Result | Description |
1839
- |-----------------|-------------|
1840
- | `single_object` | A single item with multiple fields. |
1878
+ | Result | Description |
1879
+ |-----------------|---------------------------------------------|
1880
+ | `single_object` | A single item with multiple fields. |
1841
1881
  | `object_list` | A list of items, each with multiple fields. |
1842
1882
 
1843
1883
  An item (object) is displayed in one of those 2 ways:
1844
1884
 
1845
- | Display | rows | columns |
1846
- |------------|--------|---------|
1885
+ | Display | rows | columns |
1886
+ |------------|--------|---------------------|
1847
1887
  | Simple | Fields | `field` and `value` |
1848
- | Transposed | Items | Fields |
1888
+ | Transposed | Items | Fields |
1849
1889
 
1850
1890
  The display of result is as follows:
1851
1891
 
1852
- | Result | `no` | `yes` | `single` |
1853
- |-----------------|------------|------------|----------|
1854
- | `single_object` | Simple | Simple | Simple |
1892
+ | Result | `no` | `yes` | `single` |
1893
+ |-----------------|------------|-------------|-------------------------------------|
1894
+ | `single_object` | Simple | Simple | Simple |
1855
1895
  | `object_list` | Transposed | Simple<br/>(Multiple objects) | Simple if 1 object,<br/>transposed if 2+ objects |
1856
1896
 
1857
1897
  This parameter can be set as a global default with:
@@ -2004,17 +2044,17 @@ In above example, the same result is obtained with option:
2004
2044
 
2005
2045
  Option `select` applies the filter after a possible "flattening" with option: `flat_hash`.
2006
2046
 
2007
- #### Percent selector
2047
+ ### Percent selector
2008
2048
 
2009
2049
  The percent selector allows identification of an entity by another unique identifier other than the native identifier.
2010
2050
 
2011
2051
  Syntax: `%<field>:<value>`
2012
2052
 
2013
2053
  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:
2054
+ For example, in the following command, `_my_user_id_` is the user's identifier:
2015
2055
 
2016
2056
  ```shell
2017
- ascli aoc admin user show 1234
2057
+ ascli aoc admin user show _my_user_id_
2018
2058
  ```
2019
2059
 
2020
2060
  Some commands provide the following capability:
@@ -2043,8 +2083,8 @@ Decoders act like a function with its parameter on right-hand side and are recog
2043
2083
 
2044
2084
  The following decoders are supported:
2045
2085
 
2046
- | Decoder | Parameter| Returns | Description |
2047
- |----------|----------|----------|-------------|
2086
+ | Decoder | Parameter| Returns | Description |
2087
+ |----------|----------|----------|------------------------------------------------------------------------------------------|
2048
2088
  | `base64` | `String` | `String` | Decode a base64 encoded string |
2049
2089
  | `csvt` | `String` | `Array` | Decode a titled CSV value |
2050
2090
  | `env` | `String` | `String` | Read from a named env var name, e.g. `--password=@env:MYPASSVAR` |
@@ -2210,6 +2250,8 @@ The default value is `_<>:"/\|?*`, corresponding to replacement character `_` an
2210
2250
  Some temporary files may be needed during runtime.
2211
2251
  The temporary folder may be specified with option: `temp_folder`.
2212
2252
  Temporary files are deleted at the end of execution unless option: `clean_temp` is set to `no`.
2253
+ By default (`@sys`), the temporary folder is the system's temporary folder for the current user (Ruby `Etc.systmpdir`).
2254
+ A special value of `@env` will set the folder to Ruby `Dir.tmpdir` which uses regular env var to set the temp folder.
2213
2255
 
2214
2256
  ### Configuration file
2215
2257
 
@@ -2398,7 +2440,9 @@ coffee --ui=text
2398
2440
  coffee --ui=text --image=@json:'{"text":true,"double":false}'
2399
2441
  coffee --ui=text --image=@json:'{"text":true}'
2400
2442
  detect https://faspex5.example.com/path
2443
+ detect https://faspex5.example.com/path faspex5
2401
2444
  detect https://node.example.com/path
2445
+ detect https://server.example.com/path server
2402
2446
  detect https://shares.example.com/path shares
2403
2447
  detect https://tst.example.com/path faspio
2404
2448
  detect https://tst.example.com/path httpgw
@@ -2415,6 +2459,7 @@ echo @json:'[{"user":{"id":1,"name":"foo"},"project":"bar"}]' --multi-single=yes
2415
2459
  echo @lines:@stdin:
2416
2460
  echo @list:,1,2,3
2417
2461
  echo @secret:
2462
+ echo @stdbin:
2418
2463
  echo @uri:/etc/hosts
2419
2464
  echo @uri:file:/etc/hosts
2420
2465
  echo @uri:http://ifconfig.me
@@ -2455,6 +2500,7 @@ remote_certificate chain https://node.example.com/path
2455
2500
  remote_certificate name https://node.example.com/path
2456
2501
  remote_certificate only https://node.example.com/path
2457
2502
  smtp_settings
2503
+ sync spec
2458
2504
  tokens flush
2459
2505
  tokens list
2460
2506
  tokens show foobar
@@ -2470,9 +2516,11 @@ wizard https://faspex4.example.com/path faspex --username=test --password=test
2470
2516
  wizard https://faspex5.example.com/path faspex5 --key-path=my_private_key
2471
2517
  wizard https://node.example.com/path node --username=test --password=test
2472
2518
  wizard https://orch.example.com/path orchestrator --username=test --password=test
2519
+ wizard https://server.example.com/path server --username=my_username --password=my_password
2473
2520
  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
2521
+ wizard https://tst.example.com/path faspio --username=my_username --password=my_password
2475
2522
  wizard my_org aoc --key-path=my_private_key --username=my_user_email --use-generic-client=yes
2523
+ wizard my_org aoc mypreset --key-path=my_private_key --username=my_user_email
2476
2524
  ```
2477
2525
 
2478
2526
  #### Format of file
@@ -2585,20 +2633,21 @@ The wizard is a command that asks the user for information and creates an [Optio
2585
2633
 
2586
2634
  It takes three optional arguments:
2587
2635
 
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.
2636
+ |#| Parameter description | If not provided, `ascli` |
2637
+ |-|--------------------------------------------|--------------------------------------------|
2638
+ |1| **URL** or hostname of the application | ask for it. |
2639
+ |2| The **plugin name** to limit search to | tries to detect known plugins from the URL |
2640
+ |3| The **preset name** to save in config file | generates a unique preset name |
2591
2641
 
2592
- Special options are also available to the wizard:
2642
+ Options are also available for the wizard:
2593
2643
 
2594
- | Option | Value | Description |
2595
- |-------------|----------|-------------|
2596
- | `default` | [yes]/no | Set as default configuration for specified plugin. |
2644
+ | Option | Value | Description |
2645
+ |-------------|----------|---------------------------------------------------------------------|
2646
+ | `default` | [yes]/no | Set as default configuration for specified plugin. |
2597
2647
  | `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. |
2648
+ | `key_path` | path | Path to private key for JWT. |
2600
2649
 
2601
- Other options can be provided to the wizard, such as `--username`, etc...
2650
+ Other plugin-specific options can be provided to the wizard, such as `--username`, etc...
2602
2651
  They will be added to the [Option Preset](#option-preset) created by the wizard.
2603
2652
 
2604
2653
  The simplest invocation is:
@@ -2607,6 +2656,9 @@ The simplest invocation is:
2607
2656
  ascli config wizard
2608
2657
  ```
2609
2658
 
2659
+ If the application requires a private key, the user can either provide the path to it with option `key_path`.
2660
+ The user is told where to place the associated public pey PEM in the application.
2661
+
2610
2662
  #### Example of configuration for a plugin
2611
2663
 
2612
2664
  For Faspex, Shares, Node (including ATS, Aspera Transfer Service), Console,
@@ -2713,8 +2765,8 @@ brew install hashicorp/tap/vault
2713
2765
  vault server -dev -dev-root-token-id=dev-only-token
2714
2766
  ```
2715
2767
 
2716
- | Parameter | Example | Description |
2717
- |-----------|----------|-------------|
2768
+ | Parameter | Example | Description |
2769
+ |-----------|-------------------------|---------------------------------------------------------------------|
2718
2770
  | `type` | `vault` | The type of the vault |
2719
2771
  | `url` | `http://127.0.0.1:8200` | The URL of the vault |
2720
2772
  | `token` | `dev-only-token` | The token for the vault, by default uses parameter `vault_password` |
@@ -2730,10 +2782,10 @@ vault server -dev -dev-root-token-id=dev-only-token
2730
2782
 
2731
2783
  It is possible to manage secrets in macOS keychain (only read supported currently).
2732
2784
 
2733
- | Parameter | Example | Description |
2734
- |-----------|----------|-------------|
2735
- | `type` | `system` | The type of the vault |
2736
- | `name` | ``ascli`` | The name of the keychain to use |
2785
+ | Parameter | Example | Description |
2786
+ |-----------|-------------|------------------------------------|
2787
+ | `type` | `system` | The type of the vault. |
2788
+ | `name` | ``ascli`` | The name of the keychain to use. |
2737
2789
 
2738
2790
  ```shell
2739
2791
  --vault=@json:'{"type":"system","name":"ascli"}'
@@ -2747,10 +2799,10 @@ It is possible to store and use secrets encrypted in a file using option `vault`
2747
2799
  {"type":"file","name":"vault.bin"}
2748
2800
  ```
2749
2801
 
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` |
2802
+ | Parameter | Example | Description |
2803
+ |-----------|--------------|--------------------------------------------------------------------|
2804
+ | `type` | `file` | The type of the vault. |
2805
+ | `name` | `vault.bin` | File path, absolute, or relative to the configuration folder `ASCLI_HOME`. |
2754
2806
 
2755
2807
  #### Vault: Operations
2756
2808
 
@@ -2888,12 +2940,12 @@ This server can server HTTP or HTTPS (with certificate):
2888
2940
 
2889
2941
  The following parameters are supported:
2890
2942
 
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) |
2943
+ | Parameter | Type | Default | Description |
2944
+ |-------------------|----------|-------------------------|------------------------------------------------------------------|
2945
+ | `url` | `String` | `http://localhost:8080` | Base URL on which requests are listened, a path can be provided. | <!-- markdownlint-disable-line -->
2946
+ | `cert` | `String` | - | (HTTPS) Path to certificate file (with ext. `.pfx` or `.p12` for `PKCS12`). |
2947
+ | `key` | `String` | - | (HTTPS) Path to private key file (PEM), or passphrase for `PKCS12`. |
2948
+ | `chain` | `String` | - | (HTTPS) Path to certificate chain (PEM only). |
2897
2949
 
2898
2950
  Parameter `url` (base URL) defines:
2899
2951
 
@@ -2913,12 +2965,12 @@ This is available:
2913
2965
 
2914
2966
  The following options can be specified in the option `image`:
2915
2967
 
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 |
2968
+ | Option | Type | Description |
2969
+ |------------|-----------|---------------------------------------------------|
2970
+ | reserve | `Integer` | Lines reserved to display a status. |
2971
+ | text | `Bool` | Display text instead of image. |
2972
+ | double | `Bool` | Display double text resolution (half characters). |
2973
+ | font_ratio | `Float` | Font height/width ratio in terminal. |
2922
2974
 
2923
2975
  ```shell
2924
2976
  ascli config image https://eudemo.asperademo.com/wallpaper.jpg --ui=text --image=@json:'{"text":true}'
@@ -2957,8 +3009,8 @@ To increase debug level, use option `log_level` (e.g. using command line `--log-
2957
3009
  By default, passwords and secrets are redacted from logs.
2958
3010
  Set option `log_secrets` to `yes` to include secrets in logs.
2959
3011
 
2960
- | Option | Values | Description |
2961
- |---------------|--------|-------------|
3012
+ | Option | Values | Description |
3013
+ |---------------|--------|-------------------------------------------------------------------------|
2962
3014
  | `logger` | `stdout`<br/>`stderr`<br/>`syslog` | Type of output.<br/>Default: `stderr` |
2963
3015
  | `log_level` | `trace2`<br/>`trace1`<br/>`debug`<br/>`info`<br/>`warn`<br/>`error` | Minimum level displayed.<br/>Default: `warn` |
2964
3016
  | `log_secrets` | `yes`<br/>`no` | Show or hide secrets in logs.<br/>Default: `no` (Hide) |
@@ -2972,12 +3024,12 @@ The default formatter is:
2972
3024
  ->(s, _d, _p, m){"#{s[0..2]} #{m}\n"}
2973
3025
  ```
2974
3026
 
2975
- Availaible formatters for `log_format`:
3027
+ Available formatters for `log_format`:
2976
3028
 
2977
- | Name | Description |
2978
- |-----------|-----------------------------------------|
2979
- | `default` | Default formatter. |
2980
- | `standard`| Standard Ruby formatter. |
3029
+ | Name | Description |
3030
+ |-----------|--------------------------|
3031
+ | `default` | Default formatter. |
3032
+ | `standard`| Standard Ruby formatter. |
2981
3033
 
2982
3034
  Examples:
2983
3035
 
@@ -3020,20 +3072,22 @@ To disable this warning, set the option `warn_insecure` to `no`.
3020
3072
 
3021
3073
  HTTP connection parameters (not `ascp` WSS) can be adjusted using option `http_options`:
3022
3074
 
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` |
3075
+ | Parameter | Type | Default | Handler |
3076
+ |-------------------------|---------|---------------|---------------|
3077
+ | `read_timeout` | `Integer` | `60` | Ruby |
3078
+ | `write_timeout` | `Integer` | `60` | Ruby |
3079
+ | `open_timeout` | `Integer` | `60` | Ruby |
3080
+ | `keep_alive_timeout` | `Integer` | `2` | Ruby |
3081
+ | `ssl_options` | `Array` | See below | Ruby |
3082
+ | `user_agent` | `Integer` | `ascli` | `ascli` Rest |
3083
+ | `download_partial_suffix` | `Integer` | `.http_partial` | `ascli` Rest |
3084
+ | `retry_on_error` | `Bool` | `false` | `ascli` Rest |
3085
+ | `retry_on_timeout` | `Bool` | `true` | `ascli` Rest |
3086
+ | `retry_on_unavailable` | `Bool` | `true` | `ascli` Rest |
3087
+ | `retry_max` | `Integer` | `1` | `ascli` Rest |
3088
+ | `retry_sleep` | `Integer` | `4` | `ascli` Rest |
3089
+ | `token_cache_max_age` | `Integer` | `1800` | `ascli` OAuth |
3090
+ | `token_refresh_threshold` | `Integer` | `120` | `ascli` OAuth |
3037
3091
 
3038
3092
  Time values are in set **seconds** and can be of type either `Integer` or `Float`.
3039
3093
  Default values are the ones of Ruby:
@@ -3047,11 +3101,11 @@ Example:
3047
3101
  ascli aoc admin package list --http-options=@json:'{"read_timeout":10.0}'
3048
3102
  ```
3049
3103
 
3050
- `ssl_options` corresponds to a list of options as listed in `man SSL_CTX_set_options`.
3104
+ The option `ssl_options` corresponds to a list of options as listed in `man SSL_CTX_set_options`.
3051
3105
  The default initial value is the default of Ruby as specified in `openssl/ssl.rb`.
3052
3106
  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
3107
  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.
3108
+ If the name appears in the list prefixed with a hyphen (`-`), the option is cleared.
3055
3109
  For example to enable option `SSL_OP_CIPHER_SERVER_PREFERENCE`, add it to the list as `CIPHER_SERVER_PREFERENCE`.
3056
3110
  To disable option `SSL_OP_SAFARI_ECDHE_ECDSA_BUG`, add it as `-SAFARI_ECDHE_ECDSA_BUG`.
3057
3111
 
@@ -3116,7 +3170,7 @@ ascli config proxy_check --fpac='function FindProxyForURL(url, host) {return "PR
3116
3170
  ```
3117
3171
 
3118
3172
  ```text
3119
- PROXY proxy.example.com:1234;DIRECT
3173
+ PROXY proxy.example.com:8080;DIRECT
3120
3174
  ```
3121
3175
 
3122
3176
  ```shell
@@ -3326,8 +3380,8 @@ Transfers will be executed by a transfer client, here called **Transfer Agent**.
3326
3380
 
3327
3381
  The following agents are supported and selected with option `transfer`:
3328
3382
 
3329
- | `transfer` | location | Description of agent |
3330
- |------------------------------------|----------|-------------------------------|
3383
+ | `transfer` | location | Description of agent |
3384
+ |----------|----------|-------------------------------|
3331
3385
  | [`direct`](#agent-direct) | local | direct execution of `ascp` |
3332
3386
  | [`transferd`](#agent-transfer-daemon) | local | Aspera Transfer Daemon |
3333
3387
  | [`connect`](#agent-connect-client) | local | Aspera Connect Client |
@@ -3354,14 +3408,16 @@ This is the default agent for `ascli` (option `--transfer=direct`).
3354
3408
  `ascli` will locally search installed Aspera products, including SDK, and use `ascp` from that component.
3355
3409
  Refer to section [FASP](#fasp-configuration).
3356
3410
 
3411
+ ##### Agent: Direct: `transfer_info`
3412
+
3357
3413
  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
3414
 
3359
- | Name | Type | Description |
3360
- |------------------------|---------|-------------|
3415
+ | Name | Type | Description |
3416
+ |------------------------|-----------|-----------------------------------------------------------------------------|
3361
3417
  | `wss` | `Bool` | Web Socket Session<br/>Enable use of web socket session in case it is available<br/>Default: `true` |
3362
3418
  | `quiet` | `Bool` | If `true`, then `ascp` progress bar is not shown.<br/>Default: `false` |
3363
3419
  | `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` |
3420
+ | `client_ssh_key` | `String` | SSH Keys to use for token-based transfers.<br/>One of: `dsa_rsa`, `rsa`, `per_client`.<br/>Default: `rsa` |
3365
3421
  | `ascp_args` | `Array` | `Array` of strings with native `ascp` arguments.<br/>Default: `[]` |
3366
3422
  | `spawn_timeout_sec` | `Float` | Multi session<br/>Verification time that `ascp` is running<br/>Default: `3` |
3367
3423
  | `spawn_delay_sec` | `Float` | Multi session<br/>Delay between startup of sessions<br/>Default: `2` |
@@ -3380,14 +3436,26 @@ Sleep between iterations is given by the following formula where `iter_index` is
3380
3436
  max( sleep_max, sleep_initial * sleep_factor ^ iter_index )
3381
3437
  ```
3382
3438
 
3383
- To display the native progress bar of `ascp`, use `--progress-bar=no --transfer-info=@json:'{"quiet":false}'`.
3439
+ To display the native progress bar of `ascp`, use:
3440
+
3441
+ ```shell
3442
+ --progress-bar=no --transfer-info=@json:'{"quiet":false}'`
3443
+ ```
3384
3444
 
3385
3445
  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}'`
3446
+ In that, use the native progress bar:
3447
+
3448
+ ```shell
3449
+ --transfer-info=@json:'{"monitor":false,"quiet":false}'`
3450
+ ```
3387
3451
 
3388
3452
  By default, Ruby's root CA store is used to validate any HTTPS endpoint used by `ascp` (e.g. WSS).
3389
3453
  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}'`.
3454
+ To use `ascp`'s default, use option:
3455
+
3456
+ ```shell
3457
+ --transfer-info=@json:'{"trusted_certs":null}'`.
3458
+ ```
3391
3459
 
3392
3460
  Some transfer errors are considered **retry-able** (e.g. timeout) and some other not (e.g. wrong password).
3393
3461
  The list of known protocol errors and retry level can be listed:
@@ -3434,6 +3502,30 @@ In addition to standard methods described in section [File List](#list-of-files-
3434
3502
  > [!NOTE]
3435
3503
  > 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
3504
 
3505
+ ##### Agent: Direct: Management messages
3506
+
3507
+ By default, `ascli` gets notification from `ascp` on its management port.
3508
+ This can be de-activated with parameter: `monitor=false` of `transfer_info`.
3509
+
3510
+ It is also possible to send local messages to this management port.
3511
+ A typical use is to change the target rate of a running transfer.
3512
+
3513
+ The communication is done through a flat JSON file that shall be created in `ascli` config folder as displayed with:
3514
+
3515
+ ```shell
3516
+ ascli config folder
3517
+ ```
3518
+
3519
+ The name of the file shall be: `send_<PID>`, where `<PID>` is the process id of the running `ascli`.
3520
+
3521
+ Example to change the target rate:
3522
+
3523
+ ```shell
3524
+ echo '{"type":"RATE","Rate":300000}' > ~/.aspera/ascli/send_67470
3525
+ ```
3526
+
3527
+ When `ascli` detects this file, it uses it and then deletes it.
3528
+
3437
3529
  ##### Agent: Direct: `aspera.conf`: Virtual Links
3438
3530
 
3439
3531
  This agent supports a local configuration file: `aspera.conf` where Virtual links can be configured:
@@ -3610,11 +3702,11 @@ By specifying option: `--transfer=httpgw`, `ascli` will start transfers using th
3610
3702
 
3611
3703
  Parameters provided in option `transfer_info` are:
3612
3704
 
3613
- | Name | Type | Description |
3614
- |---------------------|-----------|---------------------------------------|
3615
- | `url` | `String` | URL of the HTTP GW<br/>Mandatory |
3705
+ | Name | Type | Description |
3706
+ |---------------------|-----------|-----------------------------------------------------------|
3707
+ | `url` | `String` | URL of the HTTP GW<br/>Mandatory |
3616
3708
  | `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` |
3709
+ | `api_version` | `String` | Force use of version (`v1`, `v2`)<br/>Default: `v2` |
3618
3710
  | `synchronous` | `Bool` | Wait for each message acknowledgment<br/>Default: `false` |
3619
3711
 
3620
3712
  Example:
@@ -3635,8 +3727,8 @@ Set option `transfer` to `transferd`.
3635
3727
 
3636
3728
  Options for `transfer_info` are:
3637
3729
 
3638
- | Name | Type | Description |
3639
- |----------|----------|-------------|
3730
+ | Name | Type | Description |
3731
+ |----------|----------|----------------------------------------------|
3640
3732
  | `url` | `String` | IP address and port listened by the daemon<br/>Mandatory<br/>Default: `:0` |
3641
3733
  | `start` | `Bool` | Start a new daemon.<br/>Default: `true` |
3642
3734
  | `stop` | `Bool` | Stop daemon when exiting `ascli`<br/>Default: `true` |
@@ -3672,7 +3764,7 @@ On Windows the compilation may fail for various reasons (3.1.1):
3672
3764
 
3673
3765
  - `cannot find -lx64-ucrt-ruby310`
3674
3766
 
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)
3767
+ &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
3768
 
3677
3769
  - `conflicting types for 'gettimeofday'`
3678
3770
 
@@ -3748,7 +3840,7 @@ ascli config ascp schema transferd --format=jsonpp
3748
3840
  `ascp` argument or environment variable is provided in description.
3749
3841
 
3750
3842
  | ID | Name |
3751
- | -- | ---- |
3843
+ | - | --------- |
3752
3844
  | A | Direct |
3753
3845
  | C | Connect |
3754
3846
  | D | Desktop |
@@ -3757,17 +3849,17 @@ ascli config ascp schema transferd --format=jsonpp
3757
3849
  | T | Transferd |
3758
3850
 
3759
3851
  | Field | Type | Description |
3760
- | ----- | ---- | ----------- |
3852
+ | ------------------------------ | ------- | -------------------------------------------------------------------------------- |
3761
3853
  | apply_local_docroot | boolean | Apply local docroot to source paths.<br/>(A, T)<br/>(`--apply-local-docroot`) |
3762
3854
  | authentication | string | Set to `token` for SSH bypass keys, else password asked if not provided.<br/>(C) |
3763
3855
  | 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`) |
3856
+ | 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` |
3857
+ | content_protection | string | Enable client-side encryption at rest (CSEAR).<br/>Allowed values: `encrypt`, `decrypt`<br/>(`--file-crypt={enum}`) |
3858
+ | content_protection_password | string | Specifies CSEAR password.<br/>(env:`ASPERA_SCP_FILEPASS`) |
3767
3859
  | cookie | string | Metadata for transfer specified by application.<br/>(env:`ASPERA_SCP_COOKIE`) |
3768
3860
  | create_dir | boolean | Specifies whether to create new directories.<br/>(`-d`) |
3769
3861
  | 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`) |
3862
+ | 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
3863
  | destination_root | string | Destination root directory. |
3772
3864
  | 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
3865
  | dgram_size | integer | UDP datagram size in bytes.<br/>(`-Z {integer}`) |
@@ -3783,16 +3875,16 @@ ascli config ascp schema transferd --format=jsonpp
3783
3875
  | https_fallback_port | integer | Specifies HTTPS port when cipher is used.<br/>(`-t {integer}`) |
3784
3876
  | icos | object | Configuration parameters for IBM Cloud Object Storage (ICOS).<br/>(T) |
3785
3877
  | keepalive | boolean | The session is running in persistent session mode.<br/>(A, T)<br/>(`--keepalive`) |
3786
- | lock_min_rate | boolean | TODO: remove ?<br/>(C) |
3878
+ | lock_min_rate | boolean | n/a<br/>(C) |
3787
3879
  | 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
3880
  | 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) |
3881
+ | lock_target_rate | boolean | n/a<br/>(C) |
3882
+ | 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
3883
  | 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
3884
  | 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}`) |
3885
+ | 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}`) |
3886
+ | 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}`) |
3887
+ | 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
3888
  | obfuscate_file_names | boolean | HTTP Gateway obfuscates file names when set to `true`.<br/>(H) |
3797
3889
  | 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
3890
  | 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 +3893,7 @@ ascli config ascp schema transferd --format=jsonpp
3801
3893
  | 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
3894
  | preserve_acls | string | Preserve access control lists.<br/>(A, T)<br/>Allowed values: `none`, `native`, `metafile`<br/>(`--preserve-acls={enum}`) |
3803
3895
  | 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}`) |
3896
+ | preserve_extended_attrs | string | Preserve the extended attributes.<br/>(A, T)<br/>Allowed values: `none`, `native`, `metafile`<br/>(`--preserve-xattrs={enum}`) |
3805
3897
  | preserve_file_owner_gid | boolean | Preserve the group ID for a file owner.<br/>(A, T)<br/>(`--preserve-file-owner-gid`) |
3806
3898
  | preserve_file_owner_uid | boolean | Preserve the user ID for a file owner.<br/>(A, T)<br/>(`--preserve-file-owner-uid`) |
3807
3899
  | 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,7 +3922,7 @@ ascli config ascp schema transferd --format=jsonpp
3830
3922
  | 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
3923
  | 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
3924
  | 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}`) |
3925
+ | 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
3926
  | ssh_port | integer | Specifies SSH (TCP) port.<br/>(`-P {integer}`) |
3835
3927
  | 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`) |
3836
3928
  | 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`) |
@@ -3843,10 +3935,10 @@ ascli config ascp schema transferd --format=jsonpp
3843
3935
  | target_rate_kbps | integer | Specifies desired speed for the transfer.<br/>(`-l {integer}`) |
3844
3936
  | title | string | Title of the transfer.<br/>(C, N, T) |
3845
3937
  | 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. |
3938
+ | use_ascp4 | boolean | Specify version of protocol. Do not use `ascp4`.<br/>(A, N, T) |
3939
+ | use_system_ssh | string | 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 {string}`) |
3940
+ | wss_enabled | boolean | Server has Web Socket service enabled.<br/>(special:`--ws-connect`) |
3941
+ | wss_port | integer | TCP port used for Web Socket service feed. |
3850
3942
  | 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
3943
 
3852
3944
  #### Destination folder for transfers
@@ -3955,9 +4047,6 @@ Example: Source file `200KB.1` is renamed `sample1` on destination:
3955
4047
  ascli server upload --src-type=pair ~/Documents/Samples/200KB.1 /Upload/sample1
3956
4048
  ```
3957
4049
 
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
4050
  #### Source directory structure on destination
3962
4051
 
3963
4052
  This section is not specific to `ascli` it is `ascp` behavior.
@@ -3981,18 +4070,18 @@ A leading `/` on destination is ignored (relative to docroot) unless docroot is
3981
4070
 
3982
4071
  In the following table source folder `d3` contains 2 files: `f1` and `d4/f2`.
3983
4072
 
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` |
4073
+ | Source files | Destination | Folders on Dest. | `create_dir` | Destination Files |
4074
+ |-----------------|-----|-----|------|-----------------------------------|
4075
+ | `f1` | `d/f` | - | false | Error: `d` does not exist. |
4076
+ | `f1` | `d/f` | `d` | false | `d/f` (renamed) |
4077
+ | `f1` | `d/f/.` | `d` | false | `d/f` (renamed) |
4078
+ | `f1` | `d/f` | `d/f` | false | `d/f/f1` |
4079
+ | `f1` `f2` | `d` | `d` | false | `d/f1` `d/f2` |
4080
+ | `d3` | `d` | - | false | `d/f1` `d/f2` (renamed) |
4081
+ | `f1` | `d` | - | true | `d/f1` |
4082
+ | `f1` `f2` | `d` | - | true | `d/f1` `d/f2` |
4083
+ | `d1/f1` `d2/f2` | `d` | - | true | `d/f1` `d/f2` |
4084
+ | `d3` | `d` | - | true | `d/d3/f1` `d/d3/d4/f2` |
3996
4085
 
3997
4086
  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
4087
 
@@ -4102,7 +4191,7 @@ It can be configured:
4102
4191
 
4103
4192
  - Using utility [`schtasks.exe`](https://learn.microsoft.com/fr-fr/windows-server/administration/windows-commands/schtasks-create)
4104
4193
 
4105
- - Using Powershell function [`scheduletasks`](https://learn.microsoft.com/en-us/powershell/module/scheduledtasks)
4194
+ - Using PowerShell function [`scheduletasks`](https://learn.microsoft.com/en-us/powershell/module/scheduledtasks)
4106
4195
 
4107
4196
  - Using `taskschd.msc` (UI)
4108
4197
 
@@ -4306,14 +4395,14 @@ where:
4306
4395
  - `dirname` is the folder name and can contain `/` to specify a subfolder.
4307
4396
  - Supported arguments are:
4308
4397
 
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` |
4398
+ | Name | Type | Description |
4399
+ |----------|--------|----------------------------------------------------------------|
4400
+ | count | int | Number of files<br/>Mandatory |
4401
+ | file | string | Basename for files<br/>Default: `file` |
4402
+ | size | int | Size of first file.<br/>Default: 0 |
4403
+ | inc | int | Increment applied to determine next file size<br/>Default: 0 |
4404
+ | seq | enum | Sequence in determining next file size<br/>Values: `random`, `sequential`<br/>Default: `sequential` |
4405
+ | 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
4406
 
4318
4407
  The sequence parameter is applied as follows:
4319
4408
 
@@ -4365,7 +4454,7 @@ ascli server upload "faux:///mydir?file=testfile&count=1000&size=1" --to-folder=
4365
4454
  ```text
4366
4455
  ascli -h
4367
4456
  NAME
4368
- ascli -- a command line tool for Aspera Applications (v4.24.1)
4457
+ ascli -- a command line tool for Aspera Applications (v4.24.2)
4369
4458
 
4370
4459
  SYNOPSIS
4371
4460
  ascli COMMANDS [OPTIONS] [ARGS]
@@ -4420,6 +4509,7 @@ OPTIONS: global
4420
4509
  --once-only=ENUM Process only new items (some commands): [no], yes
4421
4510
  --log-secrets=ENUM Show passwords in logs: [no], yes
4422
4511
  --clean-temp=ENUM Cleanup temporary files on exit: no, [yes]
4512
+ --temp-folder=VALUE Temporary folder
4423
4513
  --pid-file=VALUE Write process identifier to file, delete on exit (String)
4424
4514
  --home=VALUE Home folder for tool (String)
4425
4515
  --config-file=VALUE Path to YAML file with preset configuration
@@ -4436,7 +4526,6 @@ OPTIONS: global
4436
4526
  --plugin-folder=VALUE Folder where to find additional plugins
4437
4527
  --override=ENUM Wizard: override existing value: [no], yes
4438
4528
  --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
4529
  --key-path=VALUE Wizard: path to private key for JWT
4441
4530
  --ascp-path=VALUE Ascp: Path to ascp
4442
4531
  --use-product=VALUE Ascp: Use ascp from specified product
@@ -4464,7 +4553,7 @@ OPTIONS: global
4464
4553
  --transfer-info=VALUE Parameters for transfer agent (Hash)
4465
4554
 
4466
4555
  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
4556
+ 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
4557
 
4469
4558
 
4470
4559
  COMMAND: shares
@@ -4528,7 +4617,6 @@ OPTIONS:
4528
4617
  --instance=VALUE ATS instance in ibm cloud
4529
4618
  --ats-key=VALUE ATS key identifier (ats_xxx)
4530
4619
  --ats-secret=VALUE ATS key secret
4531
- --params=VALUE Parameters access key creation (@json:)
4532
4620
  --cloud=VALUE Cloud provider
4533
4621
  --region=VALUE Cloud region
4534
4622
 
@@ -4539,12 +4627,13 @@ OPTIONS:
4539
4627
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4540
4628
  --username=VALUE User's identifier
4541
4629
  --password=VALUE User's password
4630
+ --auth=ENUM OAuth type of authentication: web, [jwt], boot
4542
4631
  --client-id=VALUE OAuth client identifier
4543
4632
  --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
4633
+ --redirect-uri=VALUE OAuth (Web) redirect URI for web authentication
4634
+ --private-key=VALUE OAuth (JWT) RSA private key PEM value (prefix file path with @file:)
4635
+ --passphrase=VALUE OAuth (JWT) RSA private key passphrase
4636
+ --scope=VALUE OAuth scope for API calls
4548
4637
  --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
4638
  --shared-folder=VALUE Send package with files from shared folder
4550
4639
  --group-type=ENUM Type of shared box: [shared_inboxes], workgroups
@@ -4592,7 +4681,6 @@ OPTIONS:
4592
4681
  --folder-reset-cache=ENUM Force detection of generated preview by refresh cache: [no], header, read
4593
4682
  --skip-types=VALUE Skip types in comma separated list
4594
4683
  --previews-folder=VALUE Preview folder in storage root
4595
- --temp-folder=VALUE Path to temp folder
4596
4684
  --skip-folders=VALUE List of folder to skip
4597
4685
  --base=VALUE Basename of output for for test
4598
4686
  --scan-path=VALUE Subpath in folder id to start scan in (default=/)
@@ -4624,13 +4712,13 @@ OPTIONS:
4624
4712
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4625
4713
  --username=VALUE User's identifier
4626
4714
  --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)
4715
+ --auth=ENUM OAuth type of authentication: web, [jwt], boot
4716
+ --client-id=VALUE OAuth client identifier
4717
+ --client-secret=VALUE OAuth client secret
4718
+ --redirect-uri=VALUE OAuth (Web) redirect URI for web authentication
4719
+ --private-key=VALUE OAuth (JWT) RSA private key PEM value (prefix file path with @file:)
4720
+ --passphrase=VALUE OAuth (JWT) RSA private key passphrase
4721
+ --scope=VALUE OAuth scope for API calls
4634
4722
  --workspace=VALUE Name of workspace (String, NilClass)
4635
4723
  --new-user-option=VALUE New user creation option for unknown package recipients (Hash)
4636
4724
  --validate-metadata=ENUM Validate shared inbox metadata: no, [yes]
@@ -4748,39 +4836,50 @@ Aspera on Cloud API requires the use of OAuth v2 mechanism for authentication (H
4748
4836
 
4749
4837
  It is recommended to use the wizard to set it up, although manual configuration is also possible.
4750
4838
 
4751
- ### Configuration: Using Wizard
4839
+ ### AoC configuration: Using Wizard
4752
4840
 
4753
4841
  `ascli` provides a configuration [wizard](#wizard).
4754
4842
 
4755
4843
  The wizard guides you through the steps to create a new configuration preset for Aspera on Cloud.
4756
4844
 
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.
4845
+ The first optional argument is the URL of your Aspera on Cloud instance or simply the organization name, i.e. one of those :
4846
+
4847
+ - `_your_organization_`
4848
+ - `_your_organization_.ibmaspera.com`
4849
+ - `https://_your_organization_.ibmaspera.com`
4850
+
4851
+ The second optional argument can also be provided to specify the plugin name, e.g. `aoc` for Aspera on Cloud.
4758
4852
  If optional arguments are not provided, the wizard will ask interactively and try to detect the application.
4759
4853
 
4760
4854
  Here is a sample invocation :
4761
4855
 
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:
4856
+ ```console
4857
+ $ ascli config wizard
4858
+ Using: Aspera on Cloud at https://_my_org_.ibmaspera.com
4859
+ Path to private RSA key (leave empty to generate):
4768
4860
  option: key_path>
4769
- using existing key:
4770
- /Users/myself/.aspera/ascli/aspera_aoc_key
4861
+ Using existing key:
4862
+ /home/john/.aspera/ascli/my_private_key.pem
4863
+ Please Log in as user laurent.martin.aspera@fr.ibm.com at: https://_my_org_.ibmaspera.com
4864
+ Navigate to: (User) → Account Settings → Profile → Public Key
4865
+ Check or update the value to (including BEGIN/END lines):
4866
+ -----BEGIN PUBLIC KEY-----
4867
+ MIICIjANBg....
4868
+ ....
4869
+ ....kCAwEAAQ==
4870
+ -----END PUBLIC KEY-----
4871
+ Once updated or validated, press [Enter].
4872
+
4771
4873
  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.
4874
+ Preparing preset: aoc_my_org_ibmaspera_com_john_example_com
4875
+ Setting config preset as default for aoc
4778
4876
  You can test with:
4779
4877
  ascli aoc user profile show
4878
+ Saving config file.
4780
4879
  ```
4781
4880
 
4782
4881
  > [!NOTE]
4783
- > In above example, replace `https://_your_instance_.ibmaspera.com` with your actual AoC URL.
4882
+ > In above example, replace `https://_my_org_.ibmaspera.com` with your actual AoC URL.
4784
4883
 
4785
4884
  Optionally, it is possible to create a new organization-specific integration, i.e. client application identification.
4786
4885
  For this, specify the option: `--use-generic-client=no`.
@@ -4788,11 +4887,11 @@ For this, specify the option: `--use-generic-client=no`.
4788
4887
  If you already know the application, and want to limit the detection to it, provide URL and plugin name:
4789
4888
 
4790
4889
  ```shell
4791
- ascli config wizard _your_instance_ aoc
4890
+ ascli config wizard _my_org_ aoc
4792
4891
  ```
4793
4892
 
4794
4893
  > [!NOTE]
4795
- > In above example, replace `_your_instance_` with the first part of your actual AoC URL: `https://_your_instance_.ibmaspera.com`.
4894
+ > In above example, replace `_my_org_` with the first part of your actual AoC URL: `https://_my_org_.ibmaspera.com`.
4796
4895
 
4797
4896
  After successful completion of the wizard, a new configuration preset is created, and set as default for the `aoc` plugin.
4798
4897
  This can be verified with command:
@@ -4801,12 +4900,12 @@ This can be verified with command:
4801
4900
  ascli config preset over
4802
4901
  ```
4803
4902
 
4804
- ### Configuration: Using manual setup
4903
+ ### AoC configuration: Using manual setup
4805
4904
 
4806
4905
  > [!NOTE]
4807
4906
  > If you used the wizard (recommended): skip this section.
4808
4907
 
4809
- #### Configuration details
4908
+ #### AoC manual configuration: Details
4810
4909
 
4811
4910
  Several types of OAuth authentication are supported:
4812
4911
 
@@ -4836,7 +4935,7 @@ Else you can use a specific OAuth API `client_id`, the first step is to declare
4836
4935
 
4837
4936
  Let's start by a registration with web based authentication (auth=web):
4838
4937
 
4839
- - Open a web browser, log to your instance: e.g. `https://_your_instance_.ibmaspera.com/`
4938
+ - Open a web browser, log to your instance: e.g. `https://_my_org_.ibmaspera.com/`
4840
4939
  (use your actual AoC instance URL)
4841
4940
  - Go to Apps &rarr; Admin &rarr; Organization &rarr; Integrations
4842
4941
  - Click **Create New**
@@ -4861,14 +4960,14 @@ Let's create an [Option Preset](#option-preset) called: `my_aoc_org` using `ask`
4861
4960
 
4862
4961
  ```shell
4863
4962
  ascli config preset ask my_aoc_org url client_id client_secret
4864
- option: url> https://_your_instance_.ibmaspera.com/
4963
+ option: url> https://_my_org_.ibmaspera.com/
4865
4964
  option: client_id> my_client_id_here
4866
4965
  option: client_secret> my_client_secret_here
4867
4966
  updated: my_aoc_org
4868
4967
  ```
4869
4968
 
4870
4969
  > [!NOTE]
4871
- > In above example, replace `https://_your_instance_.ibmaspera.com` with your actual AoC URL.
4970
+ > In above example, replace `https://_my_org_.ibmaspera.com` with your actual AoC URL.
4872
4971
 
4873
4972
  (This can also be done in one line using the command `config preset update my_aoc_org --url=...`)
4874
4973
 
@@ -4896,7 +4995,7 @@ This can be done in two manners:
4896
4995
 
4897
4996
  - Graphically
4898
4997
 
4899
- - Open a web browser, log to your instance: `https://_your_instance_.ibmaspera.com/`
4998
+ - Open a web browser, log to your instance: `https://_my_org_.ibmaspera.com/`
4900
4999
  (Use your actual AoC instance URL)
4901
5000
  - Go to Apps &rarr; Admin &rarr; Organization &rarr; Integrations
4902
5001
  - Click on the previously created application
@@ -4939,7 +5038,7 @@ This can be done in two manners:
4939
5038
 
4940
5039
  Open the previously generated public key located here: `$HOME/.aspera/ascli/my_private_key.pub`
4941
5040
 
4942
- - Open a web browser, log to your instance: `https://_your_instance_.ibmaspera.com/`
5041
+ - Open a web browser, log to your instance: `https://_my_org_.ibmaspera.com/`
4943
5042
  (Use your actual AoC instance URL)
4944
5043
  - Click on the user's icon (top right)
4945
5044
  - Select **Account Settings**
@@ -5039,7 +5138,7 @@ ascli aoc files bearer_token_node /
5039
5138
  ```
5040
5139
 
5041
5140
  ```shell
5042
- ascli aoc admin node v4 1234 --secret=_ak_secret_here_ bearer_token_node /
5141
+ ascli aoc admin node v4 _my_node_id_ --secret=_ak_secret_here_ bearer_token_node /
5043
5142
  ```
5044
5143
 
5045
5144
  ### Administration
@@ -5623,7 +5722,7 @@ ascli aoc packages shared_inboxes list
5623
5722
 
5624
5723
  Use fields: `recipients` and/or `bcc_recipients` to provide the list of recipients: **user** or **shared inbox**:
5625
5724
 
5626
- - Provide either IDs as expected by API: `"recipients":[{"type":"dropbox","id":"1234"}]`
5725
+ - Provide either IDs as expected by API: `"recipients":[{"type":"dropbox","id":"_my_shibox_id_"}]`
5627
5726
  - or just names: `"recipients":[{"The Dest"}]`.
5628
5727
 
5629
5728
  ascli will resolve the list of email addresses and dropbox names to the expected type/ID list, based on case-insensitive partial match.
@@ -5693,12 +5792,12 @@ By default, all files in the package are downloaded, i.e. `.` is used as the fil
5693
5792
  Option `package_folder` defines the attribute of folder used as destination sub folder in the `to_folder` path (see description earlier).
5694
5793
  The following syntax is supported
5695
5794
 
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 `.`. |
5795
+ | Syntax | Description |
5796
+ |----------------------|----------------------------------------------------------------------------------------|
5797
+ | `@none:` | No subfolder is created, files are downloaded directly into the specified `to_folder`. |
5798
+ | `<field>` | A subfolder named after the package's specified field is created inside `to_folder`. |
5799
+ | `<field1>+<field2>` | A subfolder named after the combination of two package fields with a `.` is created inside `to_folder`. |
5800
+ | `<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
5801
 
5703
5802
  The special value `seq` for `<field2>` will append an incrementing number to the folder name starting at `1`.
5704
5803
  If `?` is used, then the sequence number is used only if the folder already exists.
@@ -5768,15 +5867,15 @@ ascli aoc package node_info <package ID here> / --format=json --show-secrets=yes
5768
5867
 
5769
5868
  By default, when using `aoc packages list` or `aoc packages receive ALL`, the following `query` is performed:
5770
5869
 
5771
- | Query parameter | Value |
5772
- |----------------------------|---------|
5870
+ | Query parameter | Value |
5871
+ |----------------------------|-----------------------------------------------|
5773
5872
  | `archived` | `false` |
5774
5873
  | `has_content` | `true` |
5775
5874
  | `received` | `true` |
5776
5875
  | `completed` | `true` |
5777
- | `workspace_id` | Set based on current workspace. |
5876
+ | `workspace_id` | Set based on current workspace. |
5778
5877
  | `dropbox_id` | Set according to `dropbox_name`, if provided. |
5779
- | `exclude_dropbox_packages` | `true` unless `dropbox_id` is provided. |
5878
+ | `exclude_dropbox_packages` | `true` unless `dropbox_id` is provided. |
5780
5879
 
5781
5880
  Parameters provided using option `query` override this query.
5782
5881
  To remove a parameter, set it to `null`.
@@ -5866,14 +5965,14 @@ The basic payload to create a permission, i.e. a Shared Folder (last argument at
5866
5965
  `ascli` expects the same payload for creation.
5867
5966
  `ascli` automatically populates some payload fields and provides convenient additional fields that generate native fields:
5868
5967
 
5869
- | Field | Type | Description |
5870
- |-----------------|----------|-------------|
5968
+ | Field | Type | Description |
5969
+ |-----------------|----------|----------------------------------------------------------------------|
5871
5970
  | `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. |
5971
+ | `access_levels` | Native<br/>Optional | List of access levels to set for the shared folder.<br/>Defaults to full access. |
5873
5972
  | `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`. |
5973
+ | `access_type` | Native<br/>Required | Type of access, such as `user`, `group`, or `workspace`.<br/>Can be set with parameter `with`. |
5875
5974
  | `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). |
5975
+ | `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
5976
  | `link_name` | `ascli` | Name of the link file created in the user's home folder for private links. |
5878
5977
  | `as` | `ascli` | Name of the link file created in the user's home folder for admin shared folders. |
5879
5978
 
@@ -5891,7 +5990,7 @@ ascli aoc files permission --workspace=<workspace name> <path to folder> ...
5891
5990
 
5892
5991
  > [!NOTE]
5893
5992
  > 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`
5993
+ > To use an identifier instead, one can use the percent selector, like `%id:_my_ws_id_`.
5895
5994
 
5896
5995
  ##### Admin Shared Folders
5897
5996
 
@@ -5903,7 +6002,9 @@ ascli aoc admin node do <node ID> permission --workspace=<workspace name> <path
5903
6002
 
5904
6003
  > [!TIP]
5905
6004
  > The node is identified by identifier.
5906
- > To use an name instead, one can use the percent selector, like `%name:"my node"`
6005
+ > To use an name instead, one can use the percent selector, like `%name:"my node"`.
6006
+ > The path is identifier by a path, one can specify a file id, with `%id:123`.
6007
+ > If the id is left blank: `%id:`, then if means `*`, i.e. all.
5907
6008
 
5908
6009
  ##### Example: List permissions on a shared folder
5909
6010
 
@@ -5980,7 +6081,7 @@ ascli aoc admin node list --fields=id,name
5980
6081
 
5981
6082
  In the following commands, replace:
5982
6083
 
5983
- - `1234` with the node ID
6084
+ - `_my_node_id_` with the node ID
5984
6085
  - `my ws` with the workspace name
5985
6086
  - `/folder_on_node` with the name of the folder on the node: it can also be a folder deeper than level 1.
5986
6087
 
@@ -5989,7 +6090,7 @@ The node can also be conveniently identified using the **percent selector** inst
5989
6090
  If the shared folder does not exist, then create it:
5990
6091
 
5991
6092
  ```shell
5992
- ascli aoc admin node do 1234 mkdir /folder_on_node
6093
+ ascli aoc admin node do _my_node_id_ mkdir /folder_on_node
5993
6094
  ```
5994
6095
 
5995
6096
  Create the shared folder in workspace `my ws` (set `with` to empty string, or do not specify it).
@@ -5997,7 +6098,7 @@ Optionally use `as` to set the name of the shared folder if different from the f
5997
6098
  For other options, refer to the previous section on shared folders.
5998
6099
 
5999
6100
  ```shell
6000
- ascli aoc admin node do 1234 permission /folder_on_node create @json:'{"with":"","as":"folder_for_users"}' --workspace="my ws"
6101
+ ascli aoc admin node do _my_node_id_ permission /folder_on_node create @json:'{"with":"","as":"folder_for_users"}' --workspace="my ws"
6001
6102
  ```
6002
6103
 
6003
6104
  > [!NOTE]
@@ -6008,20 +6109,44 @@ The `"with"` parameter will perform a lookup, and set fields `access_type` and `
6008
6109
  The native fields `access_type` and `access_id` can also be used, instead of `with`.
6009
6110
 
6010
6111
  ```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"
6112
+ ascli aoc admin node do _my_node_id_ permission /folder_on_node create @json:'{"with":"john@example.com","as":"folder_for_one_user"}' --workspace="my ws"
6012
6113
  ```
6013
6114
 
6014
6115
  ```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"
6116
+ ascli aoc admin node do _my_node_id_ permission /folder_on_node create @json:'{"with":"group 1","as":"folder_for_a_group"}' --workspace="my ws"
6016
6117
  ```
6017
6118
 
6018
6119
  ```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"
6120
+ ascli aoc admin node do _my_node_id_ permission /folder_on_node create @json:'{"with":"my ws","as":"folder_for_all_workspace"}' --workspace="my ws"
6020
6121
  ```
6021
6122
 
6022
6123
  > [!NOTE]
6023
6124
  > In the previous commands, field `as` is optional.
6024
6125
 
6126
+ ##### Example: List all workspace admin shared folder on a node
6127
+
6128
+ First get the workspace identifier:
6129
+
6130
+ ```shell
6131
+ ascli aoc admin workspace list --select=@json:'{"name":"my ws"}' --fields=id
6132
+ ```
6133
+
6134
+ ```text
6135
+ 111111
6136
+ ```
6137
+
6138
+ Then, identify the node id on which to list, see previous section.
6139
+
6140
+ Finally, list all shared folders, as permissions:
6141
+
6142
+ ```shell
6143
+ ascli aoc admin node do _my_node_id_ perm %id: list --query=@json:'{"access_type":"user","access_id":"ASPERA_ACCESS_KEY_ADMIN_WS_111111"}'
6144
+ ```
6145
+
6146
+ > [!NOTE]
6147
+ > Refer to Node API: `GET /permissions` for all `query` options.
6148
+ > The folder identifier is left empty `%id:`, to apply to all folders.
6149
+
6025
6150
  #### Cross Organization transfers
6026
6151
 
6027
6152
  It is possible to transfer files directly between organizations without having to first download locally and then upload...
@@ -6030,7 +6155,7 @@ Although optional, the creation of [Option Preset](#option-preset) is recommende
6030
6155
 
6031
6156
  Procedure to send a file from org1 to org2:
6032
6157
 
6033
- - Get access to Organization 1 and create an [Option Preset](#option-preset): e.g. `org1`, for instance, use the [Wizard](#configuration-using-wizard)
6158
+ - Get access to Organization 1 and create an [Option Preset](#option-preset): e.g. `org1`, for instance, use the [Wizard](#wizard)
6034
6159
  - Check that access works and locate the source file e.g. `mysourcefile`, e.g. using command `files browse`
6035
6160
  - Get access to Organization 2 and create an [Option Preset](#option-preset): e.g. `org2`
6036
6161
  - Check that access works and locate the destination folder `mydestfolder`
@@ -6076,8 +6201,8 @@ admin analytics transfers nodes
6076
6201
  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
6202
  admin analytics transfers users --once-only=yes
6078
6203
  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":"/"}}'
6204
+ admin ats 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":"/"}}'
6205
+ 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
6206
  admin ats access_key delete ak1ibmcloud
6082
6207
  admin ats access_key list --fields=name,id
6083
6208
  admin ats access_key node ak1ibmcloud --secret=my_secret_here browse /
@@ -6170,7 +6295,7 @@ files upload --to-folder=/testsrc test_file.bin
6170
6295
  files upload --to-folder=/testsrc test_file.bin test_file.bin
6171
6296
  files upload --workspace=my_other_workspace --to-folder=my_other_folder test_file.bin --transfer=node --transfer-info=@json:@stdin:
6172
6297
  files v3 info
6173
- gateway --pid-file=pid_aocfxgw @json:'{"url":"https://localhost:12345/aspera/faspex"}' &
6298
+ gateway --pid-file=pid_aoc_faspex_gateway @json:'{"url":"https://localhost:12345/aspera/faspex"}' &
6174
6299
  organization
6175
6300
  organization --format=image --fields=background_image_url --ui=text
6176
6301
  organization --url=my_public_link_recv_from_aoc_user
@@ -6336,8 +6461,8 @@ The parameters provided to ATS for access key creation are the ones of [ATS API]
6336
6461
 
6337
6462
  ```bash
6338
6463
  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":"/"}}'
6464
+ 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":"/"}}'
6465
+ 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
6466
  access_key delete ak2ibmcloud
6342
6467
  access_key delete ak_aws
6343
6468
  access_key entitlement ak2ibmcloud
@@ -6389,6 +6514,7 @@ df
6389
6514
  download my_inside_folder/test_file.bin --to-folder=. --transfer-info=@json:'{"wss":false,"resume":{"iter_max":1}}'
6390
6515
  download my_large_file --to-folder=my_upload_folder --transfer=node --ts.resume_policy=none
6391
6516
  du /
6517
+ health transfer --to-folder=my_upload_folder
6392
6518
  health transfer --to-folder=my_upload_folder --format=nagios
6393
6519
  info
6394
6520
  md5sum my_inside_folder/test_file.bin
@@ -6548,11 +6674,11 @@ Native API parameters can be placed in option `query`.
6548
6674
 
6549
6675
  Special parameters can be placed in option `query` for "gen3" browse:
6550
6676
 
6551
- | Parameter | Description |
6552
- |-------------|-------------|
6553
- | `recursive` | Recursively list files |
6554
- | `max` | Maximum number of files to list |
6555
- | `self` | Offset in the list |
6677
+ | Parameter | Description |
6678
+ |-------------|----------------------------------|
6679
+ | `recursive` | Recursively list files. |
6680
+ | `max` | Maximum number of files to list. |
6681
+ | `self` | Offset in the list. |
6556
6682
 
6557
6683
  Option `node_cache` can be set to `no` to avoid use of folder cache (Redis) and force actual read of file system.
6558
6684
 
@@ -6670,13 +6796,13 @@ By providing the `validator` option, offline transfer validation can be done.
6670
6796
 
6671
6797
  ### Sync
6672
6798
 
6673
- There are three commands related to file synchronisation:
6799
+ There are three commands related to file synchronization in `node`:
6674
6800
 
6675
6801
  | 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. |
6802
+ |-----|-----|-----|-----|-----|-----------------------------------------------|
6803
+ | `sync` | Yes | Yes | Yes | Yes | Perform a local sync, by executing `async` locally. |
6804
+ | `async` | Yes | | | | Uses API `/async`.<br/>Get status on sync operation on server side, like Aspera Console. |
6805
+ | `ssync` | Yes | | | | Uses API `/asyncs`.<br/>It can start a sync operation on the server side, and monitor only those. |
6680
6806
 
6681
6807
  For details on the `sync` action, refer to [IBM Aspera Sync](#ibm-aspera-sync).
6682
6808
 
@@ -6821,17 +6947,17 @@ Bearer tokens can be generated using `ascli` command `bearer_token`: it takes tw
6821
6947
  - The private key used to sign the token.
6822
6948
  - The token information, which is a `Hash` containing the following elements:
6823
6949
 
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) |
6950
+ | Parameter | Default | Type | Description |
6951
+ |----------------------|---------------------------|---------|---------------------------------------|
6952
+ | `_scope` | `user:all` | Special | Either `user:all` or `admin:all` |
6953
+ | `_validity` | 86400 | Special | Validity in seconds from now. |
6954
+ | `user_id` | - | Mandatory | Identifier of user |
6955
+ | `scope` | `node.<access_key>:<_scope>` | Mandatory | API scope<br/>e.g. `node.<access_key>:<node scope>` |
6956
+ | `expires_at` | `now+<_validity>` | Mandatory | Format: `%Y-%m-%dT%H:%M:%SZ`<br/>e.g. `2021-12-31T23:59:59Z` |
6957
+ | `auth_type` | `access_key` | Optional | `access_key`, `node_user` |
6958
+ | `group_ids` | - | Optional | List of group IDs |
6959
+ | `organization_id` | - | Optional | Organization ID |
6960
+ | `watermarking_json_base64` | - | Optional | Watermarking information (not used) |
6835
6961
 
6836
6962
  > [!NOTE]
6837
6963
  > For convenience, `ascli` provides additional parameters `_scope` and `_validity`.
@@ -6969,6 +7095,7 @@ access_key do my_ak_name show %id:1
6969
7095
  access_key do my_ak_name show /test_nd_ak3
6970
7096
  access_key do my_ak_name upload 'faux:///test_nd_ak3?100k' --default-ports=no
6971
7097
  access_key do self permission %id:root_id create @json:'{"access_type":"user","access_id":"666"}'
7098
+ access_key do self permission / delete 1
6972
7099
  access_key do self permission / show 1
6973
7100
  access_key do self show / --fields=id --output=root_id
6974
7101
  access_key list
@@ -7022,10 +7149,15 @@ stream list
7022
7149
  sync admin status /data/local_sync
7023
7150
  sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"name":"SYNC_NAME","reset":true}'
7024
7151
  sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"reset":true}'
7152
+ transfer bandwidth_average
7153
+ transfer cancel nd_xfer_id
7025
7154
  transfer list --once-only=yes
7155
+ transfer list --query=@json:'{"active_only":true,"count":1}' --fields=id --output=nd_xfer_id
7026
7156
  transfer list --query=@json:'{"active_only":true}'
7027
7157
  transfer list --query=@json:'{"reset":true}' --once-only=yes
7158
+ transfer modify nd_xfer_id @json:'{"target_rate_kbps":10000}'
7028
7159
  transfer sessions
7160
+ transfer show nd_xfer_id
7029
7161
  transport
7030
7162
  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
7163
  upload --username=my_ak_name --password=my_ak_secret test_file.bin
@@ -7044,10 +7176,10 @@ The `node` plugin supports Open Telemetry (OTel) for monitoring and tracing.
7044
7176
 
7045
7177
  The command expects the following parameters provided as a `Hash` positional parameter:
7046
7178
 
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. |
7179
+ | Parameter | Type | Default | Description |
7180
+ |-------------|----------|---------|----------------------------------------------|
7181
+ | `url` | `String` | - | URL of the Instana HTTPS backend for OTel. |
7182
+ | `key` | `String` | - | Agent key for the backend. |
7051
7183
  | `interval` | `Float` | 10 | Polling interval in seconds.<br/>`0` for single shot. |
7052
7184
 
7053
7185
  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 +7217,9 @@ IBM Aspera's newer self-managed application.
7085
7217
  | `boot` | Use authentication token copied from browser (experimental) |
7086
7218
 
7087
7219
  > [!TIP]
7088
- > If you have a Faspex 5 public link, provide it, unchanged, through the option `url`
7220
+ > If you have a Faspex 5 public link, provide it, as-is, through the option `url`.
7221
+
7222
+ ### Faspex 5 quick start with wizard
7089
7223
 
7090
7224
  For a quick start, one can use the wizard, which will help to create an [Option Preset](#option-preset):
7091
7225
 
@@ -7093,8 +7227,15 @@ For a quick start, one can use the wizard, which will help to create an [Option
7093
7227
  ascli config wizard
7094
7228
  ```
7095
7229
 
7230
+ Then, answer questions interactively:
7231
+
7096
7232
  ```text
7097
7233
  argument: url> faspex5.example.com
7234
+ ```
7235
+
7236
+ Potentially, multiple applications may be detected, or if only Faspex is detected, it would skip this step:
7237
+
7238
+ ```text
7098
7239
  Multiple applications detected:
7099
7240
  +---------+-------------------------------------------+-------------+
7100
7241
  | product | url | version |
@@ -7103,12 +7244,28 @@ Multiple applications detected:
7103
7244
  | server | ssh://faspex5.example.com:22 | OpenSSH_8.3 |
7104
7245
  +---------+-------------------------------------------+-------------+
7105
7246
  product> faspex5
7247
+ ```
7248
+
7249
+ When Faspex is detected, it would ask for the path to a private key.
7250
+ 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.
7251
+
7252
+ ```test
7106
7253
  Using: Faspex at https://faspex5.example.com/aspera/faspex
7107
7254
  Please provide the path to your private RSA key, or nothing to generate one:
7108
7255
  option: key_path>
7109
7256
  Using existing key:
7110
7257
  /Users/someuser/.aspera/ascli/my_key
7258
+ ```
7259
+
7260
+ Then, the email of the user shall be provided:
7261
+
7262
+ ```text
7111
7263
  option: username> someuser@example.com
7264
+ ```
7265
+
7266
+ The administrator of Faspex shall provide you with a `client_id`, as specified below.
7267
+
7268
+ ```text
7112
7269
  Ask the ascli client ID and secret to your Administrator.
7113
7270
  Admin should login to: https://faspex5.example.com/aspera/faspex
7114
7271
  Navigate to: :: → Admin → Configurations → API clients
@@ -7132,10 +7289,16 @@ Saving configuration file.
7132
7289
  ```
7133
7290
 
7134
7291
  > [!NOTE]
7135
- > Paste the entire public key, including the BEGIN and END lines, into the user profile.
7292
+ > Paste the entire public key, including the BEGIN and END lines, into the user's profile.
7136
7293
 
7137
7294
  For more information on the JWT method, refer to the section below.
7138
7295
 
7296
+ If you have generated a private key with the wizard and lost the public key, you can retrieve the public key like this:
7297
+
7298
+ ```shell
7299
+ ascli faspex5 --show-config --show-secrets=yes --fields=private_key | ascli conf pubkey @stdin: --show-secrets=yes
7300
+ ```
7301
+
7139
7302
  ### Faspex 5 JWT authentication
7140
7303
 
7141
7304
  This is the general purpose and **recommended** method to use.
@@ -7156,15 +7319,15 @@ Activation is in two steps:
7156
7319
 
7157
7320
  - The user will authenticate with a private key and set the public key in his Faspex 5 profile.
7158
7321
 
7159
- > [!TIP]
7160
- > If you don’t have a private key, see [Private Key](#private-key) to generate one.
7161
-
7162
7322
  This operation is done by each user using the CLI.
7163
7323
 
7164
7324
  - As a user, click the user logo located to the left of the app switcher in the top-right corner.
7165
7325
  - Select `Account Settings`.
7166
7326
  - 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
7327
 
7328
+ > [!TIP]
7329
+ > If you don’t have a private key, see [Private Key](#private-key) to generate one.
7330
+
7168
7331
  Then use these options:
7169
7332
 
7170
7333
  ```text
@@ -7210,6 +7373,16 @@ The user will use the following options:
7210
7373
  --redirect-uri=https://127.0.0.1:8888
7211
7374
  ```
7212
7375
 
7376
+ ### Faspex 5 public link authentication
7377
+
7378
+ If all you have is a public link received by email or other, you can still do authorized actins with it.
7379
+
7380
+ For example, for a public link to post a package:
7381
+
7382
+ ```shell
7383
+ ascli faspex5 packages send --url='https://faspex5.example.com/?context=_some_long_string_here_'
7384
+ ```
7385
+
7213
7386
  ### Faspex 5 bootstrap authentication
7214
7387
 
7215
7388
  For `boot` method: (will be removed in future)
@@ -7269,7 +7442,7 @@ admin smtp test my_email_external
7269
7442
  admin workgroups list
7270
7443
  bearer_token
7271
7444
  gateway --pid-file=pid_f5_fxgw @json:'{"url":"https://localhost:12346/aspera/faspex"}' &
7272
- health
7445
+ health --url=https://faspex5.example.com/path
7273
7446
  invitation list
7274
7447
  invitations create @json:'{"email_address":"aspera.user1+u@gmail.com"}'
7275
7448
  packages browse f5_pack_id --query=@json:'{"recursive":true}'
@@ -7300,6 +7473,7 @@ shared list
7300
7473
  shared_folders browse %name:my_shared_folder_name
7301
7474
  shared_folders list
7302
7475
  user account
7476
+ user account --query.expand=true
7303
7477
  user profile modify @json:'{"preference":{"connect_disabled":false}}'
7304
7478
  user profile show
7305
7479
  version
@@ -7319,7 +7493,7 @@ By default, package operations (`send`, `receive`, `list`) are performed on the
7319
7493
  To select another inbox, use option `box` with one of the following values:
7320
7494
 
7321
7495
  | `box` | Comment |
7322
- |---------------------|---------|
7496
+ |---------------------|----------------------------------------------------------------------|
7323
7497
  | `inbox` | Default |
7324
7498
  | `inbox_history` | |
7325
7499
  | `inbox_all` | |
@@ -7329,8 +7503,8 @@ To select another inbox, use option `box` with one of the following values:
7329
7503
  | `pending` | |
7330
7504
  | `pending_history` | |
7331
7505
  | `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` |
7506
+ | `ALL` | All inboxes of all users. **admin only**. |
7507
+ | Open value | If `group_type` is `shared_inboxes`: name of a shared inbox (default)<br/>If `group_type` is `workgroups`: workgroup name |
7334
7508
 
7335
7509
  > [!NOTE]
7336
7510
  > In case the name of the `box` is an open value, use option `group_type` set to either `shared_inboxes` or `workgroups`.
@@ -7403,14 +7577,14 @@ Option `box` can be used to list packages from a specific box (see [Inbox Select
7403
7577
 
7404
7578
  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
7579
 
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) |
7580
+ | Parameter | Type | Description |
7581
+ |---------|---------|-----------------------------------------------------------------------|
7582
+ | `offset`| Native | Managed by `ascli`: Offset of first package. Default: 0 |
7583
+ | `limit` | Native | Managed by `ascli`: # of packages per API call. Default: 100 |
7584
+ | `q` | Native | General search string<br/>case-insensitive, matches if value is contained in several fields |
7585
+ | ... | Native | Other native parameters are supported (Refer to API documentation) |
7586
+ | `max` | Special | Maximum number of items to retrieve (stop pages when the maximum is passed) |
7587
+ | `pmax` | Special | Maximum number of pages to request (stop pages when the maximum is passed) |
7414
7588
 
7415
7589
  A **Command Parameter** in last position, of type `Proc`, can be used to filter the list of packages.
7416
7590
  This advantage of this method is that the expression can be any test, even complex, as it is Ruby code.
@@ -7438,15 +7612,15 @@ By default, paging is used.
7438
7612
 
7439
7613
  Option `query` is available with parameters supported by the API and `ascli` :
7440
7614
 
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` |
7615
+ | Parameter | Evaluation | Default | Description |
7616
+ |-----------|--------------|-------------------| ----------------------------------------|
7617
+ | `paging` | `ascli` | `true` | Use paging API. |
7618
+ | `recursive`| `ascli` | `false` | List inside folders. |
7619
+ | `max` | `ascli` | - | Maximum number of items. |
7620
+ | `filter` | API | `{"basenames":[]}`| Refer to API doc. |
7621
+ | `offset` | API (legacy) | `0` | Index of first item. |
7622
+ | `limit` | API (legacy) | `500` | Number of items in one API call result. |
7623
+ | `per_page`| API (paging) | `500` | Number of items in one API call result. |
7450
7624
 
7451
7625
  ### Faspex 5: Content of a received Package
7452
7626
 
@@ -7743,8 +7917,8 @@ A user can receive a package because the recipient is:
7743
7917
 
7744
7918
  As inboxes may be large, it is possible to use the following query parameters:
7745
7919
 
7746
- | Parameter | Evaluation | Description |
7747
- |--------------|------------|-------------|
7920
+ | Parameter | Evaluation | Description |
7921
+ |--------------|------------|----------------------------------------------------------------------|
7748
7922
  | `count` | API | Number of items in one API call result (default=0, equivalent to 10) |
7749
7923
  | `page` | API | ID of page in call (default=0) |
7750
7924
  | `startIndex` | API | Index of item to start (default=0) |
@@ -7931,17 +8105,17 @@ The payload for creation is the same as for the API, parameters are provided as
7931
8105
 
7932
8106
  Example: Create a Node: Attributes are like API:
7933
8107
 
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` |
8108
+ | Attribute | Required | Default |
8109
+ |--------------|----------|---------|
8110
+ | `name` | Yes | |
8111
+ | `host` | Yes | |
8112
+ | `api_username` | Yes | |
8113
+ | `api_password` | Yes | |
8114
+ | `port` | | `9092` |
8115
+ | `ssl` | | `true` |
8116
+ | `verify_ssl` | | `false` |
8117
+ | `timeout` | | `30s` |
8118
+ | `open_timeout` | | `10s` |
7945
8119
 
7946
8120
  Example: Create a share and add a user to it.
7947
8121
 
@@ -8051,12 +8225,12 @@ If you don't have credentials but have access to the IBM Cloud console, then use
8051
8225
 
8052
8226
  If you have those parameters already, then following options shall be provided:
8053
8227
 
8054
- | Option | Description |
8055
- |------------|-------------|
8056
- | `bucket` | Bucket name |
8228
+ | Option | Description |
8229
+ |------------|---------------------------------------------------|
8230
+ | `bucket` | Bucket name |
8057
8231
  | `endpoint` | Storage endpoint URL<br/>e.g. `https://s3.hkg02.cloud-object-storage.appdomain.cloud` |
8058
- | `apikey` | API Key |
8059
- | `crn` | Resource instance ID |
8232
+ | `apikey` | API Key |
8233
+ | `crn` | Resource instance ID |
8060
8234
 
8061
8235
  For example, let us create a default configuration:
8062
8236
 
@@ -8120,7 +8294,7 @@ The field `apikey` is for option `apikey`
8120
8294
  The required options for this method are:
8121
8295
 
8122
8296
  | Option | Description |
8123
- |-----------------------|-------------|
8297
+ |-----------------------|------------------------------------------------|
8124
8298
  | `bucket` | Bucket name |
8125
8299
  | `region` | Bucket region<br/>e.g. `eu-de` |
8126
8300
  | `service_credentials` | JSON information saved from IBM Cloud console. |
@@ -8561,8 +8735,8 @@ An interface for the `async` utility is provided in the following plugins:
8561
8735
  The `sync` command, available in above plugins, performs the following actions:
8562
8736
 
8563
8737
  - 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
8738
  - Get local Sync session information accessing directly the Async snap database.
8739
+ - Get local Sync session information using the `asyncadmin` command, if available.
8566
8740
 
8567
8741
  One advantage of using `ascli` over the `async` command line is the possibility to use a configuration file, using standard options of `ascli`.
8568
8742
  Moreover, `ascli` supports sync with application requiring token-based authorization.
@@ -8575,7 +8749,7 @@ Some `sync` parameters are filled by the related plugin using transfer spec para
8575
8749
 
8576
8750
  ### Starting a sync session
8577
8751
 
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).
8752
+ 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
8753
  The path on the other side is specified using option: `to_folder`.
8580
8754
 
8581
8755
  | Direction<br/>(parameter) | Path<br/>(parameter) | `to_folder`<br/>(option) |
@@ -8597,6 +8771,137 @@ Documentation on Async Node API can be found on [IBM Developer Portal](https://d
8597
8771
 
8598
8772
  Parameters `local.path` and `remote.path` are not allowed since they are provided on command line.
8599
8773
 
8774
+ | Field | Type | Description |
8775
+ | ---------------------------------------- | ------- | -------------------------------------------------------------------------------- |
8776
+ | ascp_dir | string | Directory containing ascp executable to use. |
8777
+ | assume_no_mods | boolean | Assume that the directory structure has not been modified.<br/>(`--assume-no-mods={boolean}`) |
8778
+ | checksum | string | Use the specified checksum type. Default is none on cloud storage.<br/>Allowed values: `sha1`, `md5`, `sha1_sparse`, `md5_sparse`, `none` |
8779
+ | clean_excluded | boolean | Removes any existing entries in the snapshot database for excluded paths |
8780
+ | cookie | string | User-defined identification string. |
8781
+ | 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}`) |
8782
+ | 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}`) |
8783
+ | create_dir | boolean | Create the source directory, target directory, or both, if they do not exist. |
8784
+ | db_cache_size | integer | Specify DB cache size. |
8785
+ | db_journal_off | boolean | Turn off DB journal. |
8786
+ | db_sync_on | boolean | Enable synchronous write in DB. |
8787
+ | dedup | string | Take the specified action when async detects duplicate files on the source.<br/>Allowed values: `copy`, `inode`, `hardlink`, `none` |
8788
+ | delete_before | boolean | Schedule deletes before transfers. |
8789
+ | delete_delay | boolean | Delay actual deletes until the end of the synchronization. |
8790
+ | direction | string | The direction of replication relative to the local.<br/>Allowed values: `bidi`, `pull`, `push` |
8791
+ | exclude_dirs_older_than | object | Don't scan directories with a recursive modified time older than absolute or async start time - relative_seconds |
8792
+ | exclude_dirs_older_than.absolute | string | UTC timestamp. Empty value for disabled. |
8793
+ | exclude_dirs_older_than.relative_seconds | integer | Relative to async start time. `-1` for disabled. |
8794
+ | 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 |
8795
+ | ignore_delete | boolean | Do not copy removals to the peer. |
8796
+ | ignore_mode | boolean | Source files that have had their mode changed after the initial. transfer will not update the destination file mode. |
8797
+ | 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 |
8798
+ | local | object | &nbsp; |
8799
+ | local.pass | string | Authenticate the local async with the specified password. |
8800
+ | local.path | string | The directory to be synchronized on the local host.<br/>(`--local-dir={string}`) |
8801
+ | local_apply_docroot | boolean | Prepend the docroot to the directory on the local host.<br/>(`--apply-local-docroot={boolean}`) |
8802
+ | local_checksum_threads | integer | Maximum number of threads to do checksum on the local host. Value must be between 1 and 99. |
8803
+ | 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}`) |
8804
+ | 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) |
8805
+ | local_force_stat | boolean | Forces the local async to retrieve file information even when no changes are detected by the scanner or monitor. |
8806
+ | local_fs_threads | integer | Maximum number of threads to do file system operations on the local host. Value must be between 1 and 99. |
8807
+ | local_keep_dir | string | Move deleted files into the specified directory on the local host. |
8808
+ | local_mount_signature | string | Verify that the file system is mounted by the existence of this file on the local host. |
8809
+ | local_move_cache_timeout_seconds | integer | Delay in seconds before aborting moving a file from local cache to final destination. `-1` for disabled. |
8810
+ | local_preserve_acls | string | Preserve access control lists on the local host.<br/>Allowed values: `native`, `metafile`, `none` |
8811
+ | local_preserve_xattrs | string | Preserve extended attributes on the local.<br/>Allowed values: `native`, `metafile`, `none` |
8812
+ | local_scan_interval_milliseconds | integer | Enable periodic scans on the local host during a continuous sync. `-1` for disabled |
8813
+ | local_scan_threads | integer | Number of directory scanning threads on the local host. Value must be between 1 and 99 |
8814
+ | local_stat_cache_size | integer | Set stat cache size on the local host. 0 for disabled. |
8815
+ | log | object | &nbsp; |
8816
+ | log.level | &nbsp; | Use the specified log level.<br/>Allowed values: `log`, `dbg1`, `dbg2` |
8817
+ | log.local_dir | string | Use the specified logging directory on the local host.<br/>(`--alt-logdir={string}`) |
8818
+ | log.remote_dir | string | Use the specified logging directory on the remote host. |
8819
+ | manifest_path | string | A directory path where ascp will create manifest TEXT files (passed to ascp as --file-manifest-path) |
8820
+ | 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`) |
8821
+ | mode | string | Specify whether async runs continuously or not. In one_time mode, async stops after the first full synchronization.<br/>Allowed values: `one_time`, `continuous`<br/>(special:`--continuous={enum}`) |
8822
+ | 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. |
8823
+ | name | string | Name of the synchronization pair.<br/>(`--name={string}`) |
8824
+ | no_log | string | Suppress log messages for ITEM. The only currently supported ITEM is 'stats', which suppresses both STATS and PROG log messages. |
8825
+ | no_preserve_root_attrs | boolean | Disable the preservation of attributes on the Sync root. |
8826
+ | no_scan | boolean | Skip initial scanning. |
8827
+ | notifications_sharing_retry_max | integer | Retry processing filesystem notifications up to the specified maximum number after a sharing violation. |
8828
+ | 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` |
8829
+ | pending_max | integer | Allow the maximum number of files that are pending transfer to be no more than the specified number. |
8830
+ | preserve_access_time | boolean | Preserve file access time from the source to the destination. |
8831
+ | preserve_creation_time | boolean | Preserve file creation time from the source to the destination. |
8832
+ | preserve_gid | boolean | Preserve the file owner's GID. |
8833
+ | preserve_modification_time | boolean | Preserve file modification time from the source to the destination. |
8834
+ | preserve_object_lock_legal_hold | boolean | Preserve object lock legal hold status from the source to the destination. |
8835
+ | preserve_object_lock_retention | boolean | Preserve object lock retention from the source to the destination. |
8836
+ | preserve_object_metadata | boolean | Preserve object metadata from the source to the destination. |
8837
+ | preserve_uid | boolean | Preserve the file owner's UID. |
8838
+ | quiet | boolean | Disable progress display. |
8839
+ | remote | object | &nbsp; |
8840
+ | remote.connect_mode | &nbsp; | Define how to connect to the remote.<br/>Allowed values: `ssh`, `ws` |
8841
+ | remote.fingerprint | string | Check it against server SSH host key fingerprint. |
8842
+ | remote.host | string | Use the specified host name or address of the remote host. |
8843
+ | remote.pass | string | Authenticate the transfer with the specified password. |
8844
+ | remote.path | string | Synchronize the specified directory on the remote host. |
8845
+ | remote.port | integer | Use the specified TCP port for SSH. Used when connect_mode is `ssh` |
8846
+ | remote.private_key_paths | array | Authenticate with the specified SSH private key file. |
8847
+ | remote.proxy | object | Specify the address of the Aspera high-speed proxy server. |
8848
+ | remote.proxy.host | string | Use the specified host name or address of the proxy. |
8849
+ | remote.proxy.pass | string | Authenticate to the proxy with the specified password. |
8850
+ | remote.proxy.port | integer | Use the specified port, default is 9091 for dnat, 9092. for dnats |
8851
+ | remote.proxy.protocol | &nbsp; | The protocol to be used.<br/>Allowed values: `none`, `dnat`, `dnats` |
8852
+ | remote.proxy.user | string | Authenticate to the proxy with the specified username. |
8853
+ | remote.token | string | Token string passed to server's authentication service. |
8854
+ | remote.token_node_user | string | Node API user identity associated with the token. Required for node user bearer tokens |
8855
+ | remote.user | string | Authenticate the transfer with the specified username. |
8856
+ | remote.ws_port | integer | Use the specified port for Websocket. Used when connect_mode is `ws`. |
8857
+ | remote_checksum_threads | integer | Maximum number of threads to do checksum on the remote host. Value must be between 1 and 99 |
8858
+ | 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. |
8859
+ | 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). |
8860
+ | remote_force_stat | boolean | Forces the remote async to retrieve file information even when no changes are detected by the scanner or monitor. |
8861
+ | remote_fs_threads | integer | Maximum number of threads to do file system operations on the remote host. Value must be between 1 and 99. |
8862
+ | remote_keep_dir | string | Move deleted files into the specified directory on the remote host. |
8863
+ | remote_mount_signature | string | Verify that the file system is mounted by the existence of this file on the remote host. |
8864
+ | remote_move_cache_timeout_seconds | integer | Delay in seconds before aborting moving a file from remote cache to final destination. `-1` for disabled. |
8865
+ | 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` |
8866
+ | 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` |
8867
+ | remote_scan_interval_milliseconds | integer | Enable periodic scans on the remote host. `-1` for disabled. |
8868
+ | remote_scan_threads | integer | Number of directory scanning threads on the remote host. Value must be between 1 and 99. |
8869
+ | remote_stat_cache_size | integer | Set stat cache size on the remote host. 0 for disabled. |
8870
+ | remove_after_transfer | boolean | Remove source files after they are successfully synchronized. |
8871
+ | reset | boolean | Clear the snapshot database and rescan the synchronized directories and files to create a fresh snapshot |
8872
+ | 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. |
8873
+ | resume.enabled | boolean | Enable the possibility of resuming individual file transfers between async sessions. |
8874
+ | 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. |
8875
+ | resume.min_size | integer | This field specifies the minimum size of files that will be allowed to resume. |
8876
+ | resume_scan | boolean | Resume the scan from where the previous execution left off. |
8877
+ | scan_dir_rename | boolean | Enable the detection of renamed directories and files compared. to the previous scan, based on matching inodes |
8878
+ | scan_file_rename | boolean | Enable the detection of renamed files compared to the previous scan, based on matching inodes. |
8879
+ | 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` |
8880
+ | sharing_retry_max | integer | Retry synchronizations up to the specified maximum number after a sharing violation. |
8881
+ | store_metadata_records | boolean | Store the acls or xattrs in the snapshot database. |
8882
+ | 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}`) |
8883
+ | tags | object | User-defined metadata tags. |
8884
+ | transfer_threads | array | Use the specified number of dedicated transfer threads to process files smaller or equal to the specified size |
8885
+ | transport | object | &nbsp; |
8886
+ | transport.cipher | &nbsp; | Specify encryption algorithm for file data.<br/>Allowed values: `none`, `aes128`, `aes192`, `aes256`, `aes128cfb`, `aes192cfb`, `aes256cfb`, `aes128gcm`, `aes192gcm`, `aes256gcm`<br/>(`--cipher={enum}`) |
8887
+ | transport.compression | &nbsp; | Compress a file before transfer using the specified MODE.<br/>Allowed values: `none`, `zlib`<br/>(`--compression={enum}`) |
8888
+ | transport.datagram_size | integer | Specify the datagram size (MTU) for FASP. By default it uses the detected path MTU. |
8889
+ | transport.min_rate | integer | Attempt to transfer no slower than the specified rate (in bps). |
8890
+ | transport.rate_policy | &nbsp; | Defines how `ascp` will manage the bandwidth.<br/>Allowed values: `fair`, `fixed`, `high`, `low` |
8891
+ | transport.raw_options | array | Pass arbitrary arguments to `ascp`. |
8892
+ | transport.read_block_size | integer | Use the specified block size (in bytes) for reading. Default is determined by `aspera.conf`. |
8893
+ | transport.rexmsg_size | integer | Use the specified size (in bytes) for a retransmission request. Default is determined by `aspera.conf`. |
8894
+ | transport.target_rate | integer | Transfer no faster than the specified rate (in bps). |
8895
+ | transport.udp_port | integer | Use the specified UDP port for FASP data transfer. |
8896
+ | transport.write_block_size | integer | Use the specified block size (in bytes) for writing. Default is determined by `aspera.conf`. |
8897
+ | watchd | object | When connection is configured, `asperawatchd` is used to detect the changes on the source directory.<br/>(special:`--watchd={object}`) |
8898
+ | watchd.datastore | &nbsp; | Specify the type of datastore, `none` for disabled.<br/>Allowed values: `none`, `redis`, `scalekv` |
8899
+ | watchd.domain | string | Specify the domain. Default is the current username. |
8900
+ | watchd.host | string | Use the specified host name or address to connect to the datastore. |
8901
+ | watchd.port | integer | Use the specified port. |
8902
+ | write_gid | string | Try to write files as the specified group. |
8903
+ | write_uid | string | Try to write files as the specified user. |
8904
+
8600
8905
  #### `sync_info`: `args` format
8601
8906
 
8602
8907
  This is the **legacy** syntax.
@@ -8608,17 +8913,24 @@ This is the mode selection if there are either keys `sessions` or `instance` in
8608
8913
 
8609
8914
  Parameters `local_dir` and `remote_dir` are not allowed since they are provided on command line.
8610
8915
 
8611
- ### Sync management and monitoring
8916
+ ### Sync management and monitoring: `admin`
8612
8917
 
8613
- The `admin` command provides several sub commands:
8918
+ The `admin` command provides several sub commands that access directly the Async snap database (`snap.db`).
8919
+ (With the exception of `status` which uses the utility `asyncadmin`, available only on server products.)
8614
8920
 
8615
- - `status`: Uses the utility `asyncadmin`, available only on server products.
8616
- - Other commands access directly the Async snap database (`snap.db`).
8921
+ To use the `admin` command, the gem `sqlite3` shall be installed:
8617
8922
 
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`.
8923
+ ```shell
8924
+ gem install sqlite3
8925
+ ```
8926
+
8927
+ In order to use the `admin` commands, the user must provide the path to the database folder:
8928
+
8929
+ - i.e. a folder containing a subfolder named `.private-asp`.
8930
+ - By default it is the local synchronized folder.
8931
+ - If an alternate folder is specified for the database, then specify it.
8932
+ - If this folder contains only one session information (i.e. a folder containing the `snap.db` file), it will be used by default.
8933
+ - Else, the user must specify a session name in the optional `Hash`, in the `name` key.
8622
8934
 
8623
8935
  ## Hot folder
8624
8936
 
@@ -8757,17 +9069,17 @@ This is done with option `smtp`.
8757
9069
  The `smtp` option is a `Hash` (extended value) with the following fields:
8758
9070
 
8759
9071
  <!-- 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 |
9072
+ | Field | Default | Example | Description |
9073
+ |--------------|--------------------|------------------|----------------------------------|
9074
+ | `server` | - | `smtp.gmail.com` | SMTP server address |
9075
+ | `tls` | `true` | `true` | Enable `STARTTLS` (port 587) |
9076
+ | `ssl` | `false` | `false` | Enable `TLS` (port 465) |
9077
+ | `port` | `587`<br/>`465`<br/>`25` | `587` | Port for service |
9078
+ | `domain` | _domain of_ `server` | gmail.com | Email domain of user |
9079
+ | `username` | - | john@example.com | User to authenticate on SMTP server<br/>Leave empty for open auth. |
9080
+ | `password` | - | my_password_here | Password for above username |
9081
+ | `from_email` | username if defined|johnny@example.com| Address used if receiver replies |
9082
+ | `from_name` | same as email | John Wayne | Display name of sender |
8771
9083
  <!-- markdownlint-enable MD034 -->
8772
9084
 
8773
9085
  ### Example of configuration
@@ -8873,22 +9185,23 @@ During execution, it generates all low level events, one per line, in JSON forma
8873
9185
 
8874
9186
  Top level parameters supported by `asession`:
8875
9187
 
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` |
9188
+ | Parameter | Description |
9189
+ |--------------------|------------------------------------------------------------------------|
9190
+ | `spec` | The [**transfer-spec**](#transfer-specification) |
9191
+ | `agent` | Same parameters as transfer-info for agent `direct` |
9192
+ | `loglevel` | Log level of `asession` |
9193
+ | `file_list_folder` | The folder used to store (for garbage collection) generated file lists.<br/>Default: `[system tmp folder]/[username]_asession_filelists` |
8882
9194
 
8883
9195
  ### Comparison of interfaces
8884
9196
 
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` |
9197
+ | Feature/Tool | Transfer Daemon | FASPManager | `ascp` | `asession` |
9198
+ |------------|-------------|-------------|-------------|-------------|
9199
+ | status | Supported | Deprecated | Supported | Deprecated |
9200
+ | language integration | Many | C/C++<br/>C#/.net<br/>Go<br/>Python<br/>java<br/> | Any | Any |
9201
+ | required additional components to `ascp` | Daemon | Library<br/>(+headers) | - | Ruby<br/>Aspera gem |
9202
+ | startup | Daemon | API | Command line arguments | JSON on stdin<br/>(standard APIs:<br/>JSON.generate<br/>Process.spawn) |
9203
+ | events | Poll | Callback | Possibility to open management port<br/>and proprietary text syntax | JSON on stdout |
9204
+ | platforms | Like `ascp` and `transferd` | Like `ascp` and lib (if compiled) | Any with `ascp` | Any with Ruby and `ascp` |
8892
9205
 
8893
9206
  ### Simple session
8894
9207
 
@@ -9024,24 +9337,20 @@ This also requires Ruby header files.
9024
9337
  If Ruby was installed as a Linux Packages, then also install Ruby development package:
9025
9338
  `ruby-dev` or `ruby-devel`, depending on distribution.
9026
9339
 
9027
- ### ED25519 key not supported
9028
-
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.
9340
+ ### Private key type: `ed25519` not supported by default
9031
9341
 
9032
- To re-activate, set env var `ASCLI_ENABLE_ED25519` to `true`.
9342
+ There are a few aspects concerning ED25519 keys.
9033
9343
 
9034
- Without this deactivation, if such key was present in user's `.ssh` folder then the following error was generated:
9344
+ 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.
9345
+ Refer to [this](https://github.com/net-ssh/net-ssh/issues/565).
9346
+ If you want to use `ed25519` keys, then install the required gems:
9035
9347
 
9036
- ```text
9037
- OpenSSH keys only supported if ED25519 is available
9348
+ ```shell
9349
+ gem install ed25519 bcrypt_pbkdf
9038
9350
  ```
9039
9351
 
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`.
9352
+ In addition, if **JRuby** is used, host keys of type: `ecdsa-sha2` and `ecdh-sha2` are also deactivated by default.
9353
+ To activate, set env var `ASCLI_ENABLE_ECDSHA2` to `true`.
9045
9354
 
9046
9355
  ### JRuby: `net-ssh`: Unsupported algorithm
9047
9356
 
@@ -9068,11 +9377,11 @@ To deactivate this error, enable option `IGNORE_UNEXPECTED_EOF` for `ssl_options
9068
9377
  --http-options=@json:'{"ssl_options":["IGNORE_UNEXPECTED_EOF"]}'
9069
9378
  ```
9070
9379
 
9071
- ### Error: `ascp`: /lib64/libc.so.6: version `GLIBC_2.28' not found
9380
+ ### Error: `ascp`: `/lib64/libc.so.6`: version `GLIBC_2.28` not found
9072
9381
 
9073
9382
  This happens on Linux x86 if you try to install `transferd` on a Linux version too old to support a newer `ascp` executable.
9074
9383
 
9075
- Workaround: Install an older version:
9384
+ Workaround: Install an older version of `transferd`:
9076
9385
 
9077
9386
  ```shell
9078
9387
  ascli config transferd install 1.1.2