aspera-cli 4.24.2 → 4.25.0.pre2

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 (73) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +1067 -758
  4. data/CONTRIBUTING.md +93 -120
  5. data/README.md +817 -510
  6. data/lib/aspera/agent/direct.rb +14 -12
  7. data/lib/aspera/agent/transferd.rb +4 -4
  8. data/lib/aspera/api/aoc.rb +71 -43
  9. data/lib/aspera/api/cos_node.rb +3 -2
  10. data/lib/aspera/api/faspex.rb +6 -5
  11. data/lib/aspera/api/node.rb +10 -12
  12. data/lib/aspera/ascmd.rb +1 -2
  13. data/lib/aspera/ascp/installation.rb +55 -41
  14. data/lib/aspera/ascp/management.rb +9 -5
  15. data/lib/aspera/assert.rb +28 -6
  16. data/lib/aspera/cli/error.rb +4 -2
  17. data/lib/aspera/cli/extended_value.rb +94 -62
  18. data/lib/aspera/cli/formatter.rb +55 -22
  19. data/lib/aspera/cli/main.rb +21 -14
  20. data/lib/aspera/cli/manager.rb +349 -248
  21. data/lib/aspera/cli/plugins/alee.rb +3 -3
  22. data/lib/aspera/cli/plugins/aoc.rb +94 -51
  23. data/lib/aspera/cli/plugins/base.rb +62 -49
  24. data/lib/aspera/cli/plugins/config.rb +85 -96
  25. data/lib/aspera/cli/plugins/console.rb +15 -9
  26. data/lib/aspera/cli/plugins/cos.rb +1 -1
  27. data/lib/aspera/cli/plugins/faspex.rb +34 -27
  28. data/lib/aspera/cli/plugins/faspex5.rb +47 -44
  29. data/lib/aspera/cli/plugins/faspio.rb +7 -6
  30. data/lib/aspera/cli/plugins/httpgw.rb +3 -2
  31. data/lib/aspera/cli/plugins/node.rb +132 -120
  32. data/lib/aspera/cli/plugins/oauth.rb +1 -1
  33. data/lib/aspera/cli/plugins/orchestrator.rb +116 -33
  34. data/lib/aspera/cli/plugins/preview.rb +26 -46
  35. data/lib/aspera/cli/plugins/server.rb +9 -10
  36. data/lib/aspera/cli/plugins/shares.rb +77 -43
  37. data/lib/aspera/cli/sync_actions.rb +49 -38
  38. data/lib/aspera/cli/transfer_agent.rb +16 -34
  39. data/lib/aspera/cli/version.rb +1 -1
  40. data/lib/aspera/cli/wizard.rb +8 -5
  41. data/lib/aspera/command_line_builder.rb +20 -17
  42. data/lib/aspera/coverage.rb +6 -2
  43. data/lib/aspera/environment.rb +71 -84
  44. data/lib/aspera/faspex_gw.rb +1 -1
  45. data/lib/aspera/faspex_postproc.rb +1 -1
  46. data/lib/aspera/keychain/factory.rb +1 -2
  47. data/lib/aspera/keychain/macos_security.rb +2 -2
  48. data/lib/aspera/log.rb +2 -1
  49. data/lib/aspera/markdown.rb +31 -0
  50. data/lib/aspera/nagios.rb +6 -5
  51. data/lib/aspera/oauth/base.rb +17 -27
  52. data/lib/aspera/oauth/factory.rb +1 -1
  53. data/lib/aspera/oauth/url_json.rb +2 -1
  54. data/lib/aspera/preview/file_types.rb +23 -37
  55. data/lib/aspera/preview/terminal.rb +95 -29
  56. data/lib/aspera/preview/utils.rb +6 -5
  57. data/lib/aspera/products/connect.rb +3 -3
  58. data/lib/aspera/rest.rb +51 -39
  59. data/lib/aspera/rest_error_analyzer.rb +4 -4
  60. data/lib/aspera/ssh.rb +5 -2
  61. data/lib/aspera/ssl.rb +41 -0
  62. data/lib/aspera/sync/conf.schema.yaml +182 -34
  63. data/lib/aspera/sync/database.rb +2 -1
  64. data/lib/aspera/sync/operations.rb +128 -72
  65. data/lib/aspera/transfer/parameters.rb +3 -4
  66. data/lib/aspera/transfer/spec.rb +2 -3
  67. data/lib/aspera/transfer/spec.schema.yaml +49 -19
  68. data/lib/aspera/transfer/spec_doc.rb +14 -14
  69. data/lib/aspera/uri_reader.rb +1 -1
  70. data/lib/transferd_pb.rb +2 -2
  71. data.tar.gz.sig +0 -0
  72. metadata +33 -6
  73. metadata.gz.sig +0 -0
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.2"
5
+ subtitle: "ascli 4.25.0.beta2"
6
6
  author: "Laurent MARTIN"
7
7
  PANDOC_META_END
8
8
  -->
@@ -22,7 +22,7 @@ PANDOC_META_END
22
22
 
23
23
  Hootput lives in the terminal, watching over every command with wide, unblinking eyes.
24
24
  Known for concise output and sharp insight, this owl thrives where others get lost in the dark.
25
- It doesn’t chatter; it hootsclear, precise, and always on time.
25
+ It doesn’t chatter; it hoots-clear, precise, and always on time.
26
26
 
27
27
  Like `ascli`, Hootput is built for action: launching transfers, parsing options, and navigating APIs without hesitation.
28
28
  Light on feathers but heavy on wisdom, it turns complexity into simple one-liners.
@@ -30,7 +30,7 @@ When you hear Hootput’s call, you know your data is already in flight.
30
30
 
31
31
  ---
32
32
 
33
- "Hey, I’m `ascli` your data’s personal courier.
33
+ "Hey, I’m `ascli` - your data’s personal courier.
34
34
  I don’t do flashy dashboards; I’m happiest in a terminal window.
35
35
  Hand me a command, and I’ll zip your files across the network faster than you thought possible.
36
36
 
@@ -42,9 +42,9 @@ Need to debug? I’ll show you what’s going on under the hood.
42
42
 
43
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."
44
44
 
45
- Version : 4.24.2
45
+ Version : 4.25.0.beta2
46
46
 
47
- Laurent/2016-2025
47
+ Laurent/2016-2026
48
48
 
49
49
  The aspera-cli Ruby gem offers a powerful command-line interface (CLI, `ascli`) for IBM Aspera software, facilitating seamless interaction with Aspera APIs and enabling high-performance file transfers.
50
50
  It also serves as an excellent resource for developers seeking to explore and understand the Aspera API ecosystem.
@@ -63,7 +63,7 @@ Minimum required Ruby version: >= 3.1.
63
63
 
64
64
  Release notes: see [CHANGELOG.md](CHANGELOG.md)
65
65
 
