aspera-cli 4.24.2 → 4.25.0.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +1064 -758
  4. data/CONTRIBUTING.md +43 -100
  5. data/README.md +671 -419
  6. data/lib/aspera/api/aoc.rb +71 -43
  7. data/lib/aspera/api/cos_node.rb +3 -2
  8. data/lib/aspera/api/faspex.rb +6 -5
  9. data/lib/aspera/api/node.rb +10 -12
  10. data/lib/aspera/ascmd.rb +1 -2
  11. data/lib/aspera/ascp/installation.rb +53 -39
  12. data/lib/aspera/assert.rb +25 -3
  13. data/lib/aspera/cli/error.rb +4 -2
  14. data/lib/aspera/cli/extended_value.rb +84 -60
  15. data/lib/aspera/cli/formatter.rb +55 -22
  16. data/lib/aspera/cli/main.rb +21 -14
  17. data/lib/aspera/cli/manager.rb +348 -247
  18. data/lib/aspera/cli/plugins/alee.rb +3 -3
  19. data/lib/aspera/cli/plugins/aoc.rb +70 -14
  20. data/lib/aspera/cli/plugins/base.rb +57 -49
  21. data/lib/aspera/cli/plugins/config.rb +69 -84
  22. data/lib/aspera/cli/plugins/console.rb +13 -8
  23. data/lib/aspera/cli/plugins/cos.rb +1 -1
  24. data/lib/aspera/cli/plugins/faspex.rb +32 -26
  25. data/lib/aspera/cli/plugins/faspex5.rb +45 -43
  26. data/lib/aspera/cli/plugins/faspio.rb +5 -5
  27. data/lib/aspera/cli/plugins/httpgw.rb +1 -1
  28. data/lib/aspera/cli/plugins/node.rb +131 -120
  29. data/lib/aspera/cli/plugins/oauth.rb +1 -1
  30. data/lib/aspera/cli/plugins/orchestrator.rb +114 -32
  31. data/lib/aspera/cli/plugins/preview.rb +26 -46
  32. data/lib/aspera/cli/plugins/server.rb +6 -8
  33. data/lib/aspera/cli/plugins/shares.rb +27 -32
  34. data/lib/aspera/cli/sync_actions.rb +49 -38
  35. data/lib/aspera/cli/transfer_agent.rb +16 -34
  36. data/lib/aspera/cli/version.rb +1 -1
  37. data/lib/aspera/cli/wizard.rb +8 -5
  38. data/lib/aspera/command_line_builder.rb +20 -17
  39. data/lib/aspera/coverage.rb +1 -1
  40. data/lib/aspera/environment.rb +41 -34
  41. data/lib/aspera/faspex_gw.rb +1 -1
  42. data/lib/aspera/keychain/factory.rb +1 -2
  43. data/lib/aspera/markdown.rb +31 -0
  44. data/lib/aspera/nagios.rb +6 -5
  45. data/lib/aspera/oauth/base.rb +17 -27
  46. data/lib/aspera/oauth/factory.rb +1 -1
  47. data/lib/aspera/oauth/url_json.rb +2 -1
  48. data/lib/aspera/preview/file_types.rb +23 -37
  49. data/lib/aspera/products/connect.rb +3 -3
  50. data/lib/aspera/rest.rb +51 -39
  51. data/lib/aspera/rest_error_analyzer.rb +4 -4
  52. data/lib/aspera/ssh.rb +5 -2
  53. data/lib/aspera/ssl.rb +41 -0
  54. data/lib/aspera/sync/conf.schema.yaml +182 -34
  55. data/lib/aspera/sync/database.rb +2 -1
  56. data/lib/aspera/sync/operations.rb +125 -69
  57. data/lib/aspera/transfer/parameters.rb +3 -4
  58. data/lib/aspera/transfer/spec.rb +2 -3
  59. data/lib/aspera/transfer/spec.schema.yaml +48 -18
  60. data/lib/aspera/transfer/spec_doc.rb +14 -14
  61. data/lib/aspera/uri_reader.rb +1 -1
  62. data/lib/transferd_pb.rb +2 -2
  63. data.tar.gz.sig +0 -0
  64. metadata +19 -6
  65. metadata.gz.sig +3 -2
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.pre"
6
6
  author: "Laurent MARTIN"
7
7
  PANDOC_META_END
8
8
  -->
@@ -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.pre
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
 
@@ -135,7 +135,7 @@ ascli --version
135
135
  ```
136
136
 
137
137
  ```text
138
- 4.24.2
138
+ 4.25.0.pre
139
139
  ```
140
140
 
141
141
  > [!NOTE]
@@ -338,14 +338,25 @@ Download the Ruby installer executable from <https://rubyinstaller.org/downloads
338
338
  rubyinstaller-devkit-3.2.2-1-x64.exe /silent /currentuser /noicons /dir=C:\aspera-cli
339
339
  ```
340
340
 
341
+ #### Windows: Chocolatey
342
+
343
+ If you use [Chocolatey](https://chocolatey.org/), then install Ruby with:
344
+
345
+ ```powershell
346
+ choco install ruby
347
+ ```
348
+
341
349
  #### macOS: `brew`
342
350
 
343
- The recommended way is to use [Homebrew](https://brew.sh/).
351
+ If you use [Homebrew](https://brew.sh/), then install Ruby with:
344
352
 
345
353
  ```shell
346
354
  brew install ruby
347
355
  ```
348
356
 
357
+ > [!NOTE]
358
+ > This is the recommended method.
359
+
349
360
  > [!WARNING]
350
361
  > **macOS** comes with Ruby 2.6.
351
362
  > It is an old unsupported version and [Apple has deprecated it](https://developer.apple.com/documentation/macos-release-notes/macos-catalina-10_15-release-notes).
@@ -364,8 +375,8 @@ export PATH="$(gem env gemdir)/bin:$PATH"
364
375
 
365
376
  > [!NOTE]
366
377
  > 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`
378
+ > This is what is displayed at the end of the installation of the ruby tap,
379
+ > same as message from: `brew info ruby`
369
380
 
370
381
  #### Linux: Package
371
382
 
@@ -391,10 +402,11 @@ If your Linux distribution provides a standard Ruby package, you can use it prov
391
402
  dnf install -y make automake gcc gcc-c++ kernel-devel
392
403
  ```
393
404
 
394
- - Enable the Ruby version you want:
405
+ - Enable the Ruby version you selected:
395
406
 
396
407
  ```shell
397
- dnf module -y enable ruby:3.1
408
+ dnf module -y enable ruby:3.2
409
+
398
410
  dnf install -y ruby-devel
399
411
  ```
400
412
 
@@ -417,7 +429,7 @@ apt install -y ruby ruby-dev rubygems ruby-json
417
429
  One can remove all installed gems, for example to start fresh:
418
430
 
419
431
  ```shell
420
- gem uninstall -axI $(ls $(gem env gemdir)/gems/|sed -e 's/-[^-]*$//'|sort -u)
432
+ ls $(gem env gemdir)/gems/|sed -e 's/-[^-]*$//'|sort -u|xargs gem uninstall -axI
421
433
  ```
422
434
 
423
435
  #### Unix-like: RVM: Single user installation (not root)
@@ -575,23 +587,24 @@ Those are not installed as part of dependencies because they involve compilation
575
587
  See [Gemfile](Gemfile):
576
588
 
577
589
  | name | version | comment |
578
- | -------------------- | ------- | --------------------------------------------------- |
590
+ |----------------------|---------|-----------------------------------------------------|
579
591
  | grpc | ~> 1.71 | (no jruby) for Aspera Transfer Daemon |
580
- | mimemagic | ~> 0.4 | for preview |
592
+ | marcel | ~> 1.1 | for preview |
581
593
  | rmagick | ~> 6.1 | (no jruby) for terminal view |
582
594
  | symmetric-encryption | ~> 4.6 | for encrypted hash file secrets |
583
595
  | bigdecimal | ~> 3.1 | if RUBY_VERSION >= '3.4' for symmetric-encryption ? |
584
596
  | sqlite3 | ~> 2.7 | (no jruby) for async DB |
585
597
  | jdbc-sqlite3 | ~> 3.46 | (jruby) for async DB |
586
598
  | sequel | ~> 5.96 | (jruby) for async DB |
587
- | ed25519 | ~> 1.4 | (no jruby) for ed25519 |
588
- | bcrypt_pbkdf | ~> 1.1 | (no jruby) for ed25519 |
599
+ | ed25519 | ~> 1.4 | (no jruby) for ed25519 and OpenSSH file format |
600
+ | bcrypt_pbkdf | ~> 1.1 | (no jruby) for ed25519 and OpenSSH file format |
601
+ | syslog | ~> 0.3 | (no jruby) for logger=syslog |
589
602
 
590
603
  Install like this:
591
604
 
592
605
  ```shell
593
606
  gem install grpc -v '~> 1.71'
594
- gem install mimemagic -v '~> 0.4'
607
+ gem install marcel -v '~> 1.1'
595
608
  gem install rmagick -v '~> 6.1'
596
609
  gem install symmetric-encryption -v '~> 4.6'
597
610
  gem install bigdecimal -v '~> 3.1'
@@ -600,6 +613,7 @@ gem install jdbc-sqlite3 -v '~> 3.46'
600
613
  gem install sequel -v '~> 5.96'
601
614
  gem install ed25519 -v '~> 1.4'
602
615
  gem install bcrypt_pbkdf -v '~> 1.1'
616
+ gem install syslog -v '~> 0.3'
603
617
  ```
604
618
 
605
619
  ### Ruby Gem: `aspera-cli`
@@ -607,7 +621,7 @@ gem install bcrypt_pbkdf -v '~> 1.1'
607
621
  Once you have Ruby and rights to install gems, install the `aspera-cli` gem and its dependencies:
608
622
 
609
623
  ```shell
610
- gem install aspera-cli
624
+ gem install aspera-cli --pre
611
625
  ```
612
626
 
613
627
  To upgrade to the latest version:
@@ -667,12 +681,12 @@ To execute an Aspera transfer, only two additional files are required, both incl
667
681
 
668
682
  - `aspera-license` - the license file (located in the same directory as `ascp` or in `../etc`)
669
683
 
670
- These components can be installed either by installing the Aspera transfer software or by executing the `ascli` command.
684
+ These components can be installed either by installing the Aspera transfer software or by running the `ascli` command.
671
685
 
672
686
  #### Installation of `ascp` through `transferd`
673
687
 
674
688
  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:
689
+ Install it using `ascli` (for the current platform) with:
676
690
 
677
691
  ```shell
678
692
  ascli config transferd install
@@ -738,6 +752,7 @@ If the embedded method is not used, the following packages are also suitable:
738
752
 
739
753
  - IBM Aspera Connect Client (Free)
740
754
  - IBM Aspera Desktop Client (Free)
755
+ - IBM Aspera for Desktop (Free)
741
756
  - IBM Aspera High Speed Transfer Server (Licensed)
742
757
  - IBM Aspera High Speed Transfer Endpoint (Licensed)
743
758
 
@@ -758,14 +773,15 @@ Refer to section: [Transfer Agents](#transfer-clients-agents)
758
773
 
759
774
  #### Gem files and dependencies
760
775
 
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`.
776
+ Necessary gems can be packed in a `tar.gz` like this:
762
777
 
763
- ```shell
764
- ./build_package.sh aspera-cli 4.18.0
765
- ```
766
-
767
- ```text
768
- Archive: aspera-cli-4.18.0-gems.tgz
778
+ ```bash
779
+ mkdir temp_folder
780
+ gem install aspera-cli:4.25.0.pre --no-document --install-dir temp_folder
781
+ find temp_folder
782
+ mv temp_folder/cache aspera-cli-4.25.0.pre-gems
783
+ rm -fr temp_folder
784
+ tar zcvf aspera-cli-4.25.0.pre-gems aspera-cli-4.25.0.pre-gems.tgz
769
785
  ```
770
786
 
771
787
  #### Unix-like
@@ -845,7 +861,7 @@ ascli config ascp install --sdk-url=file:///sdk.zip
845
861
  ```
846
862
 
847
863
  > [!NOTE]
848
- > An example of installation script is provided: [windows/install.bat](windows/install.bat)
864
+ > A beta version of a packaged installed is available.
849
865
 
850
866
  ### Container
851
867
 
@@ -888,7 +904,7 @@ That is simple, but there are limitations:
888
904
 
889
905
  #### Container: Details
890
906
 
891
- The container image is built from this [Dockerfile](container/Dockerfile.tmpl.erb).
907
+ The container image is built from this [Dockerfile](build/container/Dockerfile.tmpl.erb).
892
908
  The entry point is `ascli` and the default command is `help`.
893
909
 
894
910
  The container can be executed for individual commands like this: (add `ascli` commands and options at the end of the command line, e.g. `-v` to display the version)
@@ -910,7 +926,7 @@ ascli -v
910
926
  ```
911
927
 
912
928
  ```text
913
- 4.24.2
929
+ 4.25.0.pre
914
930
  ```
915
931
 
916
932
  In order to keep persistency of configuration on the host, you should specify your user's configuration folder as a volume for the container.
@@ -1350,35 +1366,86 @@ Details can be found here:
1350
1366
 
1351
1367
  - [quoting rules](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules)
1352
1368
 
1353
- The following examples give the same result on Windows using PowerShell:
1369
+ ##### PowserShell 5
1354
1370
 
1355
1371
  - Check your powershell version:
1356
1372
 
1357
1373
  ```powershell
1358
- PS C:\> echo $psversiontable.psversion
1374
+ $psversiontable.psversion.Major
1375
+ ```
1359
1376
 
1360
- Major Minor Build Revision
1361
- ----- ----- ----- --------
1362
- 5 1 19041 4046
1377
+ ```text
1378
+ 5
1379
+ ```
1380
+
1381
+ The following examples give the same result on Windows using PowerShell 5:
1382
+
1383
+ ```text
1384
+ ╭───────┬───────╮
1385
+ │ field │ value │
1386
+ ╞═══════╪═══════╡
1387
+ │ x │ true │
1388
+ │ k │ v │
1389
+ ╰───────┴───────╯
1363
1390
  ```
1364
1391
 
1365
1392
  - Use PowerShell argument `--%` to place PowerShell in "stop-parsing" mode.
1366
1393
 
1367
1394
  ```powershell
1368
- PS C:\> ascli config echo --% @json:'{"k":"v","x":"y"}'
1395
+ ascli config echo --% @json:'{"k":"v","x":true}'
1369
1396
  ```
1370
1397
 
1371
1398
  - Triple double quotes are replaced with a single double quote in normal mode:
1372
1399
 
1373
1400
  ```powershell
1374
- PS C:\> ascli config echo @json:'{"""k""":"""v""","""x""":"""y"""}'
1401
+ ascli config echo @json:'{"""k""":"""v""","""x""":true}'
1402
+ ```
1403
+
1404
+ - To insert PowerShell variables in the JSON string, one can do:
1405
+
1406
+ ```powershell
1407
+ $var="v"
1408
+ ascli conf echo $('@json:{"""k""":"""' + $var + '""","""x""":true}')
1409
+ ```
1410
+
1411
+ ##### PowserShell 7
1412
+
1413
+ - Check your powershell version:
1414
+
1415
+ ```powershell
1416
+ $psversiontable.psversion.Major
1417
+ ```
1418
+
1419
+ ```text
1420
+ 7
1421
+ ```
1422
+
1423
+ The following examples give the same result on Windows using PowerShell 7:
1424
+
1425
+ - Use PowerShell argument `--%` to place PowerShell in "stop-parsing" mode.
1426
+
1427
+ ```powershell
1428
+ ascli config echo --% @json:{"k":"v","x":true}
1429
+ ```
1430
+
1431
+ - Single quote protects double quote in normal mode:
1432
+
1433
+ ```powershell
1434
+ ascli config echo @json:'{"k":"v","x":true}'
1375
1435
  ```
1376
1436
 
1377
1437
  - To insert PowerShell variables in the JSON string, one can do:
1378
1438
 
1379
1439
  ```powershell
1380
- $email="john@example.com"
1381
- ascli conf echo $('@json:{"""address""":"""' + $email + '""","""vip""":true}')
1440
+ $var="v"
1441
+ ascli conf echo $('@json:{"k":"' + $var + '","x":true}')
1442
+ ```
1443
+
1444
+ - Use PowerShell structure and then convert to JSON string:
1445
+
1446
+ ```powershell
1447
+ $var="v"
1448
+ ascli conf echo "@json:$(@{ k = $var; x = $true } | ConvertTo-Json -Compress)"
1382
1449
  ```
1383
1450
 
1384
1451
  #### Extended Values (JSON, Ruby, ...)
@@ -1603,7 +1670,7 @@ The value of **Options** and **Positional Arguments** is evaluated with the [Ext
1603
1670
  - **Commands**, typically at the beginning
1604
1671
  - **Command Parameters**, mandatory arguments, e.g. creation data or entity identifier
1605
1672
 
1606
- When options are removed from the command line, the remaining arguments are typically **Positional Arguments** with a pre-defined order.
1673
+ When options are removed from the command line, the remaining arguments are typically **Positional Arguments** with a significant, pre-defined order.
1607
1674
 
1608
1675
  **Commands** are typically entity types (e.g. `users`) or verbs (e.g. `create`) to act on those entities.
1609
1676
  Its value is a `String` that must belong to a fixed list of values in a given context.
@@ -1620,14 +1687,13 @@ ascli config ascp info
1620
1687
  - `info` is the third level command: action to be performed
1621
1688
 
1622
1689
  Typically, **Commands** are located at the **beginning** of the command line.
1623
- Order is significant.
1624
1690
  The provided command must match one of the supported commands in the given context.
1625
1691
  If wrong, or no command is provided when expected, an error message is displayed and the list of supported commands is displayed.
1626
1692
 
1627
1693
  Standard **Commands** are: `create`, `show`, `list`, `modify`, `delete`.
1628
1694
  Some entities also support additional commands.
1629
1695
  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`.
1696
+ For example sub-commands appear after entity selection (identifier), e.g. `ascli aoc admin node do <node_id> browse /`: `browse` is a sub-command of `node`.
1631
1697
 
1632
1698
  **Command Parameters** are typically mandatory values for a command, such as entity creation data or entity identifier.
1633
1699
 
@@ -1642,6 +1708,29 @@ If a **Command Parameter** begins with `-`, then either use the `@val:` syntax (
1642
1708
 
1643
1709
  A few **Command Parameters** are optional, they are always located at the end of the command line.
1644
1710
 
1711
+ A special Extended Value `@:` has the following meaning:
1712
+
1713
+ - Take all remaining positional arguments
1714
+ - Expect each of them to have the format: `<path>=<value>`
1715
+ - `<path>` designates a path in a complex structure such as Hash or Array.
1716
+ `.` is the path separator.
1717
+ Each segment separated by a dot represents a key in a nested structure.
1718
+ Integer index denote Array, and other denote Hash index.
1719
+ - `ascli` tries to convert `<value>` to the simplest type (bool, int, float, string).
1720
+ If a specific type is required, it can be specified using the `@json:` or `@ruby:` syntax.
1721
+ For example, `--a.b.c=1` is equivalent to `--a=@json'{"b":{"c":1}}'`.
1722
+ This allows specifying nested keys directly on the command line using a concise **dot-separated** syntax.
1723
+
1724
+ Example:
1725
+
1726
+ ```bash
1727
+ ascli conf echo @: a.b=1 a.c=2 a.d.0=hello a.d.1=world --format=json
1728
+ ```
1729
+
1730
+ ```json
1731
+ {"a":{"b":1,"c":2,"d":["hello","world"]}}
1732
+ ```
1733
+
1645
1734
  #### Options
1646
1735
 
1647
1736
  Command-line options, such as `--log-level=debug`, follow these conventions:
@@ -1673,13 +1762,17 @@ Exceptions and Special Cases:
1673
1762
  - **Option Terminator**:
1674
1763
  The special option `--` ends option parsing.
1675
1764
  All subsequent arguments, including those starting with `-`, are treated as positional arguments.
1676
- - **Dot Notation for Hashes**:
1765
+ - **Dot Notation for Hash and Array**:
1677
1766
  If an option name contains a dot (`.`), it is interpreted as a `Hash`.
1678
1767
  Each segment separated by a dot represents a key in a nested structure.
1679
1768
  `ascli` tries to convert the value to the simplest type (bool, int, float, string).
1680
1769
  If a specific type is required, it can be specified using the `@json:` or `@ruby:` syntax.
1681
1770
  For example, `--a.b.c=1` is equivalent to `--a=@json'{"b":{"c":1}}'`.
1682
1771
  This allows specifying nested keys directly on the command line using a concise **dot-separated** syntax.
1772
+ - **Cummulative Hashes**:
1773
+ When an option of type `Hash` is set, the value is deep-merged to an existing or default value.
1774
+ Setting to `@none:` is equivalent to setting to `@json:{}`, i.e. an empty `Hash`.
1775
+ This can be used to start from an empty value, and not used existing default value.
1683
1776
 
1684
1777
  Example:
1685
1778
 
@@ -2085,36 +2178,40 @@ The following decoders are supported:
2085
2178
 
2086
2179
  | Decoder | Parameter| Returns | Description |
2087
2180
  |----------|----------|----------|------------------------------------------------------------------------------------------|
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` |
2181
+ | `base64` | `String` | `String` | Decode a base64 encoded string. |
2182
+ | `csvt` | `String` | `Array` | Decode a titled CSV value. |
2183
+ | `env` | `String` | `String` | Read from a named env var name. e.g. `--password=@env:MYPASSVAR` |
2184
+ | `file` | `String` | `String` | Read value from specified file (prefix `~/` is replaced with the users home folder). e.g. `--key=@file:~/.ssh/mykey` |
2185
+ | `json` | `String` | Any | Decode JSON values. Convenient to provide complex structures. |
2186
+ | `lines` | `String` | `Array` | Split a string in multiple lines and return an `Array`. |
2187
+ | `list` | `String` | `Array` | Split a string in multiple items taking first character as separator and return an `Array`. |
2188
+ | `none` | None | Nil | A `null` value. |
2189
+ | `path` | `String` | `String` | Performs path expansion on specified path (prefix `~/` is replaced with the user's home folder). e.g. `--config-file=@path:~/sample_config.yml` |
2097
2190
  | `preset` | `String` | `Hash` | Get whole option preset value by name. Sub-values can also be used, using `.` as separator. e.g. `foo.bar` is `conf[foo][bar]` |
2098
- | `extend` | `String` | `String` | Evaluates embedded extended value syntax in string |
2191
+ | `extend` | `String` | `String` | Evaluates embedded extended value syntax in string. |
2099
2192
  | `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` |
2193
+ | `ruby` | `String` | Any | Execute specified Ruby code. |
2194
+ | `secret` | None | `String` | Ask password interactively (hides input). |
2195
+ | `stdin` | None | `String` | Read from stdin in text mode (no value on right). |
2196
+ | `stdbin` | None | `String` | Read from stdin in binary mode (no value on right). |
2197
+ | `uri` | `String` | `String` | Read value from specified URL. e.g. `--fpac=@uri:http://serv/f.pac` |
2105
2198
  | `val` | `String` | `String` | Prevent decoders on the right to be decoded. e.g. `--key=@val:@file:foo` sets the option `key` to value `@file:foo`. |
2106
- | `yaml` | `String` | Any | Decode YAML |
2107
- | `zlib` | `String` | `String` | Decompress data using zlib |
2199
+ | `yaml` | `String` | Any | Decode YAML. |
2200
+ | `zlib` | `String` | `String` | Decompress data using zlib. |
2201
+ | `p` | None | Any | Parses remaining arguments as `Hash` or `Array`. |
2108
2202
 
2109
2203
  > [!NOTE]
2110
2204
  > 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`.
2205
+ > For example, the **Extended Value** `@ruby:'->(i){i["attr"]}'` is a lambda expression that returns the value for key `attr` of the `Hash` parameter named `i`.
2112
2206
 
2113
2207
  To display the result of an extended value, use the `config echo` command.
2114
2208
 
2115
2209
  The `extend` decoder is useful to evaluate embedded extended value syntax in a string.
2116
2210
  It expects a `@` to close the embedded extended value syntax.
2117
2211
 
2212
+ Option `parser` allows definition of a default parser when the positinal parameter or option expects a `Hash` or `Array`.
2213
+ For example, with `--parser=json`, the parameter `{}` will be parsed as an empty JSON Hash, even without prefix `@json:`.
2214
+
2118
2215
  Example: Create a `Hash` value with the convenient `@json:` decoder:
2119
2216
 
2120
2217
  ```shell
@@ -2191,15 +2288,17 @@ EOF
2191
2288
  {"key1":"value1","key2":["item1","item2"],"key3":{"key4":"value4","key5":"value5"}}
2192
2289
  ```
2193
2290
 
2194
- ### Configuration and Persistency Folder
2291
+ ### Main, configuration and Persistency Folder
2195
2292
 
2196
- `ascli` configuration and persistency files (token cache, file lists, persistency files) are stored by default in `[User's home folder]/.aspera/ascli`.
2293
+ `ascli` looks for configuration and persistency files (token cache, file lists, persistency files) in the folder specified using option `home`.
2294
+ The default value is `[User's home folder]/.aspera/ascli`.
2197
2295
 
2198
2296
  > [!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%`.
2297
+ > The `[User's home folder]` is determined using Rubys `Dir.home` method.
2298
+ > Primary source: The HOME environment variable.
2299
+ > On Windows: Ruby also checks `%HOMEDRIVE%%HOMEPATH%` and `%USERPROFILE%` (via `rb_w32_home_dir`).
2300
+ > Additionally, `ascli` sets the `%HOME%` environment variable to the value of `%USERPROFILE%` if it exists and is valid.
2301
+ > Therefore, on Windows, `%USERPROFILE%` is preferred because it is generally more reliable than `%HOMEDRIVE%%HOMEPATH%`.
2203
2302
 
2204
2303
  The configuration folder can be displayed using :
2205
2304
 
@@ -2212,9 +2311,11 @@ ascli config folder
2212
2311
  ```
2213
2312
 
2214
2313
  > [!NOTE]
2215
- > This is equivalent to: `ascli --show-config --fields=home`
2314
+ > This is equivalent to display the value of the `home` option.
2216
2315
 
2217
- It can be overridden using option `home`.
2316
+ ```shell
2317
+ ascli --show-config --fields=home
2318
+ ```
2218
2319
 
2219
2320
  Example (Windows):
2220
2321
 
@@ -2226,11 +2327,28 @@ ascli config folder
2226
2327
  C:\Users\Kenji\.aspera\ascli
2227
2328
  ```
2228
2329
 
2229
- When OAuth is used (AoC, Faspex5) `ascli` keeps a cache of generated bearer tokens in folder `persist_store` in configuration folder by default.
2330
+ When OAuth is used (AoC, Faspex5) `ascli` keeps a cache of generated bearer tokens in folder `persist_store` located in the configuration folder by default.
2230
2331
  Option `cache_tokens` (**yes**/no) allows controlling if OAuth tokens are cached on file system, or generated for each request.
2231
2332
  The command `config tokens flush` clears that cache.
2232
2333
  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.
2334
+ When a token has expired, then a new token is generated, either using a `refresh_token` if it is available, or by the default method.
2335
+
2336
+ ### Configuration file
2337
+
2338
+ On the first execution of `ascli`, an empty configuration file is created in the configuration folder (`ascli config folder`).
2339
+ There is no mandatory information required in this file.
2340
+ The use of it is optional as any option can be provided on the command line.
2341
+
2342
+ Although the file is a standard `YAML` file, `ascli` provides commands to read and modify it using the `config` command.
2343
+
2344
+ All options for `ascli` can be set on command line, or by env vars, or using [Option Preset](#option-preset) in the configuration file.
2345
+
2346
+ A configuration file provides a way to define default values, especially for authentication options, thus avoiding to always having to specify those options on the command line.
2347
+
2348
+ The default configuration file is: `$HOME/.aspera/ascli/config.yaml` (this can be overridden with option `--config-file=path` or its env var).
2349
+
2350
+ The configuration file is a catalog of named lists of options, called: [Option Preset](#option-preset).
2351
+ Then, instead of specifying some common options on the command line (e.g. address, credentials), it is possible to invoke the ones of an [Option Preset](#option-preset) (e.g. `mypreset`) using the option `preset`: `--preset=mypreset` or its shortcut: `-Pmypreset`.
2234
2352
 
2235
2353
  ### Invalid Filename Characters
2236
2354
 
@@ -2253,23 +2371,6 @@ Temporary files are deleted at the end of execution unless option: `clean_temp`
2253
2371
  By default (`@sys`), the temporary folder is the system's temporary folder for the current user (Ruby `Etc.systmpdir`).
2254
2372
  A special value of `@env` will set the folder to Ruby `Dir.tmpdir` which uses regular env var to set the temp folder.
2255
2373
 
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
2374
  #### Option Preset
2274
2375
 
2275
2376
  An [Option Preset](#option-preset) is a collection of options and their associated values in a named section in the configuration file.
@@ -2367,7 +2468,7 @@ ascli config preset get default _plugin_name_
2367
2468
  "_default_preset_for_plugin_"
2368
2469
  ```
2369
2470
 
2370
- #### Plugin: `config`: Configuration
2471
+ ### Plugin: `config`: Configuration
2371
2472
 
2372
2473
  Plugin `config` provides general commands for `ascli`:
2373
2474
 
@@ -2413,7 +2514,7 @@ ascli config preset set GLOBAL version_check_days 0
2413
2514
  ascli config preset set default config my_common_defaults
2414
2515
  ```
2415
2516
 
2416
- ### Tested commands for `config`
2517
+ #### Tested commands for `config`
2417
2518
 
2418
2519
  > [!NOTE]
2419
2520
  > Add `ascli config` in front of the following commands:
@@ -2436,6 +2537,7 @@ ascp show
2436
2537
  ascp spec
2437
2538
  check_update
2438
2539
  coffee
2540
+ coffee --log-level=trace2 --log-format=caller
2439
2541
  coffee --ui=text
2440
2542
  coffee --ui=text --image=@json:'{"text":true,"double":false}'
2441
2543
  coffee --ui=text --image=@json:'{"text":true}'
@@ -2464,6 +2566,7 @@ echo @uri:/etc/hosts
2464
2566
  echo @uri:file:/etc/hosts
2465
2567
  echo @uri:http://ifconfig.me
2466
2568
  echo @uri:https://ifconfig.me
2569
+ echo @uri:https://ifconfig.me/ip --cert-stores=@ruby:[OpenSSL::X509::DEFAULT_CERT_DIR,OpenSSL::X509::DEFAULT_CERT_FILE] --http-options.ssl_options=@list:,CIPHER_SERVER_PREFERENCE,-NETSCAPE_CA_DN_BUG --insecure=yes
2467
2570
  echo @vault:my_preset.password
2468
2571
  echo @zlib:@stdin:
2469
2572
  echo hello
@@ -2482,7 +2585,7 @@ genkey my_key 4096
2482
2585
  image https://eudemo.asperademo.com/wallpaper.jpg
2483
2586
  initdemo
2484
2587
  open
2485
- plugins create my_command
2588
+ plugins create my_command .
2486
2589
  plugins list
2487
2590
  preset delete conf_name
2488
2591
  preset initialize conf_name @json:'{"p1":"v1","p2":"v2"}'
@@ -2503,7 +2606,6 @@ smtp_settings
2503
2606
  sync spec
2504
2607
  tokens flush
2505
2608
  tokens list
2506
- tokens show foobar
2507
2609
  transferd install
2508
2610
  transferd list
2509
2611
  vault create @json:'{"label":"my_label","password":"my_password_here","description":"my secret"}'
@@ -2523,7 +2625,7 @@ wizard my_org aoc --key-path=my_private_key --username=my_user_email --use-gener
2523
2625
  wizard my_org aoc mypreset --key-path=my_private_key --username=my_user_email
2524
2626
  ```
2525
2627
 
2526
- #### Format of file
2628
+ #### Format of configuration file
2527
2629
 
2528
2630
  The configuration file is a `Hash` in a YAML file.
2529
2631
  Example:
@@ -2858,7 +2960,16 @@ It consists in using a pair of associated keys: a private key and a public key.
2858
2960
  The same pair can be used for multiple applications.
2859
2961
  The file containing the private key (key pair) can optionally be protected by a passphrase.
2860
2962
  If the key is protected by a passphrase, then it will be prompted when used.
2861
- (some plugins support option `passphrase`)
2963
+ Some plugins support option `passphrase`.
2964
+
2965
+ By default, `ascli` does not support `ed25519` type, nor OpenSSH encoded keys.
2966
+ See section: [Private key type ed25519](#private-key-type-ed25519-not-supported-by-default).
2967
+ It requires PEM encoded keys.
2968
+ To support `ed25519` and OpenSSH format (default on modern Linux), install those gems:
2969
+
2970
+ ```shell
2971
+ gem install ed25519 bcrypt_pbkdf
2972
+ ```
2862
2973
 
2863
2974
  The following sample commands use the shell variable `KEY_PAIR_PATH`.
2864
2975
  Set it to the desired safe location of the private key.
@@ -2879,6 +2990,7 @@ If another format is used, such as `DER`, it can be converted to `PEM`, e.g. usi
2879
2990
 
2880
2991
  The generated key is of type `RSA`, by default: **4096** bit.
2881
2992
  For convenience, the public key is also extracted with extension `.pub`.
2993
+ Files are PEM encoded.
2882
2994
  The key is not passphrase protected.
2883
2995
 
2884
2996
  ```shell
@@ -3000,38 +3112,47 @@ It is also possible to force the graphical mode with option `--ui` :
3000
3112
  ### Logging, Debugging
3001
3113
 
3002
3114
  The gem is equipped with traces, mainly for debugging and learning APIs.
3115
+ The following options control logging:
3116
+
3117
+ | Option | Values | Description |
3118
+ |---------------|--------|-------------------------------------------------------------------------|
3119
+ | `logger` | `stdout`<br/>`stderr`<br/>`syslog` | Type of output.<br/>Default: `stderr` |
3120
+ | `log_level` | `trace2`<br/>`trace1`<br/>`debug`<br/>`info`<br/>`warn`<br/>`error` | Minimum level displayed.<br/>Default: `warn` |
3121
+ | `log_secrets` | `yes`<br/>`no` | Show or hide secrets in logs.<br/>Default: `no` (Hide) |
3122
+ | `log_format` | `Proc`<br/>`String` | The name of a formatter or a lambda function that formats the log (see below).<br/>Default: `default`<br/>Alternative: `standard` |
3123
+
3124
+ Option `logger` defines the destination of logs.
3125
+
3126
+ #### `log_level` and `log_secrets`
3003
3127
 
3004
3128
  To increase debug level, use option `log_level` (e.g. using command line `--log-level=xx`, env var `ASCLI_LOG_LEVEL`, or an [Option Preset](#option-preset)).
3005
3129
 
3006
3130
  > [!NOTE]
3007
- > When using the `direct` agent (`ascp`), additional transfer logs can be activated using `ascp` options and `ascp_args`, see [`direct`](#agent-direct).
3131
+ > When using the `direct` agent (`ascp`), additional transfer logs from `ascp` can be activated using `ascp` options and `ascp_args`, see [`direct`](#agent-direct).
3008
3132
 
3009
3133
  By default, passwords and secrets are redacted from logs.
3010
3134
  Set option `log_secrets` to `yes` to include secrets in logs.
3011
3135
 
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` |
3136
+ #### `log_format`
3018
3137
 
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`.
3138
+ Option `log_format` support a few pre-defined formatters or a custom one using `@ruby:`.
3139
+ A customer formatter is a lambda that takes 4 arguments, see: [Ruby Formatter](https://github.com/ruby/logger/blob/master/lib/logger/formatter.rb) : `severity`, `time`, `progname`, `msg`.
3021
3140
  The default formatter is:
3022
3141
 
3023
3142
  ```ruby
3024
- ->(s, _d, _p, m){"#{s[0..2]} #{m}\n"}
3143
+ ->(s, _d, _p, m){"#{s[0..2]}#{s[-1]} #{m}\n"}
3025
3144
  ```
3026
3145
 
3027
3146
  Available formatters for `log_format`:
3028
3147
 
3029
- | Name | Description |
3030
- |-----------|--------------------------|
3031
- | `default` | Default formatter. |
3032
- | `standard`| Standard Ruby formatter. |
3148
+ | Name | Description |
3149
+ |-----------|----------------------------------------------------------------------------------|
3150
+ | `default` | Default formatter: Colorized 4 level level followed by message on the same line. |
3151
+ | `standard`| Standard Ruby formatter. |
3152
+ | `caller` | Colorized 4 level level followed by caller, and then on next line: message. |
3153
+ | `Proc` | Custom lambda. |
3033
3154
 
3034
- Examples:
3155
+ #### Logging examples
3035
3156
 
3036
3157
  - Display debugging log on `stdout`:
3037
3158
 
@@ -3229,11 +3350,6 @@ This is the reason why it is advised to install the Aspera Transfer Daemon durin
3229
3350
 
3230
3351
  By default, `ascli` uses the `ascp` binary found in **well known locations**, i.e. typical Aspera product installation paths.
3231
3352
 
3232
- The way to specify the location of `ascp` is to use either options:
3233
-
3234
- - `ascp_path`
3235
- - `use_product`
3236
-
3237
3353
  The `config` plugin allows finding and specifying the location of `ascp`.
3238
3354
  It provides the following commands for `ascp` sub-command:
3239
3355
 
@@ -3242,32 +3358,11 @@ It provides the following commands for `ascp` sub-command:
3242
3358
  - `products` : list Aspera transfer products available locally
3243
3359
  - `connect` : list and download connect client versions available on internet
3244
3360
 
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
3361
  #### Selection of `ascp` location for [`direct`](#agent-direct) agent
3269
3362
 
3270
- By default, `ascli` uses any found local product with `ascp`, including Transfer Daemon.
3363
+ Option: `ascp_path` is used to specify the location of `ascp`.
3364
+ The default value is: `product:FIRST`.
3365
+ By default, `ascli` uses any found local product with `ascp`, including Transfer Daemon (SDK).
3271
3366
 
3272
3367
  To override and use an alternate `ascp` path use option `ascp_path` (`--ascp-path=`)
3273
3368
 
@@ -3299,10 +3394,9 @@ Saved to default global preset global_common_defaults
3299
3394
 
3300
3395
  If the path has spaces, read section: [Shell and Command line parsing](#command-line-parsing-special-characters).
3301
3396
 
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`.
3397
+ A special value `product:<product name>` can be used for option `ascp_path`.
3398
+ It specifies to use `ascp` from the given product name.
3399
+ A special valuefor product name is `FIRST`, which means: use the first found.
3306
3400
 
3307
3401
  Locally installed Aspera products can be listed with:
3308
3402
 
@@ -3321,13 +3415,42 @@ ascli config ascp products list
3321
3415
  +---------------------------------------+----------------------------------------+
3322
3416
  ```
3323
3417
 
3324
- Using the option `use_product` finds the `ascp` binary of the selected product.
3325
-
3326
3418
  To permanently use the `ascp` of a product:
3327
3419
 
3328
3420
  ```shell
3329
- ascli config ascp products use 'Aspera Connect'
3330
- saved to default global preset /Users/laurent/Applications/Aspera Connect.app/Contents/Resources/ascp
3421
+ ascli config ascp products use 'IBM Aspera Connect'
3422
+ Updated: default: config <- global_common_defaults
3423
+ Updated: global_common_defaults: ascp_path <- product:IBM Aspera Connect
3424
+ Saving config file.
3425
+ ```
3426
+
3427
+ It is the same as executing:
3428
+
3429
+ ```shell
3430
+ ascli config preset set GLOBAL ascp_path 'product:IBM Aspera Connect'
3431
+ ```
3432
+
3433
+ To show the path of currently used `ascp`:
3434
+
3435
+ ```shell
3436
+ ascli config ascp show
3437
+ ```
3438
+
3439
+ ```text
3440
+ /Users/laurent/.aspera/ascli/sdk/ascp
3441
+ ```
3442
+
3443
+ ```shell
3444
+ ascli config ascp info
3445
+ ```
3446
+
3447
+ ```text
3448
+ ╭─────────┬──────────────────────────────────────────────────╮
3449
+ │ field │ value │
3450
+ ╞═════════╪══════════════════════════════════════════════════╡
3451
+ │ ascp │ /Users/john/.aspera/sdk/ascp │
3452
+ ...
3453
+ ╰─────────┴──────────────────────────────────────────────────╯
3331
3454
  ```
3332
3455
 
3333
3456
  #### Installation of Connect Client on command line
@@ -3518,13 +3641,19 @@ ascli config folder
3518
3641
 
3519
3642
  The name of the file shall be: `send_<PID>`, where `<PID>` is the process id of the running `ascli`.
3520
3643
 
3644
+ If there is only one `ascli` running, one can get the PID like this:
3645
+
3646
+ ```shell
3647
+ ps -axo pid,command|grep ascli|grep -v grep|cut -f1 -d' '
3648
+ ```
3649
+
3521
3650
  Example to change the target rate:
3522
3651
 
3523
3652
  ```shell
3524
3653
  echo '{"type":"RATE","Rate":300000}' > ~/.aspera/ascli/send_67470
3525
3654
  ```
3526
3655
 
3527
- When `ascli` detects this file, it uses it and then deletes it.
3656
+ When `ascli` detects this file, it uses it during a transfer and then deletes it.
3528
3657
 
3529
3658
  ##### Agent: Direct: `aspera.conf`: Virtual Links
3530
3659
 
@@ -3807,7 +3936,7 @@ The use of a [**transfer-spec**](#transfer-specification) instead of `ascp` comm
3807
3936
  - Common to all [Transfer Agent](#transfer-clients-agents)
3808
3937
  - Not dependent on command line limitations (special characters...)
3809
3938
 
3810
- ### Transfer Parameters
3939
+ #### Transfer Parameters
3811
3940
 
3812
3941
  All standard [**transfer-spec**](#transfer-specification) parameters can be specified.
3813
3942
  A [**transfer-spec**](#transfer-specification) can also be saved/overridden in the configuration file.
@@ -3839,8 +3968,10 @@ ascli config ascp schema transferd --format=jsonpp
3839
3968
 
3840
3969
  `ascp` argument or environment variable is provided in description.
3841
3970
 
3971
+ #### Transfer Specification Reference
3972
+
3842
3973
  | ID | Name |
3843
- | - | --------- |
3974
+ |----|-----------|
3844
3975
  | A | Direct |
3845
3976
  | C | Connect |
3846
3977
  | D | Desktop |
@@ -3849,15 +3980,15 @@ ascli config ascp schema transferd --format=jsonpp
3849
3980
  | T | Transferd |
3850
3981
 
3851
3982
  | Field | Type | Description |
3852
- | ------------------------------ | ------- | -------------------------------------------------------------------------------- |
3983
+ |--------------------------------|---------|----------------------------------------------------------------------------------|
3853
3984
  | apply_local_docroot | boolean | Apply local docroot to source paths.<br/>(A, T)<br/>(`--apply-local-docroot`) |
3854
3985
  | authentication | string | Set to `token` for SSH bypass keys, else password asked if not provided.<br/>(C) |
3855
3986
  | cipher | string | In transit encryption algorithms.<br/>Allowed values: `none`, `aes-128`, `aes-192`, `aes-256`, `aes-128-cfb`, `aes-192-cfb`, `aes-256-cfb`, `aes-128-gcm`, `aes-192-gcm`, `aes-256-gcm`<br/>(`-c (conversion){enum}`) |
3856
3987
  | cipher_allowed | string | Returned by node API. Valid literals include `aes-128` and `none`.<br/>(C)<br/>Allowed values: `none`, `aes-128`, `aes-192`, `aes-256`, `aes-128-cfb`, `aes-192-cfb`, `aes-256-cfb`, `aes-128-gcm`, `aes-192-gcm`, `aes-256-gcm` |
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`) |
3988
+ | content_protection | string | Enable client-side content protection (CSEAR, encryption-at-rest).<br/>For uploads, set to `encrypt` to transfer encrypted files and store them on the server with the extension `.aspera-env`. (`aspera.conf` parameter `transfer_encryption_content_protection_extension`). To download and decrypt encrypted files, set to `decrypt`<br/>`content_protection_password` must be specified if this option is set.<br/>Allowed values: `encrypt`, `decrypt`<br/>(`--file-crypt={enum}`) |
3989
+ | content_protection_password | string | Password for encryption/decryption of transferred assets.<br/>(env:`ASPERA_SCP_FILEPASS`) |
3859
3990
  | 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`) |
3991
+ | create_dir | boolean | Create target directory if it doesn't already exist.<br/>If **all** the following conditions are met, then the `destination_root` specifies a filename instead of destination folder:<br/>- `create_dir` is `false`<br/>- A single source file is given on **command line**<br/>- The target folder specified by `destination_root` does not exist<br/>In all other cases, `destination_root` specifies a folder, and it is created if it does not already exist. I.e. if **any** of those conditions is met:<br/>- `create_dir` is `true`<br/>- Multiple source files are provided<br/>- List of source files are provided in a file (list or pair), default for Node API and `ascli`.<br/>- The target folder exists<br/>(`-d`) |
3861
3992
  | delete_before_transfer | boolean | Before transfer, delete files that exist at the destination but not at the source.<br/>The source and destination arguments must be directories that have matching names.<br/>Objects on the destination that have the same name but different type or size as objects on the source are not deleted.<br/>(`--delete-before-transfer`) |
3862
3993
  | delete_source | boolean | Remove transfered source files after transfer success. Equivalent to `remove_after_transfer` + `remove_empty_directories` + `remove_empty_source_directory`. Take precedence over those.<br/>(A, N, T) |
3863
3994
  | destination_root | string | Destination root directory. |
@@ -3924,7 +4055,7 @@ ascli config ascp schema transferd --format=jsonpp
3924
4055
  | src_base64 | string | The folder name below which the directory structure is preserved (base64 encoded).<br/>(A, T)<br/>(`--src-base64={string}`) |
3925
4056
  | ssh_args | array | Add arguments to the command-line arguments passed to the external ssh program (implies -SSH). The arguments are inserted before any key file(s) supplied to `ascp` and before the user/host arguments.<br/>(A, T)<br/>(special:`--ssh-arg={array}`) |
3926
4057
  | 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`) |
4058
+ | ssh_private_key | string | Private key used for SSH authentication.<br/>Shall look like: -----BEGIN RSA PRIV4TE KEY-----&bsol;nMII...<br/>Note the JSON encoding: &bsol;n for newlines.<br/>(A, T)<br/>(env:`ASPERA_SCP_KEY`) |
3928
4059
  | ssh_private_key_passphrase | string | The passphrase associated with the transfer user's SSH private key. Available as of 3.7.2.<br/>(A, T)<br/>(env:`ASPERA_SCP_PASS`) |
3929
4060
  | ssh_private_key_path | string | Path to private key for SSH.<br/>(A, T)<br/>(`-i {string}`) |
3930
4061
  | sshfp | string | Check it against server SSH host key fingerprint.<br/>(`--check-sshfp={string}`) |
@@ -3936,7 +4067,7 @@ ascli config ascp schema transferd --format=jsonpp
3936
4067
  | title | string | Title of the transfer.<br/>(C, N, T) |
3937
4068
  | token | string | Authorization token. Type: Bearer, Basic or ATM. (Also arg -W)<br/>(env:`ASPERA_SCP_TOKEN`) |
3938
4069
  | 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}`) |
4070
+ | use_system_ssh | boolean | Use an external `ssh` program instead of the built-in `libssh2` implementation to establish the connection to the remote host. The desired `ssh` program must be in the environment's `PATH`.<br/>To enable debugging of the `ssh` process, supply `-DD` and `--ssh-arg=-vv` arguments to `ascp`.<br/>(A, T)<br/>(`-SSH`) |
3940
4071
  | wss_enabled | boolean | Server has Web Socket service enabled.<br/>(special:`--ws-connect`) |
3941
4072
  | wss_port | integer | TCP port used for Web Socket service feed. |
3942
4073
  | xfer_max_retries | integer | Maximum number of retries, for node API initiated transfers. Shall not exceed aspera.conf `transfer_manager_max_retries` (default 5).<br/>(N) |
@@ -4132,8 +4263,13 @@ When multi-session is used, one separate UDP port is used per session (refer to
4132
4263
 
4133
4264
  #### Content protection
4134
4265
 
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.
4266
+ Content protection (Client-Side Encryption at Rest, CSEAR)) ensures that files remain encrypted while stored on the server.
4267
+ With CSEAR, the client encrypts files during upload and decrypts files during download, using a passphrase known only to the users sharing the files.
4268
+
4269
+ - Upload: Files are encrypted on the client side before being sent to the server.
4270
+ - Download: Files are decrypted on the client side as they are retrieved from the server.
4271
+
4272
+ At all times, files remain encrypted on the server; encryption and decryption occur exclusively on the client side.
4137
4273
 
4138
4274
  Activating CSEAR consists in using transfer spec parameters:
4139
4275
 
@@ -4146,6 +4282,11 @@ Example: parameter to download a Faspex package and decrypt on the fly
4146
4282
  --ts=@json:'{"content_protection":"decrypt","content_protection_password":"my_password_here"}'
4147
4283
  ```
4148
4284
 
4285
+ > [!NOTE]
4286
+ > Faspex 5 requires package parameter `ear_enabled` set to `true` for CSEAR.
4287
+ > In that case the transfer spec parameter `content_protection` is automatically set.
4288
+ > `content_protection_password` is then required in all cases.
4289
+
4149
4290
  #### Transfer Spec Examples
4150
4291
 
4151
4292
  - Change target rate
@@ -4454,7 +4595,7 @@ ascli server upload "faux:///mydir?file=testfile&count=1000&size=1" --to-folder=
4454
4595
  ```text
4455
4596
  ascli -h
4456
4597
  NAME
4457
- ascli -- a command line tool for Aspera Applications (v4.24.2)
4598
+ ascli -- a command line tool for Aspera Applications (v4.25.0.pre)
4458
4599
 
4459
4600
  SYNOPSIS
4460
4601
  ascli COMMANDS [OPTIONS] [ARGS]
@@ -4476,7 +4617,7 @@ COMMANDS
4476
4617
  OPTIONS
4477
4618
  Options begin with a '-' (minus), and value is provided on command line.
4478
4619
  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
4620
+ val, base64, csvt, env, file, uri, json, lines, list, none, path, re, ruby, secret, stdin, stdbin, yaml, zlib, extend, preset, vault,
4480
4621
  Dates format is 'DD-MM-YY HH:MM:SS', or 'now' or '-<num>h'
4481
4622
 
4482
4623
  ARGS
@@ -4485,11 +4626,10 @@ ARGS
4485
4626
  OPTIONS: global
4486
4627
  --interactive=ENUM Use interactive input of missing params: [no], yes
4487
4628
  --ask-options=ENUM Ask even optional options: [no], yes
4488
- --struct-parser=ENUM Default parser when expected value is a struct: json, ruby
4489
4629
  --format=ENUM Output format: text, nagios, ruby, json, jsonpp, yaml, [table], csv, image
4490
- --output=VALUE Destination for results (String)
4630
+ --output=VALUE Destination for results
4491
4631
  --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)
4632
+ --fields=VALUE Comma separated list of: fields, or ALL, or DEF (Array, Regexp, Proc)
4493
4633
  --select=VALUE Select only some items in lists: column, value (Hash, Proc)
4494
4634
  --table-style=VALUE (Table) Display style (Hash)
4495
4635
  --flat-hash=ENUM (Table) Display deep values as additional keys: no, [yes]
@@ -4503,15 +4643,16 @@ OPTIONS: global
4503
4643
  --ui=ENUM Method to start browser: text, [graphical]
4504
4644
  --invalid-characters=VALUE Replacement character and invalid filename characters
4505
4645
  --log-level=ENUM Log level: trace2, trace1, debug, info, [warn], error, fatal, unknown
4506
- --log-format=VALUE Log formatter (Proc, Logger::Formatter, String)
4646
+ --log-format=VALUE Log formatter (Proc, Logger::Formatter)
4507
4647
  --logger=ENUM Logging method: [stderr], stdout, syslog
4508
4648
  --lock-port=VALUE Prevent dual execution of a command, e.g. in cron (Integer)
4509
4649
  --once-only=ENUM Process only new items (some commands): [no], yes
4510
4650
  --log-secrets=ENUM Show passwords in logs: [no], yes
4511
4651
  --clean-temp=ENUM Cleanup temporary files on exit: no, [yes]
4512
4652
  --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)
4653
+ --pid-file=VALUE Write process identifier to file, delete on exit
4654
+ --parser=ENUM Default parser for structured parameters and options: none, json, ruby, yaml
4655
+ --home=VALUE Home folder for tool
4515
4656
  --config-file=VALUE Path to YAML file with preset configuration
4516
4657
  --secret=VALUE Secret for access keys
4517
4658
  --vault=VALUE Vault for secrets (Hash)
@@ -4522,16 +4663,15 @@ OPTIONS: global
4522
4663
  --bfail=ENUM Bulk operation error handling: no, [yes]
4523
4664
  -N, --no-default Do not load default configuration for plugin
4524
4665
  -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)
4666
+ --version-check-days=VALUE Period in days to check new version (zero to disable) (Integer)
4526
4667
  --plugin-folder=VALUE Folder where to find additional plugins
4527
4668
  --override=ENUM Wizard: override existing value: [no], yes
4528
4669
  --default=ENUM Wizard: set as default configuration for specified plugin (also: update): no, [yes]
4529
4670
  --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
4671
  --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
4672
+ --ascp-path=VALUE Ascp: Path to ascp (or product with "product:")
4673
+ --locations-url=VALUE Ascp: URL to get download locations of Aspera Transfer Daemon
4674
+ --sdk-folder=VALUE Ascp: SDK installation folder path
4535
4675
  --progress-bar=ENUM Display progress bar: [no], yes
4536
4676
  --smtp=VALUE Email: SMTP configuration (Hash)
4537
4677
  --notify-to=VALUE Email: Recipient for notification of transfers
@@ -4539,9 +4679,9 @@ OPTIONS: global
4539
4679
  --insecure=ENUM HTTP/S: Do not validate any certificate: [no], yes
4540
4680
  --ignore-certificate=VALUE HTTP/S: Do not validate certificate for these URLs (Array)
4541
4681
  --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)
4682
+ --cert-stores=VALUE HTTP/S: List of folder with trusted certificates (Array)
4543
4683
  --http-options=VALUE HTTP/S: Options for HTTP/S socket (Hash)
4544
- --http-proxy=VALUE HTTP/S: URL for proxy with optional credentials (String)
4684
+ --http-proxy=VALUE HTTP/S: URL for proxy with optional credentials
4545
4685
  --cache-tokens=ENUM Save and reuse OAuth tokens: no, [yes]
4546
4686
  --fpac=VALUE Proxy auto configuration script
4547
4687
  --proxy-credentials=VALUE HTTP proxy credentials for fpac: user, password (Array)
@@ -4565,7 +4705,7 @@ OPTIONS:
4565
4705
 
4566
4706
 
4567
4707
  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
4708
+ SUBCOMMANDS: access_keys api_details asperabrowser async basic_token bearer_token browse cat central delete download events health info license mkdir mkfile mklink rename search service simulator slash space spec ssync stream sync telemetry transfer transport upload watch_folder
4569
4709
  OPTIONS:
4570
4710
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4571
4711
  --username=VALUE User's identifier
@@ -4591,7 +4731,7 @@ OPTIONS:
4591
4731
 
4592
4732
 
4593
4733
  COMMAND: orchestrator
4594
- SUBCOMMANDS: health info plugins processes workflow
4734
+ SUBCOMMANDS: health info monitors plugins processes workflows workorders workstep
4595
4735
  OPTIONS:
4596
4736
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4597
4737
  --username=VALUE User's identifier
@@ -4677,11 +4817,11 @@ OPTIONS:
4677
4817
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4678
4818
  --username=VALUE User's identifier
4679
4819
  --password=VALUE User's password
4680
- --skip-format=ENUM Skip this preview format (multiple possible): png, mp4
4820
+ --skip-format=ENUM Skip this preview format: png, mp4
4681
4821
  --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
4822
+ --skip-types=VALUE Skip generation for those types of files (Array)
4683
4823
  --previews-folder=VALUE Preview folder in storage root
4684
- --skip-folders=VALUE List of folder to skip
4824
+ --skip-folders=VALUE List of folder to skip (Array)
4685
4825
  --base=VALUE Basename of output for for test
4686
4826
  --scan-path=VALUE Subpath in folder id to start scan in (default=/)
4687
4827
  --scan-id=VALUE Folder id in storage to start scan in, default is access key main folder id
@@ -4719,10 +4859,10 @@ OPTIONS:
4719
4859
  --private-key=VALUE OAuth (JWT) RSA private key PEM value (prefix file path with @file:)
4720
4860
  --passphrase=VALUE OAuth (JWT) RSA private key passphrase
4721
4861
  --scope=VALUE OAuth scope for API calls
4722
- --workspace=VALUE Name of workspace (String, NilClass)
4862
+ --workspace=VALUE Name of workspace
4723
4863
  --new-user-option=VALUE New user creation option for unknown package recipients (Hash)
4724
4864
  --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)
4865
+ --package-folder=VALUE Field of package to use as folder name, or @none:
4726
4866
 
4727
4867
 
4728
4868
  COMMAND: server
@@ -4731,7 +4871,7 @@ OPTIONS:
4731
4871
  --url=VALUE URL of application, e.g. https://app.example.com/aspera/app
4732
4872
  --username=VALUE User's identifier
4733
4873
  --password=VALUE User's password
4734
- --ssh-keys=VALUE SSH key path list (Array or single)
4874
+ --ssh-keys=VALUE SSH key path list (Array)
4735
4875
  --passphrase=VALUE SSH private key passphrase
4736
4876
  --ssh-options=VALUE SSH options (Hash)
4737
4877
 
@@ -4758,18 +4898,17 @@ This option is available only for some resources: if you need it: try and see if
4758
4898
  ### Option: `query`
4759
4899
 
4760
4900
  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.
4901
+ It takes either a `Hash`, corresponding to key/value pairs that appear in the query part of request.
4762
4902
 
4763
4903
  For example: `--query=@json:'{"p1":"v1","p2":"v2"}'` leads to query: `?p1=v1&p2=v2`.
4764
4904
 
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.
4905
+ If the same parameter needs to be provided several times, then it's possible as well to provide an `Array`.
4766
4906
 
4767
- If PHP's style array is used, then one can use either:
4907
+ For example: `--query=@json:'{"p":["v1","v2"]}'` leads to query: `?p=v1&p=v2`.
4768
4908
 
4769
- - `--query=@json:'{"a":["[]","v1","v2"]}'`
4770
- - `--query=@json:'[["a[]","v1"],["a[]","v2"]]'`
4909
+ If PHP's style array is expected in the API, then just add `[]` to the name of the parameter.
4771
4910
 
4772
- Both result in: `?a[]=v1&a[]=v2`.
4911
+ For example: `--query=@json:'{"p[]":["v1","v2"]}'` leads to query: `?p[]=v1&p[]=v2`.
4773
4912
 
4774
4913
  ### Plugins
4775
4914
 
@@ -5138,7 +5277,7 @@ ascli aoc files bearer_token_node /
5138
5277
  ```
5139
5278
 
5140
5279
  ```shell
5141
- ascli aoc admin node v4 _my_node_id_ --secret=_ak_secret_here_ bearer_token_node /
5280
+ ascli aoc admin node v4 <node_id> --secret=_ak_secret_here_ bearer_token_node /
5142
5281
  ```
5143
5282
 
5144
5283
  ### Administration
@@ -5741,13 +5880,13 @@ ascli aoc packages send @json:'{"name":"my title","note":"my note","recipients":
5741
5880
  ##### Example: Send a package to a shared inbox with metadata
5742
5881
 
5743
5882
  ```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
5883
+ ascli aoc packages send --workspace="<workspace_name>" @json:'{"name":"my pack title","recipients":["Shared Inbox With Meta"],"metadata":{"Project Id":"123","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' ~/Documents/Samples/200KB.1
5745
5884
  ```
5746
5885
 
5747
5886
  It is also possible to use identifiers and API parameters:
5748
5887
 
5749
5888
  ```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
5889
+ ascli aoc packages send --workspace="<workspace_name>" @json:'{"name":"my pack title","recipients":[{"type":"dropbox","id":"12345"}],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' ~/Documents/Samples/200KB.1
5751
5890
  ```
5752
5891
 
5753
5892
  ##### Example: Send a package with files from the Files app
@@ -5938,7 +6077,7 @@ ascli aoc files download <single file path>
5938
6077
 
5939
6078
  #### Shared folders
5940
6079
 
5941
- Like in AoC web UI, "Shared Folders" can be created and shared with either **Private** or **Public** links.
6080
+ Like in AoC web UI, **Shared Folders** can be created and shared with either **Private** or **Public** links.
5942
6081
  **Private** links require the collaborator to log in to access the shared folder.
5943
6082
  **Public** links include a passcode that enables the user to access the shared folder without login-in.
5944
6083
 
@@ -5976,8 +6115,8 @@ The basic payload to create a permission, i.e. a Shared Folder (last argument at
5976
6115
  | `link_name` | `ascli` | Name of the link file created in the user's home folder for private links. |
5977
6116
  | `as` | `ascli` | Name of the link file created in the user's home folder for admin shared folders. |
5978
6117
 
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`.
6118
+ In order to declare/create the shared folder in the workspace, a special value for `access_id` is used: `ASPERA_ACCESS_KEY_ADMIN_WS_[workspace ID]`, with a `access_type` of `user`.
6119
+ This is conveniently set by `ascli` using an **empty string** for field `with`.
5981
6120
  In order to share a folder with a different, special tags are set, but this is conveniently done by `ascli` using the `as` field.
5982
6121
 
5983
6122
  ##### User Shared Folders
@@ -5994,7 +6133,7 @@ ascli aoc files permission --workspace=<workspace name> <path to folder> ...
5994
6133
 
5995
6134
  ##### Admin Shared Folders
5996
6135
 
5997
- Admin shared folders, created by administrators in a workspace follow the syntax:
6136
+ Admin shared folders, created by administrators in a workspace, follow the syntax:
5998
6137
 
5999
6138
  ```shell
6000
6139
  ascli aoc admin node do <node ID> permission --workspace=<workspace name> <path to folder>
@@ -6006,7 +6145,7 @@ ascli aoc admin node do <node ID> permission --workspace=<workspace name> <path
6006
6145
  > The path is identifier by a path, one can specify a file id, with `%id:123`.
6007
6146
  > If the id is left blank: `%id:`, then if means `*`, i.e. all.
6008
6147
 
6009
- ##### Example: List permissions on a shared folder
6148
+ ##### Example: List permissions on a user shared folder
6010
6149
 
6011
6150
  ```shell
6012
6151
  ascli aoc files permission /shared_folder_test1 list
@@ -6053,7 +6192,7 @@ To remove a password:
6053
6192
  > [!NOTE]
6054
6193
  > Access level cannot be customized in this version.
6055
6194
 
6056
- An expiration date can be set with parameter `expires_at`, using ISO 8601 format.
6195
+ An expiration date can be set with parameter `expires_at`, using [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
6057
6196
  E.g. `2025-08-29T08:10:31.000Z`.
6058
6197
  If only a date is provided, it will be set to midnight UTC of that date.
6059
6198
 
@@ -6061,16 +6200,16 @@ If only a date is provided, it will be set to midnight UTC of that date.
6061
6200
 
6062
6201
  First, identify the node ID where the shared folder will be created.
6063
6202
 
6064
- To get the node ID of the default node for workspace `my ws`, use the command:
6203
+ To get the node ID of the default node for workspace `<workspace_name>`, use the command:
6065
6204
 
6066
6205
  ```shell
6067
- ascli aoc admin workspace show %name:'my ws' --fields=node_id
6206
+ ascli aoc admin workspace show %name:'<workspace_name>' --fields=node_id
6068
6207
  ```
6069
6208
 
6070
6209
  Alternatively (longer):
6071
6210
 
6072
6211
  ```shell
6073
- ascli aoc admin workspace list --select=@json:'{"name":"my ws"}' --fields=node_id
6212
+ ascli aoc admin workspace list --select=@json:'{"name":"<workspace_name>"}' --fields=node_id
6074
6213
  ```
6075
6214
 
6076
6215
  Or select a node identifier manually from the list of nodes:
@@ -6081,24 +6220,22 @@ ascli aoc admin node list --fields=id,name
6081
6220
 
6082
6221
  In the following commands, replace:
6083
6222
 
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"`.
6223
+ - `<node_id>` with the node ID, or with `%name:<node_name>`.
6224
+ - `<workspace_name>` with the workspace name, or with `%id:<workspace_id>`.
6225
+ - `<folder_path>` with the path of the folder to share on the node (e.g. `/my_folder` or simply `my_folder`). It can also be a folder deeper than level 1.
6089
6226
 
6090
6227
  If the shared folder does not exist, then create it:
6091
6228
 
6092
6229
  ```shell
6093
- ascli aoc admin node do _my_node_id_ mkdir /folder_on_node
6230
+ ascli aoc admin node do <node_id> mkdir <folder_path>
6094
6231
  ```
6095
6232
 
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.
6233
+ Create the shared folder in workspace `<workspace_name>` (set `with` to empty string, or do not specify it).
6234
+ **Optionally**, use `as` to set the name of the shared folder if different from the folder name on the node.
6098
6235
  For other options, refer to the previous section on shared folders.
6099
6236
 
6100
6237
  ```shell
6101
- ascli aoc admin node do _my_node_id_ permission /folder_on_node create @json:'{"with":"","as":"folder_for_users"}' --workspace="my ws"
6238
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"","as":"folder_for_users"}' --workspace="<workspace_name>"
6102
6239
  ```
6103
6240
 
6104
6241
  > [!NOTE]
@@ -6109,30 +6246,67 @@ The `"with"` parameter will perform a lookup, and set fields `access_type` and `
6109
6246
  The native fields `access_type` and `access_id` can also be used, instead of `with`.
6110
6247
 
6111
6248
  ```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"
6249
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"john@example.com","as":"folder_for_one_user"}' --workspace="<workspace_name>"
6113
6250
  ```
6114
6251
 
6115
6252
  ```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"
6253
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"group 1","as":"folder_for_a_group"}' --workspace="<workspace_name>"
6117
6254
  ```
6118
6255
 
6119
6256
  ```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"
6257
+ ascli aoc admin node do <node_id> permission <folder_path> create @json:'{"with":"<workspace_name>","as":"folder_for_all_workspace"}' --workspace="<workspace_name>"
6121
6258
  ```
6122
6259
 
6123
6260
  > [!NOTE]
6124
6261
  > In the previous commands, field `as` is optional.
6125
6262
 
6263
+ ##### Example: List all workspace admin shared folder in a workspace
6264
+
6265
+ ```shell
6266
+ ascli aoc admin workspace shared_folder %name:'<workspace_name>' list
6267
+ ```
6268
+
6269
+ ```text
6270
+ ╭───────┬───────────┬─────────┬─────────┬───────────┬──────────────────────────────────────╮
6271
+ │ id │ node_name │ node_id │ file_id │ file.path │ tags.aspera.files.workspace.share_as │
6272
+ ╞═══════╪═══════════╪═════════╪═════════╪═══════════╪══════════════════════════════════════╡
6273
+ │ 198 │ eudemo │ 8666 │ 2465 │ /project1 │ │
6274
+ │ 785 │ eudemo │ 8666 │ 9 │ /folder2 │ project2 │
6275
+ │ 4788 │ eudemo │ 8666 │ 3691 │ /backup │ │
6276
+ ╰───────┴───────────┴─────────┴─────────┴───────────┴──────────────────────────────────────╯
6277
+ ```
6278
+
6279
+ To list members:
6280
+
6281
+ ```shell
6282
+ ascli aoc admin workspace shared_folder %name:'<workspace_name>' member 198 list
6283
+ ```
6284
+
6285
+ ```text
6286
+ ╭─────────────┬──────────────────────────────────┬──────────────┬──────────────────────╮
6287
+ │ access_type │ access_id │ access_level │ last_updated_at │
6288
+ ╞═════════════╪══════════════════════════════════╪══════════════╪══════════════════════╡
6289
+ │ user │ ASPERA_ACCESS_KEY_ADMIN_WS_45071 │ edit │ 2020-11-29T22:48:49Z │
6290
+ │ group │ 160270 │ edit │ 2024-05-13T15:58:02Z │
6291
+ ╰─────────────┴──────────────────────────────────┴──────────────┴──────────────────────╯
6292
+ ```
6293
+
6294
+ If you have the node id of the shared folder, than it is equivalent to:
6295
+
6296
+ ```shell
6297
+ ascli aoc admin node do 8669 perm /project1 list --query=@json:'{"tag":"aspera.files.workspace.id=<workspace_id>"}'
6298
+ ```
6299
+
6126
6300
  ##### Example: List all workspace admin shared folder on a node
6127
6301
 
6128
6302
  First get the workspace identifier:
6129
6303
 
6130
6304
  ```shell
6131
- ascli aoc admin workspace list --select=@json:'{"name":"my ws"}' --fields=id
6305
+ ascli aoc admin workspace list --select=@json:'{"name":"<workspace_name>"}' --fields=id
6132
6306
  ```
6133
6307
 
6134
6308
  ```text
6135
- 111111
6309
+ <workspace_id>
6136
6310
  ```
6137
6311
 
6138
6312
  Then, identify the node id on which to list, see previous section.
@@ -6140,7 +6314,7 @@ Then, identify the node id on which to list, see previous section.
6140
6314
  Finally, list all shared folders, as permissions:
6141
6315
 
6142
6316
  ```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"}'
6317
+ ascli aoc admin node do <node_id> perm %id: list --query=@json:'{"access_type":"user","access_id":"ASPERA_ACCESS_KEY_ADMIN_WS_<workspace_id>"}'
6144
6318
  ```
6145
6319
 
6146
6320
  > [!NOTE]
@@ -6197,11 +6371,11 @@ For instructions, refer to section `find` for plugin `node`.
6197
6371
  > Add `ascli aoc` in front of the following commands:
6198
6372
 
6199
6373
  ```bash
6200
- admin analytics transfers nodes
6374
+ admin analytics files organization '' aoc_transfer_id
6201
6375
  admin analytics transfers organization --query=@json:'{"status":"completed","direction":"receive","limit":2}' --notify-to=my_email_external --notify-template=@ruby:'%Q{From: <%=from_name%> <<%=from_email%>>\nTo: <<%=to%>>\nSubject: <%=ev["files_completed"]%> files received\n\n<%=ev.to_yaml%>}'
6202
6376
  admin analytics transfers users --once-only=yes
6203
6377
  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":"/"}}'
6378
+ admin ats access_key create --cloud=aws --region=my_region @json:'{"id":"ak_aws_aoc","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6205
6379
  admin ats access_key create --cloud=softlayer --region=my_region @json:'{"id":"ak1ibmcloud","secret":"my_secret_here","name":"my test key","storage":{"type":"ibm-s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6206
6380
  admin ats access_key delete ak1ibmcloud
6207
6381
  admin ats access_key list --fields=name,id
@@ -6247,15 +6421,18 @@ admin subscription usage
6247
6421
  admin subscription usage MONTH
6248
6422
  admin user list
6249
6423
  admin user modify %name:my_user_email @json:'{"deactivated":false}'
6424
+ admin workspace dropbox %name:my_other_workspace list
6250
6425
  admin workspace list
6426
+ admin workspace shared_folder %name:my_other_workspace list
6427
+ admin workspace shared_folder %name:my_other_workspace member shared_folder_id list
6251
6428
  admin workspace_membership list
6252
6429
  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"}' \
6430
+ automation workflow action wf_id create @json:'{"name":"toto"}'
6254
6431
  automation workflow create @json:'{"name":"test_workflow"}'
6255
6432
  automation workflow delete wf_id
6256
6433
  automation workflow list
6257
6434
  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
6435
+ automation workflow list --select=@json:'{"name":"test_workflow"}' --fields=id
6259
6436
  bearer_token --display=data --scope=user:all
6260
6437
  files bearer /
6261
6438
  files bearer_token_node / --cache-tokens=no
@@ -6268,7 +6445,7 @@ files browse my_remote_folder
6268
6445
  files browse my_remote_folder/
6269
6446
  files cat testdst/test_file.bin
6270
6447
  files delete /testsrc
6271
- files down --to-folder=. testdst/test_file.bin testdst/test_file.bin
6448
+ files download --to-folder=. testdst/test_file.bin testdst/test_file.bin
6272
6449
  files download --transfer=connect testdst/test_file.bin
6273
6450
  files download --transfer=desktop testdst/test_file.bin
6274
6451
  files find /
@@ -6276,7 +6453,6 @@ files find / '\.partial$'
6276
6453
  files find / @ruby:'->(f){f["type"].eql?("file")}'
6277
6454
  files mkdir /testsrc
6278
6455
  files modify /some_folder @json:'{"mount_point":false}'
6279
- files modify my_test_folder
6280
6456
  files permission my_test_folder list
6281
6457
  files rename /some_folder testdst
6282
6458
  files short_link /testdst private create
@@ -6293,9 +6469,8 @@ files transfer push /testsrc --to-folder=/testdst test_file.bin
6293
6469
  files upload --to-folder=/ test_file.bin --url=my_public_link_folder_no_pass
6294
6470
  files upload --to-folder=/testsrc test_file.bin
6295
6471
  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
6472
  files v3 info
6298
- gateway --pid-file=pid_aoc_faspex_gateway @json:'{"url":"https://localhost:12345/aspera/faspex"}' &
6473
+ gateway @json:'{"url":"https://localhost:12345/aspera/faspex"}'
6299
6474
  organization
6300
6475
  organization --format=image --fields=background_image_url --ui=text
6301
6476
  organization --url=my_public_link_recv_from_aoc_user
@@ -6307,14 +6482,13 @@ packages receive ALL --once-only=yes --to-folder=. --lock-port=12345 --query=@js
6307
6482
  packages receive INIT --once-only=yes --query=@json:'{"dropbox_name":"my_shared_inbox_name"}'
6308
6483
  packages receive package_id3 --to-folder=.
6309
6484
  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
6485
+ packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"package title","recipients":["my_shared_inbox_meta"],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' test_file.bin
6486
+ packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"package title","recipients":["my_shared_inbox_meta"],"metadata":{"Project Id":"456","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' test_file.bin
6487
+ packages send --workspace=my_workspace_shared_inbox @json:'{"name":"package title","recipients":["my_shared_inbox_name"]}' test_file.bin
6488
+ packages send @json:'{"name":"package title","recipients":["my_email_external"]}' --new-user-option=@json:'{"package_contact":true}' test_file.bin
6489
+ packages send @json:'{"name":"package title","recipients":["my_email_internal"],"note":"my - note"}' test_file.bin
6490
+ packages send @json:'{"name":"package title"}' test_file.bin --url=my_public_link_send_aoc_user --password=my_public_link_send_use_pass
6491
+ packages send @json:'{"name":"package title"}' test_file.bin --url=my_public_link_send_shared_inbox
6318
6492
  packages shared_inboxes list
6319
6493
  packages shared_inboxes show %name:my_shared_inbox_name
6320
6494
  remind --username=my_user_email
@@ -6464,7 +6638,6 @@ access_key cluster ak2ibmcloud --secret=my_secret_here
6464
6638
  access_key create --cloud=aws --region=my_region @json:'{"id":"ak_aws","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6465
6639
  access_key create --cloud=softlayer --region=my_region @json:'{"id":"ak2ibmcloud","secret":"my_secret_here","name":"my test key","storage":{"type":"ibm-s3","bucket":"my_bucket","credentials":{"access_key_id":"my_access_key","secret_access_key":"my_secret_key"},"path":"/"}}'
6466
6640
  access_key delete ak2ibmcloud
6467
- access_key delete ak_aws
6468
6641
  access_key entitlement ak2ibmcloud
6469
6642
  access_key list --fields=name,id
6470
6643
  access_key node ak2ibmcloud browse / --secret=my_secret_here
@@ -6504,7 +6677,7 @@ ascli server --url=ssh://hsts.example.com:33001 --username=john --ssh-keys=~/.ss
6504
6677
 
6505
6678
  ```bash
6506
6679
  browse /
6507
- browse / --password=@none: --ssh-options=@json:'{"number_of_password_prompts":0}' --ssh-keys=$aspera_key_path
6680
+ browse / --password=@none: --ssh-options=@json:'{"number_of_password_prompts":0}' --ssh-keys=serv_key_path
6508
6681
  browse my_inside_folder/test_file.bin
6509
6682
  browse my_upload_folder/target_hot
6510
6683
  cp my_inside_folder/test_file.bin my_upload_folder/200KB.2
@@ -6521,18 +6694,19 @@ md5sum my_inside_folder/test_file.bin
6521
6694
  mkdir my_inside_folder --logger=stdout
6522
6695
  mkdir my_upload_folder/target_hot
6523
6696
  mv my_upload_folder/200KB.2 my_upload_folder/to.delete
6697
+ sync admin file_info /data/local_sync
6698
+ sync admin overview /data/local_sync
6524
6699
  sync admin status /data/local_sync
6700
+ sync pull my_inside_folder --to-folder=/data/local_sync @json:'{"name":"serv_sync_pull_conf","reset":true,"transport":{"target_rate":my_bps}}'
6525
6701
  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
6529
6702
  upload --sources=@ts --transfer-info=@json:'{"ascp_args":["--file-list","filelist.txt"]}' --to-folder=my_inside_folder
6530
6703
  upload --sources=@ts --transfer-info=@json:'{"ascp_args":["--file-pair-list","file_pair_list.txt"]}'
6531
6704
  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
6705
  upload --src-type=pair --sources=@json:'["test_file.bin","my_inside_folder/other_name_3"]' --transfer-info.quiet=false --progress=no
6706
+ upload --src-type=pair test_file.bin my_inside_folder/other_name_2 --notify-to=my_email_external --transfer-info=@json:'{"ascp_args":["-l","100m"]}'
6534
6707
  upload --src-type=pair test_file.bin my_upload_folder/other_name_5 --ts=@json:'{"cipher":"aes-192-gcm","content_protection":"encrypt","content_protection_password":"my_secret_here","cookie":"biscuit","create_dir":true,"delete_before_transfer":false,"delete_source":false,"exclude_newer_than":"-1","exclude_older_than":"-10000","fasp_port":33001,"http_fallback":false,"multi_session":0,"overwrite":"diff+older","precalculate_job_size":true,"preserve_access_time":true,"preserve_creation_time":true,"rate_policy":"fair","resume_policy":"sparse_csum","symlink_policy":"follow"}'
6535
6708
  upload --to-folder=my_upload_folder/target_hot --lock-port=12345 --transfer-info=@json:'{"ascp_args":["--remove-after-transfer","--remove-empty-directories","--exclude-newer-than=-8","--src-base","source_hot"]}' source_hot
6709
+ upload test_file.bin --to-folder=my_inside_folder --ts=@json:'{"multi_session":3,"multi_session_threshold":1,"resume_policy":"none","target_rate_kbps":100000}' --transfer-info=@json:'{"spawn_delay_sec":2.5,"multi_incr_udp":false}' --progress-bar=yes
6536
6710
  ```
6537
6711
 
6538
6712
  ### Authentication on Server with SSH session
@@ -7076,7 +7250,7 @@ ascli node -N --url=https://... --password="Bearer $(cat bearer.txt)" --root-id=
7076
7250
  > Add `ascli node` in front of the following commands:
7077
7251
 
7078
7252
  ```bash
7079
- --url=https://tst.example.com/path --password="Bearer bearer_666" --root-id=root_id access_key do self br /
7253
+ --url=https://tst.example.com/path --password='Bearer node_bearer_token' --root-id=bearer_root_id access_key do self browse /
7080
7254
  access_key create @json:'{"id":"my_username","secret":"my_password_here","storage":{"type":"local","path":"/"}}'
7081
7255
  access_key delete my_username
7082
7256
  access_key do my_ak_name browse /
@@ -7087,32 +7261,29 @@ access_key do my_ak_name find my_test_folder
7087
7261
  access_key do my_ak_name find my_test_folder @re:'\.jpg$'
7088
7262
  access_key do my_ak_name find my_test_folder @ruby:'->(f){f["name"].end_with?(".jpg")}'
7089
7263
  access_key do my_ak_name mkdir /tst_nd_ak
7090
- access_key do my_ak_name mkfile /mkfile.txt "hello world"
7264
+ access_key do my_ak_name mkfile /mkfile.txt 'hello world'
7091
7265
  access_key do my_ak_name mklink /mklink.txt --query=@json:'{"target":"/mkfile.txt","target_node_id":"123"}'
7092
7266
  access_key do my_ak_name node_info /
7093
7267
  access_key do my_ak_name rename /tst_nd_ak test_nd_ak2
7094
7268
  access_key do my_ak_name show %id:1
7095
- access_key do my_ak_name show /test_nd_ak3
7096
7269
  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"}'
7270
+ access_key do self permission %id:bearer_root_id create @json:'{"access_type":"user","access_id":"666"}'
7098
7271
  access_key do self permission / delete 1
7099
7272
  access_key do self permission / show 1
7100
- access_key do self show / --fields=id --output=root_id
7101
7273
  access_key list
7102
7274
  access_key set_bearer_key self @file:my_private_key
7103
7275
  access_key show %id:self
7104
7276
  api_details
7105
7277
  asperabrowser
7106
- async bandwidth %name:SYNC_NAME
7107
- async counters %name:SYNC_NAME
7278
+ async bandwidth %name:my_sync_session_name
7279
+ async counters %name:my_sync_session_name
7108
7280
  async delete ALL
7109
- async files %name:SYNC_NAME
7110
- async files %name:SYNC_NAME --once-only=yes
7281
+ async files %name:my_sync_session_name
7282
+ async files %name:my_sync_session_name --once-only=yes
7111
7283
  async list
7112
- async show %name:SYNC_NAME
7284
+ async show %name:my_sync_session_name
7113
7285
  async show ALL
7114
7286
  basic_token
7115
- bearer_token @file:my_private_key @json:'{"user_id":"666"}' --output=bearer_666
7116
7287
  browse / --log-level=trace2
7117
7288
  cat my_upload_folder/test_file.bin
7118
7289
  central file list
@@ -7125,7 +7296,7 @@ health
7125
7296
  info --fpac='function FindProxyForURL(url,host){return "DIRECT"}'
7126
7297
  license
7127
7298
  mkdir my_upload_folder/a_folder
7128
- mkfile my_upload_folder/a_file1 "hello world"
7299
+ mkfile my_upload_folder/a_file1 'hello world'
7129
7300
  mklink my_upload_folder/a_folder my_upload_folder/tdlink
7130
7301
  rename my_upload_folder a_file1 a_file
7131
7302
  search / --query=@json:'{"sort":"mtime"}'
@@ -7134,6 +7305,7 @@ service delete service1
7134
7305
  service list
7135
7306
  slash
7136
7307
  space /
7308
+ spec
7137
7309
  ssync bandwidth %name:my_node_sync
7138
7310
  ssync counters %name:my_node_sync
7139
7311
  ssync create @json:'{"configuration":{"name":"my_node_sync","local":{"path":"my_local_path_real"},"remote":{"host":"my_host","port":my_port,"user":"my_username","pass":"my_password_here","path":"my_remote_path"}}}'
@@ -7147,21 +7319,20 @@ ssync stop %name:my_node_sync
7147
7319
  ssync summary %name:my_node_sync
7148
7320
  stream list
7149
7321
  sync admin status /data/local_sync
7150
- sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"name":"SYNC_NAME","reset":true}'
7322
+ sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"name":"my_sync_session_name","reset":true}'
7151
7323
  sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"reset":true}'
7152
7324
  transfer bandwidth_average
7153
7325
  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
7326
  transfer list --query=@json:'{"active_only":true}'
7157
7327
  transfer list --query=@json:'{"reset":true}' --once-only=yes
7158
7328
  transfer modify nd_xfer_id @json:'{"target_rate_kbps":10000}'
7159
7329
  transfer sessions
7160
7330
  transfer show nd_xfer_id
7161
7331
  transport
7332
+ upload 'faux:///testfile1?1m' --to-folder=my_local_path
7162
7333
  upload --to-folder=my_upload_folder --sources=@ts --ts=@json:'{"paths":[{"source":"/aspera-test-dir-small/10MB.2"}],"precalculate_job_size":true}' --transfer=node --transfer-info=@json:'{"url":"https://node.example.com/path@","username":"my_username","password":"my_password_here"}'
7163
7334
  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}'
7335
+ upload my_mxf my_docx --ts=@json:'{"target_rate_kbps":1000000,"resume_policy":"none"}'
7165
7336
  watch_folder list
7166
7337
  ```
7167
7338
 
@@ -7415,8 +7586,8 @@ admin distribution_lists delete %name:test4
7415
7586
  admin distribution_lists list --query=@json:'{"type":"global"}'
7416
7587
  admin email_notifications list
7417
7588
  admin email_notifications show welcome_email
7418
- admin event app --query=@json:'{"max":20}'
7419
- admin event web
7589
+ admin event application --query=@ruby:'{"event_type[]"=>["login_success"],"created_at_start"=>(Time.now.utc-60).strftime("%Y-%m-%dT%H:%M:%S.%LZ")}'
7590
+ admin event webhook
7420
7591
  admin jobs list --query=@json:'{"job_type":"email","status":"failed"}' --fields=id,error_desc
7421
7592
  admin metadata_profiles list
7422
7593
  admin node browse %name:Local
@@ -7431,7 +7602,7 @@ admin saml_configs list
7431
7602
  admin shared_inboxes invite %name:my_shared_box_name johnny@example.com
7432
7603
  admin shared_inboxes list
7433
7604
  admin shared_inboxes list --query=@json:'{"all":true}'
7434
- admin shared_inboxes members %name:my_shared_box_name create %name:john@example.com
7605
+ admin shared_inboxes members %name:my_shared_box_name create %name:john@example.com submit_only
7435
7606
  admin shared_inboxes members %name:my_shared_box_name delete %name:john@example.com
7436
7607
  admin shared_inboxes members %name:my_shared_box_name delete %name:johnny@example.com
7437
7608
  admin shared_inboxes members %name:my_shared_box_name list
@@ -7441,33 +7612,34 @@ admin smtp show
7441
7612
  admin smtp test my_email_external
7442
7613
  admin workgroups list
7443
7614
  bearer_token
7444
- gateway --pid-file=pid_f5_fxgw @json:'{"url":"https://localhost:12346/aspera/faspex"}' &
7615
+ gateway @json:'{"url":"https://localhost:12346/aspera/faspex"}'
7445
7616
  health --url=https://faspex5.example.com/path
7446
7617
  invitation list
7447
7618
  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
7619
+ packages browse f5_package_id --query=@json:'{"recursive":true}'
7620
+ packages delete f5_package_id
7450
7621
  packages list --box=ALL
7451
7622
  packages list --box=my_shared_box_name
7452
7623
  packages list --box=my_workgroup --group-type=workgroups
7453
7624
  packages list --box=outbox --fields=DEF,sender.email,recipients.0.recipient_type
7454
7625
  packages list --query=@json:'{"mailbox":"inbox","status":"completed"}'
7455
- packages receive --box=my_shared_box_name package_box_id1 --to-folder=.
7626
+ packages receive --box=my_shared_box_name f5_pack_shboxc --to-folder=.
7456
7627
  packages receive --box=my_workgroup --group-type=workgroups workgroup_package_id1 --to-folder=.
7457
7628
  packages receive ALL --once-only=yes --to-folder=.
7458
7629
  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
7630
+ packages receive f5_package_id --to-folder=. --ts=@json:'{"content_protection_password":"my_secret_here"}'
7461
7631
  packages send --url=my_public_link_send_f5_user @json:'{"title":"test title"}' test_file.bin
7462
7632
  packages send --url=my_public_link_send_shared_box @json:'{"title":"test title"}' test_file.bin
7463
7633
  packages send @json:'{"title":"test title","recipients":["my_shared_box_name"],"metadata":{"Options":"Opt1","TextInput":"example text"}}' test_file.bin
7464
7634
  packages send @json:'{"title":"test title","recipients":["my_workgroup"]}' test_file.bin
7465
7635
  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
7636
+ packages send @json:'{"title":"test_webhook_ascli","recipients":["my_shared_box_name"]}' 'faux:///test1?1m'
7637
+ packages show --box=my_shared_box_name f5_pack_shboxc
7467
7638
  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"}' &
7639
+ packages show f5_package_id
7640
+ packages status f5_p3a @list:,failed,completed
7641
+ packages status f5_package_id
7642
+ postprocessing @json:'{"url":"https://localhost:8553/asclihook","script_folder":"$(TST)","cert":"$(TMP / "localhost.p12")","key":"changeit"}'
7471
7643
  shared browse %name:my_src
7472
7644
  shared list
7473
7645
  shared_folders browse %name:my_shared_folder_name
@@ -7560,6 +7732,14 @@ If the lookup needs to be only on certain types, you can specify the field: `rec
7560
7732
  {"title":"test title","recipient_types":"user","recipients":["user1@example.com","user2@example.com"]}
7561
7733
  ```
7562
7734
 
7735
+ To enable content protection (CSEAR), set parameter `ear_enabled` to `true` in the package creation payload (refer to Faspex package creation API).
7736
+
7737
+ The following error is returned by Faspex, if CSEAR was not specified in the package creation and if it is configured as mandatory on the server:
7738
+
7739
+ ```text
7740
+ the provided encryption value (no) does not match the expected server side encryption value (yes)
7741
+ ```
7742
+
7563
7743
  ### Faspex 5: Send a package with metadata
7564
7744
 
7565
7745
  It's the same as sending a package, but with an extra field `metadata` in the package info.
@@ -8061,27 +8241,23 @@ ascli faspex packages recv ALL --once-only=yes --lock-port=12345
8061
8241
 
8062
8242
  ```bash
8063
8243
  address_book
8064
- dropbox list --recipient="*my_dbx"
8244
+ dropbox list --recipient='*my_dbx'
8065
8245
  health
8066
8246
  login_methods
8067
8247
  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
8248
  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
8249
  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
8250
+ package receive f4_db1c --recipient='*my_dbx' --to-folder=.
8251
+ package receive f4_db1g --recipient='*my_wkg' --to-folder=.
8252
+ package receive f4_pria --to-folder=.
8253
+ package receive f4_prs --to-folder=.
8254
+ package receive f4_prsc --to-folder=. --box=sent
8255
+ package send --delivery-info=@json:'{"title":"package title","recipients":["my_email_internal","my_username"]}' test_file.bin
8256
+ package send --delivery-info=@json:'{"title":"package title","recipients":["my_email_internal"]}' --remote-source=%name:my_src sample_source.txt
8257
+ package send --delivery-info=@json:'{"title":"package title","recipients":[*my_dbx]}' test_file.bin
8258
+ package send --delivery-info=@json:'{"title":"package title","recipients":[*my_wkg]}' test_file.bin
8259
+ package send --link=https://app.example.com/send_to_dropbox_path --delivery-info=@json:'{"title":"package title"}' test_file.bin
8260
+ package send --link=https://app.example.com/send_to_user_path --delivery-info=@json:'{"title":"package title"}' test_file.bin
8085
8261
  source info %name:my_src --storage=@preset:faspex4_storage
8086
8262
  source list
8087
8263
  source node %name:my_src br / --storage=@preset:faspex4_storage
@@ -8138,12 +8314,12 @@ ascli shares admin share user_permissions $share_id create @json:'{"user_id":'$u
8138
8314
  admin group all list
8139
8315
  admin node list
8140
8316
  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
8317
+ admin share user_permissions %name:my_share list
8318
+ admin user all app_authorizations %username:my_username modify @json:'{"app_login":true}'
8319
+ admin user all app_authorizations %username:my_username show
8144
8320
  admin user all list
8145
- admin user all share_permissions 1 list
8146
- admin user all share_permissions 1 show 1
8321
+ admin user all share_permissions %username:my_username list
8322
+ admin user all share_permissions %username:my_username show %name:my_share
8147
8323
  admin user ldap add the_name
8148
8324
  admin user local list
8149
8325
  admin user saml import @json:'{"id":"the_id","name_id":"the_name"}'
@@ -8155,10 +8331,10 @@ files download --to-folder=. my_share_folder/test_file.bin my_share_folder/test_
8155
8331
  files mkdir my_share_folder/new_folder
8156
8332
  files sync push /data/local_sync --to-folder=my_share_folder/synctst
8157
8333
  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}'
8334
+ files upload 'faux:///testfile?1m' --to-folder=my_share_folder --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@","synchronous":true,"api_version":"v1","upload_chunk_size":100000}'
8160
8335
  files upload --to-folder=my_share_folder test_file.bin
8161
8336
  files upload --to-folder=my_share_folder test_file.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@"}'
8337
+ files upload sendfolder --to-folder=my_share_folder --transfer=httpgw --transfer-info=@json:'{"url":"https://tst.example.com/path@","synchronous":true,"api_version":"v1","upload_chunk_size":100000}'
8162
8338
  health
8163
8339
  ```
8164
8340
 
@@ -8186,7 +8362,7 @@ transfer current list --query.filter='(transfer_name contain aoc)'
8186
8362
  transfer current list --query=@json:'{"filter1":"transfer_name","comp1":"contain","val1":"aoc"}'
8187
8363
  transfer current show console_xfer_id
8188
8364
  transfer smart list
8189
- transfer smart sub my_smart_id @json:'{"source":{"paths":["my_smart_file"]},"source_type":"user_selected"}'
8365
+ transfer smart sub my_smart_id @: source.paths.0=my_smart_file source_type=user_selected
8190
8366
  ```
8191
8367
 
8192
8368
  ## Plugin: `orchestrator`:IBM Aspera Orchestrator
@@ -8213,17 +8389,22 @@ workflow status my_workflow_id
8213
8389
 
8214
8390
  ## Plugin: `cos`: IBM Cloud Object Storage
8215
8391
 
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)
8392
+ IBM Cloud Object Storage supports high-speed transfers using the FASP protocol.
8393
+ These transfers leverage the same service used by Aspera on Cloud, called the Aspera Transfer Service (ATS).
8394
+ You can check the list of available ATS regions here: <https://status.aspera.io>.
8395
+ There are two ways to provide credentials:
8396
+
8397
+ - Using existing credentials
8219
8398
 
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.
8399
+ If you already have the endpoint, API key, and Resource Instance ID (CRN), use this method.
8400
+
8401
+ - Using IBM Cloud Console access
8402
+
8403
+ If you do not have credentials but have access to the IBM Cloud Console, use this alternative method.
8223
8404
 
8224
8405
  ### Using endpoint, API key and Resource Instance ID (CRN)
8225
8406
 
8226
- If you have those parameters already, then following options shall be provided:
8407
+ If you already have these parameters, provide the following options to `ascli`:
8227
8408
 
8228
8409
  | Option | Description |
8229
8410
  |------------|---------------------------------------------------|
@@ -8232,20 +8413,21 @@ If you have those parameters already, then following options shall be provided:
8232
8413
  | `apikey` | API Key |
8233
8414
  | `crn` | Resource instance ID |
8234
8415
 
8235
- For example, let us create a default configuration:
8416
+ Example: Create a Default Configuration
8236
8417
 
8237
8418
  ```shell
8238
8419
  ascli config preset update mycos --bucket=mybucket --endpoint=https://s3.us-east.cloud-object-storage.appdomain.cloud --apikey=abcdefgh --crn=crn:v1:bluemix:public:iam-identity::a/xxxxxxx
8239
8420
  ascli config preset set default cos mycos
8240
8421
  ```
8241
8422
 
8242
- Then, jump to the [transfer example](#operations-transfers).
8423
+ Once configured, proceed to the [transfer example](#operations-transfers).
8243
8424
 
8244
8425
  ### Using service credential file
8245
8426
 
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:
8427
+ If you are the COS administrator and do not yet have credentials,
8428
+ you can create them directly from the IBM Cloud Console (Web UI):
8429
+
8430
+ Steps:
8249
8431
 
8250
8432
  - &rarr; Navigation Menu
8251
8433
  - &rarr; [Resource List](https://cloud.ibm.com/resources)
@@ -8255,7 +8437,7 @@ Navigate to:
8255
8437
  - &rarr; New credentials (Leave default role: Writer, no special options)
8256
8438
  - &rarr; Copy to clipboard
8257
8439
 
8258
- Then save the copied value to a file, e.g. : `$HOME/cos_service_creds.json`
8440
+ Save the copied JSON value to a file, for example: `$HOME/cos_service_creds.json`
8259
8441
 
8260
8442
  or using the IBM Cloud CLI:
8261
8443
 
@@ -8264,9 +8446,10 @@ ibmcloud resource service-keys
8264
8446
  ibmcloud resource service-key _service_key_name_here_ --output JSON|jq '.[0].credentials'>$HOME/service_creds.json
8265
8447
  ```
8266
8448
 
8267
- (if you don't have `jq` installed, extract the structure as follows)
8449
+ > [!NOTE]
8450
+ > If `jq` is not installed, you can manually extract the credentials section from the JSON output.
8268
8451
 
8269
- It consists in the following structure:
8452
+ The service credential file consists of the following structure:
8270
8453
 
8271
8454
  ```json
8272
8455
  {
@@ -8284,33 +8467,32 @@ It consists in the following structure:
8284
8467
  }
8285
8468
  ```
8286
8469
 
8287
- The field `resource_instance_id` is for option `crn`
8470
+ The field mappings are as follows:
8288
8471
 
8289
- The field `apikey` is for option `apikey`
8472
+ - `resource_instance_id` &rarr; option `crn`
8473
+ - `apikey` &rarr; option `apikey`
8290
8474
 
8291
8475
  > [!NOTE]
8292
- > Endpoints for regions can be found by querying the `endpoints` URL from file or from the IBM Cloud Console.
8476
+ > Endpoints for regions can be found by querying the `endpoints` URL in the JSON file or from the IBM Cloud Console.
8293
8477
 
8294
8478
  The required options for this method are:
8295
8479
 
8296
- | Option | Description |
8480
+ | Option | Description |
8297
8481
  |-----------------------|------------------------------------------------|
8298
- | `bucket` | Bucket name |
8299
- | `region` | Bucket region<br/>e.g. `eu-de` |
8482
+ | `bucket` | Bucket name |
8483
+ | `region` | Bucket region<br/>e.g. `eu-de` |
8300
8484
  | `service_credentials` | JSON information saved from IBM Cloud console. |
8301
8485
 
8302
- For example, let us create a default configuration:
8486
+ Example: Create a Default Configuration
8303
8487
 
8304
8488
  ```shell
8305
- ascli config preset update mycos --bucket=laurent --service-credentials=@val:@json:@file:~/service_creds.json --region=us-south
8489
+ ascli config preset update mycos --bucket=mybucket --service-credentials=@val:@json:@file:~/service_creds.json --region=us-south
8306
8490
  ascli config preset set default cos mycos
8307
8491
  ```
8308
8492
 
8309
8493
  ### Operations, transfers
8310
8494
 
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:
8495
+ Once you have created a default configuration using one of the previous methods (otherwise, specify the access options directly on the command line), you can perform a subset of `node` plugin operations, which correspond to the Node API.
8314
8496
 
8315
8497
  ```shell
8316
8498
  ascli cos node info
@@ -8318,7 +8500,8 @@ ascli cos node upload 'faux:///sample1G?1g'
8318
8500
  ```
8319
8501
 
8320
8502
  > [!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.
8503
+ > The file `sample1G` is a dummy file of size 2 GB, generated using the `faux` PVCL scheme (see previous section and `man ascp`).
8504
+ > To upload a real file, simply replace the `faux:///...` URI with the actual file path.
8322
8505
 
8323
8506
  ### Tested commands for `cos`
8324
8507
 
@@ -8347,6 +8530,10 @@ info
8347
8530
 
8348
8531
  ## Plugin: `faspio`: Faspio Gateway
8349
8532
 
8533
+ IBM Aspera faspio Gateway is a high-performance proxy that bridges traditional TCP/UDP applications with the Aspera FASP protocol, enabling secure, ultra-fast transfers over any network, even with high latency or packet loss.
8534
+ It integrates seamlessly into existing workflows and supports use cases such as server-to-server transfers, database replication, and messaging systems.
8535
+ Using `ascli`, you can remotely create and manage bridges on faspio Gateway, simplifying configuration and automation.
8536
+
8350
8537
  ### Tested commands for `faspio`
8351
8538
 
8352
8539
  > [!NOTE]
@@ -8354,7 +8541,7 @@ info
8354
8541
 
8355
8542
  ```bash
8356
8543
  bridges create @json:'{"name":"test1","local":{"protocol":"tcp","tls_enabled":false,"port":"3000","bind_address":"127.0.0.1"},"forward":{"protocol":"fasp","tls_enabled":false,"port":"3994","bind_address":"127.0.0.1","host":["10.0.0.1"]}}'
8357
- bridges delete --bulk=yes @json:@stdin:
8544
+ bridges delete --bulk=yes @json:faspio_bclean_list
8358
8545
  bridges list
8359
8546
  health
8360
8547
  ```
@@ -8370,20 +8557,34 @@ Retrieve information on subscription.
8370
8557
 
8371
8558
  ```bash
8372
8559
  entitlement
8373
- health -N
8560
+ health
8374
8561
  ```
8375
8562
 
8376
8563
  ## Plugin: `preview`: Preview generator for AoC
8377
8564
 
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:
8565
+ The `preview` plugin is responsible for generating thumbnails (Office documents, images, videos) and video previews on storage, primarily for use within the Aspera on Cloud (AoC) application.
8566
+ This plugin leverages the **Node API** of Aspera HSTS and requires:
8381
8567
 
8382
- - Methods for detection of new files needing generation
8383
- - Methods for generation of video preview
8384
- - Parameters for video handling
8568
+ - An Access Key
8569
+ - The associated **storage root**
8385
8570
 
8386
- See also <https://github.com/IBM/aspera-on-cloud-file-previews>
8571
+ ### Key Features and Options
8572
+
8573
+ You can configure several aspects of the preview generation process:
8574
+
8575
+ - File Detection Methods
8576
+
8577
+ Define how new files requiring previews are identified.
8578
+
8579
+ - Video Preview Generation Methods
8580
+
8581
+ Choose the approach for creating video previews (e.g., transcoding options).
8582
+
8583
+ - Video Handling Parameters
8584
+
8585
+ Fine-tune video processing, such as resolution, bitrate, and format.
8586
+
8587
+ Using `ascli` is an alternative to <https://github.com/IBM/aspera-on-cloud-file-previews>.
8387
8588
 
8388
8589
  ### Aspera Server configuration
8389
8590
 
@@ -8708,7 +8909,7 @@ If the preview generator does not have access to files on the file system (it is
8708
8909
  check --skip-types=office
8709
8910
  events --once-only=yes --skip-types=office --log-level=info
8710
8911
  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
8912
+ scan --skip-types=office --log-level=info --skip-folder=/special/folder
8712
8913
  show --base=test /etc/hosts
8713
8914
  show --base=test my_docx
8714
8915
  show --base=test my_mpg --video-png-conv=animated
@@ -8752,6 +8953,12 @@ Some `sync` parameters are filled by the related plugin using transfer spec para
8752
8953
  To start a sync session, use one of the three sync directions followed by a folder path (remote path for `pull`, local path otherwise).
8753
8954
  The path on the other side is specified using option: `to_folder`.
8754
8955
 
8956
+ The general syntax is:
8957
+
8958
+ ```shell
8959
+ ascli ... sync <direction> <path> [<sync_info>] [--to-folder=<path>]
8960
+ ```
8961
+
8755
8962
  | Direction<br/>(parameter) | Path<br/>(parameter) | `to_folder`<br/>(option) |
8756
8963
  |-----------|--------|-------------|
8757
8964
  | `push` | Local | Remote |
@@ -8762,6 +8969,11 @@ An optional positional `Hash` argument (`sync_info`) can be provided in either `
8762
8969
 
8763
8970
  A single session can be specified using either formats.
8764
8971
 
8972
+ If argument `<sync_info>` is not provided, then a default configuration is generated in the `conf` format as specified in the next sectin.
8973
+
8974
+ If argument `<sync_info>` is provided, it defines the format to use.
8975
+ If parameter `sessions` or `instance` is present, then `args` is used, else `conf` is used.
8976
+
8765
8977
  #### `sync_info`: `conf` format
8766
8978
 
8767
8979
  This is the **preferred** syntax.
@@ -8769,138 +8981,155 @@ It is the same payload as specified on the `async` option `--conf` or in Node AP
8769
8981
 
8770
8982
  Documentation on Async Node API can be found on [IBM Developer Portal](https://developer.ibm.com/apis/catalog?search=%22aspera%20sync%20api%22).
8771
8983
 
8772
- Parameters `local.path` and `remote.path` are not allowed since they are provided on command line.
8984
+ The following parameters are automatically filled from mandatory arguments, and are not allowed:
8985
+
8986
+ - `direction`
8987
+ - `local.path`
8988
+ - `remote.path`
8989
+
8990
+ Parameter `name` is set to a default value if not provided in `sync_info`.
8991
+ Parameter `quiet` is set to `false` if not provided in `sync_info` and a terminal is detected.
8992
+
8993
+ The documentation is available in the terminal with:
8994
+
8995
+ ```shell
8996
+ ascli config sync spec
8997
+ ```
8773
8998
 
8774
8999
  | Field | Type | Description |
8775
- | ---------------------------------------- | ------- | -------------------------------------------------------------------------------- |
9000
+ |------------------------------------------|---------|----------------------------------------------------------------------------------|
8776
9001
  | 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. |
9002
+ | assume_no_mods | boolean | Assume that the directory structure has not been modified.<br/>(`--assume-no-mods`) |
9003
+ | checksum | string | Use the specified checksum type. Default is none on cloud storage.<br/>Allowed values: `sha1`, `md5`, `sha1_sparse`, `md5_sparse`, `none`<br/>(`--checksum={enum}`)(-k) |
9004
+ | clean_excluded | boolean | Removes any existing entries in the snapshot database for excluded paths<br/>(`--clean-excluded`) |
9005
+ | cookie | string | User-defined identification string.<br/>(`--cookie={string}`) |
8781
9006
  | cooloff_max_seconds | integer | Wait up to the specified time for a file to stop changing before skipping synchronization of the file. 0 for disabled<br/>(`--cooloff-max={integer}`) |
8782
9007
  | cooloff_seconds | integer | Delay the start of the transfer to confirm that the content is not changing. Value must be between 0 and 60<br/>(`--cooloff={integer}`) |
8783
- | create_dir | boolean | Create the source directory, target directory, or both, if they do not exist. |
9008
+ | create_dir | boolean | Create the source directory, target directory, or both, if they do not exist.<br/>(`--create-dir`) |
8784
9009
  | db_cache_size | integer | Specify DB cache size. |
8785
9010
  | db_journal_off | boolean | Turn off DB journal. |
8786
9011
  | 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` |
9012
+ | dedup | string | Take the specified action when async detects duplicate files on the source.<br/>Allowed values: `copy`, `inode`, `hardlink`, `none`<br/>(`--dedup={enum}`) |
9013
+ | delete_before | boolean | Schedule deletes before transfers.<br/>(`--delete-before`) |
9014
+ | delete_delay | boolean | Delay actual deletes until the end of the synchronization.<br/>(`--delete-delay`) |
9015
+ | direction | string | The direction of replication relative to the local.<br/>Allowed values: `bidi`, `pull`, `push`<br/>(`--direction={enum}`)(-K) |
8791
9016
  | exclude_dirs_older_than | object | Don't scan directories with a recursive modified time older than absolute or async start time - relative_seconds |
8792
9017
  | exclude_dirs_older_than.absolute | string | UTC timestamp. Empty value for disabled. |
8793
9018
  | exclude_dirs_older_than.relative_seconds | integer | Relative to async start time. `-1` for disabled. |
8794
9019
  | filters | array | The filters allow to further specify which files have to be excluded and included from the transfer list. Each filter is defined by a rule and a value. Order of filters matters |
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. |
9020
+ | filters[].rule | string | The rule for the filter.<br/>Allowed values: `include`, `exclude`, `include_from`, `exclude_from` |
9021
+ | filters[].value | string | On include or exclude, the filter's pattern. On include_from or exclude_from, the path containing filter specifications |
9022
+ | ignore_delete | boolean | Do not copy removals to the peer.<br/>(`--ignore-delete`) |
9023
+ | ignore_mode | boolean | Source files that have had their mode changed after the initial. transfer will not update the destination file mode.<br/>(`--ignore-mode`) |
8797
9024
  | ignore_remote_host_sync_name | boolean | Do not check that the remote host being used for the current. transfer matches the host used when the local database was created |
8798
9025
  | local | object | &nbsp; |
8799
9026
  | 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 |
9027
+ | local.path | string | The directory to be synchronized on the local host.<br/>(`--local-dir={string}`)(-d) |
9028
+ | local_apply_docroot | boolean | Prepend the docroot to the directory on the local host.<br/>(`--apply-local-docroot`) |
9029
+ | local_checksum_threads | integer | Maximum number of threads to do checksum on the local host. Value must be between 1 and 99.<br/>(`--local-checksum-threads={integer}`) |
9030
+ | local_db_dir | string | Use the specified database directory on the local host. Default is `.private-asp` at the root level of the synchronized directory.<br/>(`--local-db-dir={string}`)(-b) |
9031
+ | local_db_store_dir | string | Store/Restore the database to/from the specified directory on the local host. The value can be an absolute path, an URI or - (use the local sync dir)<br/>(`--local-db-store-dir={string}`) |
9032
+ | local_force_stat | boolean | Forces the local async to retrieve file information even when no changes are detected by the scanner or monitor.<br/>(`--local-force-stat`) |
9033
+ | local_fs_threads | integer | Maximum number of threads to do file system operations on the local host. Value must be between 1 and 99.<br/>(`--local-fs-threads={integer}`) |
9034
+ | local_keep_dir | string | Move deleted files into the specified directory on the local host.<br/>(`--keep-dir-local={string}`) |
9035
+ | local_mount_signature | string | Verify that the file system is mounted by the existence of this file on the local host.<br/>(`--local-mount-signature={string}`) |
9036
+ | local_move_cache_timeout_seconds | integer | Delay in seconds before aborting moving a file from local cache to final destination. `-1` for disabled.<br/>(`--local-move-cache-timeout={integer}`) |
9037
+ | local_preserve_acls | string | Preserve access control lists on the local host.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--preserve-acls={enum}`) |
9038
+ | local_preserve_xattrs | string | Preserve extended attributes on the local.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--preserve-xattrs={enum}`) |
9039
+ | local_scan_interval_milliseconds | integer | Enable periodic scans on the local host during a continuous sync. `-1` for disabled<br/>(`--scan-interval={integer}`) |
9040
+ | local_scan_threads | integer | Number of directory scanning threads on the local host. Value must be between 1 and 99<br/>(`--scan-threads={integer}`) |
8814
9041
  | local_stat_cache_size | integer | Set stat cache size on the local host. 0 for disabled. |
8815
9042
  | 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. |
9043
+ | log.level | string | Use the specified log level.<br/>Allowed values: `log`, `dbg1`, `dbg2`<br/>(special:`-D`) |
9044
+ | log.local_dir | string | Use the specified logging directory on the local host.<br/>(`--alt-logdir={string}`)(-L) |
9045
+ | log.remote_dir | string | Use the specified logging directory on the remote host.<br/>(`--remote-logdir={string}`)(-R) |
8819
9046
  | manifest_path | string | A directory path where ascp will create manifest TEXT files (passed to ascp as --file-manifest-path) |
8820
9047
  | mirror | boolean | Force the pulling side to be exactly like the pushing side, removing files on the destination that don't exist on the source and resending source files that don't have an exact match on the destination. Cannot be used in bi-directional mode.<br/>(`--mirror`) |
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}`) |
9048
+ | mode | string | Specify whether async runs continuously or not. In `one_time` mode, async stops after the first full synchronization. `continuous` supported only if the source is Windows or Linux.<br/>Allowed values: `one_time`, `continuous`<br/>(special:`--continuous`)(-C) |
8822
9049
  | monitor_buffer_size | integer | Bytes to allocate for the change monitor buffer. Applies to any Windows machine on either side. `-1` to use the computed value. |
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. |
9050
+ | name | string | Name of the synchronization pair.<br/>(`--name={string}`)(-N) |
9051
+ | no_log | string | Suppress log messages for ITEM. The only currently supported ITEM is 'stats', which suppresses both STATS and PROG log messages.<br/>(`--no-log={string}`) |
9052
+ | no_preserve_root_attrs | boolean | Disable the preservation of attributes on the Sync root.<br/>(`--no-preserve-root-attrs`) |
9053
+ | no_scan | boolean | Skip initial scanning.<br/>(`--no-scan`) |
8827
9054
  | 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. |
9055
+ | overwrite | string | Overwrite files according to the specified policy. Default is determined by the direction: `conflict` for `bidi`, otherwise `always`.<br/>Allowed values: `always`, `older`, `conflict`<br/>(`--overwrite={enum}`)(-o) |
9056
+ | pending_max | integer | Allow the maximum number of files that are pending transfer to be no more than the specified number.<br/>(`--pending-max={integer}`) |
9057
+ | preserve_access_time | boolean | Preserve file access time from the source to the destination.<br/>(`--preserve-access-time`) |
9058
+ | preserve_creation_time | boolean | Preserve file creation time from the source to the destination.<br/>(`--preserve-creation-time`) |
9059
+ | preserve_gid | boolean | Preserve the file owner's GID.<br/>(`--preserve-gid`)(-j) |
9060
+ | preserve_modification_time | boolean | Preserve file modification time from the source to the destination.<br/>(`--preserve-modification-time`) |
9061
+ | preserve_object_lock_legal_hold | boolean | Preserve object lock legal hold status from the source to the destination.<br/>(`--preserve-object-lock-legal-hold`) |
9062
+ | preserve_object_lock_retention | boolean | Preserve object lock retention from the source to the destination.<br/>(`--preserve-object-lock-retention`) |
9063
+ | preserve_object_metadata | boolean | Preserve object metadata from the source to the destination.<br/>(`--preserve-object-metadata`) |
9064
+ | preserve_uid | boolean | Preserve the file owner's UID.<br/>(`--preserve-uid`)(-u) |
9065
+ | quiet | boolean | Disable progress display.<br/>(`--quiet`)(-q) |
8839
9066
  | remote | object | &nbsp; |
8840
- | remote.connect_mode | &nbsp; | Define how to connect to the remote.<br/>Allowed values: `ssh`, `ws` |
9067
+ | remote.connect_mode | string | Define how to connect to the remote.<br/>Allowed values: `ssh`, `ws`<br/>(special:`--ws-connect`) |
8841
9068
  | 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. |
9069
+ | remote.host | string | Use the specified host name or address of the remote host.<br/>(`--host={string}`) |
9070
+ | remote.pass | string | Authenticate the transfer with the specified password.<br/>(`--pass={string}`)(-w) |
9071
+ | remote.path | string | Synchronize the specified directory on the remote host.<br/>(`--remote-dir={string}`)(-r) |
9072
+ | remote.port | integer | Use the specified TCP port for SSH. Used when connect_mode is `ssh`<br/>(`--tcp-port={integer}`)(-P) |
9073
+ | remote.private_key_paths | array | Authenticate with the specified SSH private key file.<br/>(`--private-key-path={array}`)(-i) |
9074
+ | remote.proxy | object | Specify the address of the Aspera high-speed proxy server.<br/>(special:`--proxy={object}`) |
8848
9075
  | remote.proxy.host | string | Use the specified host name or address of the proxy. |
8849
9076
  | remote.proxy.pass | string | Authenticate to the proxy with the specified password. |
8850
9077
  | 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` |
9078
+ | remote.proxy.protocol | string | The protocol to be used.<br/>Allowed values: `none`, `dnat`, `dnats` |
8852
9079
  | remote.proxy.user | string | Authenticate to the proxy with the specified username. |
8853
9080
  | remote.token | string | Token string passed to server's authentication service. |
8854
9081
  | 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. |
9082
+ | remote.user | string | Authenticate the transfer with the specified username.<br/>(`--user={string}`) |
8856
9083
  | 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. |
9084
+ | remote_checksum_threads | integer | Maximum number of threads to do checksum on the remote host. Value must be between 1 and 99<br/>(`--remote-checksum-threads={integer}`) |
9085
+ | remote_db_dir | string | Use the specified database directory on the remote host. Default is `.private-asp` at the root level of the synchronized directory.<br/>(`--remote-db-dir={string}`)(-B) |
9086
+ | remote_db_store_dir | string | Store/Restore the database to/from the specified directory on the remote host. The value can be an absolute path, an URI or - (use the remote sync dir).<br/>(`--remote-db-store-dir={string}`) |
9087
+ | remote_force_stat | boolean | Forces the remote async to retrieve file information even when no changes are detected by the scanner or monitor.<br/>(`--remote-force-stat`) |
9088
+ | remote_fs_threads | integer | Maximum number of threads to do file system operations on the remote host. Value must be between 1 and 99.<br/>(`--remote-fs-threads={integer}`) |
9089
+ | remote_keep_dir | string | Move deleted files into the specified directory on the remote host.<br/>(`--keep-dir-remote={string}`) |
9090
+ | remote_mount_signature | string | Verify that the file system is mounted by the existence of this file on the remote host.<br/>(`--remote-mount-signature={string}`) |
9091
+ | remote_move_cache_timeout_seconds | integer | Delay in seconds before aborting moving a file from remote cache to final destination. `-1` for disabled.<br/>(`--remote-move-cache-timeout={integer}`) |
9092
+ | remote_preserve_acls | string | Preserve access control lists on the remote host. If not specified, the default behavior is to use the same storage mode as specified by `preserve_acls`.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--remote-preserve-acls={enum}`) |
9093
+ | remote_preserve_xattrs | string | Preserve extended attributes on the remote host. If not specified, the default behavior is to use the same storage mode as specified by `preserve_xattrs`.<br/>Allowed values: `native`, `metafile`, `none`<br/>(`--remote-preserve-xattrs={enum}`) |
9094
+ | remote_scan_interval_milliseconds | integer | Enable periodic scans on the remote host. `-1` for disabled.<br/>(special:`--remote-scan-interval={integer}`) |
9095
+ | remote_scan_threads | integer | Number of directory scanning threads on the remote host. Value must be between 1 and 99.<br/>(`--remote-scan-threads={integer}`) |
8869
9096
  | 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 |
9097
+ | remove_after_transfer | boolean | Remove source files after they are successfully synchronized.<br/>(`--remove-after-transfer`) |
9098
+ | reset | boolean | Clear the snapshot database and rescan the synchronized directories and files to create a fresh snapshot<br/>(`--reset`)(-x) |
8872
9099
  | resume | object | Partial transfers may exist if communication disruptions caused the underlying ascp processes to terminate early. Note that transfer resumption can only happen if the `reset` option is disabled. If an async session starts with `reset` enabled and resume enabled, transfers interrupted during that session will be resumeable, but only if async is then restarted with 'reset' disabled. |
8873
9100
  | 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 |
9101
+ | resume.max_age | integer | Sets the age limit in days for temporary files that will be preserved on cleanup (usually at async's start and stop) for potential transfer resume. Temp files older than the given value will be removed regardless of whether they might be resumeable.<br/>(`--resume-age-days={integer}`) |
9102
+ | resume.min_size | integer | This field specifies the minimum size of files that will be allowed to resume.<br/>(`--support-resume={integer}`) |
9103
+ | resume_scan | boolean | Resume the scan from where the previous execution left off.<br/>(`--resume-scan`) |
9104
+ | scan_dir_rename | boolean | Enable the detection of renamed directories and files compared. to the previous scan, based on matching inodes<br/>(`--scan-dir-rename`) |
9105
+ | scan_file_rename | boolean | Enable the detection of renamed files compared to the previous scan, based on matching inodes.<br/>(`--scan-file-rename`) |
9106
+ | scan_intensity | string | Scan at the set intensity. `vlow` minimizes system activity. `vhigh` maximizes system activity by continuously scanning files without rest.<br/>Allowed values: `vlow`, `low`, `medium`, `high`, `vhigh`<br/>(`--scan-intensity={enum}`)(-H) |
9107
+ | sharing_retry_max | integer | Retry synchronizations up to the specified maximum number after a sharing violation.<br/>(`--sharing-retry-max={integer}`) |
9108
+ | store_metadata_records | boolean | Store the acls or xattrs in the snapshot database.<br/>(`--store-metadata-records`) |
9109
+ | symbolic_links | string | Handle symbolic links with the specified method. Default is `skip` on windows, `copy` otherwise.<br/>Allowed values: `copy`, `skip`, `follow`<br/>(`--symbolic-links={enum}`)(-n) |
9110
+ | tags | object | User-defined metadata tags.<br/>(special:`--tags64={object}`) |
9111
+ | transfer_threads | array | Use the specified number of dedicated transfer threads to process files smaller or equal to the specified size<br/>(special:`--transfer-threads={array}`) |
9112
+ | transfer_threads[].size | integer | Upper limit. `-1` for infinity. |
9113
+ | transfer_threads[].threads | integer | The number of threads. |
8885
9114
  | 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`. |
9115
+ | transport.cipher | string | Specify encryption algorithm for file data.<br/>Allowed values: `none`, `aes128`, `aes192`, `aes256`, `aes128cfb`, `aes192cfb`, `aes256cfb`, `aes128gcm`, `aes192gcm`, `aes256gcm`<br/>(`--cipher={enum}`)(-c) |
9116
+ | transport.compression | string | Compress a file before transfer using the specified MODE.<br/>Allowed values: `none`, `zlib`<br/>(`--compression={enum}`) |
9117
+ | transport.datagram_size | integer | Specify the datagram size (MTU) for FASP. By default it uses the detected path MTU.<br/>(`--datagram-size={integer}`)(-Z) |
9118
+ | transport.min_rate | integer | Attempt to transfer no slower than the specified rate (in bps).<br/>(`--min-rate={integer}`)(-m) |
9119
+ | transport.rate_policy | string | Defines how `ascp` will manage the bandwidth.<br/>Allowed values: `fair`, `fixed`, `high`, `low`<br/>(`--rate-policy={enum}`)(-a) |
9120
+ | transport.raw_options | array | Pass arbitrary arguments to `ascp`.<br/>(special:`--raw-options={array}`) |
9121
+ | transport.read_block_size | integer | Use the specified block size (in bytes) for reading. Default is determined by `aspera.conf`.<br/>(`--read-block-size={integer}`)(-g) |
9122
+ | transport.rexmsg_size | integer | Use the specified size (in bytes) for a retransmission request. Default is determined by `aspera.conf`.<br/>(`--rexmsg-size={integer}`)(-X) |
9123
+ | transport.target_rate | integer | Transfer no faster than the specified rate (in bps).<br/>(`--target-rate={integer}`)(-l) |
9124
+ | transport.udp_port | integer | Use the specified UDP port for FASP data transfer.<br/>(`--udp-port={integer}`)(-O) |
9125
+ | transport.write_block_size | integer | Use the specified block size (in bytes) for writing. Default is determined by `aspera.conf`.<br/>(`--write-block-size={integer}`)(-G) |
8897
9126
  | 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` |
9127
+ | watchd.datastore | string | Specify the type of datastore, `none` for disabled.<br/>Allowed values: `none`, `redis`, `scalekv` |
8899
9128
  | watchd.domain | string | Specify the domain. Default is the current username. |
8900
9129
  | watchd.host | string | Use the specified host name or address to connect to the datastore. |
8901
9130
  | 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. |
9131
+ | write_gid | string | Try to write files as the specified group.<br/>(`--write-gid={string}`) |
9132
+ | write_uid | string | Try to write files as the specified user.<br/>(`--write-uid={string}`) |
8904
9133
 
8905
9134
  #### `sync_info`: `args` format
8906
9135
 
@@ -8911,13 +9140,26 @@ Technically, it allows definition of multiple sync sessions in a single command,
8911
9140
 
8912
9141
  This is the mode selection if there are either keys `sessions` or `instance` in option `sync_info`.
8913
9142
 
8914
- Parameters `local_dir` and `remote_dir` are not allowed since they are provided on command line.
9143
+ The following parameters are automatically filled from mandatory arguments, and are not allowed:
9144
+
9145
+ - `direction`
9146
+ - `local_dir`
9147
+ - `remote_dir`
9148
+
9149
+ Parameter `name` is set to a default value if not provided in `sync_info`.
8915
9150
 
8916
9151
  ### Sync management and monitoring: `admin`
8917
9152
 
8918
9153
  The `admin` command provides several sub commands that access directly the Async snap database (`snap.db`).
8919
9154
  (With the exception of `status` which uses the utility `asyncadmin`, available only on server products.)
8920
9155
 
9156
+ This command does not require any communication to the server and accesses only the local database.
9157
+ It can be executed also from the `config` plugin:
9158
+
9159
+ ```shell
9160
+ ascli config sync admin
9161
+ ```
9162
+
8921
9163
  To use the `admin` command, the gem `sqlite3` shall be installed:
8922
9164
 
8923
9165
  ```shell
@@ -9349,6 +9591,16 @@ If you want to use `ed25519` keys, then install the required gems:
9349
9591
  gem install ed25519 bcrypt_pbkdf
9350
9592
  ```
9351
9593
 
9594
+ In addition, if those two gems are not installed, and if you are using Private Keys encoded using the OpenSSH format, then you'll get the message:
9595
+
9596
+ ```text
9597
+ OpenSSH keys only supported if ED25519 is available (NotImplementedError)
9598
+ net-ssh requires the following gems for ed25519 support:
9599
+ * ed25519 (>= 1.2, < 2.0)
9600
+ * bcrypt_pbkdf (>= 1.0, < 2.0)
9601
+ See https://github.com/net-ssh/net-ssh/issues/565 for more information
9602
+ ```
9603
+
9352
9604
  In addition, if **JRuby** is used, host keys of type: `ecdsa-sha2` and `ecdh-sha2` are also deactivated by default.
9353
9605
  To activate, set env var `ASCLI_ENABLE_ECDSHA2` to `true`.
9354
9606