66
- A PDF version of this documentation is available here: [docs/Manual.pdf](docs/Manual.pdf).
66
+ A PDF version of this documentation is delivered with [releases](https://github.com/IBM/aspera-cli/releases).
67
67
 
68
68
  ### BUGS, FEATURES, CONTRIBUTION
69
69
 
@@ -76,6 +76,10 @@ For debugging, use `--log-level=debug` to view the underlying API calls.
76
76
 
77
77
  ### When to use and when not to use
78
78
 
79
+ > [!NOTE]
80
+ > If you are scripting or automating transfers from the command line, `ascli` is the right choice.
81
+ > If you are developing an application, prefer the APIs or SDKs instead.
82
+
79
83
  The `ascli` tool is designed for command-line interaction with IBM Aspera products, enabling users to execute remote commands and perform file transfers efficiently.
80
84
  It supports both interactive terminal operations (e.g., maintenance tasks on VT100-compatible terminals) and scripting use cases (e.g., batch jobs via shell scripts or cron).
81
85
 
@@ -95,7 +99,7 @@ These include:
95
99
  Using these APIs is generally more suitable for long-term development and maintenance.
96
100
  Example implementations can be found at: <https://github.com/laurent-martin/aspera-api-examples>.
97
101
 
98
- For scripting and ad hoc command-line tasks, `ascli` is ideal.
102
+ For scripting and ad-hoc command-line tasks, `ascli` is ideal.
99
103
  It is developer-friendly and well-suited for quickly testing and learning Aspera APIs (See [Logging, Debugging](#logging-debugging)).
100
104
 
101
105
  Clarifying the CLI landscape:
@@ -135,7 +139,7 @@ ascli --version
135
139
  ```
136
140
 
137
141
  ```text
138
- 4.24.2
142
+ 4.25.0.beta2
139
143
  ```
140
144
 
141
145
  > [!NOTE]
@@ -338,14 +342,25 @@ Download the Ruby installer executable from <https://rubyinstaller.org/downloads
338
342
  rubyinstaller-devkit-3.2.2-1-x64.exe /silent /currentuser /noicons /dir=C:\aspera-cli
339
343
  ```
340
344
 
345
+ #### Windows: Chocolatey
346
+
347
+ If you use [Chocolatey](https://chocolatey.org/), then install Ruby with:
348
+
349
+ ```powershell
350
+ choco install ruby
351
+ ```
352
+
341
353
  #### macOS: `brew`
342
354
 
343
- The recommended way is to use [Homebrew](https://brew.sh/).
355
+ If you use [Homebrew](https://brew.sh/), then install Ruby with:
344
356
 
345
357
  ```shell
346
358
  brew install ruby
347
359
  ```
348
360
 
361
+ > [!NOTE]
362
+ > This is the recommended method.
363
+
349
364
  > [!WARNING]
350
365
  > **macOS** comes with Ruby 2.6.
351
366
  > 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).
@@ -364,8 +379,8 @@ export PATH="$(gem env gemdir)/bin:$PATH"
364
379
 
365
380
  > [!NOTE]
366
381
  > 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`
382
+ > This is what is displayed at the end of the installation of the ruby tap,
383
+ > same as message from: `brew info ruby`
369
384
 
370
385
  #### Linux: Package
371
386
 
@@ -391,10 +406,11 @@ If your Linux distribution provides a standard Ruby package, you can use it prov
391
406
  dnf install -y make automake gcc gcc-c++ kernel-devel
392
407
  ```
393
408
 
394
- - Enable the Ruby version you want:
409
+ - Enable the Ruby version you selected:
395
410
 
396
411
  ```shell
397
- dnf module -y enable ruby:3.1
412
+ dnf module -y enable ruby:3.2
413
+
398
414
  dnf install -y ruby-devel
399
415
  ```
400
416
 
@@ -417,7 +433,8 @@ apt install -y ruby ruby-dev rubygems ruby-json
417
433
  One can remove all installed gems, for example to start fresh:
418
434
 
419
435
  ```shell
420
- gem uninstall -axI $(ls $(gem env gemdir)/gems/|sed -e 's/-[^-]*$//'|sort -u)
436
+ ls $(gem env gemdir)/gems/|sed -e 's/-[^-]*$//'|sort -u|xargs gem uninstall -axI
437
+ rm -f Gemfile.lock
421
438
  ```
422
439
 
423
440
  #### Unix-like: RVM: Single user installation (not root)
@@ -575,23 +592,24 @@ Those are not installed as part of dependencies because they involve compilation
575
592
  See [Gemfile](Gemfile):
576
593
 
577
594
  | name | version | comment |
578
- | -------------------- | ------- | --------------------------------------------------- |
595
+ |----------------------|---------|-----------------------------------------------------|
579
596
  | grpc | ~> 1.71 | (no jruby) for Aspera Transfer Daemon |
580
- | mimemagic | ~> 0.4 | for preview |
597
+ | marcel | ~> 1.1 | for preview |
581
598
  | rmagick | ~> 6.1 | (no jruby) for terminal view |
582
599
  | symmetric-encryption | ~> 4.6 | for encrypted hash file secrets |
583
600
  | bigdecimal | ~> 3.1 | if RUBY_VERSION >= '3.4' for symmetric-encryption ? |
584
601
  | sqlite3 | ~> 2.7 | (no jruby) for async DB |
585
602
  | jdbc-sqlite3 | ~> 3.46 | (jruby) for async DB |
586
603
  | sequel | ~> 5.96 | (jruby) for async DB |
587
- | ed25519 | ~> 1.4 | (no jruby) for ed25519 |
588
- | bcrypt_pbkdf | ~> 1.1 | (no jruby) for ed25519 |
604
+ | ed25519 | ~> 1.4 | (no jruby) for ed25519 and OpenSSH file format |
605
+ | bcrypt_pbkdf | ~> 1.1 | (no jruby) for ed25519 and OpenSSH file format |
606
+ | syslog | ~> 0.3 | (no jruby) for logger=syslog |
589
607
 
590
608
  Install like this:
591
609
 
592
610
  ```shell
593
611
  gem install grpc -v '~> 1.71'
594
- gem install mimemagic -v '~> 0.4'
612
+ gem install marcel -v '~> 1.1'
595
613
  gem install rmagick -v '~> 6.1'
596
614
  gem install symmetric-encryption -v '~> 4.6'
597
615
  gem install bigdecimal -v '~> 3.1'
@@ -600,6 +618,7 @@ gem install jdbc-sqlite3 -v '~> 3.46'
600
618
  gem install sequel -v '~> 5.96'
601
619
  gem install ed25519 -v '~> 1.4'
602
620
  gem install bcrypt_pbkdf -v '~> 1.1'
621
+ gem install syslog -v '~> 0.3'
603
622
  ```
604
623
 
605
624
  ### Ruby Gem: `aspera-cli`
@@ -607,7 +626,7 @@ gem install bcrypt_pbkdf -v '~> 1.1'
607
626
  Once you have Ruby and rights to install gems, install the `aspera-cli` gem and its dependencies:
608
627
 
609
628
  ```shell
610
- gem install aspera-cli
629
+ gem install aspera-cli --pre
611
630
  ```
612
631
 
613
632
  To upgrade to the latest version:
@@ -667,12 +686,12 @@ To execute an Aspera transfer, only two additional files are required, both incl
667
686
 
668
687
  - `aspera-license` - the license file (located in the same directory as `ascp` or in `../etc`)
669
688
 
670
- These components can be installed either by installing the Aspera transfer software or by executing the `ascli` command.
689
+ These components can be installed either by installing the Aspera transfer software or by running the `ascli` command.
671
690
 
672
691
  #### Installation of `ascp` through `transferd`
673
692
 
674
693
  The easiest option to install `ascp` is through the use of the IBM Aspera Transfer Daemon (`transferd`).
675
- Install using `ascli` for the current platform with:
694
+ Install it using `ascli` (for the current platform) with:
676
695
 
677
696
  ```shell
678
697
  ascli config transferd install
@@ -738,6 +757,7 @@ If the embedded method is not used, the following packages are also suitable:
738
757
 
739
758
  - IBM Aspera Connect Client (Free)
740
759
  - IBM Aspera Desktop Client (Free)
760
+ - IBM Aspera for Desktop (Free)
741
761
  - IBM Aspera High Speed Transfer Server (Licensed)
742
762
  - IBM Aspera High Speed Transfer Endpoint (Licensed)
743
763
 
@@ -758,14 +778,15 @@ Refer to section: [Transfer Agents](#transfer-clients-agents)
758
778
 
759
779
  #### Gem files and dependencies
760
780
 
761
- The sample script: [windows/build_package.sh](windows/build_package.sh) can be used to download all necessary gems and dependencies in a `tar.gz`.
781
+ Necessary gems can be packed in a `tar.gz` like this:
762
782
 
763
- ```shell
764
- ./build_package.sh aspera-cli 4.18.0
765
- ```
766
-
767
- ```text
768
- Archive: aspera-cli-4.18.0-gems.tgz
783
+ ```bash
784
+ mkdir temp_folder
785
+ gem install aspera-cli:4.25.0.beta2 --no-document --install-dir temp_folder
786
+ find temp_folder
787
+ mv temp_folder/cache aspera-cli-4.25.0.beta2-gems
788
+ rm -fr temp_folder
789
+ tar zcvf aspera-cli-4.25.0.beta2-gems aspera-cli-4.25.0.beta2-gems.tgz
769
790
  ```
770
791
 
771
792
  #### Unix-like
@@ -845,7 +866,7 @@ ascli config ascp install --sdk-url=file:///sdk.zip
845
866
  ```
846
867
 
847
868
  > [!NOTE]
848
- > An example of installation script is provided: [windows/install.bat](windows/install.bat)
869
+ > A beta version of a packaged installed is available.
849
870
 
850
871
  ### Container
851
872
 
@@ -888,7 +909,7 @@ That is simple, but there are limitations:
888
909
 
889
910
  #### Container: Details
890
911
 
891
- The container image is built from this [Dockerfile](container/Dockerfile.tmpl.erb).
912
+ The container image is built from this [Dockerfile](build/container/Dockerfile.tmpl.erb).
892
913
  The entry point is `ascli` and the default command is `help`.
893
914
 
894
915
  The container can be executed for individual commands like this: (add `ascli` commands and options at the end of the command line, e.g. `-v` to display the version)
@@ -910,7 +931,7 @@ ascli -v
910
931
  ```
911
932
 
912
933
  ```text
913
- 4.24.2
934
+ 4.25.0.beta2
914
935
  ```
915
936
 
916
937
  In order to keep persistency of configuration on the host, you should specify your user's configuration folder as a volume for the container.
@@ -1350,35 +1371,86 @@ Details can be found here:
1350
1371
 
1351
1372
  - [quoting rules](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules)
1352
1373
 
1353
- The following examples give the same result on Windows using PowerShell:
1374
+ ##### PowerShell 5
1354
1375
 
1355
1376
  - Check your powershell version:
1356
1377
 
1357
1378
  ```powershell
1358
- PS C:\> echo $psversiontable.psversion
1379
+ $psversiontable.psversion.Major
1380
+ ```
1359
1381
 
1360
- Major Minor Build Revision
1361
- ----- ----- ----- --------
1362
- 5 1 19041 4046
1382
+ ```text
1383
+ 5
1384
+ ```
1385
+
1386
+ The following examples give the same result on Windows using PowerShell 5:
1387
+
1388
+ ```text
1389
+ ╭───────┬───────╮
1390
+ │ field │ value │
1391
+ ╞═══════╪═══════╡
1392
+ │ x │ true │
1393
+ │ k │ v │
1394
+ ╰───────┴───────╯
1363
1395
  ```
1364
1396
 
1365
1397
  - Use PowerShell argument `--%` to place PowerShell in "stop-parsing" mode.
1366
1398
 
1367
1399
  ```powershell
1368
- PS C:\> ascli config echo --% @json:'{"k":"v","x":"y"}'
1400
+ ascli config echo --% @json:'{"k":"v","x":true}'
1369
1401
  ```
1370
1402
 
1371
1403
  - Triple double quotes are replaced with a single double quote in normal mode:
1372
1404
 
1373
1405
  ```powershell
1374
- PS C:\> ascli config echo @json:'{"""k""":"""v""","""x""":"""y"""}'
1406
+ ascli config echo @json:'{"""k""":"""v""","""x""":true}'
1407
+ ```
1408
+
1409
+ - To insert PowerShell variables in the JSON string, one can do:
1410
+
1411
+ ```powershell
1412
+ $var="v"
1413
+ ascli conf echo $('@json:{"""k""":"""' + $var + '""","""x""":true}')
1414
+ ```
1415
+
1416
+ ##### PowerShell 7
1417
+
1418
+ - Check your PowerShell version:
1419
+
1420
+ ```powershell
1421
+ $psversiontable.psversion.Major
1422
+ ```
1423
+
1424
+ ```text
1425
+ 7
1426
+ ```
1427
+
1428
+ The following examples give the same result on Windows using PowerShell 7:
1429
+
1430
+ - Use PowerShell argument `--%` to place PowerShell in "stop-parsing" mode.
1431
+
1432
+ ```powershell
1433
+ ascli config echo --% @json:{"k":"v","x":true}
1434
+ ```
1435
+
1436
+ - Single quote protects double quote in normal mode:
1437
+
1438
+ ```powershell
1439
+ ascli config echo @json:'{"k":"v","x":true}'
1375
1440
  ```
1376
1441
 
1377
1442
  - To insert PowerShell variables in the JSON string, one can do:
1378
1443
 
1379
1444
  ```powershell
1380
- $email="john@example.com"
1381
- ascli conf echo $('@json:{"""address""":"""' + $email + '""","""vip""":true}')
1445
+ $var="v"
1446
+ ascli conf echo $('@json:{"k":"' + $var + '","x":true}')
1447
+ ```
1448
+
1449
+ - Use PowerShell structure and then convert to JSON string:
1450
+
1451
+ ```powershell
1452
+ $var="v"
1453
+ ascli conf echo "@json:$(@{ k = $var; x = $true } | ConvertTo-Json -Compress)"
1382
1454
  ```
1383
1455
 
1384
1456
  #### Extended Values (JSON, Ruby, ...)
@@ -1603,7 +1675,7 @@ The value of **Options** and **Positional Arguments** is evaluated with the [Ext
1603
1675
  - **Commands**, typically at the beginning
1604
1676
  - **Command Parameters**, mandatory arguments, e.g. creation data or entity identifier
1605
1677
 
1606
- When options are removed from the command line, the remaining arguments are typically **Positional Arguments** with a pre-defined order.
1678
+ When options are removed from the command line, the remaining arguments are typically **Positional Arguments** with a significant, pre-defined order.
1607
1679
 
1608
1680
  **Commands** are typically entity types (e.g. `users`) or verbs (e.g. `create`) to act on those entities.
1609
1681
  Its value is a `String` that must belong to a fixed list of values in a given context.
@@ -1617,17 +1689,16 @@ ascli config ascp info
1617
1689
  - `ascli` is the executable executed by the shell
1618
1690
  - `conf` is the first level command: name of the plugin to be used
1619
1691
  - `ascp` is the second level command: name of the component (singleton)
1620
- - `info` is the third level command: action to be performed
1692
+ - `info` is the third level command: action to be performed (verb)
1621
1693
 
1622
1694
  Typically, **Commands** are located at the **beginning** of the command line.
1623
- Order is significant.
1624
1695
  The provided command must match one of the supported commands in the given context.
1625
1696
  If wrong, or no command is provided when expected, an error message is displayed and the list of supported commands is displayed.
1626
1697
 
1627
1698
  Standard **Commands** are: `create`, `show`, `list`, `modify`, `delete`.
1628
- Some entities also support additional commands.
1699
+ Some entities also support additional commands, especially to select sub-entities.
1629
1700
  When those additional commands are related to an entity also reachable in another context, then those commands are located below command `do`.
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`.
1701
+ For example sub-commands appear after entity selection (identifier), e.g. `ascli aoc admin node do <node_id> browse /`: `browse` is a sub-command of `node`.
1631
1702
 
1632
1703
  **Command Parameters** are typically mandatory values for a command, such as entity creation data or entity identifier.
1633
1704
 
@@ -1642,6 +1713,41 @@ If a **Command Parameter** begins with `-`, then either use the `@val:` syntax (
1642
1713
 
1643
1714
  A few **Command Parameters** are optional, they are always located at the end of the command line.
1644
1715
 
1716
+ A special Extended Value `@:` has the following meaning:
1717
+
1718
+ - Take all remaining positional arguments
1719
+ - Expect each of them to have the format: `<path>=<value>`
1720
+ - `<path>` designates a path in a complex structure such as Hash or Array.
1721
+ `.` is the path separator.
1722
+ Each segment separated by a dot represents a key in a nested structure.
1723
+ Integer index denote Array, and other denote Hash index.
1724
+ - `ascli` tries to convert `<value>` to the simplest type (bool, int, float, string).
1725
+ If a specific type is required, it can be specified using the `@json:` or `@ruby:` syntax.
1726
+ For example, `--a.b.c=1` is equivalent to `--a=@json'{"b":{"c":1}}'`.
1727
+ This allows specifying nested keys directly on the command line using a concise **dot-separated** syntax.
1728
+
1729
+ Example:
1730
+
1731
+ ```bash
1732
+ ascli conf echo @: a.b=1 a.c=2 a.d.0=hello a.d.1=world --format=json
1733
+ ```
1734
+
1735
+ ```json
1736
+ {"a":{"b":1,"c":2,"d":["hello","world"]}}
1737
+ ```
1738
+
1739
+ The general structure of positional arguments is:
1740
+
1741
+ ```text
1742
+ ascli <plugin> <entity> <command> [<ID>] [<parameters>]
1743
+ ```
1744
+
1745
+ If a sub-entity is used:
1746
+
1747
+ ```text
1748
+ ascli <plugin> <entity1> <sub-entity> [<ID>1] <command2> [<ID2>] [<parameters>]
1749
+ ```
1750
+
1645
1751
  #### Options
1646
1752
 
1647
1753
  Command-line options, such as `--log-level=debug`, follow these conventions:
@@ -1673,13 +1779,17 @@ Exceptions and Special Cases:
1673
1779
  - **Option Terminator**:
1674
1780
  The special option `--` ends option parsing.
1675
1781
  All subsequent arguments, including those starting with `-`, are treated as positional arguments.
1676
- - **Dot Notation for Hashes**:
1782
+ - **Dot Notation for Hash and Array**:
1677
1783
  If an option name contains a dot (`.`), it is interpreted as a `Hash`.
1678
1784
  Each segment separated by a dot represents a key in a nested structure.
1679
1785
  `ascli` tries to convert the value to the simplest type (bool, int, float, string).
1680
1786
  If a specific type is required, it can be specified using the `@json:` or `@ruby:` syntax.
1681
1787
  For example, `--a.b.c=1` is equivalent to `--a=@json'{"b":{"c":1}}'`.
1682
1788
  This allows specifying nested keys directly on the command line using a concise **dot-separated** syntax.
1789
+ - **Cumulative Hashes**:
1790
+ When an option of type `Hash` is set, the value is deep-merged to an existing or default value.
1791
+ Setting to `@none:` is equivalent to setting to `@json:{}`, i.e. an empty `Hash`.
1792
+ This can be used to start from an empty value, and not used existing default value.
1683
1793
 
1684
1794
  Example:
1685
1795
 
@@ -1785,17 +1895,17 @@ ascli config echo @json:'{"ni":null,"es":"","ea":[],"eh":{}}'
1785
1895
 
1786
1896
  The style of output can be set using the `format` option:
1787
1897
 
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 |
1898
+ | `format` | Output formatting |
1899
+ |----------|---------------------------|
1900
+ | `table` | Text table (default) |
1901
+ | `text` | Value as `String` |
1902
+ | `ruby` | Ruby code |
1903
+ | `json` | JSON code |
1904
+ | `jsonpp` | JSON pretty printed |
1905
+ | `yaml` | YAML |
1906
+ | `csv` | Comma Separated Values |
1907
+ | `image` | URL or data for a [picture/video](#image-and-video-thumbnails) |
1908
+ | `nagios` | Suitable for Nagios |
1799
1909
 
1800
1910
  By default, result of type `single_object` and `object_list` are displayed using format `table`.
1801
1911
 
@@ -2085,36 +2195,39 @@ The following decoders are supported:
2085
2195
 
2086
2196
  | Decoder | Parameter| Returns | Description |
2087
2197
  |----------|----------|----------|------------------------------------------------------------------------------------------|
2088
- | `base64` | `String` | `String` | Decode a base64 encoded string |
2089
- | `csvt` | `String` | `Array` | Decode a titled CSV value |
2090
- | `env` | `String` | `String` | Read from a named env var name, e.g. `--password=@env:MYPASSVAR` |
2091
- | `file` | `String` | `String` | Read value from specified file (prefix `~/` is replaced with the users home folder), e.g. `--key=@file:~/.ssh/mykey` |
2092
- | `json` | `String` | Any | Decode JSON values (convenient to provide complex structures) |
2093
- | `lines` | `String` | `Array` | Split a string in multiple lines and return an array |
2094
- | `list` | `String` | `Array` | Split a string in multiple items taking first character as separator and return an array |
2095
- | `none` | None | Nil | A null value |
2096
- | `path` | `String` | `String` | Performs path expansion on specified path (prefix `~/` is replaced with the users home folder), e.g. `--config-file=@path:~/sample_config.yml` |
2198
+ | `base64` | `String` | `String` | Decode a base64 encoded string. |
2199
+ | `csvt` | `String` | `Array` | Decode a titled CSV value. |
2200
+ | `env` | `String` | `String` | Read from a named env var name. e.g. `--password=@env:MYPASSVAR` |
2201
+ | `file` | `String` | `String` | Read value from specified file (prefix `~/` is replaced with the users home folder). e.g. `--key=@file:~/.ssh/mykey` |
2202
+ | `json` | `String` | Any | Decode JSON values. Convenient to provide complex structures. |
2203
+ | `lines` | `String` | `Array` | Split a string in multiple lines and return an `Array`. |
2204
+ | `list` | `String` | `Array` | Split a string in multiple items taking first character as separator and return an `Array`. |
2205
+ | `none` | None | Nil | A `null` value. |
2206
+ | `path` | `String` | `String` | Performs path expansion on specified path (prefix `~/` is replaced with the user's home folder). e.g. `--config-file=@path:~/sample_config.yml` |
2097
2207
  | `preset` | `String` | `Hash` | Get whole option preset value by name. Sub-values can also be used, using `.` as separator. e.g. `foo.bar` is `conf[foo][bar]` |
2098
- | `extend` | `String` | `String` | Evaluates embedded extended value syntax in string |
2208
+ | `extend` | `String` | `String` | Evaluates embedded extended value syntax in string. |
2099
2209
  | `re` | `String` | `Regexp` | Ruby Regular Expression (short for `@ruby:/.../`) |
2100
- | `ruby` | `String` | Any | Execute specified Ruby code |
2101
- | `secret` | None | `String` | Ask password interactively (hides input) |
2102
- | `stdin` | None | `String` | Read from stdin in text mode (no value on right) |
2103
- | `stdbin` | None | `String` | Read from stdin in binary mode (no value on right) |
2104
- | `uri` | `String` | `String` | Read value from specified URL, e.g. `--fpac=@uri:http://serv/f.pac` |
2210
+ | `ruby` | `String` | Any | Execute specified Ruby code. |
2211
+ | `secret` | None | `String` | Ask password interactively (hides input). |
2212
+ | `stdin` | None | `String` | Read from stdin in text mode (with arg: empty, `bin` or `chomp`). |
2213
+ | `uri` | `String` | `String` | Read value from specified URL. e.g. `--fpac=@uri:http://serv/f.pac` |
2105
2214
  | `val` | `String` | `String` | Prevent decoders on the right to be decoded. e.g. `--key=@val:@file:foo` sets the option `key` to value `@file:foo`. |
2106
- | `yaml` | `String` | Any | Decode YAML |
2107
- | `zlib` | `String` | `String` | Decompress data using zlib |
2215
+ | `yaml` | `String` | Any | Decode YAML. |
2216
+ | `zlib` | `String` | `String` | Decompress data using zlib. |
2217
+ | `p` | None | Any | Parses remaining arguments as `Hash` or `Array`. |
2108
2218
 
2109
2219
  > [!NOTE]
2110
2220
  > A few commands support a value of type `Proc` (lambda expression).
2111
- > For example, the **Extended Value** `@ruby:'->(i){i["attr"]}'` is a lambda expression that returns the value for key `attr` of the `Hash` `i`.
2221
+ > For example, the **Extended Value** `@ruby:'->(i){i["attr"]}'` is a lambda expression that returns the value for key `attr` of the `Hash` parameter named `i`.
2112
2222
 
2113
2223
  To display the result of an extended value, use the `config echo` command.
2114
2224
 
2115
2225
  The `extend` decoder is useful to evaluate embedded extended value syntax in a string.
2116
2226
  It expects a `@` to close the embedded extended value syntax.
2117
2227
 
2228
+ Option `parser` allows definition of a default parser when the positional parameter or option expects a `Hash` or `Array`.
2229
+ For example, with `--parser=json`, the parameter `{}` will be parsed as an empty JSON Hash, even without prefix `@json:`.
2230
+
2118
2231
  Example: Create a `Hash` value with the convenient `@json:` decoder:
2119
2232
 
2120
2233
  ```shell
@@ -2191,15 +2304,17 @@ EOF
2191
2304
  {"key1":"value1","key2":["item1","item2"],"key3":{"key4":"value4","key5":"value5"}}
2192
2305
  ```
2193
2306
 
2194
- ### Configuration and Persistency Folder
2307
+ ### Main, configuration and Persistency Folder
2195
2308
 
2196
- `ascli` configuration and persistency files (token cache, file lists, persistency files) are stored by default in `[User's home folder]/.aspera/ascli`.
2309
+ `ascli` looks for configuration and persistency files (token cache, file lists, persistency files) in the folder specified using option `home`.
2310
+ The default value is `[User's home folder]/.aspera/ascli`.
2197
2311
 
2198
2312
  > [!NOTE]
2199
- > `[User's home folder]` is found using Ruby's `Dir.home` (`rb_w32_home_dir`).
2200
- > It uses the `HOME` env var primarily, and on MS Windows it also looks at `%HOMEDRIVE%%HOMEPATH%` and `%USERPROFILE%`.
2201
- > `ascli` sets the env var `%HOME%` to the value of `%USERPROFILE%` if set and exists.
2202
- > So, on Windows `%USERPROFILE%` is used as it is more reliable than `%HOMEDRIVE%%HOMEPATH%`.
2313
+ > The `[User's home folder]` is determined using Rubys `Dir.home` method.
2314
+ > Primary source: The HOME environment variable.
2315
+ > On Windows: Ruby also checks `%HOMEDRIVE%%HOMEPATH%` and `%USERPROFILE%` (via `rb_w32_home_dir`).
2316
+ > Additionally, `ascli` sets the `%HOME%` environment variable to the value of `%USERPROFILE%` if it exists and is valid.
2317
+ > Therefore, on Windows, `%USERPROFILE%` is preferred because it is generally more reliable than `%HOMEDRIVE%%HOMEPATH%`.
2203
2318
 
2204
2319
  The configuration folder can be displayed using :
2205
2320
 
@@ -2212,9 +2327,11 @@ ascli config folder
2212
2327
  ```
2213
2328
 
2214
2329
  > [!NOTE]
2215
- > This is equivalent to: `ascli --show-config --fields=home`
2330
+ > This is equivalent to display the value of the `home` option.
2216
2331
 
2217
- It can be overridden using option `home`.
2332
+ ```shell
2333
+ ascli --show-config --fields=home
2334
+ ```
2218
2335
 
2219
2336
  Example (Windows):
2220
2337
 
@@ -2226,11 +2343,28 @@ ascli config folder
2226
2343
  C:\Users\Kenji\.aspera\ascli
2227
2344
  ```
2228
2345
 
2229
- When OAuth is used (AoC, Faspex5) `ascli` keeps a cache of generated bearer tokens in folder `persist_store` in configuration folder by default.
2346
+ When OAuth is used (AoC, Faspex5) `ascli` keeps a cache of generated bearer tokens in folder `persist_store` located in the configuration folder by default.
2230
2347
  Option `cache_tokens` (**yes**/no) allows controlling if OAuth tokens are cached on file system, or generated for each request.
2231
2348
  The command `config tokens flush` clears that cache.
2232
2349
  Tokens are kept on disk for a maximum of 30 minutes (`TOKEN_CACHE_EXPIRY_SEC`) and garbage collected after that.
2233
- When a token has expired, then a new token is generated, either using a refresh_token if it is available, or by the default method.
2350
+ When a token has expired, then a new token is generated, either using a `refresh_token` if it is available, or by the default method.
2351
+
2352
+ ### Configuration file
2353
+
2354
+ On the first execution of `ascli`, an empty configuration file is created in the configuration folder (`ascli config folder`).
2355
+ There is no mandatory information required in this file.
2356
+ The use of it is optional as any option can be provided on the command line.
2357
+
2358
+ Although the file is a standard `YAML` file, `ascli` provides commands to read and modify it using the `config` command.
2359
+
2360
+ All options for `ascli` can be set on command line, or by env vars, or using [Option Preset](#option-preset) in the configuration file.
2361
+
2362
+ A configuration file provides a way to define default values, especially for authentication options, thus avoiding to always having to specify those options on the command line.
2363
+
2364
+ The default configuration file is: `$HOME/.aspera/ascli/config.yaml` (this can be overridden with option `--config-file=path` or its env var).
2365
+
2366
+ The configuration file is a catalog of named lists of options, called: [Option Preset](#option-preset).
2367
+ Then, instead of specifying some common options on the command line (e.g. address, credentials), it is possible to invoke the ones of an [Option Preset](#option-preset) (e.g. `mypreset`) using the option `preset`: `--preset=mypreset` or its shortcut: `-Pmypreset`.
2234
2368
 
2235
2369
  ### Invalid Filename Characters
2236
2370
 
@@ -2239,7 +2373,7 @@ The option `invalid_characters` allows specifying a replacement character for a
2239
2373
 
2240
2374
  The first character specifies the replacement character, and the following characters are the invalid ones.
2241
2375
  This is used when a folder or file is created from a value that potentially contains invalid characters.
2242
- For example, using the option `package_folder`.
2376
+ For example, using the option `package_folder`, a package name may contain characters not allowed, such as `/`.
2243
2377
  The default value is `_<>:"/\|?*`, corresponding to replacement character `_` and characters not allowed on Windows.
2244
2378
 
2245
2379
  > [!NOTE]
@@ -2253,23 +2387,6 @@ Temporary files are deleted at the end of execution unless option: `clean_temp`
2253
2387
  By default (`@sys`), the temporary folder is the system's temporary folder for the current user (Ruby `Etc.systmpdir`).
2254
2388
  A special value of `@env` will set the folder to Ruby `Dir.tmpdir` which uses regular env var to set the temp folder.
2255
2389
 
2256
- ### Configuration file
2257
-
2258
- On the first execution of `ascli`, an empty configuration file is created in the configuration folder (`ascli config folder`).
2259
- There is no mandatory information required in this file.
2260
- The use of it is optional as any option can be provided on the command line.
2261
-
2262
- Although the file is a standard `YAML` file, `ascli` provides commands to read and modify it using the `config` command.
2263
-
2264
- All options for `ascli` can be set on command line, or by env vars, or using [Option Preset](#option-preset) in the configuration file.
2265
-
2266
- A configuration file provides a way to define default values, especially for authentication options, thus avoiding to always having to specify those options on the command line.
2267
-
2268
- The default configuration file is: `$HOME/.aspera/ascli/config.yaml` (this can be overridden with option `--config-file=path` or its env var).
2269
-
2270
- The configuration file is a catalog of named lists of options, called: [Option Preset](#option-preset).
2271
- Then, instead of specifying some common options on the command line (e.g. address, credentials), it is possible to invoke the ones of an [Option Preset](#option-preset) (e.g. `mypreset`) using the option `preset`: `--preset=mypreset` or its shortcut: `-Pmypreset`.
2272
-
2273
2390
  #### Option Preset
2274
2391
 
2275
2392
  An [Option Preset](#option-preset) is a collection of options and their associated values in a named section in the configuration file.
@@ -2367,7 +2484,7 @@ ascli config preset get default _plugin_name_
2367
2484
  "_default_preset_for_plugin_"
2368
2485
  ```
2369
2486
 
2370
- #### Plugin: `config`: Configuration
2487
+ ### Plugin: `config`: Configuration
2371
2488
 
2372
2489
  Plugin `config` provides general commands for `ascli`:
2373
2490
 
@@ -2413,7 +2530,7 @@ ascli config preset set GLOBAL version_check_days 0
2413
2530
  ascli config preset set default config my_common_defaults
2414
2531
  ```
2415
2532
 
2416
- ### Tested commands for `config`
2533
+ #### Tested commands for `config`
2417
2534
 
2418
2535
  > [!NOTE]
2419
2536
  > Add `ascli config` in front of the following commands:
@@ -2436,6 +2553,7 @@ ascp show
2436
2553
  ascp spec
2437
2554
  check_update
2438
2555
  coffee
2556
+ coffee --log-level=trace2 --log-format=caller
2439
2557
  coffee --ui=text
2440
2558
  coffee --ui=text --image=@json:'{"text":true,"double":false}'
2441
2559
  coffee --ui=text --image=@json:'{"text":true}'
@@ -2449,7 +2567,7 @@ detect https://tst.example.com/path httpgw
2449
2567
  detect my_org aoc
2450
2568
  doc
2451
2569
  doc transfer-parameters
2452
- echo '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50" fill="#006699"/></svg>' --format=image
2570
+ echo '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50" fill="#069"/></svg>' --format=image --image.text=true
2453
2571
  echo -- --special-string
2454
2572
  echo @base64:SGVsbG8gV29ybGQK
2455
2573
  echo @csvt:@stdin:
@@ -2459,11 +2577,12 @@ echo @json:'[{"user":{"id":1,"name":"foo"},"project":"bar"}]' --multi-single=yes
2459
2577
  echo @lines:@stdin:
2460
2578
  echo @list:,1,2,3
2461
2579
  echo @secret:
2462
- echo @stdbin:
2580
+ echo @stdin:bin
2463
2581
  echo @uri:/etc/hosts
2464
2582
  echo @uri:file:/etc/hosts
2465
2583
  echo @uri:http://ifconfig.me
2466
2584
  echo @uri:https://ifconfig.me
2585
+ echo @uri:https://ifconfig.me/ip --cert-stores=@ruby:[OpenSSL::X509::DEFAULT_CERT_DIR,OpenSSL::X509::DEFAULT_CERT_FILE] --http-options.ssl_options=@list:,CIPHER_SERVER_PREFERENCE,-NETSCAPE_CA_DN_BUG --insecure=yes
2467
2586
  echo @vault:my_preset.password
2468
2587
  echo @zlib:@stdin:
2469
2588
  echo hello
@@ -2482,7 +2601,7 @@ genkey my_key 4096
2482
2601
  image https://eudemo.asperademo.com/wallpaper.jpg
2483
2602
  initdemo
2484
2603
  open
2485
- plugins create my_command
2604
+ plugins create my_command .
2486
2605
  plugins list
2487
2606
  preset delete conf_name
2488
2607
  preset initialize conf_name @json:'{"p1":"v1","p2":"v2"}'
@@ -2503,7 +2622,6 @@ smtp_settings
2503
2622
  sync spec
2504
2623
  tokens flush
2505
2624
  tokens list
2506
- tokens show foobar
2507
2625
  transferd install
2508
2626
  transferd list
2509
2627
  vault create @json:'{"label":"my_label","password":"my_password_here","description":"my secret"}'
@@ -2523,7 +2641,7 @@ wizard my_org aoc --key-path=my_private_key --username=my_user_email --use-gener
2523
2641
  wizard my_org aoc mypreset --key-path=my_private_key --username=my_user_email
2524
2642
  ```
2525
2643
 
2526
- #### Format of file
2644
+ #### Format of configuration file
2527
2645
 
2528
2646
  The configuration file is a `Hash` in a YAML file.
2529
2647
  Example:
@@ -2858,7 +2976,16 @@ It consists in using a pair of associated keys: a private key and a public key.
2858
2976
  The same pair can be used for multiple applications.
2859
2977
  The file containing the private key (key pair) can optionally be protected by a passphrase.
2860
2978
  If the key is protected by a passphrase, then it will be prompted when used.
2861
- (some plugins support option `passphrase`)
2979
+ Some plugins support option `passphrase`.
2980
+
2981
+ By default, `ascli` does not support `ed25519` type, nor OpenSSH encoded keys.
2982
+ See section: [Private key type ed25519](#private-key-type-ed25519-not-supported-by-default).
2983
+ It requires PEM encoded keys.
2984
+ To support `ed25519` and OpenSSH format (default on modern Linux), install those gems:
2985
+
2986
+ ```shell
2987
+ gem install ed25519 bcrypt_pbkdf
2988
+ ```
2862
2989
 
2863
2990
  The following sample commands use the shell variable `KEY_PAIR_PATH`.
2864
2991
  Set it to the desired safe location of the private key.
@@ -2879,6 +3006,7 @@ If another format is used, such as `DER`, it can be converted to `PEM`, e.g. usi
2879
3006
 
2880
3007
  The generated key is of type `RSA`, by default: **4096** bit.
2881
3008
  For convenience, the public key is also extracted with extension `.pub`.
3009
+ Files are PEM encoded.
2882
3010
  The key is not passphrase protected.
2883
3011
 
2884
3012
  ```shell
@@ -2955,33 +3083,42 @@ Parameter `url` (base URL) defines:
2955
3083
 
2956
3084
  ### Image and video thumbnails
2957
3085
 
2958
- `ascli` can display thumbnails for images and videos in the terminal.
2959
- This is available:
3086
+ `ascli` can display thumbnails for images and videos in the **terminal**, using [iTerm2 inline image protocol](https://iterm2.com/documentation-images.html) or through colorized text.
3087
+
3088
+ This feature can be used:
2960
3089
 
2961
3090
  - In the `thumbnail` command of `node` when using **gen4/access key** API.
2962
3091
  - When using the `show` command of `preview` plugin.
2963
3092
  - `coffee` and `image` commands of `config` plugin.
2964
3093
  - Any displayed value which is a URL to image can be displayed with option `format` set to `image`
2965
3094
 
2966
- The following options can be specified in the option `image`:
3095
+ The following options can be specified in the `image` option:
2967
3096
 
2968
- | Option | Type | Description |
3097
+ | Option | Type | Description |
2969
3098
  |------------|-----------|---------------------------------------------------|
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. |
3099
+ | reserve | `Integer` | Lines reserved to display a status.<br/>Default: `3` |
3100
+ | text | `Bool` | Display text instead of image (iTerm).<br/>Default: `false` |
3101
+ | double | `Bool` | Display double text resolution (half characters).<br/>Default: `true` |
3102
+ | font_ratio | `Float` | Font height/width ratio in terminal.<br/>Default: `2.3` |
3103
+
3104
+ Examples:
3105
+
3106
+ - Display image as colorized text (requires `rmagick`)
2974
3107
 
2975
3108
  ```shell
2976
- ascli config image https://eudemo.asperademo.com/wallpaper.jpg --ui=text --image=@json:'{"text":true}'
3109
+ ascli config image https://eudemo.asperademo.com/wallpaper.jpg --ui=text --image.text=true
2977
3110
  ```
2978
3111
 
3112
+ - Display image from byte stream as image in terminal (requires iTerm2-compatible terminal)
3113
+
2979
3114
  ```shell
2980
- curl -so - https://eudemo.asperademo.com/wallpaper.jpg | ascli config image @stdbin:
3115
+ curl -so - https://eudemo.asperademo.com/wallpaper.jpg | ascli config image @stdin:bin
2981
3116
  ```
2982
3117
 
3118
+ - Display image from file (requires iTerm2-compatible terminal)
3119
+
2983
3120
  ```shell
2984
- echo -n https://eudemo.asperademo.com/wallpaper.jpg | ascli config image @uri:@stdin:
3121
+ ascli config image @stdin:bin < A-team.jpg
2985
3122
  ```
2986
3123
 
2987
3124
  ### Graphical Interactions: Browser and Text Editor
@@ -3000,38 +3137,47 @@ It is also possible to force the graphical mode with option `--ui` :
3000
3137
  ### Logging, Debugging
3001
3138
 
3002
3139
  The gem is equipped with traces, mainly for debugging and learning APIs.
3140
+ The following options control logging:
3141
+
3142
+ | Option | Values | Description |
3143
+ |---------------|--------|-------------------------------------------------------------------------|
3144
+ | `logger` | `stdout`<br/>`stderr`<br/>`syslog` | Type of output.<br/>Default: `stderr` |
3145
+ | `log_level` | `trace2`<br/>`trace1`<br/>`debug`<br/>`info`<br/>`warn`<br/>`error` | Minimum level displayed.<br/>Default: `warn` |
3146
+ | `log_secrets` | `yes`<br/>`no` | Show or hide secrets in logs.<br/>Default: `no` (Hide) |
3147
+ | `log_format` | `Proc`<br/>`String` | The name of a formatter or a lambda function that formats the log (see below).<br/>Default: `default`<br/>Alternative: `standard` |
3148
+
3149
+ Option `logger` defines the destination of logs.
3150
+
3151
+ #### `log_level` and `log_secrets`
3003
3152
 
3004
3153
  To increase debug level, use option `log_level` (e.g. using command line `--log-level=xx`, env var `ASCLI_LOG_LEVEL`, or an [Option Preset](#option-preset)).
3005
3154
 
3006
3155
  > [!NOTE]
3007
- > When using the `direct` agent (`ascp`), additional transfer logs can be activated using `ascp` options and `ascp_args`, see [`direct`](#agent-direct).
3156
+ > When using the `direct` agent (`ascp`), additional transfer logs from `ascp` can be activated using `ascp` options and `ascp_args`, see [`direct`](#agent-direct).
3008
3157
 
3009
3158
  By default, passwords and secrets are redacted from logs.
3010
3159
  Set option `log_secrets` to `yes` to include secrets in logs.
3011
3160
 
3012
- | Option | Values | Description |
3013
- |---------------|--------|-------------------------------------------------------------------------|
3014
- | `logger` | `stdout`<br/>`stderr`<br/>`syslog` | Type of output.<br/>Default: `stderr` |
3015
- | `log_level` | `trace2`<br/>`trace1`<br/>`debug`<br/>`info`<br/>`warn`<br/>`error` | Minimum level displayed.<br/>Default: `warn` |
3016
- | `log_secrets` | `yes`<br/>`no` | Show or hide secrets in logs.<br/>Default: `no` (Hide) |
3017
- | `log_format` | `Proc`<br/>`String` | The name of a formatter or a lambda function that formats the log (see below).<br/>Default: `default`<br/>Alternative: `standard` |
3161
+ #### `log_format`
3018
3162
 
3019
- Option `log_format` is typically set using `@ruby:`.
3020
- It is a lambda that takes 4 arguments, see: [Ruby Formatter](https://github.com/ruby/logger/blob/master/lib/logger/formatter.rb) : `severity`, `time`, `progname`, `msg`.
3163
+ Option `log_format` support a few pre-defined formatters or a custom one using `@ruby:`.
3164
+ A customer formatter is a lambda that takes 4 arguments, see: [Ruby Formatter](https://github.com/ruby/logger/blob/master/lib/logger/formatter.rb) : `severity`, `time`, `progname`, `msg`.
3021
3165
  The default formatter is:
3022
3166
 
3023
3167
  ```ruby
3024
- ->(s, _d, _p, m){"#{s[0..2]} #{m}\n"}
3168
+ ->(s, _d, _p, m){"#{s[0..2]}#{s[-1]} #{m}\n"}
3025
3169
  ```
3026
3170
 
3027
3171
  Available formatters for `log_format`:
3028
3172
 
3029
- | Name | Description |
3030
- |-----------|--------------------------|
3031
- | `default` | Default formatter. |
3032
- | `standard`| Standard Ruby formatter. |
3173
+ | Name | Description |
3174
+ |-----------|----------------------------------------------------------------------------------|
3175
+ | `default` | Default formatter: Colorized 4 level level followed by message on the same line. |
3176
+ | `standard`| Standard Ruby formatter. |
3177
+ | `caller` | Colorized 4 level level followed by caller, and then on next line: message. |
3178
+ | `Proc` | Custom lambda. |
3033
3179
 
3034
- Examples:
3180
+ #### Logging examples
3035
3181
 
3036
3182
  - Display debugging log on `stdout`:
3037
3183
 
@@ -3072,22 +3218,22 @@ To disable this warning, set the option `warn_insecure` to `no`.
3072
3218
 
3073
3219
  HTTP connection parameters (not `ascp` WSS) can be adjusted using option `http_options`:
3074
3220
 
3075
- | Parameter | Type | Default | Handler |
3221
+ | Parameter | Type | Default | Handler |
3076
3222
  |-------------------------|---------|---------------|---------------|
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 |
3223
+ | `read_timeout` | `Integer` | `60` | Ruby |
3224
+ | `write_timeout` | `Integer` | `60` | Ruby |
3225
+ | `open_timeout` | `Integer` | `60` | Ruby |
3226
+ | `keep_alive_timeout` | `Integer` | `2` | Ruby |
3227
+ | `ssl_options` | `Array` | See below | Ruby |
3228
+ | `user_agent` | `Integer` | `ascli` | `Rest` class |
3229
+ | `download_partial_suffix` | `Integer` | `.http_partial` | `Rest` class |
3230
+ | `retry_on_error` | `Bool` | `false` | `Rest` class |
3231
+ | `retry_on_timeout` | `Bool` | `true` | `Rest` class |
3232
+ | `retry_on_unavailable` | `Bool` | `true` | `Rest` class |
3233
+ | `retry_max` | `Integer` | `1` | `Rest` class |
3234
+ | `retry_sleep` | `Integer` | `4` | `Rest` class |
3235
+ | `token_cache_max_age` | `Integer` | `1800` | `OAuth` class |
3236
+ | `token_refresh_threshold` | `Integer` | `120` | `OAuth` class |
3091
3237
 
3092
3238
  Time values are in set **seconds** and can be of type either `Integer` or `Float`.
3093
3239
  Default values are the ones of Ruby:
@@ -3229,11 +3375,6 @@ This is the reason why it is advised to install the Aspera Transfer Daemon durin
3229
3375
 
3230
3376
  By default, `ascli` uses the `ascp` binary found in **well known locations**, i.e. typical Aspera product installation paths.
3231
3377
 
3232
- The way to specify the location of `ascp` is to use either options:
3233
-
3234
- - `ascp_path`
3235
- - `use_product`
3236
-
3237
3378
  The `config` plugin allows finding and specifying the location of `ascp`.
3238
3379
  It provides the following commands for `ascp` sub-command:
3239
3380
 
@@ -3242,32 +3383,11 @@ It provides the following commands for `ascp` sub-command:
3242
3383
  - `products` : list Aspera transfer products available locally
3243
3384
  - `connect` : list and download connect client versions available on internet
3244
3385
 
3245
- #### Show path of currently used `ascp`
3246
-
3247
- ```shell
3248
- ascli config ascp show
3249
- ```
3250
-
3251
- ```text
3252
- /Users/laurent/.aspera/ascli/sdk/ascp
3253
- ```
3254
-
3255
- ```shell
3256
- ascli config ascp info
3257
- ```
3258
-
3259
- ```text
3260
- ╭─────────┬──────────────────────────────────────────────────╮
3261
- │ field │ value │
3262
- ╞═════════╪══════════════════════════════════════════════════╡
3263
- │ ascp │ /Users/john/.aspera/sdk/ascp │
3264
- ...
3265
- ╰─────────┴──────────────────────────────────────────────────╯
3266
- ```
3267
-
3268
3386
  #### Selection of `ascp` location for [`direct`](#agent-direct) agent
3269
3387
 
3270
- By default, `ascli` uses any found local product with `ascp`, including Transfer Daemon.
3388
+ Option: `ascp_path` is used to specify the location of `ascp`.
3389
+ The default value is: `product:FIRST`.
3390
+ By default, `ascli` uses any found local product with `ascp`, including Transfer Daemon (SDK).
3271
3391
 
3272
3392
  To override and use an alternate `ascp` path use option `ascp_path` (`--ascp-path=`)
3273
3393
 
@@ -3299,10 +3419,9 @@ Saved to default global preset global_common_defaults
3299
3419
 
3300
3420
  If the path has spaces, read section: [Shell and Command line parsing](#command-line-parsing-special-characters).
3301
3421
 
3302
- If option `ascp_path` is not set, then the product identified with option `use_product` is used.
3303
-
3304
- If `use_product` is not set, then the first product found is used,
3305
- this is equivalent to using option: `--use-product=FIRST`.
3422
+ A special value `product:<product name>` can be used for option `ascp_path`.
3423
+ It specifies to use `ascp` from the given product name.
3424
+ A special value for product name is `FIRST`, which means: use the first found.
3306
3425
 
3307
3426
  Locally installed Aspera products can be listed with:
3308
3427
 
@@ -3321,13 +3440,42 @@ ascli config ascp products list
3321
3440
  +---------------------------------------+----------------------------------------+
3322
3441
  ```
3323
3442
 
3324
- Using the option `use_product` finds the `ascp` binary of the selected product.
3325
-
3326
3443
  To permanently use the `ascp` of a product:
3327
3444
 
3328
3445
  ```shell
3329
- ascli config ascp products use 'Aspera Connect'
3330
- saved to default global preset /Users/laurent/Applications/Aspera Connect.app/Contents/Resources/ascp
3446
+ ascli config ascp products use 'IBM Aspera Connect'
3447
+ Updated: default: config <- global_common_defaults
3448
+ Updated: global_common_defaults: ascp_path <- product:IBM Aspera Connect
3449
+ Saving config file.
3450
+ ```
3451
+
3452
+ It is the same as executing:
3453
+
3454
+ ```shell
3455
+ ascli config preset set GLOBAL ascp_path 'product:IBM Aspera Connect'
3456
+ ```
3457
+
3458
+ To show the path of currently used `ascp`:
3459
+
3460
+ ```shell
3461
+ ascli config ascp show
3462
+ ```
3463
+
3464
+ ```text
3465
+ /Users/laurent/.aspera/ascli/sdk/ascp
3466
+ ```
3467
+
3468
+ ```shell
3469
+ ascli config ascp info
3470
+ ```
3471
+
3472
+ ```text
3473
+ ╭─────────┬──────────────────────────────────────────────────╮
3474
+ │ field │ value │
3475
+ ╞═════════╪══════════════════════════════════════════════════╡
3476
+ │ ascp │ /Users/john/.aspera/sdk/ascp │
3477
+ ...
3478
+ ╰─────────┴──────────────────────────────────────────────────╯
3331
3479
  ```
3332
3480
 
3333
3481
  #### Installation of Connect Client on command line
@@ -3415,15 +3563,15 @@ The `transfer_info` option accepts the following optional parameters to control
3415
3563
  | Name | Type | Description |
3416
3564
  |------------------------|-----------|-----------------------------------------------------------------------------|
3417
3565
  | `wss` | `Bool` | Web Socket Session<br/>Enable use of web socket session in case it is available<br/>Default: `true` |
3418
- | `quiet` | `Bool` | If `true`, then `ascp` progress bar is not shown.<br/>Default: `false` |
3419
- | `trusted_certs` | `Array` | List of repositories for trusted certificates. |
3566
+ | `quiet` | `Bool` | If `true`, then `ascp` progress bar is not shown.<br/>Default: `false` |
3567
+ | `trusted_certs` | `Array` | List of repositories for trusted certificates. |
3420
3568
  | `client_ssh_key` | `String` | SSH Keys to use for token-based transfers.<br/>One of: `dsa_rsa`, `rsa`, `per_client`.<br/>Default: `rsa` |
3421
- | `ascp_args` | `Array` | `Array` of strings with native `ascp` arguments.<br/>Default: `[]` |
3569
+ | `ascp_args` | `Array` | `Array` of strings with native `ascp` arguments.<br/>Default: `[]` |
3422
3570
  | `spawn_timeout_sec` | `Float` | Multi session<br/>Verification time that `ascp` is running<br/>Default: `3` |
3423
- | `spawn_delay_sec` | `Float` | Multi session<br/>Delay between startup of sessions<br/>Default: `2` |
3571
+ | `spawn_delay_sec` | `Float` | Multi session<br/>Delay between startup of sessions<br/>Default: `2` |
3424
3572
  | `multi_incr_udp` | `Bool` | Multi Session<br/>Increment UDP port on multi-session<br/>If `true`, each session will have a different UDP port starting at `fasp_port` (or default 33001)<br/>Else, each session will use `fasp_port` (or `ascp` default)<br/>Default: `true` on Windows, else `false` |
3425
- | `resume` | `Hash` | Resume parameters. See below. |
3426
- | `resume.iter_max` | `Integer` | Max number of retry on error<br/>Default: `7` |
3573
+ | `resume` | `Hash` | Resume parameters. See below. |
3574
+ | `resume.iter_max` | `Integer` | Max number of retry on error<br/>Default: `7` |
3427
3575
  | `resume.sleep_initial` | `Integer` | First Sleep before retry<br/>Default: `2` |
3428
3576
  | `resume.sleep_factor` | `Integer` | Multiplier of sleep period between attempts<br/>Default: `2` |
3429
3577
  | `resume.sleep_max` | `Integer` | Default: `60` |
@@ -3505,12 +3653,12 @@ In addition to standard methods described in section [File List](#list-of-files-
3505
3653
  ##### Agent: Direct: Management messages
3506
3654
 
3507
3655
  By default, `ascli` gets notification from `ascp` on its management port.
3508
- This can be de-activated with parameter: `monitor=false` of `transfer_info`.
3656
+ This can be disabled with parameter: `monitor=false` of `transfer_info`.
3509
3657
 
3510
- It is also possible to send local messages to this management port.
3658
+ It is also possible to send messages to `ascp` using this management port.
3511
3659
  A typical use is to change the target rate of a running transfer.
3512
3660
 
3513
- The communication is done through a flat JSON file that shall be created in `ascli` config folder as displayed with:
3661
+ The communication is done through a JSON file that shall be created in `ascli`'s config folder as displayed with:
3514
3662
 
3515
3663
  ```shell
3516
3664
  ascli config folder
@@ -3518,13 +3666,24 @@ ascli config folder
3518
3666
 
3519
3667
  The name of the file shall be: `send_<PID>`, where `<PID>` is the process id of the running `ascli`.
3520
3668
 
3669
+ If there is only one `ascli` running, one can get the PID like this:
3670
+
3671
+ ```shell
3672
+ ps -axo pid,command|grep ascli|grep -v grep|cut -f1 -d' '
3673
+ ```
3674
+
3521
3675
  Example to change the target rate:
3522
3676
 
3523
3677
  ```shell
3524
3678
  echo '{"type":"RATE","Rate":300000}' > ~/.aspera/ascli/send_67470
3525
3679
  ```
3526
3680
 
3527
- When `ascli` detects this file, it uses it and then deletes it.
3681
+ When `ascli` detects this file, it uses it during a transfer and then deletes it.
3682
+
3683
+ > [!NOTE]
3684
+ > The JSON's keys use **snake case**, i.e. lower case with `_` as word separator.
3685
+ > The list of message `type` can be found in `aspera/ascp/management.rb` : `OPERATIONS`.
3686
+ > The list of parameters (capitalized) is `PARAMETERS`.
3528
3687
 
3529
3688
  ##### Agent: Direct: `aspera.conf`: Virtual Links
3530
3689
 
@@ -3533,8 +3692,8 @@ This agent supports a local configuration file: `aspera.conf` where Virtual link
3533
3692
  On a server (HSTS), the following commands can be used to set a global virtual link:
3534
3693
 
3535
3694
  ```shell
3536
- asconfigurator -x 'set_trunk_data;id,1;trunk_name,in;trunk_capacity,45000;trunk_on,true'
3537
- asconfigurator -x 'set_trunk_data;id,2;trunk_name,out;trunk_capacity,45000;trunk_on,true'
3695
+ asconfigurator -x 'set_trunk_data;id,1;trunk_name,in;trunk_capacity,100000;trunk_on,true'
3696
+ asconfigurator -x 'set_trunk_data;id,2;trunk_name,out;trunk_capacity,100000;trunk_on,true'
3538
3697
  asconfigurator -x 'set_node_data;transfer_in_bandwidth_aggregate_trunk_id,1'
3539
3698
  asconfigurator -x 'set_node_data;transfer_out_bandwidth_aggregate_trunk_id,2'
3540
3699
  ```
@@ -3799,7 +3958,18 @@ ascli config ascp info --fields=ts --flat-hash=no
3799
3958
  ```
3800
3959
 
3801
3960
  It is possible to specify `ascp` options when the `transfer` option is set to [`direct`](#agent-direct) using `transfer_info` option parameter: `ascp_args`.
3802
- Example: `--transfer-info=@json:'{"ascp_args":["-l","100m"]}'`.
3961
+ Example:
3962
+
3963
+ ```json
3964
+ --transfer-info=@json:'{"ascp_args":["-l","100m"]}'
3965
+ ```
3966
+
3967
+ Or an equivalent (using dotted expression):
3968
+
3969
+ ```json
3970
+ --transfer-info.ascp_args=@list:' -l 100m'
3971
+ ```
3972
+
3803
3973
  This is especially useful for `ascp` command line parameters not supported in the transfer spec.
3804
3974
 
3805
3975
  The use of a [**transfer-spec**](#transfer-specification) instead of `ascp` command line arguments has the advantage of:
@@ -3807,7 +3977,7 @@ The use of a [**transfer-spec**](#transfer-specification) instead of `ascp` comm
3807
3977
  - Common to all [Transfer Agent](#transfer-clients-agents)
3808
3978
  - Not dependent on command line limitations (special characters...)
3809
3979
 
3810
- ### Transfer Parameters
3980
+ #### Transfer Parameters
3811
3981
 
3812
3982
  All standard [**transfer-spec**](#transfer-specification) parameters can be specified.
3813
3983
  A [**transfer-spec**](#transfer-specification) can also be saved/overridden in the configuration file.
@@ -3839,8 +4009,10 @@ ascli config ascp schema transferd --format=jsonpp
3839
4009
 
3840
4010
  `ascp` argument or environment variable is provided in description.
3841
4011
 
4012
+ #### Transfer Specification Reference
4013
+
3842
4014
  | ID | Name |
3843
- | - | --------- |
4015
+ |----|-----------|
3844
4016
  | A | Direct |
3845
4017
  | C | Connect |
3846
4018
  | D | Desktop |
@@ -3849,15 +4021,15 @@ ascli config ascp schema transferd --format=jsonpp
3849
4021
  | T | Transferd |
3850
4022
 
3851
4023
  | Field | Type | Description |
3852
- | ------------------------------ | ------- | -------------------------------------------------------------------------------- |
4024
+ |--------------------------------|---------|----------------------------------------------------------------------------------|
3853
4025
  | apply_local_docroot | boolean | Apply local docroot to source paths.<br/>(A, T)<br/>(`--apply-local-docroot`) |
3854
4026
  | authentication | string | Set to `token` for SSH bypass keys, else password asked if not provided.<br/>(C) |
3855
4027
  | 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}`) |
3856
4028
  | 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`) |
4029
+ | content_protection | string | Enable client-side content protection (CSEAR, encryption-at-rest).<br/>For uploads, set to `encrypt` to transfer encrypted files and store them on the server with the extension `.aspera-env`. (`aspera.conf` parameter `transfer_encryption_content_protection_extension`). To download and decrypt encrypted files, set to `decrypt`<br/>`content_protection_password` must be specified if this option is set.<br/>Allowed values: `encrypt`, `decrypt`<br/>(`--file-crypt={enum}`) |
4030
+ | content_protection_password | string | Password for encryption/decryption of transferred assets.<br/>(env:`ASPERA_SCP_FILEPASS`) |
3859
4031
  | cookie | string | Metadata for transfer specified by application.<br/>(env:`ASPERA_SCP_COOKIE`) |
3860
- | create_dir | boolean | Specifies whether to create new directories.<br/>(`-d`) |
4032
+ | create_dir | boolean | Create target directory if it doesn't already exist.<br/>If **all** the following conditions are met, then the `destination_root` specifies a filename instead of destination folder:<br/>- `create_dir` is `false`<br/>- A single source file is given on **command line**<br/>- The target folder specified by `destination_root` does not exist<br/>In all other cases, `destination_root` specifies a folder, and it is created if it does not already exist. I.e. if **any** of those conditions is met:<br/>- `create_dir` is `true`<br/>- Multiple source files are provided<br/>- List of source files are provided in a file (list or pair), default for Node API and `ascli`.<br/>- The target folder exists<br/>(`-d`) |
3861
4033
  | 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`) |
3862
4034
  | 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) |
3863
4035
  | destination_root | string | Destination root directory. |
@@ -3924,7 +4096,7 @@ ascli config ascp schema transferd --format=jsonpp
3924
4096
  | src_base64 | string | The folder name below which the directory structure is preserved (base64 encoded).<br/>(A, T)<br/>(`--src-base64={string}`) |
3925
4097
  | 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}`) |
3926
4098
  | ssh_port | integer | Specifies SSH (TCP) port.<br/>(`-P {integer}`) |
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`) |
4099
+ | ssh_private_key | string | Private key used for SSH authentication.<br/>Shall look like: -----BEGIN RSA PRIV4TE KEY-----&bsol;nMII...<br/>Note the JSON encoding: &bsol;n for newlines.<br/>(A, T)<br/>(env:`ASPERA_SCP_KEY`) |
3928
4100
  | 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`) |
3929
4101
  | ssh_private_key_path | string | Path to private key for SSH.<br/>(A, T)<br/>(`-i {string}`) |
3930
4102
  | sshfp | string | Check it against server SSH host key fingerprint.<br/>(`--check-sshfp={string}`) |
@@ -3936,10 +4108,10 @@ ascli config ascp schema transferd --format=jsonpp
3936
4108
  | title | string | Title of the transfer.<br/>(C, N, T) |
3937
4109
  | token | string | Authorization token. Type: Bearer, Basic or ATM. (Also arg -W)<br/>(env:`ASPERA_SCP_TOKEN`) |
3938
4110
  | 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}`) |
4111
+ | use_system_ssh | boolean | Use an external `ssh` program instead of the built-in `libssh2` implementation to establish the connection to the remote host. The desired `ssh` program must be in the environment's `PATH`.<br/>To enable debugging of the `ssh` process, supply `-DD` and `--ssh-arg=-vv` arguments to `ascp`.<br/>(A, T)<br/>(`-SSH`) |
3940
4112
  | wss_enabled | boolean | Server has Web Socket service enabled.<br/>(special:`--ws-connect`) |
3941
4113
  | wss_port | integer | TCP port used for Web Socket service feed. |
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) |
4114
+ | xfer_max_retries | integer | Maximum number of retries, for node API initiated transfers. Shall not exceed `aspera.conf` parameter `transfer_manager_max_retries` (default 5).<br/>(N) |
3943
4115
 
3944
4116
  #### Destination folder for transfers
3945
4117
 
@@ -4132,8 +4304,13 @@ When multi-session is used, one separate UDP port is used per session (refer to
4132
4304
 
4133
4305
  #### Content protection
4134
4306
 
4135
- Also known as Client-side encryption at rest (CSEAR), content protection allows a client to send files to a server which will store them encrypted (upload), and decrypt files as they are being downloaded from a server, both using a passphrase, only known by users sharing files.
4136
- Files stay encrypted on server side.
4307
+ Content protection (Client-Side Encryption at REST, CSEAR)) ensures that files remain encrypted while stored on the server.
4308
+ With CSEAR, the client encrypts files during upload and decrypts files during download, using a passphrase known only to the users sharing the files.
4309
+
4310
+ - Upload: Files are encrypted on the client side before being sent to the server.
4311
+ - Download: Files are decrypted on the client side as they are retrieved from the server.
4312
+
4313
+ At all times, files remain encrypted on the server; encryption and decryption occur exclusively on the client side.
4137
4314
 
4138
4315
  Activating CSEAR consists in using transfer spec parameters:
4139
4316
 
@@ -4146,6 +4323,11 @@ Example: parameter to download a Faspex package and decrypt on the fly
4146
4323
  --ts=@json:'{"content_protection":"decrypt","content_protection_password":"my_password_here"}'
4147
4324
  ```
4148
4325
 
4326
+ > [!NOTE]
4327
+ > Faspex 5 requires package parameter `ear_enabled` set to `true` for CSEAR.
4328
+ > In that case the transfer spec parameter `content_protection` is automatically set.
4329
+ > `content_protection_password` is then required in all cases.
4330
+
4149
4331
  #### Transfer Spec Examples
4150
4332
 
4151
4333
  - Change target rate
@@ -4454,7 +4636,7 @@ ascli server upload "faux:///mydir?file=testfile&count=1000&size=1" --to-folder=
4454
4636
  ```text
4455
4637
  ascli -h
4456
4638
  NAME
4457
- ascli -- a command line tool for Aspera Applications (v4.24.2)
4639
+ ascli -- a command line tool for Aspera Applications (v4.25.0.beta2)
4458
4640
 
4459
4641
  SYNOPSIS
4460
4642
  ascli COMMANDS [OPTIONS] [ARGS]
@@ -4476,7 +4658,7 @@ COMMANDS
4476
4658
  OPTIONS
4477
4659
  Options begin with a '-' (minus), and value is provided on command line.
4478
4660
  Special values are supported beginning with special prefix @pfx:, where pfx is one of:
4479
- val, base64, csvt, env, file, uri, json, lines, list, none, path, re, ruby, secret, stdin, stdbin, yaml, zlib, extend, preset, vault
4661
+ val, base64, csvt, env, file, uri, json, lines, list, none, path, re, ruby, secret, stdin, yaml, zlib, extend, preset, vault,
4480
4662
  Dates format is 'DD-MM-YY HH:MM:SS', or 'now' or '-<num>h'
4481
4663
 
4482
4664
  ARGS
@@ -4485,11 +4667,10 @@ ARGS
4485
4667
  OPTIONS: global
4486
4668
  --interactive=ENUM Use interactive input of missing params: [no], yes
4487
4669
  --ask-options=ENUM Ask even optional options: [no], yes
4488
- --struct-parser=ENUM Default parser when expected value is a struct: json, ruby
4489
4670
  --format=ENUM Output format: text, nagios, ruby, json, jsonpp, yaml, [table], csv, image
4490
- --output=VALUE Destination for results (String)
4671
+ --output=VALUE Destination for results
4491
4672
  --display=ENUM Output only some information: [info], data, error
4492
- --fields=VALUE Comma separated list of: fields, or ALL, or DEF (String, Array, Regexp, Proc)
4673
+ --fields=VALUE Comma separated list of: fields, or ALL, or DEF (Array, Regexp, Proc)
4493
4674
  --select=VALUE Select only some items in lists: column, value (Hash, Proc)
4494
4675
  --table-style=VALUE (Table) Display style (Hash)
4495
4676
  --flat-hash=ENUM (Table) Display deep values as additional keys: no, [yes]
@@ -4503,15 +4684,16 @@ OPTIONS: global
4503
4684
  --ui=ENUM Method to start browser: text, [graphical]
4504
4685
  --invalid-characters=VALUE Replacement character and invalid filename characters
4505
4686
  --log-level=ENUM Log level: trace2, trace1, debug, info, [warn], error, fatal, unknown
4506
- --log-format=VALUE Log formatter (Proc, Logger::Formatter, String)
4687
+ --log-format=VALUE Log formatter (Proc, Logger::Formatter)
4507
4688
  --logger=ENUM Logging method: [stderr], stdout, syslog
4508
4689
  --lock-port=VALUE Prevent dual execution of a command, e.g. in cron (Integer)
4509
4690
  --once-only=ENUM Process only new items (some commands): [no], yes
4510
4691
  --log-secrets=ENUM Show passwords in logs: [no], yes
4511
4692
  --clean-temp=ENUM Cleanup temporary files on exit: no, [yes]
4512
4693
  --temp-folder=VALUE Temporary folder
4513
- --pid-file=VALUE Write process identifier to file, delete on exit (String)
4514
- --home=VALUE Home folder for tool (String)
4694
+ --pid-file=VALUE Write process identifier to file, delete on exit
4695
+ --parser=ENUM Default parser for structured parameters and options: none, json, ruby, yaml
4696
+ --home=VALUE Home folder for tool
4515
4697
  --config-file=VALUE Path to YAML file with preset configuration
4516
4698
  --secret=VALUE Secret for access keys
4517
4699
  --vault=VALUE Vault for secrets (Hash)
@@ -4522,16 +4704,15 @@ OPTIONS: global
4522
4704
  --bfail=ENUM Bulk operation error handling: no, [yes]
4523
4705
  -N, --no-default Do not load default configuration for plugin
4524
4706
  -P, --presetVALUE Load the named option preset from current config file
4525
- --version-check-days=VALUE Period in days to check new version (zero to disable)
4707
+ --version-check-days=VALUE Period in days to check new version (zero to disable) (Integer)
4526
4708
  --plugin-folder=VALUE Folder where to find additional plugins
4527
4709
  --override=ENUM Wizard: override existing value: [no], yes
4528
4710
  --default=ENUM Wizard: set as default configuration for specified plugin (also: update): no, [yes]
4529
4711
  --key-path=VALUE Wizard: path to private key for JWT
4530
- --ascp-path=VALUE Ascp: Path to ascp
4531
- --use-product=VALUE Ascp: Use ascp from specified product
4532
4712
  --sdk-url=VALUE Ascp: URL to get Aspera Transfer Executables
4533
- --locations-url=VALUE Ascp: URL to get locations of Aspera Transfer Daemon
4534
- --sdk-folder=VALUE Ascp: SDK folder path
4713
+ --ascp-path=VALUE Ascp: Path to ascp (or product with "product:")
4714
+ --locations-url=VALUE Ascp: URL to get download locations of Aspera Transfer Daemon
4715
+ --sdk-folder=VALUE Ascp: SDK installation folder path
4535
4716
  --progress-bar=ENUM Display progress bar: [no], yes
4536
4717
  --smtp=VALUE Email: SMTP configuration (Hash)
4537
4718
  --notify-to=VALUE Email: Recipient for notification of transfers
@@ -4539,9 +4720,9 @@ OPTIONS: global
4539
4720
  --insecure=ENUM HTTP/S: Do not validate any certificate: [no], yes
4540
4721
  --ignore-certificate=VALUE HTTP/S: Do not validate certificate for these URLs (Array)
4541
4722
  --warn-insecure=ENUM HTTP/S: Issue a warning if certificate is ignored: no, [yes]
4542
- --cert-stores=VALUE HTTP/S: List of folder with trusted certificates (Array, String)
4723
+ --cert-stores=VALUE HTTP/S: List of folder with trusted certificates (Array)
4543
4724
  --http-options=VALUE HTTP/S: Options for HTTP/S socket (Hash)
4544
- --http-proxy=VALUE HTTP/S: URL for proxy with optional credentials (String)
4725
+ --http-proxy=VALUE HTTP/S: URL for proxy with optional credentials
4545
4726
  --cache-tokens=ENUM Save and reuse OAuth tokens: no, [yes]
4546
4727
  --fpac=VALUE Proxy auto configuration script
4547
4728
  --proxy-credentials=VALUE HTTP proxy credentials for fpac: user, password (Array)
@@ -4565,7 +4746,7 @@ OPTIONS:
4565
4746
 
4566
4747
 
4567
4748
  COMMAND: node
4568
- SUBCOMMANDS: access_keys api_details asperabrowser async basic_token bearer_token browse cat central delete download events health info license mkdir mkfile mklink rename search service simulator slash space ssync stream sync telemetry transfer transport upload watch_folder
4749
+ SUBCOMMANDS: access_keys api_details asperabrowser async basic_token bearer_token browse cat central delete download events health info license mkdir mkfile mklink rename search service simulator slash space spec ssync stream sync telemetry transfer transport upload watch_folder
4569
4750
  OPTIONS:
4570
4751
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4571
4752
  --username=VALUE User's identifier
@@ -4591,7 +4772,7 @@ OPTIONS:
4591
4772
 
4592
4773
 
4593
4774
  COMMAND: orchestrator
4594
- SUBCOMMANDS: health info plugins processes workflow
4775
+ SUBCOMMANDS: health info monitors plugins processes workflows workorders workstep
4595
4776
  OPTIONS:
4596
4777
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4597
4778
  --username=VALUE User's identifier
@@ -4677,11 +4858,11 @@ OPTIONS:
4677
4858
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4678
4859
  --username=VALUE User's identifier
4679
4860
  --password=VALUE User's password
4680
- --skip-format=ENUM Skip this preview format (multiple possible): png, mp4
4861
+ --skip-format=ENUM Skip this preview format: png, mp4
4681
4862
  --folder-reset-cache=ENUM Force detection of generated preview by refresh cache: [no], header, read
4682
- --skip-types=VALUE Skip types in comma separated list
4863
+ --skip-types=VALUE Skip generation for those types of files (Array)
4683
4864
  --previews-folder=VALUE Preview folder in storage root
4684
- --skip-folders=VALUE List of folder to skip
4865
+ --skip-folders=VALUE List of folder to skip (Array)
4685
4866
  --base=VALUE Basename of output for for test
4686
4867
  --scan-path=VALUE Subpath in folder id to start scan in (default=/)
4687
4868
  --scan-id=VALUE Folder id in storage to start scan in, default is access key main folder id
@@ -4719,10 +4900,10 @@ OPTIONS:
4719
4900
  --private-key=VALUE OAuth (JWT) RSA private key PEM value (prefix file path with @file:)
4720
4901
  --passphrase=VALUE OAuth (JWT) RSA private key passphrase
4721
4902
  --scope=VALUE OAuth scope for API calls
4722
- --workspace=VALUE Name of workspace (String, NilClass)
4903
+ --workspace=VALUE Name of workspace
4723
4904
  --new-user-option=VALUE New user creation option for unknown package recipients (Hash)
4724
4905
  --validate-metadata=ENUM Validate shared inbox metadata: no, [yes]
4725
- --package-folder=VALUE Field of package to use as folder name, or @none: (String, NilClass)
4906
+ --package-folder=VALUE Handling of reception of packages in folders (Hash)
4726
4907
 
4727
4908
 
4728
4909
  COMMAND: server
@@ -4731,7 +4912,7 @@ OPTIONS:
4731
4912
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4732
4913
  --username=VALUE User's identifier
4733
4914
  --password=VALUE User's password
4734
- --ssh-keys=VALUE SSH key path list (Array or single)
4915
+ --ssh-keys=VALUE SSH key path list (Array)
4735
4916
  --passphrase=VALUE SSH private key passphrase
4736
4917
  --ssh-options=VALUE SSH options (Hash)
4737
4918
 
@@ -4758,18 +4939,17 @@ This option is available only for some resources: if you need it: try and see if
4758
4939
  ### Option: `query`
4759
4940
 
4760
4941
  The `query` option can generally be used to add URL parameters to commands that list resources.
4761
- It takes either a `Hash` or an `Array`, corresponding to key/value pairs that appear in the query part of request.
4942
+ It takes either a `Hash`, corresponding to key/value pairs that appear in the query part of request.
4762
4943
 
4763
4944
  For example: `--query=@json:'{"p1":"v1","p2":"v2"}'` leads to query: `?p1=v1&p2=v2`.
4764
4945
 
4765
- If the same parameter needs to be provided several times, then it's possible as well to provide an `Array` or 2-element `Array`: `--query=@json:'[["p1":,"v1"],["p2":"v2"]]'` leads to the same result as previously.
4946
+ If the same parameter needs to be provided several times, then it's possible as well to provide an `Array`.
4766
4947
 
4767
- If PHP's style array is used, then one can use either:
4948
+ For example: `--query=@json:'{"p":["v1","v2"]}'` leads to query: `?p=v1&p=v2`.
4768
4949
 
4769
- - `--query=@json:'{"a":["[]","v1","v2"]}'`
4770
- - `--query=@json:'[["a[]","v1"],["a[]","v2"]]'`
4950
+ If PHP's style array is expected in the API, then just add `[]` to the name of the parameter.
4771
4951
 
4772
- Both result in: `?a[]=v1&a[]=v2`.
4952
+ For example: `--query=@json:'{"p[]":["v1","v2"]}'` leads to query: `?p[]=v1&p[]=v2`.
4773
4953
 
4774
4954
  ### Plugins
4775
4955
 
@@ -5138,7 +5318,7 @@ ascli aoc files bearer_token_node /
5138
5318
  ```
5139
5319
 
5140
5320
  ```shell
5141
- ascli aoc admin node v4 _my_node_id_ --secret=_ak_secret_here_ bearer_token_node /
5321
+ ascli aoc admin node v4 <node_id> --secret=_ak_secret_here_ bearer_token_node /
5142
5322
  ```
5143
5323
 
5144
5324
  ### Administration
@@ -5741,13 +5921,13 @@ ascli aoc packages send @json:'{"name":"my title","note":"my note","recipients":
5741
5921
  ##### Example: Send a package to a shared inbox with metadata
5742
5922
 
5743
5923
  ```shell
5744
- ascli aoc packages send --workspace="my ws" @json:'{"name":"my pack title","recipients":["Shared Inbox With Meta"],"metadata":{"Project Id":"123","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' ~/Documents/Samples/200KB.1
5924
+ ascli aoc packages send --workspace="<workspace_name>" @json:'{"name":"my pack title","recipients":["Shared Inbox With Meta"],"metadata":{"Project Id":"123","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' ~/Documents/Samples/200KB.1
5745
5925
  ```
5746
5926
 
5747
5927
  It is also possible to use identifiers and API parameters:
5748
5928
 
5749
5929
  ```shell
5750
- ascli aoc packages send --workspace="my ws" @json:'{"name":"my pack title","recipients":[{"type":"dropbox","id":"12345"}],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' ~/Documents/Samples/200KB.1
5930
+ ascli aoc packages send --workspace="<workspace_name>" @json:'{"name":"my pack title","recipients":[{"type":"dropbox","id":"12345"}],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' ~/Documents/Samples/200KB.1
5751
5931
  ```
5752
5932
 
5753
5933
  ##### Example: Send a package with files from the Files app
@@ -5789,39 +5969,38 @@ Option `once_only` is supported, see below.
5789
5969
  To download only some files from the package, just add the path of the files on the command line: `[<file> ...]`, see option `sources`.
5790
5970
  By default, all files in the package are downloaded, i.e. `.` is used as the file list.
5791
5971
 
5792
- Option `package_folder` defines the attribute of folder used as destination sub folder in the `to_folder` path (see description earlier).
5793
- The following syntax is supported
5972
+ ##### Option `package_folder`
5794
5973
 
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 `.`. |
5974
+ The option `package_folder` (Hash) allows downloading packages in sub-folders of the `to_folder` path (see description earlier).
5975
+ If this option is not specified (or Hash is empty), then packages are downloaded in the folder specified by the `to_folder` option.
5801
5976
 
5802
- The special value `seq` for `<field2>` will append an incrementing number to the folder name starting at `1`.
5803
- If `?` is used, then the sequence number is used only if the folder already exists.
5977
+ The following fields are supported to define the name of the sub-folder:
5804
5978
 
5805
- Examples:
5979
+ | Field | Type | Description |
5980
+ |-------|---------|---------------------------------------------------------------------------|
5981
+ | none | - | (Default) No subfolder. |
5982
+ | `fld` | `Array` | The package's specified fields (`.`-joined). (max size: 2) |
5983
+ | `seq` | `Bool` | If `true`, add an incrementing number to the folder name starting at `1`. |
5984
+ | `opt` | `Bool` | If `false` (default), then all fields are used.<br/>Else, only if the folder does not already exist. |
5985
+ | `inf` | `Bool` | If `true`, then a file is created (`<ID>.info.json`) with package information (metadata, same information as sidecar file). |
5986
+
5987
+ Examples (JSON):
5806
5988
 
5807
- - `id` :
5808
- Subfolder named after package ID.
5989
+ - `{"fields":["id"]}` :
5990
+ Subfolder is the package ID.
5809
5991
  If the same package is downloaded several times, it will always be placed in the same folder.
5810
- - `name` :
5811
- Subfolder named after package name.
5992
+ - `{"fields":["name"]}` :
5993
+ Subfolder is the package name.
5812
5994
  If two packages with the same name are downloaded, they will be combined in the same folder.
5813
- - `name+id` :
5814
- Subfolder named after the combination of package name and ID.
5815
- - `name+id?` :
5816
- Subfolder named after the package's name is created, unless it already exists.
5817
- Else it falls back to the combination of both fields with `.`.
5818
- - `name+seq?` :
5819
- Subfolder named after the package's name is created, unless it already exists.
5820
- Else it falls back to the combination of name and sequence number.
5821
-
5822
- > [!NOTE]
5823
- > When `<field1>+<field2>?` is used, if two packages are downloaded and have the same fields, they will be downloaded in the same folder.
5824
- > If `name+seq?` is used, if the same package is downloaded multiple times, it will be placed in different folders with a sequence number.
5995
+ - `{"fields":["name","id"]}` :
5996
+ Subfolder is the combination of package name and ID.
5997
+ - `{"fields":["name","id"],"opt":true}` :
5998
+ Subfolder is the package's name is created, unless it already exists.
5999
+ If it exists, then the combination of both fields joined with `.` is used.
6000
+ - `{"fields":["name"],"seq":true,"opt":true}` :
6001
+ Subfolder is the package's name, unless it already exists.
6002
+ If it exists, then the combination of name and sequence number.
6003
+ If the same package is downloaded multiple times, it will be placed in different folders with a sequence number.
5825
6004
 
5826
6005
  ##### Example: Receive all packages from a given shared inbox
5827
6006
 
@@ -5938,7 +6117,7 @@ ascli aoc files download <single file path>
5938
6117
 
5939
6118
  #### Shared folders
5940
6119
 
5941
- Like in AoC web UI, "Shared Folders" can be created and shared with either **Private** or **Public** links.
6120
+ Like in AoC web UI, **Shared Folders** can be created and shared with either **Private** or **Public** links.
5942
6121
  **Private** links require the collaborator to log in to access the shared folder.
5943
6122
  **Public** links include a passcode that enables the user to access the shared folder without login-in.
5944
6123
 
@@ -5976,8 +6155,8 @@ The basic payload to create a permission, i.e. a Shared Folder (last argument at
5976
6155
  | `link_name` | `ascli` | Name of the link file created in the user's home folder for private links. |
5977
6156
  | `as` | `ascli` | Name of the link file created in the user's home folder for admin shared folders. |
5978
6157
 
5979
- In order to declare/create the shared folder in the workspace, a special value for `access_id` is used: `ASPERA_ACCESS_KEY_ADMIN_WS_[workspace ID]]`.
5980
- This is conveniently set by `ascli` using an empty string for field `with`.
6158
+ In order to declare/create the shared folder in the workspace, a special value for `access_id` is used: `ASPERA_ACCESS_KEY_ADMIN_WS_[workspace ID]`, with a `access_type` of `user`.
6159
+ This is conveniently set by `ascli` using an **empty string** for field `with`.
5981
6160
  In order to share a folder with a different, special tags are set, but this is conveniently done by `ascli` using the `as` field.
5982
6161
 
5983
6162
  ##### User Shared Folders
@@ -5994,7 +6173,7 @@ ascli aoc files permission --workspace=<workspace name> <path to folder> ...
5994
6173
 
5995
6174
  ##### Admin Shared Folders
5996
6175
 
5997
- Admin shared folders, created by administrators in a workspace follow the syntax:
6176
+ Admin shared folders, created by administrators in a workspace, follow the syntax:
5998
6177
 
5999
6178
  ```shell
6000
6179
  ascli aoc admin node do <node ID> permission --workspace=<workspace name> <path to folder>
@@ -6006,7 +6185,7 @@ ascli aoc admin node do <node ID> permission --workspace=<workspace name> <path
6006
6185
  > The path is identifier by a path, one can specify a file id, with `%id:123`.
6007
6186
  > If the id is left blank: `%id:`, then if means `*`, i.e. all.
6008
6187
 
6009
- ##### Example: List permissions on a shared folder
6188
+ ##### Example: List permissions on a user shared folder
6010
6189
 
6011
6190
  ```shell
6012
6191
  ascli aoc files permission /shared_folder_test1 list
@@ -6053,7 +6232,7 @@ To remove a password:
6053
6232
  > [!NOTE]
6054
6233
  > Access level cannot be customized in this version.
6055
6234
 
6056
- An expiration date can be set with parameter `expires_at`, using ISO 8601 format.
6235
+ An expiration date can be set with parameter `expires_at`, using [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
6057
6236
  E.g. `2025-08-29T08:10:31.000Z`.
6058
6237
  If only a date is provided, it will be set to midnight UTC of that date.
6059
6238
 
@@ -6061,16 +6240,16 @@ If only a date is provided, it will be set to midnight UTC of that date.
6061
6240
 
6062
6241
  First, identify the node ID where the shared folder will be created.
6063
6242
 
6064
- To get the node ID of the default node for workspace `my ws`, use the command:
6243
+ To get the node ID of the default node for workspace `<workspace_name>`, use the command:
6065
6244
 
6066
6245
  ```shell
6067
- ascli aoc admin workspace show %name:'my ws' --fields=node_id
6246
+ ascli aoc admin workspace show %name:'<workspace_name>' --fields=node_id
6068
6247
  ```
6069
6248
 
6070
6249
  Alternatively (longer):
6071
6250
 
6072
6251
  ```shell
6073
- ascli aoc admin workspace list --select=@json:'{"name":"my ws"}' --fields=node_id
6252
+ ascli aoc admin workspace list --select=@json:'{"name":"<workspace_name>"}' --fields=node_id
6074
6253
  ```
6075
6254
 
6076
6255
  Or select a node identifier manually from the list of nodes:
@@ -6081,24 +6260,22 @@ ascli aoc admin node list --fields=id,name
6081
6260
 
6082
6261
  In the following commands, replace:
6083
6262
 
6084
- - `_my_node_id_` with the node ID
6085
- - `my ws` with the workspace name
6086
- - `/folder_on_node` with the name of the folder on the node: it can also be a folder deeper than level 1.
6087
-
6088
- The node can also be conveniently identified using the **percent selector** instead of numerical ID: `%name:"my node"`.
6263
+ - `<node_id>` with the node ID, or with `%name:<node_name>`.
6264
+ - `<workspace_name>` with the workspace name, or with `%id:<workspace_id>`.
6265
+ - `<folder_path>` with the path of the folder to share on the node (e.g. `/my_folder` or simply `my_folder`). It can also be a folder deeper than level 1.
6089
6266
 
6090
6267
  If the shared folder does not exist, then create it:
6091
6268
 
6092
6269
  ```shell
6093
- ascli aoc admin node do _my_node_id_ mkdir /folder_on_node
6270
+ ascli aoc admin node do <node_id> mkdir <folder_path>
6094
6271
  ```
6095
6272
 
6096
- Create the shared folder in workspace `my ws` (set `with` to empty string, or do not specify it).
6097
- Optionally use `as` to set the name of the shared folder if different from the folder name on the node.
6273
+ Create the shared folder in workspace `<workspace_name>` (set `with` to empty string, or do not specify it).
6274
+ **Optionally**, use `as` to set the name of the shared folder if different from the folder name on the node.
6098
6275
  For other options, refer to the previous section on shared folders.
6099
6276
 
6100
6277
  ```shell
6101
- ascli aoc admin node do _my_node_id_ permission /folder_on_node create @json:'{"with":"","as":"folder_for_users"}' --workspace="my ws"
6278
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"","as":"folder_for_users"}' --workspace="<workspace_name>"
6102
6279
  ```
6103
6280
 
6104
6281
  > [!NOTE]
@@ -6109,30 +6286,67 @@ The `"with"` parameter will perform a lookup, and set fields `access_type` and `
6109
6286
  The native fields `access_type` and `access_id` can also be used, instead of `with`.
6110
6287
 
6111
6288
  ```shell
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"
6289
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"john@example.com","as":"folder_for_one_user"}' --workspace="<workspace_name>"
6113
6290
  ```
6114
6291
 
6115
6292
  ```shell
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"
6293
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"group 1","as":"folder_for_a_group"}' --workspace="<workspace_name>"
6117
6294
  ```
6118
6295
 
6119
6296
  ```shell
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"
6297
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"<workspace_name>","as":"folder_for_all_workspace"}' --workspace="<workspace_name>"
6121
6298
  ```
6122
6299
 
6123
6300
  > [!NOTE]
6124
6301
  > In the previous commands, field `as` is optional.
6125
6302
 
6303
+ ##### Example: List all workspace admin shared folder in a workspace
6304
+
6305
+ ```shell
6306
+ ascli aoc admin workspace shared_folder %name:'<workspace_name>' list
6307
+ ```
6308
+
6309
+ ```text
6310
+ ╭───────┬───────────┬─────────┬─────────┬───────────┬──────────────────────────────────────╮
6311
+ │ id │ node_name │ node_id │ file_id │ file.path │ tags.aspera.files.workspace.share_as │
6312
+ ╞═══════╪═══════════╪═════════╪═════════╪═══════════╪══════════════════════════════════════╡
6313
+ │ 198 │ eudemo │ 8666 │ 2465 │ /project1 │ │
6314
+ │ 785 │ eudemo │ 8666 │ 9 │ /folder2 │ project2 │
6315
+ │ 4788 │ eudemo │ 8666 │ 3691 │ /backup │ │
6316
+ ╰───────┴───────────┴─────────┴─────────┴───────────┴──────────────────────────────────────╯
6317
+ ```
6318
+
6319
+ To list members:
6320
+
6321
+ ```shell
6322
+ ascli aoc admin workspace shared_folder %name:'<workspace_name>' member 198 list
6323
+ ```
6324
+
6325
+ ```text
6326
+ ╭─────────────┬──────────────────────────────────┬──────────────┬──────────────────────╮
6327
+ │ access_type │ access_id │ access_level │ last_updated_at │
6328
+ ╞═════════════╪══════════════════════════════════╪══════════════╪══════════════════════╡
6329
+ │ user │ ASPERA_ACCESS_KEY_ADMIN_WS_45071 │ edit │ 2020-11-29T22:48:49Z │
6330
+ │ group │ 160270 │ edit │ 2024-05-13T15:58:02Z │
6331
+ ╰─────────────┴──────────────────────────────────┴──────────────┴──────────────────────╯
6332
+ ```
6333
+
6334
+ If you have the node id of the shared folder, than it is equivalent to:
6335
+
6336
+ ```shell
6337
+ ascli aoc admin node do 8669 perm /project1 list --query=@json:'{"tag":"aspera.files.workspace.id=<workspace_id>"}'
6338
+ ```
6339
+
6126
6340
  ##### Example: List all workspace admin shared folder on a node
6127
6341
 
6128
6342
  First get the workspace identifier:
6129
6343
 
6130
6344
  ```shell
6131
- ascli aoc admin workspace list --select=@json:'{"name":"my ws"}' --fields=id
6345
+ ascli aoc admin workspace list --select=@json:'{"name":"<workspace_name>"}' --fields=id
6132
6346
  ```
6133
6347
 
6134
6348
  ```text
6135
- 111111
6349
+ <workspace_id>
6136
6350
  ```
6137
6351
 
6138
6352
  Then, identify the node id on which to list, see previous section.
@@ -6140,7 +6354,7 @@ Then, identify the node id on which to list, see previous section.
6140
6354
  Finally, list all shared folders, as permissions:
6141
6355
 
6142
6356
  ```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"}'
6357
+ ascli aoc admin node do <node_id> perm %id: list --query=@json:'{"access_type":"user","access_id":"ASPERA_ACCESS_KEY_ADMIN_WS_<workspace_id>"}'
6144
6358
  ```
6145
6359
 
6146
6360
  > [!NOTE]
@@ -6197,11 +6411,12 @@ For instructions, refer to section `find` for plugin `node`.
6197
6411
  > Add `ascli aoc` in front of the following commands:
6198
6412
 
6199
6413
  ```bash
6200
- admin analytics transfers nodes
6414
+ admin analytics application_events
6415
+ admin analytics files organization '' aoc_transfer_id
6201
6416
  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%>}'
6202
6417
  admin analytics transfers users --once-only=yes
6203
6418
  admin application list
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":"/"}}'
6419
+ admin ats access_key create --cloud=aws --region=my_region @json:'{"id":"ak_aws_aoc","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6205
6420
  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":"/"}}'
6206
6421
  admin ats access_key delete ak1ibmcloud
6207
6422
  admin ats access_key list --fields=name,id
@@ -6220,7 +6435,9 @@ admin contact list
6220
6435
  admin dropbox list
6221
6436
  admin dropbox_membership list
6222
6437
  admin group list
6438
+ admin group_membership list --fields=ALL --query=@json:'{"page":1,"per_page":50,"embed":"member","inherited":false,"workspace_id":11363,"sort":"name"}'
6223
6439
  admin kms_profile list
6440
+ admin node bearer_token %name:my_node_name --scope=admin:all
6224
6441
  admin node do %name:my_node_name --secret=my_ak_secret browse /
6225
6442
  admin node do %name:my_node_name --secret=my_ak_secret browse /folder_sub --node-cache=no
6226
6443
  admin node do %name:my_node_name --secret=my_ak_secret delete /folder1
@@ -6247,15 +6464,18 @@ admin subscription usage
6247
6464
  admin subscription usage MONTH
6248
6465
  admin user list
6249
6466
  admin user modify %name:my_user_email @json:'{"deactivated":false}'
6467
+ admin workspace dropbox %name:my_other_workspace list
6250
6468
  admin workspace list
6469
+ admin workspace shared_folder %name:my_other_workspace list
6470
+ admin workspace shared_folder %name:my_other_workspace member shared_folder_id list
6251
6471
  admin workspace_membership list
6252
6472
  admin workspace_membership list --fields=ALL --query=@json:'{"page":1,"per_page":50,"embed":"member","inherited":false,"workspace_id":11363,"sort":"name"}'
6253
- automation workflow action wf_id create @json:'{"name":"toto"}' \
6473
+ automation workflow action wf_id create @json:'{"name":"toto"}'
6254
6474
  automation workflow create @json:'{"name":"test_workflow"}'
6255
6475
  automation workflow delete wf_id
6256
6476
  automation workflow list
6257
6477
  automation workflow list --query=@json:'{"show_org_workflows":"true"}' --scope=admin:all
6258
- automation workflow list --select=@json:'{"name":"test_workflow"}' --fields=id --format=csv --display=data --output=test
6478
+ automation workflow list --select=@json:'{"name":"test_workflow"}' --fields=id
6259
6479
  bearer_token --display=data --scope=user:all
6260
6480
  files bearer /
6261
6481
  files bearer_token_node / --cache-tokens=no
@@ -6268,7 +6488,7 @@ files browse my_remote_folder
6268
6488
  files browse my_remote_folder/
6269
6489
  files cat testdst/test_file.bin
6270
6490
  files delete /testsrc
6271
- files down --to-folder=. testdst/test_file.bin testdst/test_file.bin
6491
+ files download --to-folder=. testdst/test_file.bin testdst/test_file.bin
6272
6492
  files download --transfer=connect testdst/test_file.bin
6273
6493
  files download --transfer=desktop testdst/test_file.bin
6274
6494
  files find /
@@ -6276,7 +6496,6 @@ files find / '\.partial$'
6276
6496
  files find / @ruby:'->(f){f["type"].eql?("file")}'
6277
6497
  files mkdir /testsrc
6278
6498
  files modify /some_folder @json:'{"mount_point":false}'
6279
- files modify my_test_folder
6280
6499
  files permission my_test_folder list
6281
6500
  files rename /some_folder testdst
6282
6501
  files short_link /testdst private create
@@ -6293,28 +6512,26 @@ files transfer push /testsrc --to-folder=/testdst test_file.bin
6293
6512
  files upload --to-folder=/ test_file.bin --url=my_public_link_folder_no_pass
6294
6513
  files upload --to-folder=/testsrc test_file.bin
6295
6514
  files upload --to-folder=/testsrc test_file.bin test_file.bin
6296
- files upload --workspace=my_other_workspace --to-folder=my_other_folder test_file.bin --transfer=node --transfer-info=@json:@stdin:
6297
6515
  files v3 info
6298
- gateway --pid-file=pid_aoc_faspex_gateway @json:'{"url":"https://localhost:12345/aspera/faspex"}' &
6516
+ gateway @json:'{"url":"https://localhost:12345/aspera/faspex"}'
6299
6517
  organization
6300
6518
  organization --format=image --fields=background_image_url --ui=text
6301
6519
  organization --url=my_public_link_recv_from_aoc_user
6302
6520
  packages browse package_id3 /
6303
6521
  packages list
6304
6522
  packages list --query=@json:'{"dropbox_name":"my_shared_inbox_name","sort":"-received_at","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false}'
6305
- packages receive ALL --once-only=yes --to-folder=. --lock-port=12345
6523
+ packages receive ALL --once-only=yes --to-folder=. --lock-port=12345 --package-folder.fld.0=name --package-folder.fld.1=id --package-folder.opt=true
6306
6524
  packages receive ALL --once-only=yes --to-folder=. --lock-port=12345 --query=@json:'{"dropbox_name":"my_shared_inbox_name","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false}' --ts=@json:'{"resume_policy":"sparse_csum","target_rate_kbps":50000}'
6307
6525
  packages receive INIT --once-only=yes --query=@json:'{"dropbox_name":"my_shared_inbox_name"}'
6308
6526
  packages receive package_id3 --to-folder=.
6309
- packages receive package_id3 --to-folder=. / --package-folder=name
6310
- packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_meta"],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' test_file.bin
6311
- packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_meta"],"metadata":{"Project Id":"456","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' test_file.bin
6312
- packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_meta"],"metadata":{"Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' test_file.bin
6313
- packages send --workspace=my_workspace_shared_inbox @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_name"]}' test_file.bin
6314
- packages send @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_email_external"]}' --new-user-option=@json:'{"package_contact":true}' test_file.bin
6315
- packages send @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_email_internal"],"note":"my note"}' test_file.bin
6316
- packages send @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE"}' test_file.bin --url=my_public_link_send_aoc_user --password=my_public_link_send_use_pass
6317
- packages send @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE"}' test_file.bin --url=my_public_link_send_shared_inbox
6527
+ packages receive package_id3 --to-folder=. /
6528
+ packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"package title","recipients":["my_shared_inbox_meta"],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' test_file.bin
6529
+ packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"package title","recipients":["my_shared_inbox_meta"],"metadata":{"Project Id":"456","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' test_file.bin
6530
+ packages send --workspace=my_workspace_shared_inbox @json:'{"name":"package title","recipients":["my_shared_inbox_name"]}' test_file.bin
6531
+ packages send @json:'{"name":"package title","recipients":["my_email_external"]}' --new-user-option=@json:'{"package_contact":true}' test_file.bin
6532
+ packages send @json:'{"name":"package title","recipients":["my_email_internal"],"note":"my - note"}' test_file.bin
6533
+ packages send @json:'{"name":"package title"}' test_file.bin --url=my_public_link_send_aoc_user --password=my_public_link_send_use_pass
6534
+ packages send @json:'{"name":"package title"}' test_file.bin --url=my_public_link_send_shared_inbox
6318
6535
  packages shared_inboxes list
6319
6536
  packages shared_inboxes show %name:my_shared_inbox_name
6320
6537
  remind --username=my_user_email
@@ -6464,7 +6681,6 @@ access_key cluster ak2ibmcloud --secret=my_secret_here
6464
6681
  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
6682
  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":"/"}}'
6466
6683
  access_key delete ak2ibmcloud
6467
- access_key delete ak_aws
6468
6684
  access_key entitlement ak2ibmcloud
6469
6685
  access_key list --fields=name,id
6470
6686
  access_key node ak2ibmcloud browse / --secret=my_secret_here
@@ -6472,6 +6688,7 @@ access_key show ak2ibmcloud
6472
6688
  api_key create
6473
6689
  api_key instances
6474
6690
  api_key list
6691
+ aws_trust_policy --region=us-east-1
6475
6692
  cluster clouds
6476
6693
  cluster list
6477
6694
  cluster show --cloud=aws --region=eu-west-1
@@ -6504,7 +6721,7 @@ ascli server --url=ssh://hsts.example.com:33001 --username=john --ssh-keys=~/.ss
6504
6721
 
6505
6722
  ```bash
6506
6723
  browse /
6507
- browse / --password=@none: --ssh-options=@json:'{"number_of_password_prompts":0}' --ssh-keys=$aspera_key_path
6724
+ browse / --password=@none: --ssh-options=@json:'{"number_of_password_prompts":0}' --ssh-keys=serv_key_path
6508
6725
  browse my_inside_folder/test_file.bin
6509
6726
  browse my_upload_folder/target_hot
6510
6727
  cp my_inside_folder/test_file.bin my_upload_folder/200KB.2
@@ -6521,18 +6738,20 @@ md5sum my_inside_folder/test_file.bin
6521
6738
  mkdir my_inside_folder --logger=stdout
6522
6739
  mkdir my_upload_folder/target_hot
6523
6740
  mv my_upload_folder/200KB.2 my_upload_folder/to.delete
6741
+ sync admin file_info /data/local_sync
6742
+ sync admin overview /data/local_sync
6524
6743
  sync admin status /data/local_sync
6744
+ sync pull my_inside_folder --to-folder=/data/local_sync @json:'{"name":"serv_sync_pull_conf","reset":true,"transport":{"target_rate":my_bps}}'
6525
6745
  sync pull my_inside_folder --to-folder=/data/local_sync @json:'{"name":"serv_sync_pull_conf"}'
6526
- upload 'faux:///test1?100m' 'faux:///test2?100m' --to-folder=/Upload --ts=@json:'{"target_rate_kbps":1000000,"resume_policy":"none","precalculate_job_size":true}'
6527
- upload 'faux:///test1?100m' 'faux:///test2?100m' --to-folder=/Upload --ts=@json:'{"target_rate_kbps":1000000,"resume_policy":"none","precalculate_job_size":true}' --transfer-info=@json:'{"quiet":false}' --progress=no
6528
- upload 'test_file.bin' --to-folder=my_inside_folder --ts=@json:'{"multi_session":3,"multi_session_threshold":1,"resume_policy":"none","target_rate_kbps":100000}' --transfer-info=@json:'{"spawn_delay_sec":2.5,"multi_incr_udp":false}' --progress-bar=yes
6746
+ upload 'faux:///test.bin?1k' --to-folder=my_upload_folder
6529
6747
  upload --sources=@ts --transfer-info=@json:'{"ascp_args":["--file-list","filelist.txt"]}' --to-folder=my_inside_folder
6530
6748
  upload --sources=@ts --transfer-info=@json:'{"ascp_args":["--file-pair-list","file_pair_list.txt"]}'
6531
6749
  upload --sources=@ts --ts=@json:'{"paths":[{"source":"test_file.bin","destination":"my_inside_folder/other_name_4"}]}' --transfer=transferd
6532
- upload --src-type=pair 'test_file.bin' my_inside_folder/other_name_2 --notify-to=my_email_external --transfer-info=@json:'{"ascp_args":["-l","100m"]}'
6533
6750
  upload --src-type=pair --sources=@json:'["test_file.bin","my_inside_folder/other_name_3"]' --transfer-info.quiet=false --progress=no
6534
- upload --src-type=pair test_file.bin my_upload_folder/other_name_5 --ts=@json:'{"cipher":"aes-192-gcm","content_protection":"encrypt","content_protection_password":"my_secret_here","cookie":"biscuit","create_dir":true,"delete_before_transfer":false,"delete_source":false,"exclude_newer_than":"-1","exclude_older_than":"-10000","fasp_port":33001,"http_fallback":false,"multi_session":0,"overwrite":"diff+older","precalculate_job_size":true,"preserve_access_time":true,"preserve_creation_time":true,"rate_policy":"fair","resume_policy":"sparse_csum","symlink_policy":"follow"}'
6535
- upload --to-folder=my_upload_folder/target_hot --lock-port=12345 --transfer-info=@json:'{"ascp_args":["--remove-after-transfer","--remove-empty-directories","--exclude-newer-than=-8","--src-base","source_hot"]}' source_hot
6751
+ upload --src-type=pair test_file.bin my_inside_folder/other_name_2 --notify-to=my_email_external '--transfer-info.ascp_args=@list: -l 100m'
6752
+ upload --src-type=pair test_file.bin my_upload_folder/other_name_5 --ts=@json:'{"cipher":"aes-192-gcm","content_protection":"encrypt","content_protection_password":"my_secret_here","cookie":"biscuit","create_dir":true,"delete_before_transfer":false,"delete_source":false,"exclude_newer_than":"-1","exclude_older_than":"-10000","fasp_port":33001,"http_fallback":false,"multi_session":0,"overwrite":"diff+older","precalculate_job_size":true,"preserve_access_time":true,"preserve_creation_time":true,"rate_policy":"fair","resume_policy":"sparse_csum"}'
6753
+ upload --to-folder=my_upload_folder/target_hot --lock-port=12345 --transfer-info=@json:'{"ascp_args":["--remove-after-transfer","--remove-empty-directories","--exclude-newer-than=-8","--src-base","hot_folder"]}' hot_folder
6754
+ upload test_file.bin --to-folder=my_inside_folder --ts=@json:'{"multi_session":3,"multi_session_threshold":1,"resume_policy":"none","target_rate_kbps":100000}' --transfer-info=@json:'{"spawn_delay_sec":2.5,"multi_incr_udp":false}' --progress-bar=yes
6536
6755
  ```
6537
6756
 
6538
6757
  ### Authentication on Server with SSH session
@@ -7076,7 +7295,7 @@ ascli node -N --url=https://... --password="Bearer $(cat bearer.txt)" --root-id=
7076
7295
  > Add `ascli node` in front of the following commands:
7077
7296
 
7078
7297
  ```bash
7079
- --url=https://tst.example.com/path --password="Bearer bearer_666" --root-id=root_id access_key do self br /
7298
+ --url=https://tst.example.com/path --password='Bearer node_bearer_token' --root-id=bearer_root_id access_key do self browse /
7080
7299
  access_key create @json:'{"id":"my_username","secret":"my_password_here","storage":{"type":"local","path":"/"}}'
7081
7300
  access_key delete my_username
7082
7301
  access_key do my_ak_name browse /
@@ -7087,32 +7306,29 @@ access_key do my_ak_name find my_test_folder
7087
7306
  access_key do my_ak_name find my_test_folder @re:'\.jpg$'
7088
7307
  access_key do my_ak_name find my_test_folder @ruby:'->(f){f["name"].end_with?(".jpg")}'
7089
7308
  access_key do my_ak_name mkdir /tst_nd_ak
7090
- access_key do my_ak_name mkfile /mkfile.txt "hello world"
7309
+ access_key do my_ak_name mkfile /mkfile.txt 'hello world'
7091
7310
  access_key do my_ak_name mklink /mklink.txt --query=@json:'{"target":"/mkfile.txt","target_node_id":"123"}'
7092
7311
  access_key do my_ak_name node_info /
7093
7312
  access_key do my_ak_name rename /tst_nd_ak test_nd_ak2
7094
7313
  access_key do my_ak_name show %id:1
7095
- access_key do my_ak_name show /test_nd_ak3
7096
7314
  access_key do my_ak_name upload 'faux:///test_nd_ak3?100k' --default-ports=no
7097
- access_key do self permission %id:root_id create @json:'{"access_type":"user","access_id":"666"}'
7315
+ access_key do self permission %id:bearer_root_id create @json:'{"access_type":"user","access_id":"666"}'
7098
7316
  access_key do self permission / delete 1
7099
7317
  access_key do self permission / show 1
7100
- access_key do self show / --fields=id --output=root_id
7101
7318
  access_key list
7102
7319
  access_key set_bearer_key self @file:my_private_key
7103
7320
  access_key show %id:self
7104
7321
  api_details
7105
7322
  asperabrowser
7106
- async bandwidth %name:SYNC_NAME
7107
- async counters %name:SYNC_NAME
7323
+ async bandwidth %name:my_sync_session_name
7324
+ async counters %name:my_sync_session_name
7108
7325
  async delete ALL
7109
- async files %name:SYNC_NAME
7110
- async files %name:SYNC_NAME --once-only=yes
7326
+ async files %name:my_sync_session_name
7327
+ async files %name:my_sync_session_name --once-only=yes
7111
7328
  async list
7112
- async show %name:SYNC_NAME
7329
+ async show %name:my_sync_session_name
7113
7330
  async show ALL
7114
7331
  basic_token
7115
- bearer_token @file:my_private_key @json:'{"user_id":"666"}' --output=bearer_666
7116
7332
  browse / --log-level=trace2
7117
7333
  cat my_upload_folder/test_file.bin
7118
7334
  central file list
@@ -7125,7 +7341,7 @@ health
7125
7341
  info --fpac='function FindProxyForURL(url,host){return "DIRECT"}'
7126
7342
  license
7127
7343
  mkdir my_upload_folder/a_folder
7128
- mkfile my_upload_folder/a_file1 "hello world"
7344
+ mkfile my_upload_folder/a_file1 'hello world'
7129
7345
  mklink my_upload_folder/a_folder my_upload_folder/tdlink
7130
7346
  rename my_upload_folder a_file1 a_file
7131
7347
  search / --query=@json:'{"sort":"mtime"}'
@@ -7134,6 +7350,7 @@ service delete service1
7134
7350
  service list
7135
7351
  slash
7136
7352
  space /
7353
+ spec
7137
7354
  ssync bandwidth %name:my_node_sync
7138
7355
  ssync counters %name:my_node_sync
7139
7356
  ssync create @json:'{"configuration":{"name":"my_node_sync","local":{"path":"my_local_path_real"},"remote":{"host":"my_host","port":my_port,"user":"my_username","pass":"my_password_here","path":"my_remote_path"}}}'
@@ -7147,21 +7364,20 @@ ssync stop %name:my_node_sync
7147
7364
  ssync summary %name:my_node_sync
7148
7365
  stream list
7149
7366
  sync admin status /data/local_sync
7150
- sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"name":"SYNC_NAME","reset":true}'
7367
+ sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"name":"my_sync_session_name","reset":true}'
7151
7368
  sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"reset":true}'
7152
7369
  transfer bandwidth_average
7153
7370
  transfer cancel nd_xfer_id
7154
- transfer list --once-only=yes
7155
- transfer list --query=@json:'{"active_only":true,"count":1}' --fields=id --output=nd_xfer_id
7156
7371
  transfer list --query=@json:'{"active_only":true}'
7157
7372
  transfer list --query=@json:'{"reset":true}' --once-only=yes
7158
7373
  transfer modify nd_xfer_id @json:'{"target_rate_kbps":10000}'
7159
7374
  transfer sessions
7160
7375
  transfer show nd_xfer_id
7161
7376
  transport
7377
+ upload 'faux:///testfile1?1m' --to-folder=my_local_path
7162
7378
  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"}'
7163
7379
  upload --username=my_ak_name --password=my_ak_secret test_file.bin
7164
- upload test_file.bin --to-folder=my_upload_folder --ts=@json:'{"target_rate_cap_kbps":10000}'
7380
+ upload my_mxf my_docx --ts=@json:'{"target_rate_kbps":1000000,"resume_policy":"none"}'
7165
7381
  watch_folder list
7166
7382
  ```
7167
7383
 
@@ -7415,8 +7631,8 @@ admin distribution_lists delete %name:test4
7415
7631
  admin distribution_lists list --query=@json:'{"type":"global"}'
7416
7632
  admin email_notifications list
7417
7633
  admin email_notifications show welcome_email
7418
- admin event app --query=@json:'{"max":20}'
7419
- admin event web
7634
+ admin event application --query=@ruby:'{"event_type[]"=>["login_success"],"created_at_start"=>(Time.now.utc-60).strftime("%Y-%m-%dT%H:%M:%S.%LZ")}'
7635
+ admin event webhook
7420
7636
  admin jobs list --query=@json:'{"job_type":"email","status":"failed"}' --fields=id,error_desc
7421
7637
  admin metadata_profiles list
7422
7638
  admin node browse %name:Local
@@ -7431,7 +7647,7 @@ admin saml_configs list
7431
7647
  admin shared_inboxes invite %name:my_shared_box_name johnny@example.com
7432
7648
  admin shared_inboxes list
7433
7649
  admin shared_inboxes list --query=@json:'{"all":true}'
7434
- admin shared_inboxes members %name:my_shared_box_name create %name:john@example.com
7650
+ admin shared_inboxes members %name:my_shared_box_name create %name:john@example.com submit_only
7435
7651
  admin shared_inboxes members %name:my_shared_box_name delete %name:john@example.com
7436
7652
  admin shared_inboxes members %name:my_shared_box_name delete %name:johnny@example.com
7437
7653
  admin shared_inboxes members %name:my_shared_box_name list
@@ -7441,33 +7657,34 @@ admin smtp show
7441
7657
  admin smtp test my_email_external
7442
7658
  admin workgroups list
7443
7659
  bearer_token
7444
- gateway --pid-file=pid_f5_fxgw @json:'{"url":"https://localhost:12346/aspera/faspex"}' &
7660
+ gateway @json:'{"url":"https://localhost:12346/aspera/faspex"}'
7445
7661
  health --url=https://faspex5.example.com/path
7446
7662
  invitation list
7447
7663
  invitations create @json:'{"email_address":"aspera.user1+u@gmail.com"}'
7448
- packages browse f5_pack_id --query=@json:'{"recursive":true}'
7449
- packages delete f5_pack_id
7664
+ packages browse f5_package_id --query=@json:'{"recursive":true}'
7665
+ packages delete f5_package_id
7450
7666
  packages list --box=ALL
7451
7667
  packages list --box=my_shared_box_name
7452
7668
  packages list --box=my_workgroup --group-type=workgroups
7453
7669
  packages list --box=outbox --fields=DEF,sender.email,recipients.0.recipient_type
7454
7670
  packages list --query=@json:'{"mailbox":"inbox","status":"completed"}'
7455
- packages receive --box=my_shared_box_name package_box_id1 --to-folder=.
7671
+ packages receive --box=my_shared_box_name f5_pack_shboxc --to-folder=.
7456
7672
  packages receive --box=my_workgroup --group-type=workgroups workgroup_package_id1 --to-folder=.
7457
7673
  packages receive ALL --once-only=yes --to-folder=.
7458
7674
  packages receive INIT --once-only=yes
7459
- packages receive f5_pack_id --to-folder=. --ts=@json:'{"content_protection_password":"my_secret_here"}'
7460
- packages send --shared-folder=%name:my_shared_folder_name @json:'{"title":"test title","recipients":["my_email_internal"]}' my_shared_folder_file --fields=id --display=data --output=f5_pack_id
7675
+ packages receive f5_package_id --to-folder=. --ts=@json:'{"content_protection_password":"my_secret_here"}'
7461
7676
  packages send --url=my_public_link_send_f5_user @json:'{"title":"test title"}' test_file.bin
7462
7677
  packages send --url=my_public_link_send_shared_box @json:'{"title":"test title"}' test_file.bin
7463
7678
  packages send @json:'{"title":"test title","recipients":["my_shared_box_name"],"metadata":{"Options":"Opt1","TextInput":"example text"}}' test_file.bin
7464
7679
  packages send @json:'{"title":"test title","recipients":["my_workgroup"]}' test_file.bin
7465
7680
  packages send @json:'{"title":"test title","recipients":[{"name":"my_username"}]my_meta}' test_file.bin --ts=@json:'{"content_protection_password":"my_secret_here"}'
7466
- packages show --box=my_shared_box_name package_box_id1
7681
+ packages send @json:'{"title":"test_webhook_ascli","recipients":["my_shared_box_name"]}' 'faux:///test1?1m'
7682
+ packages show --box=my_shared_box_name f5_pack_shboxc
7467
7683
  packages show --box=my_workgroup --group-type=workgroups workgroup_package_id1
7468
- packages show f5_pack_id
7469
- packages status f5_pack_id
7470
- postprocessing --pid-file=pid_f5_postproc @json:'{"url":"https://localhost:8553/asclihook","script_folder":"","cert":"localhost.p12","key":"changeit"}' &
7684
+ packages show f5_package_id
7685
+ packages status f5_p3a @list:,failed,completed
7686
+ packages status f5_package_id
7687
+ postprocessing @json:'{"url":"https://localhost:8553/asclihook","script_folder":"$(PATH_SCRIPTS)","cert":"$(TMP / "localhost.p12")","key":"changeit"}'
7471
7688
  shared browse %name:my_src
7472
7689
  shared list
7473
7690
  shared_folders browse %name:my_shared_folder_name
@@ -7560,6 +7777,14 @@ If the lookup needs to be only on certain types, you can specify the field: `rec
7560
7777
  {"title":"test title","recipient_types":"user","recipients":["user1@example.com","user2@example.com"]}
7561
7778
  ```
7562
7779
 
7780
+ To enable content protection (CSEAR), set parameter `ear_enabled` to `true` in the package creation payload (refer to Faspex package creation API).
7781
+
7782
+ The following error is returned by Faspex, if CSEAR was not specified in the package creation and if it is configured as mandatory on the server:
7783
+
7784
+ ```text
7785
+ the provided encryption value (no) does not match the expected server side encryption value (yes)
7786
+ ```
7787
+
7563
7788
  ### Faspex 5: Send a package with metadata
7564
7789
 
7565
7790
  It's the same as sending a package, but with an extra field `metadata` in the package info.
@@ -8061,27 +8286,23 @@ ascli faspex packages recv ALL --once-only=yes --lock-port=12345
8061
8286
 
8062
8287
  ```bash
8063
8288
  address_book
8064
- dropbox list --recipient="*my_dbx"
8289
+ dropbox list --recipient='*my_dbx'
8065
8290
  health
8066
8291
  login_methods
8067
8292
  me
8068
- package list --box=sent --query.max=1 --fields=package_id --display=data --format=csv --output=f4_prs2
8069
- package list --query.max=1 --fields=package_id --display=data --format=csv --output=f4_prs1
8070
8293
  package list --query.max=5
8071
- package list --recipient="*my_dbx" --format=csv --fields=package_id --query.max=1 --output=f4_db_id1
8072
- package list --recipient="*my_wkg" --format=csv --fields=package_id --query.max=1 --output=f4_db_id2
8073
- package receive --to-folder=. --link=https://app.example.com/recv_from_user_path
8074
- package receive ALL --once-only=yes --to-folder=. --query=@json:'{"max":10}'
8075
- package receive f4_db_id1 --recipient="*my_dbx" --to-folder=.
8076
- package receive f4_db_id2 --recipient="*my_wkg" --to-folder=.
8077
- package receive f4_pri1 --to-folder=.
8078
- package receive f4_prs2 --to-folder=. --box=sent
8079
- package send --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["*my_dbx"]}' test_file.bin
8080
- package send --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["*my_wkg"]}' test_file.bin
8081
- package send --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_email_internal","my_username"]}' test_file.bin
8082
- package send --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_email_internal"]}' --remote-source=%name:my_src sample_source.txt
8083
- package send --link=https://app.example.com/send_to_dropbox_path --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE"}' test_file.bin
8084
- package send --link=https://app.example.com/send_to_user_path --delivery-info=@json:'{"title":"$(notdir test) PACKAGE_TITLE_BASE"}' test_file.bin
8294
+ package receive ALL --once-only=yes --to-folder=. --query.max=10
8295
+ package receive f4_package_id --to-folder=.
8296
+ package receive f4_package_id2 --to-folder=. --box=sent
8297
+ package receive f4_package_id3 --to-folder=.
8298
+ package receive f4_package_id4 --recipient='*my_dbx' --to-folder=.
8299
+ package receive f4_package_id5 --recipient='*my_wkg' --to-folder=.
8300
+ package send --delivery-info=@json:'{"title":"package title","recipients":["my_email_internal","my_username"]}' test_file.bin
8301
+ package send --delivery-info=@json:'{"title":"package title","recipients":["my_email_internal"]}' --remote-source=%name:my_src sample_source.txt
8302
+ package send --delivery-info=@json:'{"title":"package title","recipients":[*my_dbx]}' test_file.bin
8303
+ package send --delivery-info=@json:'{"title":"package title","recipients":[*my_wkg]}' test_file.bin
8304
+ package send --link=https://app.example.com/send_to_dropbox_path --delivery-info=@json:'{"title":"package title"}' test_file.bin
8305
+ package send --link=https://app.example.com/send_to_user_path --delivery-info=@json:'{"title":"package title"}' test_file.bin
8085
8306
  source info %name:my_src --storage=@preset:faspex4_storage
8086
8307
  source list
8087
8308
  source node %name:my_src br / --storage=@preset:faspex4_storage
@@ -8138,12 +8359,12 @@ ascli shares admin share user_permissions $share_id create @json:'{"user_id":'$u
8138
8359
  admin group all list
8139
8360
  admin node list
8140
8361
  admin share list --fields=DEF,-status,status_message
8141
- admin share user_permissions 1 list
8142
- admin user all app_authorizations 1 modify @json:'{"app_login":true}'
8143
- admin user all app_authorizations 1 show
8362
+ admin share user_permissions %name:my_share list
8363
+ admin user all app_authorizations %username:my_username modify @json:'{"app_login":true}'
8364
+ admin user all app_authorizations %username:my_username show
8144
8365
  admin user all list
8145
- admin user all share_permissions 1 list
8146
- admin user all share_permissions 1 show 1
8366
+ admin user all share_permissions %username:my_username list
8367
+ admin user all share_permissions %username:my_username show %name:my_share
8147
8368
  admin user ldap add the_name
8148
8369
  admin user local list
8149
8370
  admin user saml import @json:'{"id":"the_id","name_id":"the_name"}'
@@ -8155,10 +8376,10 @@ files download --to-folder=. my_share_folder/test_file.bin my_share_folder/test_
8155
8376
  files mkdir my_share_folder/new_folder
8156
8377
  files sync push /data/local_sync --to-folder=my_share_folder/synctst
8157
8378
  files sync push /data/local_sync --to-folder=my_share_folder/synctst @json:'{"reset":true}'
8158
- files upload --to-folder=my_share_folder 'faux:///testfile?1m' --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@","synchronous":true,"api_version":"v1","upload_chunk_size":100000}'
8159
- files upload --to-folder=my_share_folder sendfolder --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@","synchronous":true,"api_version":"v1","upload_chunk_size":100000}'
8379
+ files upload 'faux:///testfile?1m' --to-folder=my_share_folder --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@","synchronous":true,"api_version":"v1","upload_chunk_size":100000}'
8160
8380
  files upload --to-folder=my_share_folder test_file.bin
8161
8381
  files upload --to-folder=my_share_folder test_file.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@"}'
8382
+ files upload sendfolder --to-folder=my_share_folder --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@","synchronous":true,"api_version":"v1","upload_chunk_size":100000}'
8162
8383
  health
8163
8384
  ```
8164
8385
 
@@ -8186,7 +8407,7 @@ transfer current list --query.filter='(transfer_name contain aoc)'
8186
8407
  transfer current list --query=@json:'{"filter1":"transfer_name","comp1":"contain","val1":"aoc"}'
8187
8408
  transfer current show console_xfer_id
8188
8409
  transfer smart list
8189
- transfer smart sub my_smart_id @json:'{"source":{"paths":["my_smart_file"]},"source_type":"user_selected"}'
8410
+ transfer smart sub my_smart_id @: source.paths.0=my_smart_file source_type=user_selected
8190
8411
  ```
8191
8412
 
8192
8413
  ## Plugin: `orchestrator`:IBM Aspera Orchestrator
@@ -8199,31 +8420,46 @@ transfer smart sub my_smart_id @json:'{"source":{"paths":["my_smart_file"]},"sou
8199
8420
  ```bash
8200
8421
  health
8201
8422
  info
8423
+ monitors
8202
8424
  plugins
8203
8425
  processes
8204
8426
  workflow details my_workflow_id
8205
8427
  workflow export my_workflow_id
8206
8428
  workflow inputs my_workflow_id
8207
8429
  workflow list
8430
+ workflow outputs my_workflow_id
8208
8431
  workflow start my_workflow_id @json:'{"Param":"world !"}'
8209
8432
  workflow start my_workflow_id @json:'{"Param":"world !"}' --result=ResultStep:Complete_status_message
8210
8433
  workflow status ALL
8211
8434
  workflow status my_workflow_id
8435
+ workflow workorders my_workflow_id
8436
+ workflow workorders my_workflow_id --fields=id --query.max_results=1
8437
+ workorder cancel orch_workorder_id
8438
+ workorder output orch_workorder_id
8439
+ workorder reset orch_workorder_id
8440
+ workorder status orch_workorder_id
8441
+ workstep cancel 1
8442
+ workstep status 1
8212
8443
  ```
8213
8444
 
8214
8445
  ## Plugin: `cos`: IBM Cloud Object Storage
8215
8446
 
8216
- The IBM Cloud Object Storage provides the possibility to execute transfers using FASP.
8217
- It uses the same transfer service as Aspera on Cloud, called Aspera Transfer Service (ATS).
8218
- Available ATS regions: [https://status.aspera.io](https://status.aspera.io)
8447
+ IBM Cloud Object Storage supports high-speed transfers using the FASP protocol.
8448
+ These transfers leverage the same service used by Aspera on Cloud, called the Aspera Transfer Service (ATS).
8449
+ You can check the list of available ATS regions here: <https://status.aspera.io>.
8450
+ There are two ways to provide credentials:
8219
8451
 
8220
- There are two possibilities to provide credentials.
8221
- If you already have the endpoint, API key and Resource Instance ID (CRN), use the first method.
8222
- If you don't have credentials but have access to the IBM Cloud console, then use the second method.
8452
+ - Using existing credentials
8453
+
8454
+ If you already have the endpoint, API key, and Resource Instance ID (CRN), use this method.
8455
+
8456
+ - Using IBM Cloud Console access
8457
+
8458
+ If you do not have credentials but have access to the IBM Cloud Console, use this alternative method.
8223
8459
 
8224
8460
  ### Using endpoint, API key and Resource Instance ID (CRN)
8225
8461
 
8226
- If you have those parameters already, then following options shall be provided:
8462
+ If you already have these parameters, provide the following options to `ascli`:
8227
8463
 
8228
8464
  | Option | Description |
8229
8465
  |------------|---------------------------------------------------|
@@ -8232,20 +8468,21 @@ If you have those parameters already, then following options shall be provided:
8232
8468
  | `apikey` | API Key |
8233
8469
  | `crn` | Resource instance ID |
8234
8470
 
8235
- For example, let us create a default configuration:
8471
+ Example: Create a Default Configuration
8236
8472
 
8237
8473
  ```shell
8238
8474
  ascli config preset update mycos --bucket=mybucket --endpoint=https://s3.us-east.cloud-object-storage.appdomain.cloud --apikey=abcdefgh --crn=crn:v1:bluemix:public:iam-identity::a/xxxxxxx
8239
8475
  ascli config preset set default cos mycos
8240
8476
  ```
8241
8477
 
8242
- Then, jump to the [transfer example](#operations-transfers).
8478
+ Once configured, proceed to the [transfer example](#operations-transfers).
8243
8479
 
8244
8480
  ### Using service credential file
8245
8481
 
8246
- If you are the COS administrator and don't have yet the credential:
8247
- Service credentials are directly created using the IBM cloud Console (web UI).
8248
- Navigate to:
8482
+ If you are the COS administrator and do not yet have credentials,
8483
+ you can create them directly from the IBM Cloud Console (Web UI):
8484
+
8485
+ Steps:
8249
8486
 
8250
8487
  - &rarr; Navigation Menu
8251
8488
  - &rarr; [Resource List](https://cloud.ibm.com/resources)
@@ -8255,7 +8492,7 @@ Navigate to:
8255
8492
  - &rarr; New credentials (Leave default role: Writer, no special options)
8256
8493
  - &rarr; Copy to clipboard
8257
8494
 
8258
- Then save the copied value to a file, e.g. : `$HOME/cos_service_creds.json`
8495
+ Save the copied JSON value to a file, for example: `$HOME/cos_service_creds.json`
8259
8496
 
8260
8497
  or using the IBM Cloud CLI:
8261
8498
 
@@ -8264,9 +8501,10 @@ ibmcloud resource service-keys
8264
8501
  ibmcloud resource service-key _service_key_name_here_ --output JSON|jq '.[0].credentials'>$HOME/service_creds.json
8265
8502
  ```
8266
8503
 
8267
- (if you don't have `jq` installed, extract the structure as follows)
8504
+ > [!NOTE]
8505
+ > If `jq` is not installed, you can manually extract the credentials section from the JSON output.
8268
8506
 
8269
- It consists in the following structure:
8507
+ The service credential file consists of the following structure:
8270
8508
 
8271
8509
  ```json
8272
8510
  {
@@ -8284,33 +8522,32 @@ It consists in the following structure:
8284
8522
  }
8285
8523
  ```
8286
8524
 
8287
- The field `resource_instance_id` is for option `crn`
8525
+ The field mappings are as follows:
8288
8526
 
8289
- The field `apikey` is for option `apikey`
8527
+ - `resource_instance_id` &rarr; option `crn`
8528
+ - `apikey` &rarr; option `apikey`
8290
8529
 
8291
8530
  > [!NOTE]
8292
- > Endpoints for regions can be found by querying the `endpoints` URL from file or from the IBM Cloud Console.
8531
+ > Endpoints for regions can be found by querying the `endpoints` URL in the JSON file or from the IBM Cloud Console.
8293
8532
 
8294
8533
  The required options for this method are:
8295
8534
 
8296
- | Option | Description |
8535
+ | Option | Description |
8297
8536
  |-----------------------|------------------------------------------------|
8298
- | `bucket` | Bucket name |
8299
- | `region` | Bucket region<br/>e.g. `eu-de` |
8537
+ | `bucket` | Bucket name |
8538
+ | `region` | Bucket region<br/>e.g. `eu-de` |
8300
8539
  | `service_credentials` | JSON information saved from IBM Cloud console. |
8301
8540
 
8302
- For example, let us create a default configuration:
8541
+ Example: Create a Default Configuration
8303
8542
 
8304
8543
  ```shell
8305
- ascli config preset update mycos --bucket=laurent --service-credentials=@val:@json:@file:~/service_creds.json --region=us-south
8544
+ ascli config preset update mycos --bucket=mybucket --service-credentials=@val:@json:@file:~/service_creds.json --region=us-south
8306
8545
  ascli config preset set default cos mycos
8307
8546
  ```
8308
8547
 
8309
8548
  ### Operations, transfers
8310
8549
 
8311
- Let's assume you created a default configuration from one of the two previous steps (else specify the access options on command lines).
8312
-
8313
- A subset of `node` plugin operations are supported, basically Node API:
8550
+ Once you have created a default configuration using one of the previous methods (otherwise, specify the access options directly on the command line), you can perform a subset of `node` plugin operations, which correspond to the Node API.
8314
8551
 
8315
8552
  ```shell
8316
8553
  ascli cos node info
@@ -8318,7 +8555,8 @@ ascli cos node upload 'faux:///sample1G?1g'
8318
8555
  ```
8319
8556
 
8320
8557
  > [!NOTE]
8321
- > A dummy file `sample1G` of size 2 GB is generated using the `faux` PVCL scheme (see previous section and `man ascp`), but you can, of course, send a real file by specifying a real file path instead.
8558
+ > The file `sample1G` is a dummy file of size 2 GB, generated using the `faux` PVCL scheme (see previous section and `man ascp`).
8559
+ > To upload a real file, simply replace the `faux:///...` URI with the actual file path.
8322
8560
 
8323
8561
  ### Tested commands for `cos`
8324
8562
 
@@ -8347,6 +8585,10 @@ info
8347
8585
 
8348
8586
  ## Plugin: `faspio`: Faspio Gateway
8349
8587
 
8588
+ IBM Aspera faspio Gateway is a high-performance proxy that bridges traditional TCP/UDP applications with the Aspera FASP protocol, enabling secure, ultra-fast transfers over any network, even with high latency or packet loss.
8589
+ It integrates seamlessly into existing workflows and supports use cases such as server-to-server transfers, database replication, and messaging systems.
8590
+ Using `ascli`, you can remotely create and manage bridges on faspio Gateway, simplifying configuration and automation.
8591
+
8350
8592
  ### Tested commands for `faspio`
8351
8593
 
8352
8594
  > [!NOTE]
@@ -8354,7 +8596,7 @@ info
8354
8596
 
8355
8597
  ```bash
8356
8598
  bridges create @json:'{"name":"test1","local":{"protocol":"tcp","tls_enabled":false,"port":"3000","bind_address":"127.0.0.1"},"forward":{"protocol":"fasp","tls_enabled":false,"port":"3994","bind_address":"127.0.0.1","host":["10.0.0.1"]}}'
8357
- bridges delete --bulk=yes @json:@stdin:
8599
+ bridges delete --bulk=yes @json:faspio_bclean_list
8358
8600
  bridges list
8359
8601
  health
8360
8602
  ```
@@ -8370,20 +8612,34 @@ Retrieve information on subscription.
8370
8612
 
8371
8613
  ```bash
8372
8614
  entitlement
8373
- health -N
8615
+ health
8374
8616
  ```
8375
8617
 
8376
8618
  ## Plugin: `preview`: Preview generator for AoC
8377
8619
 
8378
- The `preview` generates thumbnails (office, images, video) and video previews on storage for use primarily in the Aspera on Cloud application.
8379
- It uses the **Node API** of Aspera HSTS and requires use of Access Keys and its **storage root**.
8380
- Several options can be used to tune several aspects:
8620
+ The `preview` plugin is responsible for generating thumbnails (Office documents, images, videos) and video previews on storage, primarily for use within the Aspera on Cloud (AoC) application.
8621
+ This plugin leverages the **Node API** of Aspera HSTS and requires:
8622
+
8623
+ - An Access Key
8624
+ - The associated **storage root**
8381
8625
 
8382
- - Methods for detection of new files needing generation
8383
- - Methods for generation of video preview
8384
- - Parameters for video handling
8626
+ ### Key Features and Options
8385
8627
 
8386
- See also <https://github.com/IBM/aspera-on-cloud-file-previews>
8628
+ You can configure several aspects of the preview generation process:
8629
+
8630
+ - File Detection Methods
8631
+
8632
+ Define how new files requiring previews are identified.
8633
+
8634
+ - Video Preview Generation Methods
8635
+
8636
+ Choose the approach for creating video previews (e.g., transcoding options).
8637
+
8638
+ - Video Handling Parameters
8639
+
8640
+ Fine-tune video processing, such as resolution, bitrate, and format.
8641
+
8642
+ Using `ascli` is an alternative to <https://github.com/IBM/aspera-on-cloud-file-previews>.
8387
8643
 
8388
8644
  ### Aspera Server configuration
8389
8645
 
@@ -8708,7 +8964,7 @@ If the preview generator does not have access to files on the file system (it is
8708
8964
  check --skip-types=office
8709
8965
  events --once-only=yes --skip-types=office --log-level=info
8710
8966
  scan --scan-id=1 --skip-types=office --log-level=info --file-access=remote --ts=@json:'{"target_rate_kbps":1000000}'
8711
- scan --skip-types=office --log-level=info
8967
+ scan --skip-types=office --log-level=info --skip-folder=/special/folder
8712
8968
  show --base=test /etc/hosts
8713
8969
  show --base=test my_docx
8714
8970
  show --base=test my_mpg --video-png-conv=animated
@@ -8745,13 +9001,19 @@ Some `sync` parameters are filled by the related plugin using transfer spec para
8745
9001
 
8746
9002
  > [!NOTE]
8747
9003
  > All `sync` commands require an `async` enabled license and availability of the `async` executable (and `asyncadmin`).
8748
- >The Aspera Transfer Daemon 1.3+ includes this.
9004
+ > The Aspera Transfer Daemon 1.3+ includes this.
8749
9005
 
8750
9006
  ### Starting a sync session
8751
9007
 
8752
9008
  To start a sync session, use one of the three sync directions followed by a folder path (remote path for `pull`, local path otherwise).
8753
9009
  The path on the other side is specified using option: `to_folder`.
8754
9010
 
9011
+ The general syntax is:
9012
+
9013
+ ```shell
9014
+ ascli ... sync <direction> <path> [<sync_info>] [--to-folder=<path>]
9015
+ ```
9016
+
8755
9017
  | Direction<br/>(parameter) | Path<br/>(parameter) | `to_folder`<br/>(option) |
8756
9018
  |-----------|--------|-------------|
8757
9019
  | `push` | Local | Remote |
@@ -8762,6 +9024,11 @@ An optional positional `Hash` argument (`sync_info`) can be provided in either `
8762
9024
 
8763
9025
  A single session can be specified using either formats.
8764
9026
 
9027
+ If argument `<sync_info>` is not provided, then a default configuration is generated in the `conf` format as specified in the next section.
9028
+
9029
+ If argument `<sync_info>` is provided, it defines the format to use.
9030
+ If parameter `sessions` or `instance` is present, then `args` is used, else `conf` is used.
9031
+
8765
9032
  #### `sync_info`: `conf` format
8766
9033
 
8767
9034
  This is the **preferred** syntax.
@@ -8769,138 +9036,155 @@ It is the same payload as specified on the `async` option `--conf` or in Node AP
8769
9036
 
8770
9037
  Documentation on Async Node API can be found on [IBM Developer Portal](https://developer.ibm.com/apis/catalog?search=%22aspera%20sync%20api%22).
8771
9038
 
8772
- Parameters `local.path` and `remote.path` are not allowed since they are provided on command line.
9039
+ The following parameters are automatically filled from mandatory arguments, and are not allowed:
9040
+
9041
+ - `direction`
9042
+ - `local.path`
9043
+ - `remote.path`
9044
+
9045
+ Parameter `name` is set to a default value if not provided in `sync_info`.
9046
+ Parameter `quiet` is set to `false` if not provided in `sync_info` and a terminal is detected.
9047
+
9048
+ The documentation is available in the terminal with:
9049
+
9050
+ ```shell
9051
+ ascli config sync spec
9052
+ ```
8773
9053
 
8774
9054
  | Field | Type | Description |
8775
- | ---------------------------------------- | ------- | -------------------------------------------------------------------------------- |
9055
+ |------------------------------------------|---------|----------------------------------------------------------------------------------|
8776
9056
  | 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. |
9057
+ | assume_no_mods | boolean | Assume that the directory structure has not been modified.<br/>(`--assume-no-mods`) |
9058
+ | checksum | string | Use the specified checksum type. Default is none on cloud storage.<br/>Allowed values: `sha1`, `md5`, `sha1_sparse`, `md5_sparse`, `none`<br/>(`--checksum={enum}`)(-k) |
9059
+ | clean_excluded | boolean | Removes any existing entries in the snapshot database for excluded paths<br/>(`--clean-excluded`) |
9060
+ | cookie | string | User-defined identification string.<br/>(`--cookie={string}`) |
8781
9061
  | 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
9062
  | 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. |
9063
+ | create_dir | boolean | Create the source directory, target directory, or both, if they do not exist.<br/>(`--create-dir`) |
8784
9064
  | db_cache_size | integer | Specify DB cache size. |
8785
9065
  | db_journal_off | boolean | Turn off DB journal. |
8786
9066
  | 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` |
9067
+ | dedup | string | Take the specified action when async detects duplicate files on the source.<br/>Allowed values: `copy`, `inode`, `hardlink`, `none`<br/>(`--dedup={enum}`) |
9068
+ | delete_before | boolean | Schedule deletes before transfers.<br/>(`--delete-before`) |
9069
+ | delete_delay | boolean | Delay actual deletes until the end of the synchronization.<br/>(`--delete-delay`) |
9070
+ | direction | string | The direction of replication relative to the local.<br/>Allowed values: `bidi`, `pull`, `push`<br/>(`--direction={enum}`)(-K) |
8791
9071
  | exclude_dirs_older_than | object | Don't scan directories with a recursive modified time older than absolute or async start time - relative_seconds |
8792
9072
  | exclude_dirs_older_than.absolute | string | UTC timestamp. Empty value for disabled. |
8793
9073
  | exclude_dirs_older_than.relative_seconds | integer | Relative to async start time. `-1` for disabled. |
8794
9074
  | 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. |
9075
+ | filters[].rule | string | The rule for the filter.<br/>Allowed values: `include`, `exclude`, `include_from`, `exclude_from` |
9076
+ | filters[].value | string | On include or exclude, the filter's pattern. On include_from or exclude_from, the path containing filter specifications |
9077
+ | ignore_delete | boolean | Do not copy removals to the peer.<br/>(`--ignore-delete`) |
9078
+ | ignore_mode | boolean | Source files that have had their mode changed after the initial. transfer will not update the destination file mode.<br/>(`--ignore-mode`) |
8797
9079
  | 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
9080
  | local | object | &nbsp; |
8799
9081
  | 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 |
9082
+ | local.path | string | The directory to be synchronized on the local host.<br/>(`--local-dir={string}`)(-d) |
9083
+ | local_apply_docroot | boolean | Prepend the docroot to the directory on the local host.<br/>(`--apply-local-docroot`) |
9084
+ | local_checksum_threads | integer | Maximum number of threads to do checksum on the local host. Value must be between 1 and 99.<br/>(`--local-checksum-threads={integer}`) |
9085
+ | local_db_dir | string | Use the specified database directory on the local host. Default is `.private-asp` at the root level of the synchronized directory.<br/>(`--local-db-dir={string}`)(-b) |
9086
+ | local_db_store_dir | string | Store/Restore the database to/from the specified directory on the local host. The value can be an absolute path, an URI or - (use the local sync dir)<br/>(`--local-db-store-dir={string}`) |
9087
+ | local_force_stat | boolean | Forces the local async to retrieve file information even when no changes are detected by the scanner or monitor.<br/>(`--local-force-stat`) |
9088
+ | local_fs_threads | integer | Maximum number of threads to do file system operations on the local host. Value must be between 1 and 99.<br/>(`--local-fs-threads={integer}`) |
9089
+ | local_keep_dir | string | Move deleted files into the specified directory on the local host.<br/>(`--keep-dir-local={string}`) |
9090
+ | local_mount_signature | string | Verify that the file system is mounted by the existence of this file on the local host.<br/>(`--local-mount-signature={string}`) |
9091
+ | local_move_cache_timeout_seconds | integer | Delay in seconds before aborting moving a file from local cache to final destination. `-1` for disabled.<br/>(`--local-move-cache-timeout={integer}`) |
9092
+ | local_preserve_acls | string | Preserve access control lists on the local host.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--preserve-acls={enum}`) |
9093
+ | local_preserve_xattrs | string | Preserve extended attributes on the local.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--preserve-xattrs={enum}`) |
9094
+ | local_scan_interval_milliseconds | integer | Enable periodic scans on the local host during a continuous sync. `-1` for disabled<br/>(`--scan-interval={integer}`) |
9095
+ | local_scan_threads | integer | Number of directory scanning threads on the local host. Value must be between 1 and 99<br/>(`--scan-threads={integer}`) |
8814
9096
  | local_stat_cache_size | integer | Set stat cache size on the local host. 0 for disabled. |
8815
9097
  | 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. |
9098
+ | log.level | string | Use the specified log level.<br/>Allowed values: `log`, `dbg1`, `dbg2`<br/>(special:`-D`) |
9099
+ | log.local_dir | string | Use the specified logging directory on the local host.<br/>(`--alt-logdir={string}`)(-L) |
9100
+ | log.remote_dir | string | Use the specified logging directory on the remote host.<br/>(`--remote-logdir={string}`)(-R) |
8819
9101
  | manifest_path | string | A directory path where ascp will create manifest TEXT files (passed to ascp as --file-manifest-path) |
8820
9102
  | 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}`) |
9103
+ | mode | string | Specify whether async runs continuously or not. In `one_time` mode, async stops after the first full synchronization. `continuous` supported only if the source is Windows or Linux.<br/>Allowed values: `one_time`, `continuous`<br/>(special:`--continuous`)(-C) |
8822
9104
  | 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. |
9105
+ | name | string | Name of the synchronization pair.<br/>(`--name={string}`)(-N) |
9106
+ | no_log | string | Suppress log messages for ITEM. The only currently supported ITEM is 'stats', which suppresses both STATS and PROG log messages.<br/>(`--no-log={string}`) |
9107
+ | no_preserve_root_attrs | boolean | Disable the preservation of attributes on the Sync root.<br/>(`--no-preserve-root-attrs`) |
9108
+ | no_scan | boolean | Skip initial scanning.<br/>(`--no-scan`) |
8827
9109
  | 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. |
9110
+ | overwrite | string | Overwrite files according to the specified policy. Default is determined by the direction: `conflict` for `bidi`, otherwise `always`.<br/>Allowed values: `always`, `older`, `conflict`<br/>(`--overwrite={enum}`)(-o) |
9111
+ | pending_max | integer | Allow the maximum number of files that are pending transfer to be no more than the specified number.<br/>(`--pending-max={integer}`) |
9112
+ | preserve_access_time | boolean | Preserve file access time from the source to the destination.<br/>(`--preserve-access-time`) |
9113
+ | preserve_creation_time | boolean | Preserve file creation time from the source to the destination.<br/>(`--preserve-creation-time`) |
9114
+ | preserve_gid | boolean | Preserve the file owner's GID.<br/>(`--preserve-gid`)(-j) |
9115
+ | preserve_modification_time | boolean | Preserve file modification time from the source to the destination.<br/>(`--preserve-modification-time`) |
9116
+ | preserve_object_lock_legal_hold | boolean | Preserve object lock legal hold status from the source to the destination.<br/>(`--preserve-object-lock-legal-hold`) |
9117
+ | preserve_object_lock_retention | boolean | Preserve object lock retention from the source to the destination.<br/>(`--preserve-object-lock-retention`) |
9118
+ | preserve_object_metadata | boolean | Preserve object metadata from the source to the destination.<br/>(`--preserve-object-metadata`) |
9119
+ | preserve_uid | boolean | Preserve the file owner's UID.<br/>(`--preserve-uid`)(-u) |
9120
+ | quiet | boolean | Disable progress display.<br/>(`--quiet`)(-q) |
8839
9121
  | remote | object | &nbsp; |
8840
- | remote.connect_mode | &nbsp; | Define how to connect to the remote.<br/>Allowed values: `ssh`, `ws` |
9122
+ | remote.connect_mode | string | Define how to connect to the remote.<br/>Allowed values: `ssh`, `ws`<br/>(special:`--ws-connect`) |
8841
9123
  | 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. |
9124
+ | remote.host | string | Use the specified host name or address of the remote host.<br/>(`--host={string}`) |
9125
+ | remote.pass | string | Authenticate the transfer with the specified password.<br/>(`--pass={string}`)(-w) |
9126
+ | remote.path | string | Synchronize the specified directory on the remote host.<br/>(`--remote-dir={string}`)(-r) |
9127
+ | remote.port | integer | Use the specified TCP port for SSH. Used when connect_mode is `ssh`<br/>(`--tcp-port={integer}`)(-P) |
9128
+ | remote.private_key_paths | array | Authenticate with the specified SSH private key file.<br/>(`--private-key-path={array}`)(-i) |
9129
+ | remote.proxy | object | Specify the address of the Aspera high-speed proxy server.<br/>(special:`--proxy={object}`) |
8848
9130
  | remote.proxy.host | string | Use the specified host name or address of the proxy. |
8849
9131
  | remote.proxy.pass | string | Authenticate to the proxy with the specified password. |
8850
9132
  | 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` |
9133
+ | remote.proxy.protocol | string | The protocol to be used.<br/>Allowed values: `none`, `dnat`, `dnats` |
8852
9134
  | remote.proxy.user | string | Authenticate to the proxy with the specified username. |
8853
9135
  | remote.token | string | Token string passed to server's authentication service. |
8854
9136
  | 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. |
9137
+ | remote.user | string | Authenticate the transfer with the specified username.<br/>(`--user={string}`) |
8856
9138
  | 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. |
9139
+ | remote_checksum_threads | integer | Maximum number of threads to do checksum on the remote host. Value must be between 1 and 99<br/>(`--remote-checksum-threads={integer}`) |
9140
+ | remote_db_dir | string | Use the specified database directory on the remote host. Default is `.private-asp` at the root level of the synchronized directory.<br/>(`--remote-db-dir={string}`)(-B) |
9141
+ | remote_db_store_dir | string | Store/Restore the database to/from the specified directory on the remote host. The value can be an absolute path, an URI or - (use the remote sync dir).<br/>(`--remote-db-store-dir={string}`) |
9142
+ | remote_force_stat | boolean | Forces the remote async to retrieve file information even when no changes are detected by the scanner or monitor.<br/>(`--remote-force-stat`) |
9143
+ | remote_fs_threads | integer | Maximum number of threads to do file system operations on the remote host. Value must be between 1 and 99.<br/>(`--remote-fs-threads={integer}`) |
9144
+ | remote_keep_dir | string | Move deleted files into the specified directory on the remote host.<br/>(`--keep-dir-remote={string}`) |
9145
+ | remote_mount_signature | string | Verify that the file system is mounted by the existence of this file on the remote host.<br/>(`--remote-mount-signature={string}`) |
9146
+ | remote_move_cache_timeout_seconds | integer | Delay in seconds before aborting moving a file from remote cache to final destination. `-1` for disabled.<br/>(`--remote-move-cache-timeout={integer}`) |
9147
+ | remote_preserve_acls | string | Preserve access control lists on the remote host. If not specified, the default behavior is to use the same storage mode as specified by `preserve_acls`.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--remote-preserve-acls={enum}`) |
9148
+ | remote_preserve_xattrs | string | Preserve extended attributes on the remote host. If not specified, the default behavior is to use the same storage mode as specified by `preserve_xattrs`.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--remote-preserve-xattrs={enum}`) |
9149
+ | remote_scan_interval_milliseconds | integer | Enable periodic scans on the remote host. `-1` for disabled.<br/>(special:`--remote-scan-interval={integer}`) |
9150
+ | remote_scan_threads | integer | Number of directory scanning threads on the remote host. Value must be between 1 and 99.<br/>(`--remote-scan-threads={integer}`) |
8869
9151
  | 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 |
9152
+ | remove_after_transfer | boolean | Remove source files after they are successfully synchronized.<br/>(`--remove-after-transfer`) |
9153
+ | reset | boolean | Clear the snapshot database and rescan the synchronized directories and files to create a fresh snapshot<br/>(`--reset`)(-x) |
8872
9154
  | 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
9155
  | 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 |
9156
+ | resume.max_age | integer | Sets the age limit in days for temporary files that will be preserved on cleanup (usually at async's start and stop) for potential transfer resume. Temp files older than the given value will be removed regardless of whether they might be resumeable.<br/>(`--resume-age-days={integer}`) |
9157
+ | resume.min_size | integer | This field specifies the minimum size of files that will be allowed to resume.<br/>(`--support-resume={integer}`) |
9158
+ | resume_scan | boolean | Resume the scan from where the previous execution left off.<br/>(`--resume-scan`) |
9159
+ | scan_dir_rename | boolean | Enable the detection of renamed directories and files compared. to the previous scan, based on matching inodes<br/>(`--scan-dir-rename`) |
9160
+ | scan_file_rename | boolean | Enable the detection of renamed files compared to the previous scan, based on matching inodes.<br/>(`--scan-file-rename`) |
9161
+ | scan_intensity | string | Scan at the set intensity. `vlow` minimizes system activity. `vhigh` maximizes system activity by continuously scanning files without rest.<br/>Allowed values: `vlow`, `low`, `medium`, `high`, `vhigh`<br/>(`--scan-intensity={enum}`)(-H) |
9162
+ | sharing_retry_max | integer | Retry synchronizations up to the specified maximum number after a sharing violation.<br/>(`--sharing-retry-max={integer}`) |
9163
+ | store_metadata_records | boolean | Store the acls or xattrs in the snapshot database.<br/>(`--store-metadata-records`) |
9164
+ | symbolic_links | string | Handle symbolic links with the specified method. Default is `skip` on windows, `copy` otherwise.<br/>Allowed values: `copy`, `skip`, `follow`<br/>(`--symbolic-links={enum}`)(-n) |
9165
+ | tags | object | User-defined metadata tags.<br/>(special:`--tags64={object}`) |
9166
+ | transfer_threads | array | Use the specified number of dedicated transfer threads to process files smaller or equal to the specified size<br/>(special:`--transfer-threads={array}`) |
9167
+ | transfer_threads[].size | integer | Upper limit. `-1` for infinity. |
9168
+ | transfer_threads[].threads | integer | The number of threads. |
8885
9169
  | 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`. |
9170
+ | transport.cipher | string | Specify encryption algorithm for file data.<br/>Allowed values: `none`, `aes128`, `aes192`, `aes256`, `aes128cfb`, `aes192cfb`, `aes256cfb`, `aes128gcm`, `aes192gcm`, `aes256gcm`<br/>(`--cipher={enum}`)(-c) |
9171
+ | transport.compression | string | Compress a file before transfer using the specified MODE.<br/>Allowed values: `none`, `zlib`<br/>(`--compression={enum}`) |
9172
+ | transport.datagram_size | integer | Specify the datagram size (MTU) for FASP. By default it uses the detected path MTU.<br/>(`--datagram-size={integer}`)(-Z) |
9173
+ | transport.min_rate | integer | Attempt to transfer no slower than the specified rate (in bps).<br/>(`--min-rate={integer}`)(-m) |
9174
+ | transport.rate_policy | string | Defines how `ascp` will manage the bandwidth.<br/>Allowed values: `fair`, `fixed`, `high`, `low`<br/>(`--rate-policy={enum}`)(-a) |
9175
+ | transport.raw_options | array | Pass arbitrary arguments to `ascp`.<br/>(special:`--raw-options={array}`) |
9176
+ | transport.read_block_size | integer | Use the specified block size (in bytes) for reading. Default is determined by `aspera.conf`.<br/>(`--read-block-size={integer}`)(-g) |
9177
+ | transport.rexmsg_size | integer | Use the specified size (in bytes) for a retransmission request. Default is determined by `aspera.conf`.<br/>(`--rexmsg-size={integer}`)(-X) |
9178
+ | transport.target_rate | integer | Transfer no faster than the specified rate (in bps).<br/>(`--target-rate={integer}`)(-l) |
9179
+ | transport.udp_port | integer | Use the specified UDP port for FASP data transfer.<br/>(`--udp-port={integer}`)(-O) |
9180
+ | transport.write_block_size | integer | Use the specified block size (in bytes) for writing. Default is determined by `aspera.conf`.<br/>(`--write-block-size={integer}`)(-G) |
8897
9181
  | 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` |
9182
+ | watchd.datastore | string | Specify the type of datastore, `none` for disabled.<br/>Allowed values: `none`, `redis`, `scalekv` |
8899
9183
  | watchd.domain | string | Specify the domain. Default is the current username. |
8900
9184
  | watchd.host | string | Use the specified host name or address to connect to the datastore. |
8901
9185
  | 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. |
9186
+ | write_gid | string | Try to write files as the specified group.<br/>(`--write-gid={string}`) |
9187
+ | write_uid | string | Try to write files as the specified user.<br/>(`--write-uid={string}`) |
8904
9188
 
8905
9189
  #### `sync_info`: `args` format
8906
9190
 
@@ -8911,13 +9195,26 @@ Technically, it allows definition of multiple sync sessions in a single command,
8911
9195
 
8912
9196
  This is the mode selection if there are either keys `sessions` or `instance` in option `sync_info`.
8913
9197
 
8914
- Parameters `local_dir` and `remote_dir` are not allowed since they are provided on command line.
9198
+ The following parameters are automatically filled from mandatory arguments, and are not allowed:
9199
+
9200
+ - `direction`
9201
+ - `local_dir`
9202
+ - `remote_dir`
9203
+
9204
+ Parameter `name` is set to a default value if not provided in `sync_info`.
8915
9205
 
8916
9206
  ### Sync management and monitoring: `admin`
8917
9207
 
8918
9208
  The `admin` command provides several sub commands that access directly the Async snap database (`snap.db`).
8919
9209
  (With the exception of `status` which uses the utility `asyncadmin`, available only on server products.)
8920
9210
 
9211
+ This command does not require any communication to the server and accesses only the local database.
9212
+ It can be executed also from the `config` plugin:
9213
+
9214
+ ```shell
9215
+ ascli config sync admin
9216
+ ```
9217
+
8921
9218
  To use the `admin` command, the gem `sqlite3` shall be installed:
8922
9219
 
8923
9220
  ```shell
@@ -9349,6 +9646,16 @@ If you want to use `ed25519` keys, then install the required gems:
9349
9646
  gem install ed25519 bcrypt_pbkdf
9350
9647
  ```
9351
9648
 
9649
+ In addition, if those two gems are not installed, and if you are using Private Keys encoded using the OpenSSH format, then you'll get the message:
9650
+
9651
+ ```text
9652
+ OpenSSH keys only supported if ED25519 is available (NotImplementedError)
9653
+ net-ssh requires the following gems for ed25519 support:
9654
+ * ed25519 (>= 1.2, < 2.0)
9655
+ * bcrypt_pbkdf (>= 1.0, < 2.0)
9656
+ See https://github.com/net-ssh/net-ssh/issues/565 for more information
9657
+ ```
9658
+
9352
9659
  In addition, if **JRuby** is used, host keys of type: `ecdsa-sha2` and `ecdh-sha2` are also deactivated by default.
9353
9660
  To activate, set env var `ASCLI_ENABLE_ECDSHA2` to `true`.
9354
9661