aspera-cli 4.7.0 → 4.8.0

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 (94) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -0
  3. data/README.md +844 -861
  4. data/bin/ascli +20 -1
  5. data/bin/asession +37 -34
  6. data/docs/test_env.conf +11 -3
  7. data/examples/aoc.rb +13 -12
  8. data/examples/dascli +26 -0
  9. data/examples/faspex4.rb +34 -29
  10. data/examples/transfer.rb +30 -29
  11. data/lib/aspera/aoc.rb +151 -143
  12. data/lib/aspera/ascmd.rb +56 -45
  13. data/lib/aspera/ats_api.rb +6 -5
  14. data/lib/aspera/cli/basic_auth_plugin.rb +18 -16
  15. data/lib/aspera/cli/extended_value.rb +32 -30
  16. data/lib/aspera/cli/formater.rb +103 -111
  17. data/lib/aspera/cli/info.rb +2 -1
  18. data/lib/aspera/cli/listener/line_dump.rb +1 -0
  19. data/lib/aspera/cli/listener/logger.rb +1 -0
  20. data/lib/aspera/cli/listener/progress.rb +13 -12
  21. data/lib/aspera/cli/listener/progress_multi.rb +21 -20
  22. data/lib/aspera/cli/main.rb +106 -89
  23. data/lib/aspera/cli/manager.rb +96 -85
  24. data/lib/aspera/cli/plugin.rb +50 -32
  25. data/lib/aspera/cli/plugins/alee.rb +6 -5
  26. data/lib/aspera/cli/plugins/aoc.rb +521 -426
  27. data/lib/aspera/cli/plugins/ats.rb +84 -83
  28. data/lib/aspera/cli/plugins/bss.rb +30 -27
  29. data/lib/aspera/cli/plugins/config.rb +483 -397
  30. data/lib/aspera/cli/plugins/console.rb +17 -15
  31. data/lib/aspera/cli/plugins/cos.rb +26 -35
  32. data/lib/aspera/cli/plugins/faspex.rb +201 -168
  33. data/lib/aspera/cli/plugins/faspex5.rb +109 -74
  34. data/lib/aspera/cli/plugins/node.rb +378 -189
  35. data/lib/aspera/cli/plugins/orchestrator.rb +71 -65
  36. data/lib/aspera/cli/plugins/preview.rb +131 -122
  37. data/lib/aspera/cli/plugins/server.rb +94 -93
  38. data/lib/aspera/cli/plugins/shares.rb +42 -28
  39. data/lib/aspera/cli/plugins/sync.rb +15 -14
  40. data/lib/aspera/cli/transfer_agent.rb +56 -52
  41. data/lib/aspera/cli/version.rb +2 -1
  42. data/lib/aspera/colors.rb +29 -28
  43. data/lib/aspera/command_line_builder.rb +50 -43
  44. data/lib/aspera/cos_node.rb +64 -38
  45. data/lib/aspera/data_repository.rb +1 -0
  46. data/lib/aspera/environment.rb +18 -8
  47. data/lib/aspera/fasp/agent_base.rb +26 -23
  48. data/lib/aspera/fasp/agent_connect.rb +35 -30
  49. data/lib/aspera/fasp/agent_direct.rb +68 -60
  50. data/lib/aspera/fasp/agent_httpgw.rb +71 -64
  51. data/lib/aspera/fasp/agent_node.rb +24 -23
  52. data/lib/aspera/fasp/agent_trsdk.rb +19 -20
  53. data/lib/aspera/fasp/error.rb +2 -1
  54. data/lib/aspera/fasp/error_info.rb +79 -68
  55. data/lib/aspera/fasp/installation.rb +122 -114
  56. data/lib/aspera/fasp/listener.rb +1 -0
  57. data/lib/aspera/fasp/parameters.rb +44 -41
  58. data/lib/aspera/fasp/resume_policy.rb +14 -11
  59. data/lib/aspera/fasp/transfer_spec.rb +6 -5
  60. data/lib/aspera/fasp/uri.rb +25 -24
  61. data/lib/aspera/faspex_gw.rb +83 -72
  62. data/lib/aspera/hash_ext.rb +10 -12
  63. data/lib/aspera/id_generator.rb +8 -7
  64. data/lib/aspera/keychain/encrypted_hash.rb +60 -45
  65. data/lib/aspera/keychain/macos_security.rb +26 -24
  66. data/lib/aspera/log.rb +34 -38
  67. data/lib/aspera/nagios.rb +14 -13
  68. data/lib/aspera/node.rb +19 -19
  69. data/lib/aspera/oauth.rb +121 -101
  70. data/lib/aspera/open_application.rb +6 -5
  71. data/lib/aspera/persistency_action_once.rb +9 -8
  72. data/lib/aspera/persistency_folder.rb +10 -9
  73. data/lib/aspera/preview/file_types.rb +261 -266
  74. data/lib/aspera/preview/generator.rb +74 -73
  75. data/lib/aspera/preview/image_error.png +0 -0
  76. data/lib/aspera/preview/options.rb +7 -6
  77. data/lib/aspera/preview/utils.rb +30 -33
  78. data/lib/aspera/preview/video_error.png +0 -0
  79. data/lib/aspera/proxy_auto_config.rb +25 -23
  80. data/lib/aspera/rest.rb +73 -74
  81. data/lib/aspera/rest_call_error.rb +1 -0
  82. data/lib/aspera/rest_error_analyzer.rb +11 -9
  83. data/lib/aspera/rest_errors_aspera.rb +5 -4
  84. data/lib/aspera/secret_hider.rb +68 -0
  85. data/lib/aspera/ssh.rb +12 -10
  86. data/lib/aspera/sync.rb +49 -47
  87. data/lib/aspera/temp_file_manager.rb +7 -5
  88. data/lib/aspera/timer_limiter.rb +9 -8
  89. data/lib/aspera/uri_reader.rb +11 -14
  90. data/lib/aspera/web_auth.rb +17 -15
  91. data.tar.gz.sig +0 -0
  92. metadata +117 -34
  93. metadata.gz.sig +2 -0
  94. data/bin/dascli +0 -13
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [comment1]: # (Do not edit this README.md, edit docs/README.erb.md, for details, read docs/README.md)
4
4
 
5
- Version : 4.7.0
5
+ Version : 4.8.0
6
6
 
7
7
  Laurent/2016-2022
8
8
 
@@ -19,6 +19,16 @@ Minimum required Ruby version: >= 2.4. Deprecation notice: the minimum will be 2
19
19
  [Aspera APIs on IBM developer](https://developer.ibm.com/?size=30&q=aspera&DWContentType[0]=APIs)
20
20
  [Link 2](https://developer.ibm.com/apis/catalog/?search=aspera)
21
21
 
22
+ Release notes: see [CHANGELOG.md](CHANGELOG.md)
23
+
24
+ [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5861/badge)](https://bestpractices.coreinfrastructure.org/projects/5861)
25
+
26
+ ## BUGS, FEATURES, CONTRIBUTION
27
+
28
+ Refer to [BUGS.md](BUGS.md) and [CONTRIBUTING.md](CONTRIBUTING.md).
29
+
30
+ One can also [create one's own plugin](#createownplugin).
31
+
22
32
  ## <a id="when_to_use"></a>When to use and when not to use
23
33
 
24
34
  `ascli` is designed to be used as a command line tool to:
@@ -89,7 +99,7 @@ ascli --version
89
99
  ```
90
100
 
91
101
  ```bash
92
- 4.7.0
102
+ 4.8.0
93
103
  ```
94
104
 
95
105
  ### First use
@@ -196,11 +206,9 @@ An internet connection is required for the installation. If you don't have inter
196
206
 
197
207
  ### Docker container
198
208
 
199
- Use this method only if you know what you do, else use the standard recommended method as described here above.
200
-
201
- This method installs a docker image that contains: Ruby, `ascli` and the FASP sdk.
209
+ This method installs a docker image that contains: Ruby, `ascli` and the FASP SDK.
202
210
 
203
- The image is: [https://hub.docker.com/r/martinlaurent/ascli](https://hub.docker.com/r/martinlaurent/ascli)
211
+ The image is: <https://hub.docker.com/r/martinlaurent/ascli>. It is built from this [Dockerfile](Dockerfile).
204
212
 
205
213
  Ensure that you have Docker installed.
206
214
 
@@ -208,10 +216,16 @@ Ensure that you have Docker installed.
208
216
  docker --version
209
217
  ```
210
218
 
211
- Download the wrapping script:
219
+ An example of wrapping script is provided: `dascli`. If you have installed `ascli`, the script `dascli` can be found:
220
+
221
+ ```bash
222
+ cp $(ascli conf gem path)/../examples/dascli ascli
223
+ ```
224
+
225
+ Alternatively [download from the GIT repo](https://raw.githubusercontent.com/IBM/aspera-cli/main/examples/dascli) :
212
226
 
213
227
  ```bash
214
- curl -o ascli https://raw.githubusercontent.com/IBM/aspera-cli/develop/bin/dascli
228
+ curl -o ascli https://raw.githubusercontent.com/IBM/aspera-cli/main/examples/dascli
215
229
  ```
216
230
 
217
231
  ```bash
@@ -224,14 +238,13 @@ Install the container image:
224
238
  ./ascli install
225
239
  ```
226
240
 
227
- Start using it !
241
+ Note that ascli is run in the container, so transfers are also executed in the container (not calling host, like for the regular ascli).
228
242
 
229
- Note that the tool is run in the container, so transfers are also executed in the container, not calling host.
230
-
231
- The wrapping script maps the container folder `/usr/src/app/config` to configuration folder `$HOME/.aspera/ascli` on host.
243
+ The wrapping script maps the folder `/usr/src/app/config` in the container to configuration folder `$HOME/.aspera/ascli` on host.
244
+ This allows having persistent configuration.
232
245
 
233
246
  To transfer to/from the native host, you will need to map a volume in docker or use the config folder (already mapped).
234
- To add local storage as a volume edit the script: `ascli` and add a `--volume` stanza.
247
+ To add local storage as a volume edit the script: `ascli` and add a `--volume` stanza near the existing one.
235
248
 
236
249
  ### <a id="ruby"></a>Ruby
237
250
 
@@ -312,11 +325,13 @@ rvm version
312
325
 
313
326
  #### Windows: Installer
314
327
 
315
- Install Latest stable Ruby using [https://rubyinstaller.org/](https://rubyinstaller.org/) :
328
+ Install Latest stable Ruby:
316
329
 
317
- * Go to "Downloads".
318
- * Select the Ruby 2 version "without devkit", x64 corresponding to the one recommended "with devkit". Devkit is not needed.
319
- * At the end of the installer uncheck the box to skip the installation of "MSys2": not needed.
330
+ * Navigate to [https://rubyinstaller.org/](https://rubyinstaller.org/) &rarr; **Downloads**.
331
+ * Download the latest Ruby installer **with devkit**. (Msys2 is needed to install some native extensions, such as `grpc`)
332
+ * Execute the installer which installs by default in: `RubyVV-x64` (VV is the version number)
333
+ * At the end of the installation procedure execute the Msys2 installer (ridk install) and select option 3 (msys and mingw)
334
+ * Install the "mime info" file as specified in [this section](#mimeinfo).
320
335
 
321
336
  #### macOS: pre-installed or `brew`
322
337
 
@@ -336,20 +351,31 @@ brew install ruby
336
351
 
337
352
  If your Linux distribution provides a standard ruby package, you can use it provided that the version is compatible (check at beginning of section).
338
353
 
339
- Example:
354
+ Example: Centos 8 Stream
340
355
 
341
356
  ```bash
342
- yum install -y ruby rubygems ruby-json
357
+ yum install make automake gcc gcc-c++ kernel-devel
358
+ yum install redhat-rpm-config
359
+ dnf module reset ruby
360
+ dnf module enable ruby:3.0
361
+ dnf module -y install ruby:3.0/common
362
+ gem install aspera-cli
343
363
  ```
344
364
 
345
- One can cleanup the whole yum-installed ruby environment like this to uninstall:
365
+ Other examples:
346
366
 
347
367
  ```bash
348
- gem uninstall $(ls $(gem env gemdir)/gems/|sed -e 's/-[^-]*$//'|sort -u)
368
+ yum install -y ruby ruby-devel rubygems ruby-json
369
+ ```
370
+
371
+ ```bash
372
+ apt install -y ruby ruby-dev rubygems ruby-json
349
373
  ```
350
374
 
375
+ One can cleanup the whole yum-installed ruby environment like this to uninstall:
376
+
351
377
  ```bash
352
- yum remove -y ruby ruby-libs
378
+ gem uninstall $(ls $(gem env gemdir)/gems/|sed -e 's/-[^-]*$//'|sort -u)
353
379
  ```
354
380
 
355
381
  #### Other Unixes (AIX)
@@ -531,10 +557,23 @@ Basic usage is displayed by executing:
531
557
  ascli -h
532
558
  ```
533
559
 
534
- Refer to sections: [Usage](#usage) and [Sample Commands](#commands).
560
+ Refer to sections: [Usage](#usage).
535
561
 
536
562
  Not all `ascli` features are fully documented here, the user may explore commands on the command line.
537
563
 
564
+ ### `ascp` command line
565
+
566
+ If you want to use `ascp` directly as a command line, refer to IBM Aspera documentation of either [Desktop Client](https://www.ibm.com/docs/en/asdc), [Endpoint](https://www.ibm.com/docs/en/ahte) or [Transfer Server](https://www.ibm.com/docs/en/ahts) where [a section on `ascp` can be found](https://www.ibm.com/docs/en/ahts/4.4?topic=linux-ascp-transferring-from-command-line).
567
+
568
+ Using `ascli` with plugin `server` for command line gives advantages over ascp:
569
+
570
+ * automatic resume on error
571
+ * configuration file
572
+ * choice of transfer agents
573
+ * integrated support of multi-session
574
+
575
+ Moreover all `ascp` options are supported either through transfer spec parameters and with the possibility to provide `ascp` arguments directly when the `direct` agent is used (`EX_ascp_args`).
576
+
538
577
  ### Arguments : Commands and options
539
578
 
540
579
  Arguments are the units of command line, as parsed by the shell, typically separated by spaces (and called "argv").
@@ -674,12 +713,12 @@ Output messages are categorized in 3 types:
674
713
 
675
714
  The option `display` controls the level of output:
676
715
 
677
- * `info` displays all messages
716
+ * `info` displays all messages: `info`, `data`, and `error`
678
717
  * `data` display `data` and `error` messages
679
718
  * `error` display only error messages.
680
719
 
681
- By default, secrets are shown on output.
682
- To hide secrets from results, set option `show_secrets` to `no`.
720
+ By default, secrets are removed from output: option `show_secrets` defaults to `no`, unless `display` is `data`, to allows piping results.
721
+ To hide secrets from output, set option `show_secrets` to `no`.
683
722
 
684
723
  #### Selection of output object properties
685
724
 
@@ -778,14 +817,14 @@ Note that `@incps:@json:'{"incps":["config"]}'` or `@incps:@ruby:'{"incps"=>["co
778
817
 
779
818
  ### <a id="native"></a>Structured Value
780
819
 
781
- Some options and parameters expect a _Structured Value_, i.e. a value more complex than a simple string. This is usually a Hash table or an Array, which could also contain sub structures.
820
+ Some options and parameters expect a [Extended Value](#extended), i.e. a value more complex than a simple string. This is usually a Hash table or an Array, which could also contain sub structures.
782
821
 
783
- For instance, a [*transfer-spec*](#transferspec) is expected to be a _Structured Value_.
822
+ For instance, a [*transfer-spec*](#transferspec) is expected to be a [Extended Value](#extended).
784
823
 
785
824
  Structured values shall be described using the [Extended Value Syntax](#extended).
786
- A convenient way to specify a _Structured Value_ is to use the `@json:` decoder, and describe the value in JSON format. The `@ruby:` decoder can also be used. For an array of hash tables, the `@csvt:` decoder can be used.
825
+ A convenient way to specify a [Extended Value](#extended) is to use the `@json:` decoder, and describe the value in JSON format. The `@ruby:` decoder can also be used. For an array of hash tables, the `@csvt:` decoder can be used.
787
826
 
788
- It is also possible to provide a _Structured Value_ in a file using `@json:@file:<path>`
827
+ It is also possible to provide a [Extended Value](#extended) in a file using `@json:@file:<path>`
789
828
 
790
829
  ### <a id="conffolder"></a>Configuration and Persistency Folder
791
830
 
@@ -894,7 +933,6 @@ ascli config over
894
933
  ascli config list
895
934
  ```
896
935
 
897
-
898
936
  #### <a id="lprtconf"></a>Special Option preset: config
899
937
 
900
938
  This preset name is reserved and contains a single key: `version`. This is the version of `ascli` which created the file.
@@ -929,6 +967,49 @@ When `ascli` starts, it looks for the `default` Option preset and if there is a
929
967
 
930
968
  If no global default is set by the user, the tool will use `global_common_defaults` when setting global parameters (e.g. `conf ascp use`)
931
969
 
970
+ Sample commands
971
+
972
+ ```bash
973
+ config ascp connect info 'Aspera Connect for Windows'
974
+ config ascp connect list
975
+ config ascp connect version 'Aspera Connect for Windows' download 'Windows Installer' --to-folder=.
976
+ config ascp connect version 'Aspera Connect for Windows' list
977
+ config ascp connect version 'Aspera Connect for Windows' open documentation
978
+ config ascp errors
979
+ config ascp info --sdk-folder=Tsdk_test_dir
980
+ config ascp install --sdk-folder=Tsdk_test_dir
981
+ config ascp products list
982
+ config ascp show
983
+ config ascp spec
984
+ config check_update
985
+ config detect --url=https://my_aoc_org.ibmaspera.com
986
+ config detect --url=my_faspex_url
987
+ config detect --url=my_node_url
988
+ config doc
989
+ config doc transfer-parameters
990
+ config echo 'hello'
991
+ config echo @base64:SGVsbG8gV29ybGQK
992
+ config echo @csvt:@stdin:
993
+ config echo @env:USER
994
+ config echo @lines:@stdin:
995
+ config echo @list:,1,2,3
996
+ config echo @uri:/etc/hosts
997
+ config echo @uri:file:/etc/hosts
998
+ config echo @uri:http://www.ibm.com
999
+ config echo @uri:https://www.ibm.com
1000
+ config echo @val:@file:yo
1001
+ config echo @zlib:@stdin:
1002
+ config email_test --notif-to=my_recipient_email
1003
+ config export
1004
+ config flush_tokens
1005
+ config genkey mykey
1006
+ config plugin create mycommand T
1007
+ config plugin list
1008
+ config proxy_check --fpac=@file:examples/proxy.pac https://eudemo.asperademo.com
1009
+ config wiz --url=https://my_aoc_org.ibmaspera.com --config-file=SAMPLE_CONFIG_FILE --pkeypath= --username=my_aoc_user_email --test-mode=yes
1010
+ config wiz --url=https://my_aoc_org.ibmaspera.com --config-file=SAMPLE_CONFIG_FILE --pkeypath= --username=my_aoc_user_email --test-mode=yes --use-generic-client=yes
1011
+ ```
1012
+
932
1013
  #### Format of file
933
1014
 
934
1015
  The configuration file is a hash in a YAML file. Example:
@@ -1110,6 +1191,8 @@ Secrets must be uniquely identified by `url` and `username`. An optional descrip
1110
1191
 
1111
1192
  #### Legacy config file format
1112
1193
 
1194
+ THIS FORMAT WILL BE DEPRECATED
1195
+
1113
1196
  The value provided can be a Hash, where keys are usernames (or access key id), and values are the associated password or secrets in clear.
1114
1197
 
1115
1198
  For example, choose a repository name, for example `my_secrets`, and populate it like this:
@@ -1141,39 +1224,56 @@ ascli conf vault get --username=access_key1
1141
1224
 
1142
1225
  ### <a id="private_key"></a>Private Key
1143
1226
 
1144
- Some applications allow the user to be authenticated using a private key (Server, AoC, Faspex5...).
1145
- It consists in generating a private key, or using a previouly generated key.
1227
+ Some applications allow the user to be authenticated using a private key (Server, AoC, Faspex5, ...).
1228
+ It consists in using a pair of keys: the private key and its associated public key.
1146
1229
  The same key can be used for multiple applications.
1147
- Technically, a private key contains the public key, which can be extracted.
1148
- Currently, only private key not protected by a passphrase are supported.
1149
- (TODO: add passphrase protection as option for aspera apps).
1230
+ Technically, a private key contains the public key, which can be extracted from it.
1231
+ The private key can be protected by a passphrase or not.
1232
+ If the key is protected by a passphrase, then it will be prompted.
1233
+ (some plugins support option `passphrase`)
1150
1234
 
1151
1235
  Several methods can be used to generate a key pair:
1152
1236
 
1237
+ The following commands use this variable:
1238
+
1239
+ ```bash
1240
+ PRIVKEYFILE=~/.aspera/ascli/my_private_key
1241
+ ```
1242
+
1153
1243
  * `ascli`
1154
1244
 
1155
- The generated key is of type RSA 4096 bit. For convenience, the public key is also extracted.
1245
+ The generated key is of type RSA, by default: 4096 bit.
1246
+ For convenience, the public key is also extracted with extension `.pub`.
1247
+ The key is not passphrase protected.
1156
1248
 
1157
1249
  ```bash
1158
- ascli config genkey ~/.aspera/ascli/my_private_key
1250
+ ascli config genkey ${PRIVKEYFILE} 4096
1159
1251
  ```
1160
1252
 
1161
1253
  * `ssh-keygen`
1162
1254
 
1255
+ Both private and public keys are generated, option `-N` is for passphrase.
1256
+
1163
1257
  ```bash
1164
- ssh-keygen -t rsa -f ~/.aspera/ascli/my_private_key -N ''
1258
+ ssh-keygen -t rsa -b 4096 -N '' -f ${PRIVKEYFILE}
1165
1259
  ```
1166
1260
 
1167
1261
  * `openssl`
1168
1262
 
1169
- openssl is sometimes compiled to support option `-nodes` (no DES, i.e. no passphrase, e.g. on macOS). To generate a privatekey pait without passphrase the following shall work on any system:
1263
+ openssl is sometimes compiled to support option `-nodes` (no DES, i.e. no passphrase, e.g. on macOS).
1264
+ To generate a private key pair without passphrase the following can be used on any system:
1265
+
1266
+ ```bash
1267
+ openssl genrsa -passout pass:dummypassword -out ${PRIVKEYFILE}.protected 4096
1268
+ openssl rsa -passin pass:dummypassword -in ${PRIVKEYFILE}.protected -out ${PRIVKEYFILE}
1269
+ openssl rsa -pubout -in ${PRIVKEYFILE} -out ${PRIVKEYFILE}.pub
1270
+ rm -f ${PRIVKEYFILE}.protected
1271
+ ```
1272
+
1273
+ To change (or add) the passphrase for a key do:
1170
1274
 
1171
1275
  ```bash
1172
- APIKEY=~/.aspera/ascli/my_private_key
1173
- openssl genrsa -passout pass:dummypassword -out ${APIKEY}.protected 2048
1174
- openssl rsa -passin pass:dummypassword -in ${APIKEY}.protected -out ${APIKEY}
1175
- openssl rsa -pubout -in ${APIKEY} -out ${APIKEY}.pub
1176
- rm -f ${APIKEY}.protected
1276
+ openssl rsa -des3 -in old_file -out new_file
1177
1277
  ```
1178
1278
 
1179
1279
  ### <a id="certificates"></a>SSL CA certificate bundle
@@ -1250,14 +1350,37 @@ Aspera on Cloud relies on Oauth, refer to the [Aspera on Cloud](#aoc) section.
1250
1350
 
1251
1351
  ### Logging, Debugging
1252
1352
 
1253
- The gem is equipped with traces. By default logging level is `warn`.
1254
- To increase debug level, use parameter `log_level` (e.g. using command line `--log-level=xx`, env var `ASCLI_LOG_LEVEL`, or parameter in con file).
1353
+ The gem is equipped with traces, mainly for debugging and learning APIs.
1354
+ By default logging level is `warn` and the output channel is `stderr`.
1355
+ To increase debug level, use parameter `log_level` (e.g. using command line `--log-level=xx`, env var `ASCLI_LOG_LEVEL`, or a parameter in the configuration file).
1255
1356
 
1256
- It is also possible to activate traces before initialization using env var `AS_LOG_LEVEL`.
1357
+ It is also possible to activate traces before log facility initialization using env var `ASCLI_LOG_LEVEL`.
1257
1358
 
1258
1359
  By default passwords and secrets are removed from logs.
1259
1360
  Use option `log_secrets` set to `yes` to reveal secrets in logs.
1260
1361
 
1362
+ Available loggers: `stdout`, `stderr`, `syslog`.
1363
+
1364
+ Available levels: `debug`, `info`, `warn`, `error`.
1365
+
1366
+ Note that when using the `direct` agent (`ascp`), additional transfer logs can be activated using `ascp` option `EX_ascp_args`, see [`direct`](#agt_direct).
1367
+
1368
+ Examples:
1369
+
1370
+ * display debugging log on `stdout`:
1371
+
1372
+ ```bash
1373
+ ascli conf over --log-level=debug --logger=stdout
1374
+ ```
1375
+
1376
+ * log errors to `syslog`:
1377
+
1378
+ ```bash
1379
+ ascli conf over --log-level=error --logger=syslog
1380
+ ```
1381
+
1382
+ When `ascli` is used interactively in a shell, the shell itself will usually log executed commands in the history file.
1383
+
1261
1384
  ### Learning Aspera Product APIs (REST)
1262
1385
 
1263
1386
  This CLI uses REST APIs.
@@ -1341,7 +1464,7 @@ The PAC file will be used for any HTTP/HTTPS/REST connection, but not other (e.g
1341
1464
 
1342
1465
  The PAC file can be tested with command: `config proxy_check`. Example, using command line option:
1343
1466
 
1344
- ```
1467
+ ```bash
1345
1468
  ascli conf proxy_check --fpac='function FindProxyForURL(url, host) {return "PROXY proxy.example.com:1234;DIRECT";}' http://example.com
1346
1469
  PROXY proxy.example.com:1234;DIRECT
1347
1470
  ```
@@ -1520,12 +1643,12 @@ will effectively push files to the related server from the agent node.
1520
1643
  #### <a id="agt_direct"></a>Direct
1521
1644
 
1522
1645
  The `direct` agent directly executes a local ascp.
1523
- This is the default for `ascli`.
1524
- This is equivalent to specifying `--transfer=direct`.
1525
- `ascli` will detect locally installed Aspera products, including SDK.
1646
+ This is the default agent for `ascli`.
1647
+ This is equivalent to option `--transfer=direct`.
1648
+ `ascli` will detect locally installed Aspera products, including SDK, and use `ascp` from that component.
1526
1649
  Refer to section [FASP](#client).
1527
1650
 
1528
- The `transfer-info` accepts the following optional parameters to control multi-session, WSS
1651
+ The `transfer_info` option accepts the following optional parameters to control multi-session, Web Socket Session and Resume policy:
1529
1652
 
1530
1653
  <table>
1531
1654
  <tr><th>Name</th><th>Type</th><th>Description</th></tr>
@@ -1540,7 +1663,7 @@ The `transfer-info` accepts the following optional parameters to control multi-s
1540
1663
  <tr><td>resume.sleep_max</td><td>int</td><td>Resume<br/>Default: 60</td></tr>
1541
1664
  </table>
1542
1665
 
1543
- Resume: In case of transfer interruption, the agent will resume a transfer up to `iter_max` time.
1666
+ In case of transfer interruption, the agent will **resume** a transfer up to `iter_max` time.
1544
1667
  Sleep between iterations is:
1545
1668
 
1546
1669
  ```bash
@@ -1548,14 +1671,27 @@ max( sleep_max , sleep_initial * sleep_factor ^ (iter_index-1) )
1548
1671
  ```
1549
1672
 
1550
1673
  Some transfer errors are considered "retryable" (e.g. timeout) and some other not (e.g. wrong password).
1674
+ The list of known protocol errors and retry level can be listed:
1675
+
1676
+ ```bash
1677
+ ascli config ascp errors
1678
+ ```
1551
1679
 
1552
1680
  Examples:
1553
1681
 
1554
1682
  ```javascript
1555
- ascli ... --transfer-info=@json:'{"wss":true,"resume":{"iter_max":10}}'
1683
+ ascli ... --transfer-info=@json:'{"wss":true,"resume":{"iter_max":20}}'
1556
1684
  ascli ... --transfer-info=@json:'{"spawn_delay_sec":2.5,"multi_incr_udp":false}'
1557
1685
  ```
1558
1686
 
1687
+ Note that the `direct` agent supports additional `transfer_spec` parameters starting with `EX_` (extended).
1688
+ In particular the field, `EX_ascp_args` which is a list of additional command line options to `ascp`.
1689
+
1690
+ This can be useful to activate logging using option `-L` of ascp.
1691
+ For example the option `--ts=@json:'{"EX_ascp_args":["-DDL-"]}'` will activate debug level 2 for `ascp` (`DD`), and display those logs on the terminal (`-`).
1692
+ This is useful if the transfer fails.
1693
+ To store ascp logs in file `aspera-scp-transfer.log` in a folder, use `--ts=@json:'{"EX_ascp_args":["-L","/path/to/folder"]}'`.
1694
+
1559
1695
  #### <a id="agt_connect"></a>IBM Aspera Connect Client GUI
1560
1696
 
1561
1697
  By specifying option: `--transfer=connect`, `ascli` will start transfers using the locally installed Aspera Connect Client. There are no option for `transfer_info`.
@@ -1579,7 +1715,7 @@ Like any other option, `transfer_info` can get its value from a pre-configured [
1579
1715
 
1580
1716
  If `transfer_info` is not specified and a default node has been configured (name in `node` for section `default`) then this node is used by default.
1581
1717
 
1582
- If the `password` value begins with `Bearer ` then the `username` is expected to be an access key and the parameter `root_id` is mandatory and specifies the root file id on the node. It can be either the access key's root file id, or any authorized file id underneath it.
1718
+ If the `password` value begins with `Bearer` then the `username` is expected to be an access key and the parameter `root_id` is mandatory and specifies the root file id on the node. It can be either the access key's root file id, or any authorized file id underneath it.
1583
1719
 
1584
1720
  #### <a id="agt_httpgw"></a>HTTP Gateway
1585
1721
 
@@ -1599,6 +1735,19 @@ Another possibility is to use the Transfer SDK daemon (asperatransferd).
1599
1735
 
1600
1736
  By default it will listen on local port `55002` on `127.0.0.1`.
1601
1737
 
1738
+ The gem `grpc` was removed from dependencies, as it requires compilation of a native part. So, to use the Transfer SDK you should install this gem:
1739
+
1740
+ ```bash
1741
+ gem install grpc
1742
+ ```
1743
+
1744
+ On Windows the compilation may fail for various reasons (3.1.1):
1745
+
1746
+ * `cannot find -lx64-ucrt-ruby310`
1747
+ &rarr; copy the file `[Ruby main dir]\lib\libx64-ucrt-ruby310.dll.a` to `[Ruby main dir]\lib\libx64-ucrt-ruby310.a` (remove the dll extension)
1748
+ * `conflicting types for 'gettimeofday'`
1749
+ &rarr; edit the file `[Ruby main dir]/include/ruby-[version]/ruby/win32.h` and change the signature of `gettimeofday` to `gettimeofday(struct timeval *, void *)` ,i.e. change `struct timezone` to `void`
1750
+
1602
1751
  ### <a id="transferspec"></a>Transfer Specification
1603
1752
 
1604
1753
  Some commands lead to file transfer (upload/download), all parameters necessary for this transfer
@@ -1651,7 +1800,89 @@ Columns:
1651
1800
 
1652
1801
  Fields with EX_ prefix are extensions to transfer agent [`direct`](#agt_direct). (only in `ascli`).
1653
1802
 
1654
- <table><tr><th>Field</th><th>Type</th><th>D</th><th>N</th><th>C</th><th>Description</th></tr><tr><td>cipher</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>In transit encryption type.<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)</td></tr><tr><td>content_protection</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Enable client-side encryption at rest. (CSEAR, content protection)<br/>Allowed values: encrypt, decrypt<br/>(--file-crypt)</td></tr><tr><td>content_protection_password</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies CSEAR password. (content protection)<br/>(env:ASPERA_SCP_FILEPASS)</td></tr><tr><td>cookie</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Metadata for transfer specified by application<br/>(env:ASPERA_SCP_COOKIE)</td></tr><tr><td>create_dir</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies whether to create new directories.<br/>(-d)</td></tr><tr><td>delete_before_transfer</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Before transfer, delete files that exist at the destination but not at the source. The source and destination arguments must be directories that have matching names. 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)</td></tr><tr><td>delete_source</td><td>bool</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>Remove SRC files after transfer success<br/>(--remove-after-transfer)</td></tr><tr><td>destination_root</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Destination root directory.</td></tr><tr><td>direction</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Direction of transfer (on client side)<br/>Allowed values: send, receive<br/>(--mode)</td></tr><tr><td>exclude_newer_than</td><td>int</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>skip src files with mtime > arg<br/>(--exclude-newer-than)</td></tr><tr><td>exclude_older_than</td><td>int</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>skip src files with mtime < arg<br/>(--exclude-older-than)</td></tr><tr><td>fasp_port</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies fasp (UDP) port.<br/>(-O)</td></tr><tr><td>file_checksum</td><td>string</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>Enable checksum reporting for transferred files by specifying the hash to use.<br/>Allowed values: sha-512, sha-384, sha-256, sha1, md5, none</td></tr><tr><td>http_fallback</td><td>bool<br/>string</td><td>Y</td><td>Y</td><td>Y</td><td>When true(1), attempts to perform an HTTP transfer if a FASP transfer cannot be performed.<br/>(-y)</td></tr><tr><td>http_fallback_port</td><td>int</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Specifies http port when no cipher is used<br/>(-t)</td></tr><tr><td>https_fallback_port</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies https port when cipher is used<br/>(-t)</td></tr><tr><td>move_after_transfer</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>(--move-after-transfer)</td></tr><tr><td>multi_session</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Use multi-session transfer. max 128.<br/> Each participant on one host needs an independent UDP (-O) port.<br/> Large files are split between sessions only when transferring with resume_policy=none.</td></tr><tr><td>multi_session_threshold</td><td>int</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>Split files across multiple ascp sessions if their size in bytes is greater than or equal to the specified value. (0=no file is split)<br/>(--multi-session-threshold)</td></tr><tr><td>overwrite</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Overwrite destination files with the source files of the same name.<br/>Allowed values: never, always, diff, older, diff+older<br/>(--overwrite)</td></tr><tr><td>paths</td><td>array</td><td>Y</td><td>Y</td><td>Y</td><td>Array of path to the source (required) and a path to the destination (optional).</td></tr><tr><td>precalculate_job_size</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies whether to precalculate the job size.<br/>(--precalculate-job-size)</td></tr><tr><td>preserve_access_time</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>(--preserve-access-time)</td></tr><tr><td>preserve_creation_time</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>(--preserve-creation-time)</td></tr><tr><td>preserve_modification_time</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>(--preserve-modification-time)</td></tr><tr><td>preserve_times</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>(--preserve-times)</td></tr><tr><td>rate_policy</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>The transfer rate policy to use when sharing bandwidth.<br/>Allowed values: low, fair, high, fixed<br/>(--policy)</td></tr><tr><td>remote_host</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>IP or fully qualified domain name of the remote server<br/>(--host)</td></tr><tr><td>remote_user</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Remote user. Default value is "xfer" on node or connect.<br/>(--user)</td></tr><tr><td>remote_password</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>SSH session password<br/>(env:ASPERA_SCP_PASS)</td></tr><tr><td>remove_after_transfer</td><td>bool</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>Remove SRC files after transfer success<br/>(--remove-after-transfer)</td></tr><tr><td>remove_empty_directories</td><td>bool</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>Specifies whether to remove empty directories.<br/>(--remove-empty-directories)</td></tr><tr><td>remove_skipped</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Must also have remove_after_transfer set to true, Defaults to false, if true, skipped files will be removed as well.<br/>(--remove-skipped)</td></tr><tr><td>proxy</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Specify the address of the Aspera high-speed proxy server.<br/> dnat(s)://[user[:password]@]server:port<br/> Default ports for DNAT and DNATS protocols are 9091 and 9092.<br/> Password, if specified here, overrides the value of environment variable ASPERA_PROXY_PASS.<br/>(--proxy)</td></tr><tr><td>resume_policy</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>If a transfer is interrupted or fails to finish, resume without re-transferring the whole files.<br/>Allowed values: none, attrs, sparse_csum, full_csum<br/>(-k)</td></tr><tr><td>retry_duration</td><td>string<br/>int</td><td>&nbsp;</td><td>Y</td><td>Y</td><td>Specifies how long to wait before retrying transfer. (e.g. "5min")</td></tr><tr><td>source_root_id</td><td>string</td><td>&nbsp;</td><td>Y</td><td>&nbsp;</td><td>The file ID of the source root directory. Required when using Bearer token auth for the source node.</td></tr><tr><td>ssh_port</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies SSH (TCP) port. Default: local:22, other:33001<br/>(-P)</td></tr><tr><td>ssh_private_key</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Private key used for SSH authentication.<br/> Shall look like: -----BEGIN RSA PRIV4TE KEY-----\nMII...<br/> Note the JSON encoding: \n for newlines.<br/>(env:ASPERA_SCP_KEY)</td></tr><tr><td>ssh_private_key_passphrase</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>The passphrase associated with the transfer user's SSH private key. Available as of 3.7.2.<br/>(env:ASPERA_SCP_PASS)</td></tr><tr><td>symlink_policy</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Handle source side symbolic links<br/>Allowed values: follow, copy, copy+force, skip<br/>(--symbolic-links)</td></tr><tr><td>tags</td><td>hash</td><td>Y</td><td>Y</td><td>Y</td><td>Metadata for transfer as JSON<br/>(--tags64)</td></tr><tr><td>target_rate_cap_kbps</td><td>int</td><td>&nbsp;</td><td>&nbsp;</td><td>Y</td><td>Returned by upload/download_setup node API.</td></tr><tr><td>target_rate_kbps</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies desired speed for the transfer.<br/>(-l)</td></tr><tr><td>title</td><td>string</td><td>&nbsp;</td><td>Y</td><td>Y</td><td>Title of the transfer</td></tr><tr><td>token</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Authorization token: Bearer, Basic or ATM (Also arg -W)<br/>(env:ASPERA_SCP_TOKEN)</td></tr><tr><td>use_ascp4</td><td>bool</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>specify version of protocol</td></tr><tr><td>source_root</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Path to be prepended to each source path.<br/> This is either a conventional path or it can be a URI but only if there is no root defined.<br/>(--source-prefix64)</td></tr><tr><td>min_rate_cap_kbps</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr><tr><td>lock_rate_policy</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr><tr><td>lock_target_rate_kbps</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr><tr><td>lock_min_rate_kbps</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr><tr><td>apply_local_docroot</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>(--apply-local-docroot)</td></tr><tr><td>preserve_acls</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Preserve access control lists.<br/>Allowed values: none, native, metafile<br/>(--preserve-acls)</td></tr><tr><td>preserve_remote_acls</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Preserve remote access control lists.<br/>Allowed values: none, native, metafile<br/>(--remote-preserve-acls)</td></tr><tr><td>preserve_file_owner_uid</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Preserve the user ID for a file owner<br/>(--preserve-file-owner-uid)</td></tr><tr><td>preserve_file_owner_gid</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Preserve the group ID for a file owner<br/>(--preserve-file-owner-gid)</td></tr><tr><td>preserve_source_access_time</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Preserve the time logged for when the source file was accessed<br/>(--preserve-source-access-time)</td></tr><tr><td>remove_empty_source_directory</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Remove empty source subdirectories and remove the source directory itself, if empty<br/>(--remove-empty-source-directory)</td></tr><tr><td>EX_at_rest_password</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Passphrase used for at rest encryption or decryption. Prefer to use standard: content_protection_password<br/>(env:ASPERA_SCP_FILEPASS)</td></tr><tr><td>EX_proxy_password</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Password used for Aspera proxy server authentication.<br/> May be overridden by password in URL EX_fasp_proxy_url.<br/>(env:ASPERA_PROXY_PASS)</td></tr><tr><td>EX_license_text</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>License file text override.<br/>By default ascp looks for license file near executable.<br/>(env:ASPERA_SCP_LICENSE)</td></tr><tr><td>dgram_size</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>UDP datagram size in bytes<br/>(-Z)</td></tr><tr><td>min_rate_kbps</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Set the minimum transfer rate in kilobits per second.<br/>(-m)</td></tr><tr><td>sshfp</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Check it against server SSH host key fingerprint<br/>(--check-sshfp)</td></tr><tr><td>EX_http_proxy_url</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Specify the proxy server address used by HTTP Fallback<br/>(-x)</td></tr><tr><td>EX_ssh_key_paths</td><td>array</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Use public key authentication for SSH and specify the private key file paths<br/>(-i)</td></tr><tr><td>EX_http_transfer_jpeg</td><td>int</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>HTTP transfers as JPEG file<br/>(-j)</td></tr><tr><td>EX_no_read</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>no read source<br/>(--no-read)</td></tr><tr><td>EX_no_write</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>no write on destination<br/>(--no-write)</td></tr><tr><td>target_rate_percentage</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr><tr><td>rate_policy_allowed</td><td>string</td><td>&nbsp;</td><td>&nbsp;</td><td>Y</td><td>Specifies most aggressive rate policy that is allowed.<br/>Returned by node API.<br/>Allowed values: low, fair, high, fixed</td></tr><tr><td>lock_min_rate</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr><tr><td>lock_target_rate</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr><tr><td>authentication</td><td>string</td><td>&nbsp;</td><td>&nbsp;</td><td>Y</td><td>value=token for SSH bypass keys, else password asked if not provided.</td></tr><tr><td>cipher_allowed</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>returned by node API. Valid literals include "aes-128" and "none".</td></tr><tr><td>EX_file_list</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>source file list</td></tr><tr><td>EX_file_pair_list</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>source file pair list</td></tr><tr><td>EX_ascp_args</td><td>array</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Add native command line arguments to ascp</td></tr><tr><td>wss_enabled</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr><tr><td>wss_port</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>TCP port used for websocket service feed.</td></tr></table>
1803
+ <table><tr><th>Field</th><th>Type</th><th>D</th><th>N</th><th>C</th><th>Description</th></tr>
1804
+ <tr><td>EX_ascp_args</td><td>array</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Add native command line arguments to ascp</td></tr>
1805
+ <tr><td>EX_at_rest_password</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Passphrase used for at rest encryption or decryption. Prefer to use standard: content_protection_password<br/>(env:ASPERA_SCP_FILEPASS)</td></tr>
1806
+ <tr><td>EX_file_list</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>source file list</td></tr>
1807
+ <tr><td>EX_file_pair_list</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>source file pair list</td></tr>
1808
+ <tr><td>EX_http_proxy_url</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Specify the proxy server address used by HTTP Fallback<br/>(-x)</td></tr>
1809
+ <tr><td>EX_http_transfer_jpeg</td><td>int</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>HTTP transfers as JPEG file<br/>(-j)</td></tr>
1810
+ <tr><td>EX_license_text</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>License file text override.<br/>By default ascp looks for license file near executable.<br/>(env:ASPERA_SCP_LICENSE)</td></tr>
1811
+ <tr><td>EX_no_read</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>no read source<br/>(--no-read)</td></tr>
1812
+ <tr><td>EX_no_write</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>no write on destination<br/>(--no-write)</td></tr>
1813
+ <tr><td>EX_proxy_password</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Password used for Aspera proxy server authentication.<br/> May be overridden by password in URL EX_fasp_proxy_url.<br/>(env:ASPERA_PROXY_PASS)</td></tr>
1814
+ <tr><td>EX_ssh_key_paths</td><td>array</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Use public key authentication for SSH and specify the private key file paths<br/>(-i)</td></tr>
1815
+ <tr><td>apply_local_docroot</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>(--apply-local-docroot)</td></tr>
1816
+ <tr><td>authentication</td><td>string</td><td>&nbsp;</td><td>&nbsp;</td><td>Y</td><td>value=token for SSH bypass keys, else password asked if not provided.</td></tr>
1817
+ <tr><td>cipher</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>In transit encryption type.<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)</td></tr>
1818
+ <tr><td>cipher_allowed</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>returned by node API. Valid literals include "aes-128" and "none".</td></tr>
1819
+ <tr><td>content_protection</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Enable client-side encryption at rest. (CSEAR, content protection)<br/>Allowed values: encrypt, decrypt<br/>(--file-crypt)</td></tr>
1820
+ <tr><td>content_protection_password</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies CSEAR password. (content protection)<br/>(env:ASPERA_SCP_FILEPASS)</td></tr>
1821
+ <tr><td>cookie</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Metadata for transfer specified by application<br/>(env:ASPERA_SCP_COOKIE)</td></tr>
1822
+ <tr><td>create_dir</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies whether to create new directories.<br/>(-d)</td></tr>
1823
+ <tr><td>delete_before_transfer</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Before transfer, delete files that exist at the destination but not at the source. The source and destination arguments must be directories that have matching names. 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)</td></tr>
1824
+ <tr><td>delete_source</td><td>bool</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>Remove SRC files after transfer success<br/>(--remove-after-transfer)</td></tr>
1825
+ <tr><td>destination_root</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Destination root directory.</td></tr>
1826
+ <tr><td>dgram_size</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>UDP datagram size in bytes<br/>(-Z)</td></tr>
1827
+ <tr><td>direction</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Direction of transfer (on client side)<br/>Allowed values: send, receive<br/>(--mode)</td></tr>
1828
+ <tr><td>exclude_newer_than</td><td>int</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>skip src files with mtime > arg<br/>(--exclude-newer-than)</td></tr>
1829
+ <tr><td>exclude_older_than</td><td>int</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>skip src files with mtime < arg<br/>(--exclude-older-than)</td></tr>
1830
+ <tr><td>fasp_port</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies fasp (UDP) port.<br/>(-O)</td></tr>
1831
+ <tr><td>file_checksum</td><td>string</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>Enable checksum reporting for transferred files by specifying the hash to use.<br/>Allowed values: sha-512, sha-384, sha-256, sha1, md5, none</td></tr>
1832
+ <tr><td>http_fallback</td><td>bool<br/>string</td><td>Y</td><td>Y</td><td>Y</td><td>When true(1), attempts to perform an HTTP transfer if a FASP transfer cannot be performed.<br/>(-y)</td></tr>
1833
+ <tr><td>http_fallback_port</td><td>int</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Specifies http port when no cipher is used<br/>(-t)</td></tr>
1834
+ <tr><td>https_fallback_port</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies https port when cipher is used<br/>(-t)</td></tr>
1835
+ <tr><td>lock_min_rate</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr>
1836
+ <tr><td>lock_min_rate_kbps</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr>
1837
+ <tr><td>lock_rate_policy</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr>
1838
+ <tr><td>lock_target_rate</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr>
1839
+ <tr><td>lock_target_rate_kbps</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr>
1840
+ <tr><td>min_rate_cap_kbps</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr>
1841
+ <tr><td>min_rate_kbps</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Set the minimum transfer rate in kilobits per second.<br/>(-m)</td></tr>
1842
+ <tr><td>move_after_transfer</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>(--move-after-transfer)</td></tr>
1843
+ <tr><td>multi_session</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Use multi-session transfer. max 128.<br/> Each participant on one host needs an independent UDP (-O) port.<br/> Large files are split between sessions only when transferring with resume_policy=none.</td></tr>
1844
+ <tr><td>multi_session_threshold</td><td>int</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>Split files across multiple ascp sessions if their size in bytes is greater than or equal to the specified value. (0=no file is split)<br/>(--multi-session-threshold)</td></tr>
1845
+ <tr><td>overwrite</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Overwrite destination files with the source files of the same name.<br/>Allowed values: never, always, diff, older, diff+older<br/>(--overwrite)</td></tr>
1846
+ <tr><td>paths</td><td>array</td><td>Y</td><td>Y</td><td>Y</td><td>Array of path to the source (required) and a path to the destination (optional).</td></tr>
1847
+ <tr><td>precalculate_job_size</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies whether to precalculate the job size.<br/>(--precalculate-job-size)</td></tr>
1848
+ <tr><td>preserve_access_time</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>(--preserve-access-time)</td></tr>
1849
+ <tr><td>preserve_acls</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Preserve access control lists.<br/>Allowed values: none, native, metafile<br/>(--preserve-acls)</td></tr>
1850
+ <tr><td>preserve_creation_time</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>(--preserve-creation-time)</td></tr>
1851
+ <tr><td>preserve_file_owner_gid</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Preserve the group ID for a file owner<br/>(--preserve-file-owner-gid)</td></tr>
1852
+ <tr><td>preserve_file_owner_uid</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Preserve the user ID for a file owner<br/>(--preserve-file-owner-uid)</td></tr>
1853
+ <tr><td>preserve_modification_time</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>(--preserve-modification-time)</td></tr>
1854
+ <tr><td>preserve_remote_acls</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Preserve remote access control lists.<br/>Allowed values: none, native, metafile<br/>(--remote-preserve-acls)</td></tr>
1855
+ <tr><td>preserve_source_access_time</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Preserve the time logged for when the source file was accessed<br/>(--preserve-source-access-time)</td></tr>
1856
+ <tr><td>preserve_times</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>(--preserve-times)</td></tr>
1857
+ <tr><td>proxy</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Specify the address of the Aspera high-speed proxy server.<br/> dnat(s)://[user[:password]@]server:port<br/> Default ports for DNAT and DNATS protocols are 9091 and 9092.<br/> Password, if specified here, overrides the value of environment variable ASPERA_PROXY_PASS.<br/>(--proxy)</td></tr>
1858
+ <tr><td>rate_policy</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>The transfer rate policy to use when sharing bandwidth.<br/>Allowed values: low, fair, high, fixed<br/>(--policy)</td></tr>
1859
+ <tr><td>rate_policy_allowed</td><td>string</td><td>&nbsp;</td><td>&nbsp;</td><td>Y</td><td>Specifies most aggressive rate policy that is allowed.<br/>Returned by node API.<br/>Allowed values: low, fair, high, fixed</td></tr>
1860
+ <tr><td>remote_host</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>IP or fully qualified domain name of the remote server<br/>(--host)</td></tr>
1861
+ <tr><td>remote_password</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>SSH session password<br/>(env:ASPERA_SCP_PASS)</td></tr>
1862
+ <tr><td>remote_user</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Remote user. Default value is "xfer" on node or connect.<br/>(--user)</td></tr>
1863
+ <tr><td>remove_after_transfer</td><td>bool</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>Remove SRC files after transfer success<br/>(--remove-after-transfer)</td></tr>
1864
+ <tr><td>remove_empty_directories</td><td>bool</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>Specifies whether to remove empty directories.<br/>(--remove-empty-directories)</td></tr>
1865
+ <tr><td>remove_empty_source_directory</td><td>bool</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Remove empty source subdirectories and remove the source directory itself, if empty<br/>(--remove-empty-source-directory)</td></tr>
1866
+ <tr><td>remove_skipped</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Must also have remove_after_transfer set to true, Defaults to false, if true, skipped files will be removed as well.<br/>(--remove-skipped)</td></tr>
1867
+ <tr><td>resume_policy</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>If a transfer is interrupted or fails to finish, resume without re-transferring the whole files.<br/>Allowed values: none, attrs, sparse_csum, full_csum<br/>(-k)</td></tr>
1868
+ <tr><td>retry_duration</td><td>string<br/>int</td><td>&nbsp;</td><td>Y</td><td>Y</td><td>Specifies how long to wait before retrying transfer. (e.g. "5min")</td></tr>
1869
+ <tr><td>source_root</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Path to be prepended to each source path.<br/> This is either a conventional path or it can be a URI but only if there is no root defined.<br/>(--source-prefix64)</td></tr>
1870
+ <tr><td>source_root_id</td><td>string</td><td>&nbsp;</td><td>Y</td><td>&nbsp;</td><td>The file ID of the source root directory. Required when using Bearer token auth for the source node.</td></tr>
1871
+ <tr><td>ssh_port</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies SSH (TCP) port. Default: local:22, other:33001<br/>(-P)</td></tr>
1872
+ <tr><td>ssh_private_key</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>Private key used for SSH authentication.<br/> Shall look like: -----BEGIN RSA PRIV4TE KEY-----\nMII...<br/> Note the JSON encoding: \n for newlines.<br/>(env:ASPERA_SCP_KEY)</td></tr>
1873
+ <tr><td>ssh_private_key_passphrase</td><td>string</td><td>Y</td><td>&nbsp;</td><td>&nbsp;</td><td>The passphrase associated with the transfer user's SSH private key. Available as of 3.7.2.<br/>(env:ASPERA_SCP_PASS)</td></tr>
1874
+ <tr><td>sshfp</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Check it against server SSH host key fingerprint<br/>(--check-sshfp)</td></tr>
1875
+ <tr><td>symlink_policy</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Handle source side symbolic links<br/>Allowed values: follow, copy, copy+force, skip<br/>(--symbolic-links)</td></tr>
1876
+ <tr><td>tags</td><td>hash</td><td>Y</td><td>Y</td><td>Y</td><td>Metadata for transfer as JSON<br/>(--tags64)</td></tr>
1877
+ <tr><td>target_rate_cap_kbps</td><td>int</td><td>&nbsp;</td><td>&nbsp;</td><td>Y</td><td>Returned by upload/download_setup node API.</td></tr>
1878
+ <tr><td>target_rate_kbps</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies desired speed for the transfer.<br/>(-l)</td></tr>
1879
+ <tr><td>target_rate_percentage</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr>
1880
+ <tr><td>title</td><td>string</td><td>&nbsp;</td><td>Y</td><td>Y</td><td>Title of the transfer</td></tr>
1881
+ <tr><td>token</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Authorization token: Bearer, Basic or ATM (Also arg -W)<br/>(env:ASPERA_SCP_TOKEN)</td></tr>
1882
+ <tr><td>use_ascp4</td><td>bool</td><td>Y</td><td>Y</td><td>&nbsp;</td><td>specify version of protocol</td></tr>
1883
+ <tr><td>wss_enabled</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>&nbsp;</td></tr>
1884
+ <tr><td>wss_port</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>TCP port used for websocket service feed.</td></tr>
1885
+ </table>
1655
1886
 
1656
1887
  #### Destination folder for transfers
1657
1888
 
@@ -1721,7 +1952,9 @@ providing a file list directly to ascp:
1721
1952
  --sources=@ts --ts=@json:'{"paths":[{"source":"dummy"}],"EX_ascp_args":["--file-list","myfilelist"]}'
1722
1953
  ```
1723
1954
 
1724
- This method avoids creating a copy of the file list, but has drawbacks: it applies *only* to the [`direct`](#agt_direct) transfer agent (i.e. bare ascp) and not for Aspera on Cloud. One must specify a dummy list in the [*transfer-spec*](#transferspec), which will be overridden by the bare ascp command line provided. (TODO) In next version, dummy source paths can be removed.
1955
+ This method avoids creating a copy of the file list, but has drawbacks: it applies *only* to the [`direct`](#agt_direct) transfer agent (i.e. local `ascp`) and not for Aspera on Cloud.
1956
+ One must specify a dummy list in the [*transfer-spec*](#transferspec), which will be overridden by the `ascp` command line provided.
1957
+ (TODO) In next version, dummy source paths can be removed.
1725
1958
 
1726
1959
  In case the file list is provided on the command line i.e. using `--sources=@args` or `--sources=<Array>` (but not `--sources=@ts`), then the list of files will be used either as a simple file list or a file pair list depending on the value of the option: `src_type`:
1727
1960
 
@@ -1978,306 +2211,39 @@ ascli server upload /tmp/sample --to-folder=faux://
1978
2211
  ascli server upload "faux:///mydir?file=testfile&count=1m&size=0&inc=2&seq=sequential" --to-folder=/Upload
1979
2212
  ```
1980
2213
 
1981
- ### <a id="commands"></a>Sample Commands
1982
-
1983
- A non complete list of commands used in unit tests:
1984
-
1985
- ```bash
1986
- ascli
1987
- ascli -h
1988
- ascli aoc -N remind --username=my_aoc_user_email
1989
- ascli aoc -N servers
1990
- ascli aoc admin analytics transfers --query=@json:'{"status":"completed","direction":"receive"}' --notif-to=my_recipient_email --notif-template=@ruby:'%Q{From: <%=from_name%> <<%=from_email%>>\nTo: <<%=to%>>\nSubject: <%=ev["files_completed"]%> files received\n\n<%=ev.to_yaml%>}'
1991
- ascli aoc admin ats access_key create --cloud=aws --region=my_aws_bucket_region --params=@json:'{"id":"ak_aws","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_aws_bucket_name","credentials":{"access_key_id":"my_aws_bucket_key","secret_access_key":"my_aws_bucket_secret"},"path":"/"}}'
1992
- ascli aoc admin ats access_key create --cloud=softlayer --region=my_icos_bucket_region --params=@json:'{"id":"akibmcloud","secret":"somesecret","name":"my test key","storage":{"type":"ibm-s3","bucket":"my_icos_bucket_name","credentials":{"access_key_id":"my_icos_bucket_key","secret_access_key":"my_icos_bucket_secret"},"path":"/"}}'
1993
- ascli aoc admin ats access_key delete akibmcloud
1994
- ascli aoc admin ats access_key list --fields=name,id
1995
- ascli aoc admin ats access_key node akibmcloud --secret=somesecret browse /
1996
- ascli aoc admin ats cluster clouds
1997
- ascli aoc admin ats cluster list
1998
- ascli aoc admin ats cluster show --cloud=aws --region=eu-west-1
1999
- ascli aoc admin ats cluster show 1f412ae7-869a-445c-9c05-02ad16813be2
2000
- ascli aoc admin res application list
2001
- ascli aoc admin res client list
2002
- ascli aoc admin res client_access_key list
2003
- ascli aoc admin res client_registration_token create @json:'{"data":{"name":"test_client_reg1","client_subject_scopes":["alee","aejd"],"client_subject_enabled":true}}'
2004
- ascli aoc admin res client_registration_token delete my_clt_reg_id
2005
- ascli aoc admin res client_registration_token list
2006
- ascli aoc admin res contact list
2007
- ascli aoc admin res dropbox list
2008
- ascli aoc admin res dropbox_membership list
2009
- ascli aoc admin res group list
2010
- ascli aoc admin res kms_profile list
2011
- ascli aoc admin res node list
2012
- ascli aoc admin res operation list
2013
- ascli aoc admin res organization show
2014
- ascli aoc admin res package list --http-options=@json:'{"read_timeout":120.0}'
2015
- ascli aoc admin res saml_configuration list
2016
- ascli aoc admin res self show
2017
- ascli aoc admin res short_link list
2018
- ascli aoc admin res user list
2019
- ascli aoc admin res workspace_membership list
2020
- ascli aoc admin resource node --name=my_aoc_node1_name --secret=my_aoc_node1_secret v3 access_key create --value=@json:'{"id":"testsub1","storage":{"path":"/folder1"}}'
2021
- ascli aoc admin resource node --name=my_aoc_node1_name --secret=my_aoc_node1_secret v3 events
2022
- ascli aoc admin resource node --name=my_aoc_node1_name --secret=my_aoc_node1_secret v4 browse /
2023
- ascli aoc admin resource node --name=my_aoc_node1_name --secret=my_aoc_node1_secret v4 delete /folder1
2024
- ascli aoc admin resource node --name=my_aoc_node1_name --secret=my_aoc_node1_secret v4 mkdir /folder1
2025
- ascli aoc admin resource node v3 name my_aoc_node1_name --secret=my_aoc_node1_secret access_key delete testsub1
2026
- ascli aoc admin resource workspace list
2027
- ascli aoc admin resource workspace_membership list --fields=ALL --query=@json:'{"page":1,"per_page":50,"embed":"member","inherited":false,"workspace_id":11363,"sort":"name"}'
2028
- ascli aoc automation workflow action my_wf_id create --value=@json:'{"name":"toto"}'
2029
- ascli aoc automation workflow create --value=@json:'{"name":"test_workflow"}'
2030
- ascli aoc automation workflow delete my_wf_id
2031
- ascli aoc automation workflow list
2032
- ascli aoc automation workflow list --select=@json:'{"name":"test_workflow"}' --fields=id --format=csv --display=data
2033
- ascli aoc automation workflow list --value=@json:'{"show_org_workflows":"true"}' --scope=admin:all
2034
- ascli aoc bearer_token --display=data --scope=user:all
2035
- ascli aoc faspex
2036
- ascli aoc files bearer /
2037
- ascli aoc files bearer_token_node / --cache-tokens=no
2038
- ascli aoc files browse /
2039
- ascli aoc files browse / -N --link=my_aoc_publink_folder
2040
- ascli aoc files delete /testsrc
2041
- ascli aoc files download --transfer=connect /200KB.1
2042
- ascli aoc files file show my_file_id
2043
- ascli aoc files find / --value='\.partial$'
2044
- ascli aoc files http_node_download --to-folder=. /200KB.1
2045
- ascli aoc files mkdir /testsrc
2046
- ascli aoc files rename /somefolder testdst
2047
- ascli aoc files short_link create --to-folder=/testdst --value=private
2048
- ascli aoc files short_link create --to-folder=/testdst --value=public
2049
- ascli aoc files short_link list --value=@json:'{"purpose":"shared_folder_auth_link"}'
2050
- ascli aoc files transfer --from-folder=/testsrc --to-folder=/testdst testfile.bin
2051
- ascli aoc files upload --to-folder=/testsrc testfile.bin
2052
- ascli aoc files upload -N --to-folder=/ testfile.bin --link=my_aoc_publink_folder
2053
- ascli aoc files upload Test.pdf --transfer=node --transfer-info=@json:@stdin:
2054
- ascli aoc files v3 info
2055
- ascli aoc org -N --link=my_aoc_publink_recv_from_aocuser
2056
- ascli aoc organization
2057
- ascli aoc packages list
2058
- ascli aoc packages list --query=@json:'{"dropbox_name":"my_aoc_shbx_name","sort":"-received_at","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false}'
2059
- ascli aoc packages recv "my_package_id" --to-folder=.
2060
- ascli aoc packages recv ALL --to-folder=. --once-only=yes --lock-port=12345
2061
- ascli aoc packages send --value=@json:'{"name":"Important files delivery","recipients":["my_email_external_user"]}' --new-user-option=@json:'{"package_contact":true}' testfile.bin
2062
- ascli aoc packages send --value=@json:'{"name":"Important files delivery","recipients":["my_email_internal_user"],"note":"my note"}' testfile.bin
2063
- ascli aoc packages send --workspace="my_aoc_shbx_ws" --value=@json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' testfile.bin
2064
- ascli aoc packages send --workspace="my_aoc_shbx_ws" --value=@json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"],"metadata":{"Project Id":"456","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' testfile.bin
2065
- ascli aoc packages send --workspace="my_aoc_shbx_ws" --value=@json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"]}' testfile.bin
2066
- ascli aoc packages send -N --value=@json:'{"name":"Important files delivery"}' testfile.bin --link=my_aoc_publink_send_aoc_user --password=my_aoc_publink_send_use_pass
2067
- ascli aoc packages send -N --value=@json:'{"name":"Important files delivery"}' testfile.bin --link=my_aoc_publink_send_shd_inbox
2068
- ascli aoc packages shared_inboxes list
2069
- ascli aoc user profile modify @json:'{"name":"dummy change"}'
2070
- ascli aoc user profile show
2071
- ascli aoc user workspaces current
2072
- ascli aoc user workspaces list
2073
- ascli ats access_key cluster akibmcloud --secret=somesecret
2074
- ascli ats access_key create --cloud=aws --region=my_aws_bucket_region --params=@json:'{"id":"ak_aws","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_aws_bucket_name","credentials":{"access_key_id":"my_aws_bucket_key","secret_access_key":"my_aws_bucket_secret"},"path":"/"}}'
2075
- ascli ats access_key create --cloud=softlayer --region=my_icos_bucket_region --params=@json:'{"id":"akibmcloud","secret":"somesecret","name":"my test key","storage":{"type":"ibm-s3","bucket":"my_icos_bucket_name","credentials":{"access_key_id":"my_icos_bucket_key","secret_access_key":"my_icos_bucket_secret"},"path":"/"}}'
2076
- ascli ats access_key delete ak_aws
2077
- ascli ats access_key delete akibmcloud
2078
- ascli ats access_key list --fields=name,id
2079
- ascli ats access_key node akibmcloud browse / --secret=somesecret
2080
- ascli ats api_key create
2081
- ascli ats api_key instances
2082
- ascli ats api_key list
2083
- ascli ats cluster clouds
2084
- ascli ats cluster list
2085
- ascli ats cluster show --cloud=aws --region=eu-west-1
2086
- ascli ats cluster show 1f412ae7-869a-445c-9c05-02ad16813be2
2087
- ascli conf flush_tokens
2088
- ascli conf wiz --url=https://my_aoc_org.ibmaspera.com --config-file=SAMPLE_CONFIG_FILE --pkeypath= --username=my_aoc_user_email --test-mode=yes
2089
- ascli conf wiz --url=https://my_aoc_org.ibmaspera.com --config-file=SAMPLE_CONFIG_FILE --pkeypath= --username=my_aoc_user_email --test-mode=yes --use-generic-client=yes
2090
- ascli config ascp connect info 'Aspera Connect for Windows'
2091
- ascli config ascp connect list
2092
- ascli config ascp connect version 'Aspera Connect for Windows' download 'Windows Installer' --to-folder=.
2093
- ascli config ascp connect version 'Aspera Connect for Windows' list
2094
- ascli config ascp connect version 'Aspera Connect for Windows' open documentation
2095
- ascli config ascp errors
2096
- ascli config ascp info
2097
- ascli config ascp install
2098
- ascli config ascp products list
2099
- ascli config ascp show
2100
- ascli config ascp spec
2101
- ascli config check_update
2102
- ascli config detect --url=https://my_aoc_org.ibmaspera.com
2103
- ascli config detect --url=my_faspex_url
2104
- ascli config doc
2105
- ascli config doc transfer-parameters
2106
- ascli config email_test --notif-to=my_recipient_email
2107
- ascli config export
2108
- ascli config genkey mykey
2109
- ascli config plugin create mycommand T
2110
- ascli config plugin list
2111
- ascli config proxy_check --fpac=@file:examples/proxy.pac https://eudemo.asperademo.com
2112
- ascli console transfer current list
2113
- ascli console transfer smart list
2114
- ascli console transfer smart sub my_job_id @json:'{"source":{"paths":["my_file_name"]},"source_type":"user_selected"}'
2115
- ascli cos -N --bucket=my_icos_bucket_name --endpoint=my_icos_bucket_endpoint --apikey=my_icos_bucket_apikey --crn=my_icos_resource_instance_id node info
2116
- ascli cos -N --bucket=my_icos_bucket_name --region=my_icos_bucket_region --service-credentials=@json:@file:service_creds.json node info
2117
- ascli cos node access_key show self
2118
- ascli cos node download testfile.bin --to-folder=.
2119
- ascli cos node info
2120
- ascli cos node upload testfile.bin
2121
- ascli faspex dropbox list --recipient="*my_faspex_dbx"
2122
- ascli faspex dropbox list --recipient="*my_faspex_wkg"
2123
- ascli faspex health
2124
- ascli faspex package list
2125
- ascli faspex package list --box=sent --fields=package_id --format=csv --display=data --query=@json:'{"max":1}'
2126
- ascli faspex package list --fields=package_id --format=csv --display=data --query=@json:'{"max":1}'
2127
- ascli faspex package list --recipient="*my_faspex_dbx" --format=csv --fields=package_id --query=@json:'{"max":1}'
2128
- ascli faspex package list --recipient="*my_faspex_wkg" --format=csv --fields=package_id --query=@json:'{"max":1}'
2129
- ascli faspex package recv "my_package_id" --to-folder=.
2130
- ascli faspex package recv "my_package_id" --to-folder=. --box=sent
2131
- ascli faspex package recv --to-folder=. --link="my_faspex_publink_recv_from_fxuser"
2132
- ascli faspex package recv ALL --to-folder=. --once-only=yes
2133
- ascli faspex package recv my_pkgid --recipient="*my_faspex_dbx" --to-folder=.
2134
- ascli faspex package recv my_pkgid --recipient="*my_faspex_wkg" --to-folder=.
2135
- ascli faspex package send --delivery-info=@json:'{"title":"Important files delivery","recipients":["*my_faspex_dbx"]}' testfile.bin
2136
- ascli faspex package send --delivery-info=@json:'{"title":"Important files delivery","recipients":["*my_faspex_wkg"]}' testfile.bin
2137
- ascli faspex package send --delivery-info=@json:'{"title":"Important files delivery","recipients":["my_email_internal_user","my_faspex_username"]}' testfile.bin
2138
- ascli faspex package send --link="my_faspex_publink_send_to_dropbox" --delivery-info=@json:'{"title":"Important files delivery"}' testfile.bin
2139
- ascli faspex package send --link="my_faspex_publink_send_to_fxuser" --delivery-info=@json:'{"title":"Important files delivery"}' testfile.bin
2140
- ascli faspex source name "Server Files" node br /
2141
- ascli faspex v4 dmembership list
2142
- ascli faspex v4 dropbox list
2143
- ascli faspex v4 metadata_profile list
2144
- ascli faspex v4 user list
2145
- ascli faspex v4 wmembership list
2146
- ascli faspex v4 workgroup list
2147
- ascli faspex5 admin res accounts list
2148
- ascli faspex5 admin res contacts list
2149
- ascli faspex5 admin res jobs list
2150
- ascli faspex5 admin res node list --value=@json:'{"type":"received","subtype":"mypackages"}'
2151
- ascli faspex5 admin res oauth_clients list
2152
- ascli faspex5 admin res registrations list
2153
- ascli faspex5 admin res saml_configs list
2154
- ascli faspex5 admin res shared_inboxes list
2155
- ascli faspex5 admin res workgroups list
2156
- ascli faspex5 package list --value=@json:'{"mailbox":"inbox","state":["released"]}'
2157
- ascli faspex5 package receive "my_package_id" --to-folder=.
2158
- ascli faspex5 package send --value=@json:'{"title":"test title","recipients":[{"name":"my_f5_user"}]}' testfile.bin
2159
- ascli mycommand --plugin-folder=T
2160
- ascli node -N -Ptst_node_preview access_key create --value=@json:'{"id":"aoc_1","storage":{"type":"local","path":"/"}}'
2161
- ascli node -N -Ptst_node_preview access_key delete aoc_1
2162
- ascli node async bandwidth 1
2163
- ascli node async counters 1
2164
- ascli node async files 1
2165
- ascli node async list
2166
- ascli node async show 1
2167
- ascli node async show ALL
2168
- ascli node basic_token
2169
- ascli node browse / -r
2170
- ascli node delete folder_1/10MB.1
2171
- ascli node delete testfile.bin
2172
- ascli node download testfile.bin --to-folder=.
2173
- ascli node download testfile.bin --to-folder=. --token-type=hybrid
2174
- ascli node health
2175
- ascli node info --fpac='function FindProxyForURL(url,host){return "DIRECT"}'
2176
- ascli node search / --value=@json:'{"sort":"mtime"}'
2177
- ascli node service create @json:'{"id":"service1","type":"WATCHD","run_as":{"user":"user1"}}'
2178
- ascli node service delete service1
2179
- ascli node service list
2180
- ascli node transfer list --value=@json:'{"active_only":true}'
2181
- ascli node upload --to-folder="folder_1" --sources=@ts --ts=@json:'{"paths":[{"source":"/aspera-test-dir-small/10MB.1"}],"precalculate_job_size":true}' --transfer=node --transfer-info=@json:'{"url":"my_node_url","username":"my_node_user","password":"my_node_pass"}'
2182
- ascli node upload testfile.bin --to-folder=folder_1 --ts=@json:'{"target_rate_cap_kbps":10000}'
2183
- ascli node upload testfile.bin --to-folder=folder_1 --ts=@json:'{"target_rate_cap_kbps":10000}' --token-type=hybrid
2184
- ascli orchestrator info
2185
- ascli orchestrator plugins
2186
- ascli orchestrator processes
2187
- ascli orchestrator workflow inputs my_orch_workflow_id
2188
- ascli orchestrator workflow list
2189
- ascli orchestrator workflow start my_orch_workflow_id --params=@json:'{"Param":"world !"}'
2190
- ascli orchestrator workflow start my_orch_workflow_id --params=@json:'{"Param":"world !"}' --result=ResultStep:Complete_status_message
2191
- ascli orchestrator workflow status ALL
2192
- ascli orchestrator workflow status my_orch_workflow_id
2193
- ascli preview check --skip-types=office
2194
- ascli preview folder 1 --skip-types=office --log-level=info --file-access=remote --ts=@json:'{"target_rate_kbps":1000000}'
2195
- ascli preview scan --skip-types=office --log-level=info
2196
- ascli preview test --case=test mp4 my_file_mxf --video-conversion=blend --log-level=debug
2197
- ascli preview test --case=test mp4 my_file_mxf --video-conversion=clips --log-level=debug
2198
- ascli preview test --case=test mp4 my_file_mxf --video-conversion=reencode --log-level=debug
2199
- ascli preview test --case=test png my_file_dcm --log-level=debug
2200
- ascli preview test --case=test png my_file_docx --log-level=debug
2201
- ascli preview test --case=test png my_file_mxf --video-png-conv=animated --log-level=debug
2202
- ascli preview test --case=test png my_file_mxf --video-png-conv=fixed --log-level=debug
2203
- ascli preview test --case=test png my_file_pdf --log-level=debug
2204
- ascli preview trevents --once-only=yes --skip-types=office --log-level=info
2205
- ascli server -N -Ptst_hstsfaspex_ssh -Plocal_user ctl all:status
2206
- ascli server -N -Ptst_hstsfaspex_ssh -Plocal_user health app_services --format=nagios
2207
- ascli server -N -Ptst_hstsfaspex_ssh -Plocal_user health asctlstatus --format=nagios --cmd-prefix='sudo '
2208
- ascli server -N -Ptst_hstsfaspex_ssh -Plocal_user nodeadmin -- -l
2209
- ascli server -N -Ptst_server_bykey -Plocal_user br /
2210
- ascli server browse /
2211
- ascli server browse folder_1/target_hot
2212
- ascli server cp NEW_SERVER_FOLDER/testfile.bin folder_1/200KB.2
2213
- ascli server delete NEW_SERVER_FOLDER
2214
- ascli server delete folder_1/target_hot
2215
- ascli server delete folder_1/to.delete
2216
- ascli server df
2217
- ascli server download NEW_SERVER_FOLDER/testfile.bin --to-folder=. --transfer-info=@json:'{"wss":false,"resume":{"iter_max":1}}'
2218
- ascli server download NEW_SERVER_FOLDER/testfile.bin --to-folder=folder_1 --transfer=node
2219
- ascli server du /
2220
- ascli server health transfer --to-folder=folder_1 --format=nagios
2221
- ascli server info
2222
- ascli server md5sum NEW_SERVER_FOLDER/testfile.bin
2223
- ascli server mkdir NEW_SERVER_FOLDER --logger=stdout
2224
- ascli server mkdir folder_1/target_hot
2225
- ascli server mv folder_1/200KB.2 folder_1/to.delete
2226
- ascli server upload --sources=@ts --ts=@json:'{"paths":[{"source":"testfile.bin","destination":"NEW_SERVER_FOLDER/othername"}]}'
2227
- ascli server upload --src-type=pair --sources=@json:'["testfile.bin","NEW_SERVER_FOLDER/othername"]'
2228
- ascli server upload --src-type=pair testfile.bin NEW_SERVER_FOLDER/othername --notif-to=my_recipient_email
2229
- ascli server upload --src-type=pair testfile.bin folder_1/with_options --ts=@json:'{"cipher":"aes-192-gcm","content_protection":"encrypt","content_protection_password":"_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"}'
2230
- ascli server upload --to-folder=folder_1/target_hot --lock-port=12345 --ts=@json:'{"EX_ascp_args":["--remove-after-transfer","--remove-empty-directories","--exclude-newer-than=-8","--src-base","source_hot"]}' source_hot
2231
- ascli server upload testfile.bin --to-folder=NEW_SERVER_FOLDER --ts=@json:'{"multi_session":3,"multi_session_threshold":1,"resume_policy":"none","target_rate_kbps":1500}' --transfer-info=@json:'{"spawn_delay_sec":2.5}' --progress=multi
2232
- ascli shares admin share list
2233
- ascli shares repository browse /
2234
- ascli shares repository delete my_shares_upload/testfile.bin
2235
- ascli shares repository download --to-folder=. my_shares_upload/testfile.bin
2236
- ascli shares repository download --to-folder=. my_shares_upload/testfile.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://my_http_gw_fqdn/aspera/http-gwy/v1"}'
2237
- ascli shares repository upload --to-folder=my_shares_upload testfile.bin
2238
- ascli shares repository upload --to-folder=my_shares_upload testfile.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://my_http_gw_fqdn/aspera/http-gwy/v1"}'
2239
- ascli shares2 appinfo
2240
- ascli shares2 organization list
2241
- ascli shares2 project list --organization=Sport
2242
- ascli shares2 repository browse /
2243
- ascli shares2 userinfo
2244
- ascli sync start --parameters=@json:'{"sessions":[{"name":"test","reset":true,"remote_dir":"/sync_test","local_dir":"contents","host":"my_remote_host","tcp_port":33001,"user":"my_remote_user","private_key_path":"my_local_user_key"}]}'
2245
- ...and more
2246
- ```
2247
-
2248
2214
  ### <a id="usage"></a>Usage
2249
2215
 
2250
- ```bash
2216
+ ```text
2251
2217
  ascli -h
2252
2218
  NAME
2253
- ascli -- a command line tool for Aspera Applications (v4.7.0)
2219
+ ascli -- a command line tool for Aspera Applications (v4.8.0)
2254
2220
 
2255
2221
  SYNOPSIS
2256
- ascli COMMANDS [OPTIONS] [ARGS]
2222
+ ascli COMMANDS [OPTIONS] [ARGS]
2257
2223
 
2258
2224
  DESCRIPTION
2259
- Use Aspera application to perform operations on command line.
2260
- Documentation and examples: https://rubygems.org/gems/aspera-cli
2261
- execute: ascli conf doc
2262
- or visit: https://www.rubydoc.info/gems/aspera-cli
2263
- source repo: https://github.com/IBM/aspera-cli
2225
+ Use Aspera application to perform operations on command line.
2226
+ Documentation and examples: https://rubygems.org/gems/aspera-cli
2227
+ execute: ascli conf doc
2228
+ or visit: https://www.rubydoc.info/gems/aspera-cli
2229
+ source repo: https://github.com/IBM/aspera-cli
2264
2230
 
2265
2231
  ENVIRONMENT VARIABLES
2266
- ASCLI_HOME config folder, default: $HOME/.aspera/ascli
2267
- Any option can be set as an environment variable, refer to the manual
2232
+ ASCLI_HOME config folder, default: $HOME/.aspera/ascli
2233
+ Any option can be set as an environment variable, refer to the manual
2268
2234
 
2269
2235
  COMMANDS
2270
- To list first level commands, execute: ascli
2271
- Note that commands can be written shortened (provided it is unique).
2236
+ To list first level commands, execute: ascli
2237
+ Note that commands can be written shortened (provided it is unique).
2272
2238
 
2273
2239
  OPTIONS
2274
- Options begin with a '-' (minus), and value is provided on command line.
2275
- Special values are supported beginning with special prefix @pfx:, where pfx is one of:
2276
- base64, json, zlib, ruby, csvt, lines, list, incps, val, file, path, env, uri, stdin, preset
2277
- Dates format is 'DD-MM-YY HH:MM:SS', or 'now' or '-<num>h'
2240
+ Options begin with a '-' (minus), and value is provided on command line.
2241
+ Special values are supported beginning with special prefix @pfx:, where pfx is one of:
2242
+ base64, json, zlib, ruby, csvt, lines, list, incps, val, file, path, env, uri, stdin, preset
2243
+ Dates format is 'DD-MM-YY HH:MM:SS', or 'now' or '-<num>h'
2278
2244
 
2279
2245
  ARGS
2280
- Some commands require mandatory arguments, e.g. a path.
2246
+ Some commands require mandatory arguments, e.g. a path.
2281
2247
 
2282
2248
  OPTIONS: global
2283
2249
  --interactive=ENUM use interactive input of missing params: yes, [no]
@@ -2289,7 +2255,7 @@ OPTIONS: global
2289
2255
  --table-style=VALUE table display style
2290
2256
  --flat-hash=ENUM display hash values as additional keys: [yes], no
2291
2257
  --transpose-single=ENUM single object fields output vertically: [yes], no
2292
- --show-secrets=ENUM show secrets on command output: [yes], no
2258
+ --show-secrets=ENUM show secrets on command output: yes, [no]
2293
2259
  -h, --help Show this message.
2294
2260
  --bash-comp generate bash completion for command
2295
2261
  --show-config Display parameters used for the provided action.
@@ -2344,7 +2310,7 @@ OPTIONS:
2344
2310
 
2345
2311
 
2346
2312
  COMMAND: shares
2347
- SUBCOMMANDS: repository admin
2313
+ SUBCOMMANDS: health repository admin
2348
2314
  OPTIONS:
2349
2315
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2350
2316
  --username=VALUE username to log in
@@ -2364,7 +2330,7 @@ OPTIONS:
2364
2330
 
2365
2331
 
2366
2332
  COMMAND: orchestrator
2367
- SUBCOMMANDS: info workflow plugins processes
2333
+ SUBCOMMANDS: health info workflow plugins processes
2368
2334
  OPTIONS:
2369
2335
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2370
2336
  --username=VALUE username to log in
@@ -2405,27 +2371,29 @@ OPTIONS:
2405
2371
 
2406
2372
 
2407
2373
  COMMAND: faspex5
2408
- SUBCOMMANDS: package admin
2374
+ SUBCOMMANDS: health package admin user
2409
2375
  OPTIONS:
2410
2376
  --url=VALUE URL of application, e.g. https://org.asperafiles.com
2411
2377
  --username=VALUE username to log in
2412
2378
  --password=VALUE user's password
2413
2379
  --client-id=VALUE OAuth client identifier
2414
2380
  --client-secret=VALUE OAuth client secret
2415
- --redirect-uri=VALUE OAuth redirect URI
2381
+ --redirect-uri=VALUE OAuth redirect URI for web authentication
2416
2382
  --auth=ENUM OAuth type of authentication: web, jwt, boot
2417
- --private-key=VALUE Oauth RSA private key PEM value for JWT (prefix file path with @val:@file:)
2383
+ --private-key=VALUE OAuth JWT RSA private key PEM value (prefix file path with @file:)
2384
+ --passphrase=VALUE RSA private key passphrase
2418
2385
 
2419
2386
 
2420
2387
  COMMAND: cos
2421
2388
  SUBCOMMANDS: node
2422
2389
  OPTIONS:
2423
- --bucket=VALUE IBM Cloud Object Storage bucket name
2424
- --endpoint=VALUE storage endpoint url
2425
- --apikey=VALUE storage API key
2426
- --crn=VALUE ressource instance id
2390
+ --bucket=VALUE Bucket name
2391
+ --endpoint=VALUE Storage endpoint url
2392
+ --apikey=VALUE Storage API key
2393
+ --crn=VALUE Ressource instance id
2427
2394
  --service-credentials=VALUE IBM Cloud service credentials (Hash)
2428
- --region=VALUE IBM Cloud Object storage region
2395
+ --region=VALUE Storage region
2396
+ --identity=VALUE Authentication url (https://iam.cloud.ibm.com/identity)
2429
2397
 
2430
2398
 
2431
2399
  COMMAND: faspex
@@ -2462,9 +2430,9 @@ OPTIONS:
2462
2430
  --file-access=ENUM how to read and write files in repository: [local], remote
2463
2431
  --max-size=VALUE maximum size (in bytes) of preview file
2464
2432
  --thumb-vid-scale=VALUE png: video: size (ffmpeg scale argument)
2465
- --thumb-vid-fraction=VALUE png: video: position of snapshot
2433
+ --thumb-vid-fraction=VALUE png: video: time percent position of snapshot
2466
2434
  --thumb-img-size=VALUE png: non-video: height (and width)
2467
- --thumb-text-font=VALUE png: plaintext: font to render text with image magick convert, list with: identify -list font
2435
+ --thumb-text-font=VALUE png: plaintext: font to render text with imagemagick convert (identify -list font)
2468
2436
  --video-conversion=ENUM mp4: method for preview generation: [reencode], blend, clips
2469
2437
  --video-png-conv=ENUM mp4: method for thumbnail generation: [fixed], animated
2470
2438
  --video-start-sec=VALUE mp4: start offset (seconds) of video preview
@@ -2495,7 +2463,8 @@ OPTIONS:
2495
2463
  --client-id=VALUE OAuth API client identifier in application
2496
2464
  --client-secret=VALUE OAuth API client passcode
2497
2465
  --redirect-uri=VALUE OAuth API client redirect URI
2498
- --private-key=VALUE OAuth JWT RSA private key PEM value (prefix file path with @val:@file:)
2466
+ --private-key=VALUE OAuth JWT RSA private key PEM value (prefix file path with @file:)
2467
+ --passphrase=VALUE RSA private key passphrase
2499
2468
  --workspace=VALUE name of workspace
2500
2469
  --name=VALUE resource name
2501
2470
  --path=VALUE file or folder path
@@ -2505,6 +2474,7 @@ OPTIONS:
2505
2474
  --scope=VALUE OAuth scope for AoC API calls
2506
2475
  --bulk=ENUM bulk operation: yes, [no]
2507
2476
  --default-ports=ENUM use standard FASP ports or get from node api: yes, [no]
2477
+ --validate-metadata=ENUM validate shared inbox metadata: yes, [no]
2508
2478
 
2509
2479
 
2510
2480
  COMMAND: server
@@ -2542,7 +2512,7 @@ It is recommended to use the wizard to set it up, but manual configuration is al
2542
2512
 
2543
2513
  `ascli` provides a configuration wizard. Here is a sample invocation :
2544
2514
 
2545
- ```bash
2515
+ ```text
2546
2516
  ascli config wizard
2547
2517
  option: url> https://myorg.ibmaspera.com
2548
2518
  Detected: Aspera on Cloud
@@ -2646,7 +2616,7 @@ Note: Default `auth` method is `web` and default `redirect_uri` is `http://local
2646
2616
  For a Browser-less, Private Key-based authentication, use the following steps.
2647
2617
 
2648
2618
  In order to use JWT for Aspera on Cloud API client authentication,
2649
- a [private/public key pair](#private_key) must be used (without passphrase)
2619
+ a [private/public key pair](#private_key) must be used.
2650
2620
 
2651
2621
  ##### API Client JWT activation
2652
2622
 
@@ -2654,7 +2624,7 @@ If you are not using the built-in client_id and secret, JWT needs to be authoriz
2654
2624
 
2655
2625
  * Graphically
2656
2626
 
2657
- * Open a web browser, log to your instance: https://myorg.ibmaspera.com/
2627
+ * Open a web browser, log to your instance: `https://myorg.ibmaspera.com/`
2658
2628
  * Go to Apps&rarr;Admin&rarr;Organization&rarr;Integrations
2659
2629
  * Click on the previously created application
2660
2630
  * select tab : "JSON Web Token Auth"
@@ -2691,7 +2661,7 @@ The public key must be assigned to your user. This can be done in two manners:
2691
2661
 
2692
2662
  Open the previously generated public key located here: `$HOME/.aspera/ascli/my_private_key.pub`
2693
2663
 
2694
- * Open a web browser, log to your instance: https://myorg.ibmaspera.com/
2664
+ * Open a web browser, log to your instance: `https://myorg.ibmaspera.com/`
2695
2665
  * Click on the user's icon (top right)
2696
2666
  * Select "Account Settings"
2697
2667
  * Paste the *Public Key* in the "Public Key" section
@@ -2753,6 +2723,27 @@ Current Workspace: Default Workspace (default)
2753
2723
  empty
2754
2724
  ```
2755
2725
 
2726
+ ### Calling AoC APIs from command line
2727
+
2728
+ The command `ascli aoc bearer` can be used to generate an OAuth token suitable to call any AoC API (use the `scope` option to change the scope, default is `user:all`).
2729
+ This can be useful when a command is not yet available.
2730
+
2731
+ Example:
2732
+
2733
+ ```bash
2734
+ curl -s -H "Authorization: $(ascli aoc bearer_token)" 'https://api.ibmaspera.com/api/v1/group_memberships?embed[]=dropbox&embed[]=workspace'|jq -r '.[]|(.workspace.name + " -> " + .dropbox.name)'
2735
+ ```
2736
+
2737
+ It is also possible to get the bearer token for node, as user or as admin using:
2738
+
2739
+ ```bash
2740
+ ascli aoc files bearer_token_node /
2741
+ ```
2742
+
2743
+ ```bash
2744
+ ascli aoc admin res node v4 1234 --secret=_ak_secret_here_ bearer_token_node /
2745
+ ```
2746
+
2756
2747
  ### Administration
2757
2748
 
2758
2749
  The `admin` command allows several administrative tasks (and require admin privilege).
@@ -2825,6 +2816,50 @@ To execute an action on a specific resource, select it using one of those method
2825
2816
  * provide option `id` : `aoc admin res node show --id=123`
2826
2817
  * provide option `name` : `aoc admin res node show --name=abc`
2827
2818
 
2819
+ #### <a id="res_create"></a>Creating a resource
2820
+
2821
+ New resources (users, groups, workspaces, etc..) can be created using a command like:
2822
+
2823
+ ```bash
2824
+ ascli aoc admin res create <resource type> @json:'{<...parameters...>}'
2825
+ ```
2826
+
2827
+ Some of the API endpoints are described [here](https://developer.ibm.com/apis/catalog?search=%22aspera%20on%20cloud%20api%22). Sadly, not all.
2828
+
2829
+ Nevertheless, it is possible to guess the structure of the creation value by simply dumping an existing resource, and use the same parameters for the creation.
2830
+
2831
+ ```bash
2832
+ ascli aoc admin res group show 12345 --format=json
2833
+ ```
2834
+
2835
+ ```json
2836
+ {"created_at":"2018-07-24T21:46:39.000Z","description":null,"id":"12345","manager":false,"name":"A8Demo WS1","owner":false,"queued_operation_count":0,"running_operation_count":0,"stopped_operation_count":0,"updated_at":"2018-07-24T21:46:39.000Z","saml_group":false,"saml_group_dn":null,"system_group":true,"system_group_type":"workspace_members"}
2837
+ ```
2838
+
2839
+ Remove the parameters that are either obviously added by the system: `id`, `created_at`, `updated_at` or optional.
2840
+
2841
+ And then craft your command:
2842
+
2843
+ ```bash
2844
+ ascli aoc admin res group create @json:'{"description":"test to delete","name":"test 1 to delete","saml_group":false}'
2845
+ ```
2846
+
2847
+ If the command returns an error, example:
2848
+
2849
+ ```output
2850
+ +----+-----------------------------------------------------------------------------------+
2851
+ | id | status |
2852
+ +----+-----------------------------------------------------------------------------------+
2853
+ | | found unpermitted parameters: :manager, :owner, :system_group, :system_group_type |
2854
+ | | code: unpermitted_parameters |
2855
+ | | request_id: b0f45d5b-c00a-4711-acef-72b633f8a6ea |
2856
+ | | api.ibmaspera.com 422 Unprocessable Entity |
2857
+ +----+-----------------------------------------------------------------------------------+```
2858
+
2859
+ Well, remove the offending parameters and try again.
2860
+
2861
+ Note that some properties that are shown in the web UI, such as membership, are not listed directly in the resource, but instead another resource is created to link a user and its group: `group_membership`
2862
+
2828
2863
  #### Access Key secrets
2829
2864
 
2830
2865
  In order to access some administrative actions on "nodes" (in fact, access keys), the associated secret is required.
@@ -3085,6 +3120,44 @@ ascli aoc admin res user list --fields=email --query=@json:'{"q":"last_login_at:
3085
3120
  ascli aoc admin res user list --fields=email --select=@json:'{"member_of_any_workspace":false}'
3086
3121
  ```
3087
3122
 
3123
+ #### Example: create a group, add to workspace and add user to group
3124
+
3125
+ * Create the group and take note of `id`
3126
+
3127
+ ```bash
3128
+ ascli aoc admin res group create @json:'{"name":"group 1","description":"my super group"}'
3129
+ ```
3130
+
3131
+ Group: `11111`
3132
+
3133
+ * Get the workspace id
3134
+
3135
+ ```bash
3136
+ ascli aoc admin res workspace list --query=@json:'{"q":"myworkspace"}' --fields=id --format=csv --display=data
3137
+ ```
3138
+
3139
+ Workspace: 22222
3140
+
3141
+ * Add group to workspace
3142
+
3143
+ ```bash
3144
+ ascli aoc admin res workspace_membership create @json:'{"workspace_id":22222,"member_type":"user","member_id":11111}'
3145
+ ```
3146
+
3147
+ * Get a user's id
3148
+
3149
+ ```bash
3150
+ ascli aoc admin res user list --query=@json:'{"q":"manu.macron@example.com"}' --fields=id --format=csv --display=data
3151
+ ```
3152
+
3153
+ User: 33333
3154
+
3155
+ * Add user to group
3156
+
3157
+ ```bash
3158
+ ascli aoc admin res group_membership create @json:'{"group_id":11111,"member_type":"user","member_id":33333}'
3159
+ ```
3160
+
3088
3161
  #### Example: Perform a multi Gbps transfer between two remote shared folders
3089
3162
 
3090
3163
  In this example, a user has access to a workspace where two shared folders are located on different sites, e.g. different cloud regions.
@@ -3373,6 +3446,96 @@ cat my_file_list.txt|while read path;do echo ascli aoc admin res node --name='my
3373
3446
  cat my_file_list.txt | ascli aoc admin res node --name='my node name' --secret='_secret_here_' v3 delete @lines:@stdin:
3374
3447
  ```
3375
3448
 
3449
+ ### AoC sample commands
3450
+
3451
+ ```bash
3452
+ aoc -N remind --username=my_aoc_user_email
3453
+ aoc -N servers
3454
+ aoc admin analytics transfers --query=@json:'{"status":"completed","direction":"receive"}' --notif-to=my_recipient_email --notif-template=@ruby:'%Q{From: <%=from_name%> <<%=from_email%>>\nTo: <<%=to%>>\nSubject: <%=ev["files_completed"]%> files received\n\n<%=ev.to_yaml%>}'
3455
+ aoc admin ats access_key create --cloud=aws --region=my_aws_bucket_region --params=@json:'{"id":"ak_aws","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_aws_bucket_name","credentials":{"access_key_id":"my_aws_bucket_key","secret_access_key":"my_aws_bucket_secret"},"path":"/"}}'
3456
+ aoc admin ats access_key create --cloud=softlayer --region=my_icos_bucket_region --params=@json:'{"id":"akibmcloud","secret":"somesecret","name":"my test key","storage":{"type":"ibm-s3","bucket":"my_icos_bucket_name","credentials":{"access_key_id":"my_icos_bucket_key","secret_access_key":"my_icos_bucket_secret"},"path":"/"}}'
3457
+ aoc admin ats access_key delete akibmcloud
3458
+ aoc admin ats access_key list --fields=name,id
3459
+ aoc admin ats access_key node akibmcloud --secret=somesecret browse /
3460
+ aoc admin ats cluster clouds
3461
+ aoc admin ats cluster list
3462
+ aoc admin ats cluster show --cloud=aws --region=eu-west-1
3463
+ aoc admin ats cluster show 1f412ae7-869a-445c-9c05-02ad16813be2
3464
+ aoc admin res application list
3465
+ aoc admin res client list
3466
+ aoc admin res client_access_key list
3467
+ aoc admin res client_registration_token create @json:'{"data":{"name":"test_client_reg1","client_subject_scopes":["alee","aejd"],"client_subject_enabled":true}}'
3468
+ aoc admin res client_registration_token delete my_clt_reg_id
3469
+ aoc admin res client_registration_token list
3470
+ aoc admin res contact list
3471
+ aoc admin res dropbox list
3472
+ aoc admin res dropbox_membership list
3473
+ aoc admin res group list
3474
+ aoc admin res kms_profile list
3475
+ aoc admin res node list
3476
+ aoc admin res operation list
3477
+ aoc admin res organization show
3478
+ aoc admin res package list --http-options=@json:'{"read_timeout":120.0}'
3479
+ aoc admin res saml_configuration list
3480
+ aoc admin res self show
3481
+ aoc admin res short_link list
3482
+ aoc admin res user list
3483
+ aoc admin res workspace_membership list
3484
+ aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret v3 access_key create --value=@json:'{"id":"testsub1","storage":{"path":"/folder1"}}'
3485
+ aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret v3 events
3486
+ aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret v4 browse /
3487
+ aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret v4 delete /folder1
3488
+ aoc admin resource node --name=my_aoc_ak_name --secret=my_aoc_ak_secret v4 mkdir /folder1
3489
+ aoc admin resource node v3 name my_aoc_ak_name --secret=my_aoc_ak_secret access_key delete testsub1
3490
+ aoc admin resource workspace list
3491
+ aoc admin resource workspace_membership list --fields=ALL --query=@json:'{"page":1,"per_page":50,"embed":"member","inherited":false,"workspace_id":11363,"sort":"name"}'
3492
+ aoc automation workflow action my_wf_id create --value=@json:'{"name":"toto"}'
3493
+ aoc automation workflow create --value=@json:'{"name":"test_workflow"}'
3494
+ aoc automation workflow delete my_wf_id
3495
+ aoc automation workflow list
3496
+ aoc automation workflow list --select=@json:'{"name":"test_workflow"}' --fields=id --format=csv --display=data
3497
+ aoc automation workflow list --value=@json:'{"show_org_workflows":"true"}' --scope=admin:all
3498
+ aoc bearer_token --display=data --scope=user:all
3499
+ aoc faspex
3500
+ aoc files bearer /
3501
+ aoc files bearer_token_node / --cache-tokens=no
3502
+ aoc files browse /
3503
+ aoc files browse / -N --link=my_aoc_publink_folder
3504
+ aoc files delete /testsrc
3505
+ aoc files download --transfer=connect /200KB.1
3506
+ aoc files file show my_file_id
3507
+ aoc files find / --value='\.partial$'
3508
+ aoc files http_node_download --to-folder=. /200KB.1
3509
+ aoc files mkdir /testsrc
3510
+ aoc files rename /somefolder testdst
3511
+ aoc files short_link create --to-folder=/testdst --value=private
3512
+ aoc files short_link create --to-folder=/testdst --value=public
3513
+ aoc files short_link list --value=@json:'{"purpose":"shared_folder_auth_link"}'
3514
+ aoc files transfer --from-folder=/testsrc --to-folder=/testdst testfile.bin
3515
+ aoc files upload --to-folder=/testsrc testfile.bin
3516
+ aoc files upload -N --to-folder=/ testfile.bin --link=my_aoc_publink_folder
3517
+ aoc files upload Test.pdf --transfer=node --transfer-info=@json:@stdin:
3518
+ aoc files v3 info
3519
+ aoc org -N --link=my_aoc_publink_recv_from_aocuser
3520
+ aoc organization
3521
+ aoc packages list
3522
+ aoc packages list --query=@json:'{"dropbox_name":"my_aoc_shbx_name","sort":"-received_at","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false}'
3523
+ aoc packages recv "my_package_id" --to-folder=.
3524
+ aoc packages recv ALL --to-folder=. --once-only=yes --lock-port=12345
3525
+ aoc packages send --value=@json:'{"name":"Important files delivery","recipients":["my_email_external_user"]}' --new-user-option=@json:'{"package_contact":true}' testfile.bin
3526
+ aoc packages send --value=@json:'{"name":"Important files delivery","recipients":["my_email_internal_user"],"note":"my note"}' testfile.bin
3527
+ aoc packages send --workspace="my_aoc_shbx_ws" --value=@json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' testfile.bin
3528
+ aoc packages send --workspace="my_aoc_shbx_ws" --value=@json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"],"metadata":{"Project Id":"456","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' testfile.bin
3529
+ aoc packages send --workspace="my_aoc_shbx_ws" --value=@json:'{"name":"Important files delivery","recipients":["my_aoc_shbx_name"]}' testfile.bin
3530
+ aoc packages send -N --value=@json:'{"name":"Important files delivery"}' testfile.bin --link=my_aoc_publink_send_aoc_user --password=my_aoc_publink_send_use_pass
3531
+ aoc packages send -N --value=@json:'{"name":"Important files delivery"}' testfile.bin --link=my_aoc_publink_send_shd_inbox
3532
+ aoc packages shared_inboxes list
3533
+ aoc user profile modify @json:'{"name":"dummy change"}'
3534
+ aoc user profile show
3535
+ aoc user workspaces current
3536
+ aoc user workspaces list
3537
+ ```
3538
+
3376
3539
  ## <a id="ats"></a>Plugin: Aspera Transfer Service
3377
3540
 
3378
3541
  ATS is usable either :
@@ -3487,26 +3650,80 @@ for k in $(ascli ats access_key list --field=id --format=csv);do ascli ats acces
3487
3650
 
3488
3651
  The parameters provided to ATS for access key creation are the ones of [ATS API](https://developer.ibm.com/apis/catalog?search=%22aspera%20ats%22) for the `POST /access_keys` endpoint.
3489
3652
 
3653
+ ### ATS sample commands
3654
+
3655
+ ```bash
3656
+ ats access_key cluster akibmcloud --secret=somesecret
3657
+ ats access_key create --cloud=aws --region=my_aws_bucket_region --params=@json:'{"id":"ak_aws","name":"my test key AWS","storage":{"type":"aws_s3","bucket":"my_aws_bucket_name","credentials":{"access_key_id":"my_aws_bucket_key","secret_access_key":"my_aws_bucket_secret"},"path":"/"}}'
3658
+ ats access_key create --cloud=softlayer --region=my_icos_bucket_region --params=@json:'{"id":"akibmcloud","secret":"somesecret","name":"my test key","storage":{"type":"ibm-s3","bucket":"my_icos_bucket_name","credentials":{"access_key_id":"my_icos_bucket_key","secret_access_key":"my_icos_bucket_secret"},"path":"/"}}'
3659
+ ats access_key delete ak_aws
3660
+ ats access_key delete akibmcloud
3661
+ ats access_key list --fields=name,id
3662
+ ats access_key node akibmcloud browse / --secret=somesecret
3663
+ ats api_key create
3664
+ ats api_key instances
3665
+ ats api_key list
3666
+ ats cluster clouds
3667
+ ats cluster list
3668
+ ats cluster show --cloud=aws --region=eu-west-1
3669
+ ats cluster show 1f412ae7-869a-445c-9c05-02ad16813be2
3670
+ ```
3671
+
3490
3672
  ## Plugin: IBM Aspera High Speed Transfer Server (transfer)
3491
3673
 
3492
3674
  This plugin uses SSH as a session protocol (using commands `ascp` and `ascmd`) and does not use the node API.
3493
3675
  It is the legacy way of accessing an Aspera Server, often used for server to server transfers.
3494
3676
  Modern mode is to use the node API and transfer tokens.
3495
3677
 
3678
+ ### Server sample commands
3679
+
3680
+ ```bash
3681
+ server -N -Ptst_hstsfaspex_ssh -Plocal_user configurator get_node_data
3682
+ server -N -Ptst_hstsfaspex_ssh -Plocal_user ctl all:status
3683
+ server -N -Ptst_hstsfaspex_ssh -Plocal_user health app_services --format=nagios
3684
+ server -N -Ptst_hstsfaspex_ssh -Plocal_user health asctlstatus --format=nagios --cmd-prefix='sudo '
3685
+ server -N -Ptst_hstsfaspex_ssh -Plocal_user nodeadmin -- -l
3686
+ server -N -Ptst_server_bykey -Plocal_user br /
3687
+ server browse /
3688
+ server browse folder_1/target_hot
3689
+ server cp NEW_SERVER_FOLDER/testfile.bin folder_1/200KB.2
3690
+ server delete NEW_SERVER_FOLDER
3691
+ server delete folder_1/target_hot
3692
+ server delete folder_1/to.delete
3693
+ server df
3694
+ server download NEW_SERVER_FOLDER/testfile.bin --to-folder=. --transfer-info=@json:'{"wss":false,"resume":{"iter_max":1}}'
3695
+ server download NEW_SERVER_FOLDER/testfile.bin --to-folder=folder_1 --transfer=node
3696
+ server du /
3697
+ server health transfer --to-folder=folder_1 --format=nagios
3698
+ server info
3699
+ server md5sum NEW_SERVER_FOLDER/testfile.bin
3700
+ server mkdir NEW_SERVER_FOLDER --logger=stdout
3701
+ server mkdir folder_1/target_hot
3702
+ server mv folder_1/200KB.2 folder_1/to.delete
3703
+ server upload --sources=@ts --ts=@json:'{"paths":[{"source":"testfile.bin","destination":"NEW_SERVER_FOLDER/othername"}]}'
3704
+ server upload --src-type=pair --sources=@json:'["testfile.bin","NEW_SERVER_FOLDER/othername"]'
3705
+ server upload --src-type=pair testfile.bin NEW_SERVER_FOLDER/othername --notif-to=my_recipient_email
3706
+ server upload --src-type=pair testfile.bin folder_1/with_options --ts=@json:'{"cipher":"aes-192-gcm","content_protection":"encrypt","content_protection_password":"_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"}'
3707
+ server upload --to-folder=folder_1/target_hot --lock-port=12345 --ts=@json:'{"EX_ascp_args":["--remove-after-transfer","--remove-empty-directories","--exclude-newer-than=-8","--src-base","source_hot"]}' source_hot
3708
+ server upload testfile.bin --to-folder=NEW_SERVER_FOLDER --ts=@json:'{"multi_session":3,"multi_session_threshold":1,"resume_policy":"none","target_rate_kbps":1500}' --transfer-info=@json:'{"spawn_delay_sec":2.5}' --progress=multi
3709
+ ```
3710
+
3496
3711
  ### Authentication
3497
3712
 
3498
- Both password and SSH keys auth are supported.
3713
+ If SSH is the session control protocol (i.e. not WSS), then following session authentication methods are supported:
3714
+
3715
+ * SSH password
3716
+ * SSH keys (Multiple SSH key paths can be provided.)
3499
3717
 
3500
3718
  If username is not provided, the default transfer user `xfer` is used.
3501
3719
 
3502
- If no SSH password or key is provided, and a token is provided in transfer spec, then standard bypass keys are used:
3720
+ If no SSH password or key is provided and a transfer token is provided in transfer spec (option `ts`), then standard SSH bypass keys are used. Example:
3503
3721
 
3504
3722
  ```javascript
3505
3723
  ascli server --url=ssh://... --ts=@json:'{"token":"Basic abc123"}'
3506
3724
  ```
3507
3725
 
3508
- Multiple SSH key paths can be provided.
3509
- The value of the parameter `ssh_keys` can be a single value or an array.
3726
+ The value of the option `ssh_keys` can be a single value or an array.
3510
3727
  Each value is a path to a private key and is expanded (`~` is replaced with the user's home folder).
3511
3728
 
3512
3729
  Examples:
@@ -3652,7 +3869,7 @@ updated
3652
3869
 
3653
3870
  Scenario: Access to a "Shares on Demand" (SHOD) server on AWS is provided by a partner.
3654
3871
  We need to transfer files from this third party SHOD instance into our Azure BLOB storage.
3655
- Simply create an "Aspera Transfer Service" instance (https://ts.asperasoft.com), which provides access to the node API.
3872
+ Simply create an "Aspera Transfer Service" instance, which provides access to the node API.
3656
3873
  Then create a configuration for the "SHOD" instance in the configuration file: in section "shares", a configuration named: awsshod.
3657
3874
  Create another configuration for the Azure ATS instance: in section "node", named azureats.
3658
3875
  Then execute the following command:
@@ -3669,6 +3886,47 @@ This will get transfer information from the SHOD instance and tell the Azure ATS
3669
3886
  ascli node access_key create --value=@json:'{"id":"eudemo-sedemo","secret":"mystrongsecret","storage":{"type":"local","path":"/data/asperafiles"}}'
3670
3887
  ```
3671
3888
 
3889
+ ### Node sample commands
3890
+
3891
+ ```bash
3892
+ node -N -Ptst_node_preview access_key create --value=@json:'{"id":"aoc_1","storage":{"type":"local","path":"/"}}'
3893
+ node -N -Ptst_node_preview access_key delete aoc_1
3894
+ node access_key do my_aoc_ak_name br
3895
+ node access_key list
3896
+ node api_details
3897
+ node async bandwidth 1
3898
+ node async counters 1
3899
+ node async files 1
3900
+ node async list
3901
+ node async show 1
3902
+ node async show ALL
3903
+ node basic_token
3904
+ node browse / -r
3905
+ node delete /todelete
3906
+ node delete @list:,/todelete,/tdlink,/delfile
3907
+ node delete folder_1/10MB.1
3908
+ node delete testfile.bin
3909
+ node download testfile.bin --to-folder=.
3910
+ node download testfile.bin --to-folder=. --token-type=hybrid
3911
+ node health
3912
+ node info --fpac='function FindProxyForURL(url,host){return "DIRECT"}'
3913
+ node license
3914
+ node mkdir /todelete
3915
+ node mkfile /delfile1 "hello world"
3916
+ node mklink /todelete /tdlink
3917
+ node rename / delfile1 delfile
3918
+ node search / --value=@json:'{"sort":"mtime"}'
3919
+ node service create @json:'{"id":"service1","type":"WATCHD","run_as":{"user":"user1"}}'
3920
+ node service delete service1
3921
+ node service list
3922
+ node space /
3923
+ node transfer list --value=@json:'{"active_only":true}'
3924
+ node upload --to-folder="folder_1" --sources=@ts --ts=@json:'{"paths":[{"source":"/aspera-test-dir-small/10MB.1"}],"precalculate_job_size":true}' --transfer=node --transfer-info=@json:'{"url":"my_node_url","username":"my_node_user","password":"my_node_pass"}'
3925
+ node upload --username=my_aoc_ak_name --password=my_aoc_ak_secret testfile.bin --token-type=basic
3926
+ node upload testfile.bin --to-folder=folder_1 --ts=@json:'{"target_rate_cap_kbps":10000}'
3927
+ node upload testfile.bin --to-folder=folder_1 --ts=@json:'{"target_rate_cap_kbps":10000}' --token-type=hybrid
3928
+ ```
3929
+
3672
3930
  ## Plugin: IBM Aspera Faspex5
3673
3931
 
3674
3932
  This is currently in beta, limited operations are supported.
@@ -3689,47 +3947,47 @@ The API is listed in [Faspex 5 API Reference](https://developer.ibm.com/apis/cat
3689
3947
 
3690
3948
  This is the preferred method to use.
3691
3949
 
3692
- For JWT, create an API client in Faspex with JWT support:
3950
+ For `jwt`, create an API client in Faspex with JWT support:
3693
3951
 
3694
- * Identify a private key, if you don't have any refer to section [Private Key](#private_key)
3952
+ * Select a private key file: if you don't have any refer to section [Private Key](#private_key)
3695
3953
  * Navigate to the web UI: Admin &rarr; Configurations &rarr; API Clients &rarr; Create
3696
3954
  * Activate JWT
3697
3955
  * Paste public key in the appropriate section
3698
3956
  * Click on Create Button
3699
- * Take note of Client Id and Secret
3957
+ * Take note of Client Id (and Client Secret, but not used in current version)
3700
3958
 
3701
- Then use options:
3959
+ Then use these options:
3702
3960
 
3703
3961
  ```text
3704
3962
  --auth=jwt
3705
3963
  --client-id=xxx
3706
3964
  --client-secret=xxx
3707
3965
  --username=xxx
3708
- --password=xxx
3709
- --private-key=@file:../path/to/key.pem
3966
+ --private-key=@file:.../path/to/key.pem
3710
3967
  ```
3711
3968
 
3712
3969
  #### Faspex 5 using web browser
3713
3970
 
3714
- For web method, create an API client in Faspex without JWT:
3971
+ For `web` method, create an API client in Faspex without JWT:
3715
3972
 
3716
3973
  * Navigate to the web UI: Admin &rarr; Configurations &rarr; API Clients &rarr; Create
3717
3974
  * Do not Activate JWT
3718
- * enter https://127.0.0.1:8888 in the redirect URI
3975
+ * enter `https://127.0.0.1:8888` in the redirect URI
3719
3976
  * Click on Create Button
3720
- * Take note of Client Id
3977
+ * Take note of Client Id (and Client Secret, but not used in current version)
3721
3978
 
3722
3979
  Then use options:
3723
3980
 
3724
3981
  ```text
3725
3982
  --auth=web
3726
3983
  --client-id=xxx
3984
+ --client-secret=xxx
3727
3985
  --redirect-uri=https://127.0.0.1:8888
3728
3986
  ```
3729
3987
 
3730
3988
  #### Faspex 5 using bootstrap
3731
3989
 
3732
- For boot method: (will be removed in future)
3990
+ For `boot` method: (will be removed in future)
3733
3991
 
3734
3992
  * open a browser
3735
3993
  * start developer mode
@@ -3742,6 +4000,44 @@ Use it as password and use `--auth=boot`.
3742
4000
  ascli conf id f5boot update --url=https://localhost/aspera/faspex --auth=boot --password=ABC.DEF.GHI...
3743
4001
  ```
3744
4002
 
4003
+ ### Faspex 5 sample commands
4004
+
4005
+ ```bash
4006
+ faspex5 admin res accounts list
4007
+ faspex5 admin res contacts list
4008
+ faspex5 admin res jobs list
4009
+ faspex5 admin res node list --value=@json:'{"type":"received","subtype":"mypackages"}'
4010
+ faspex5 admin res oauth_clients list
4011
+ faspex5 admin res registrations list
4012
+ faspex5 admin res saml_configs list
4013
+ faspex5 admin res shared_inboxes list
4014
+ faspex5 admin res workgroups list
4015
+ faspex5 health
4016
+ faspex5 package list --value=@json:'{"mailbox":"inbox","state":["released"]}'
4017
+ faspex5 package receive "my_package_id" --to-folder=. --ts=@json:'{"content_protection_password":"abc123_yo"}'
4018
+ faspex5 package send --value=@json:'{"title":"test title","recipients":[{"name":"my_f5_user"}]}' testfile.bin --ts=@json:'{"content_protection_password":"_content_prot_here_"}'
4019
+ ```
4020
+
4021
+ ### Faspex 5 other examples
4022
+
4023
+ * List all shared inboxes
4024
+
4025
+ ```json
4026
+ ascli faspex5 admin res shared list --value=@json:'{"all":true}' --fields=id,name
4027
+ ```
4028
+
4029
+ * Create Metadata profile
4030
+
4031
+ ```json
4032
+ ascli faspex5 admin res metadata_profiles create --value=@json:'{"name":"the profile","default":false,"title":{"max_length":200,"illegal_chars":[]},"note":{"max_length":400,"illegal_chars":[],"enabled":false},"fields":[{"ordering":0,"name":"field1","type":"text_area","require":true,"illegal_chars":[],"max_length":100},{"ordering":1,"name":"fff2","type":"option_list","require":false,"choices":["opt1","opt2"]}]}'
4033
+ ```
4034
+
4035
+ * Create a Shared inbox with specific metadata profile
4036
+
4037
+ ```json
4038
+ ascli faspex5 admin res shared create --value=@json:'{"name":"the shared inbox","metadata_profile_id":1}'
4039
+ ```
4040
+
3745
4041
  ## Plugin: IBM Aspera Faspex (4.x)
3746
4042
 
3747
4043
  Notes:
@@ -3888,10 +4184,90 @@ cargo client, or drive. Refer to the [same section](#aoccargo) in the Aspera on
3888
4184
  ascli faspex packages recv --id=ALL --once-only=yes --lock-port=12345
3889
4185
  ```
3890
4186
 
4187
+ ### Faspex 4 sample commands
4188
+
4189
+ ```bash
4190
+ faspex address_book
4191
+ faspex dropbox list --recipient="*my_faspex_dbx"
4192
+ faspex dropbox list --recipient="*my_faspex_wkg"
4193
+ faspex health
4194
+ faspex login_methods
4195
+ faspex me
4196
+ faspex package list
4197
+ faspex package list --box=sent --fields=package_id --format=csv --display=data --query=@json:'{"max":1}'
4198
+ faspex package list --fields=package_id --format=csv --display=data --query=@json:'{"max":1}'
4199
+ faspex package list --recipient="*my_faspex_dbx" --format=csv --fields=package_id --query=@json:'{"max":1}'
4200
+ faspex package list --recipient="*my_faspex_wkg" --format=csv --fields=package_id --query=@json:'{"max":1}'
4201
+ faspex package recv "my_package_id" --to-folder=.
4202
+ faspex package recv "my_package_id" --to-folder=. --box=sent
4203
+ faspex package recv --to-folder=. --link="my_faspex_publink_recv_from_fxuser"
4204
+ faspex package recv ALL --to-folder=. --once-only=yes
4205
+ faspex package recv my_pkgid --recipient="*my_faspex_dbx" --to-folder=.
4206
+ faspex package recv my_pkgid --recipient="*my_faspex_wkg" --to-folder=.
4207
+ faspex package send --delivery-info=@json:'{"title":"Important files delivery","recipients":["*my_faspex_dbx"]}' testfile.bin
4208
+ faspex package send --delivery-info=@json:'{"title":"Important files delivery","recipients":["*my_faspex_wkg"]}' testfile.bin
4209
+ faspex package send --delivery-info=@json:'{"title":"Important files delivery","recipients":["my_email_internal_user","my_faspex_username"]}' testfile.bin
4210
+ faspex package send --link="my_faspex_publink_send_to_dropbox" --delivery-info=@json:'{"title":"Important files delivery"}' testfile.bin
4211
+ faspex package send --link="my_faspex_publink_send_to_fxuser" --delivery-info=@json:'{"title":"Important files delivery"}' testfile.bin
4212
+ faspex source list
4213
+ faspex source name "my_source_name" info
4214
+ faspex source name "my_source_name" node br /
4215
+ faspex v4 dmembership list
4216
+ faspex v4 dropbox list
4217
+ faspex v4 metadata_profile list
4218
+ faspex v4 user list
4219
+ faspex v4 wmembership list
4220
+ faspex v4 workgroup list
4221
+ ```
4222
+
3891
4223
  ## Plugin: IBM Aspera Shares
3892
4224
 
3893
4225
  Aspera Shares supports the "node API" for the file transfer part. (Shares 1 and 2)
3894
4226
 
4227
+ ### Shares 1 sample commands
4228
+
4229
+ ```bash
4230
+ shares admin share list
4231
+ shares admin share user_permissions 9
4232
+ shares admin user app_authorizations 1
4233
+ shares admin user list
4234
+ shares admin user share_permissions 1
4235
+ shares repository browse /
4236
+ shares repository delete my_shares_upload/testfile.bin
4237
+ shares repository download --to-folder=. my_shares_upload/testfile.bin
4238
+ shares repository download --to-folder=. my_shares_upload/testfile.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://my_http_gw_fqdn/aspera/http-gwy/v1"}'
4239
+ shares repository upload --to-folder=my_shares_upload testfile.bin
4240
+ shares repository upload --to-folder=my_shares_upload testfile.bin --transfer=httpgw --transfer-info=@json:'{"url":"https://my_http_gw_fqdn/aspera/http-gwy/v1"}'
4241
+ ```
4242
+
4243
+ ## Plugin: Console
4244
+
4245
+ ### Console sample commands
4246
+
4247
+ ```bash
4248
+ console transfer current list
4249
+ console transfer smart list
4250
+ console transfer smart sub my_job_id @json:'{"source":{"paths":["my_file_name"]},"source_type":"user_selected"}'
4251
+ ```
4252
+
4253
+ ## Plugin: Orchestrator
4254
+
4255
+ ### Orchestrator sample commands
4256
+
4257
+ ```bash
4258
+ orchestrator info
4259
+ orchestrator plugins
4260
+ orchestrator processes
4261
+ orchestrator workflow details my_orch_workflow_id
4262
+ orchestrator workflow export my_orch_workflow_id
4263
+ orchestrator workflow inputs my_orch_workflow_id
4264
+ orchestrator workflow list
4265
+ orchestrator workflow start my_orch_workflow_id --params=@json:'{"Param":"world !"}'
4266
+ orchestrator workflow start my_orch_workflow_id --params=@json:'{"Param":"world !"}' --result=ResultStep:Complete_status_message
4267
+ orchestrator workflow status ALL
4268
+ orchestrator workflow status my_orch_workflow_id
4269
+ ```
4270
+
3895
4271
  ## Plugin: IBM Cloud Object Storage
3896
4272
 
3897
4273
  The IBM Cloud Object Storage provides the possibility to execute transfers using FASP.
@@ -3905,7 +4281,7 @@ There are two possibilities to provide credentials. If you already have the endp
3905
4281
  If you have those parameters already, then following options shall be provided:
3906
4282
 
3907
4283
  * `bucket` bucket name
3908
- * `endpoint` storage endpoint url, e.g. https://s3.hkg02.cloud-object-storage.appdomain.cloud
4284
+ * `endpoint` storage endpoint url, e.g. `https://s3.hkg02.cloud-object-storage.appdomain.cloud`
3909
4285
  * `apikey` API Key
3910
4286
  * `crn` resource instance id
3911
4287
 
@@ -3985,20 +4361,37 @@ ascli cos node upload 'faux:///sample1G?1g'
3985
4361
 
3986
4362
  Note: we generate a dummy file `sample1G` of size 2GB using the `faux` PVCL (man ascp and section above), but you can of course send a real file by specifying a real file instead.
3987
4363
 
4364
+ ### COS sample commands
4365
+
4366
+ ```bash
4367
+ cos -N --bucket=my_icos_bucket_name --endpoint=my_icos_bucket_endpoint --apikey=my_icos_bucket_apikey --crn=my_icos_resource_instance_id node info
4368
+ cos -N --bucket=my_icos_bucket_name --region=my_icos_bucket_region --service-credentials=@json:@file:service_creds.json node info
4369
+ cos node access_key show self
4370
+ cos node download testfile.bin --to-folder=.
4371
+ cos node info
4372
+ cos node upload testfile.bin
4373
+ ```
4374
+
3988
4375
  ## Plugin: IBM Aspera Sync
3989
4376
 
3990
4377
  A basic plugin to start an "async" using `ascli`.
3991
4378
  The main advantage is the possibility to start from ma configuration file, using `ascli` standard options.
3992
4379
 
4380
+ ### Sync sample commands
4381
+
4382
+ ```bash
4383
+ sync start --parameters=@json:'{"sessions":[{"name":"test","reset":true,"remote_dir":"/sync_test","local_dir":"contents","host":"my_remote_host","tcp_port":33001,"user":"my_remote_user","private_key_path":"my_local_user_key"}]}'
4384
+ ```
4385
+
3993
4386
  ## Plugin: Preview
3994
4387
 
3995
- The `preview` generates "previews" of graphical files, i.e. thumbnails (office, images, video) and video previews on storage for use primarily in the Aspera on Cloud application.
3996
- This is based on the "node API" of Aspera HSTS when using Access Keys only inside it's "storage root".
4388
+ The `preview` generates thumbnails (office, images, video) and video previews on storage for use primarily in the Aspera on Cloud application.
4389
+ It uses the **node API** of Aspera HSTS and requires use of Access Keys and it's **storage root**.
3997
4390
  Several parameters can be used to tune several aspects:
3998
4391
 
3999
- * methods for detection of new files needing generation
4000
- * methods for generation of video preview
4001
- * parameters for video handling
4392
+ * Methods for detection of new files needing generation
4393
+ * Methods for generation of video preview
4394
+ * Parameters for video handling
4002
4395
 
4003
4396
  ### Aspera Server configuration
4004
4397
 
@@ -4237,13 +4630,48 @@ The mp4 video preview file is only for category `video`
4237
4630
 
4238
4631
  File type is primarily based on file extension detected by the node API and translated info a mime type returned by the node API.
4239
4632
 
4240
- The tool can also locally detect the mime type using option `mimemagic`.
4633
+ ### mimemagic
4634
+
4635
+ By default, the Mime type used for conversion is the one returned by the node API, based on file name extension.
4636
+
4637
+ It is also possible to detect the mime type using option `mimemagic`.
4638
+ To use it, set option `mimemagic` to `yes`: `--mimemagic=yes`.
4639
+
4640
+ This requires to manually install the mimemagic gem: `gem install mimemagic`.
4241
4641
 
4242
- To use it, set option `mimemagic` to `yes`: `--mimemagic=yes`
4642
+ In this case the `preview` command will first analyze the file content using mimemagic, and if no match, will try by extension.
4243
4643
 
4244
- If not used, Mime type used for conversion is the one provided by the node API.
4644
+ If the `mimemagic` gem complains about missing mime info file:
4245
4645
 
4246
- If used, the `preview` command will first analyze the file content using mimemagic, and if no match, will try by extension.
4646
+ * any OS:
4647
+
4648
+ * Examine the error message
4649
+ * Download the file: <https://gitlab.freedesktop.org/xdg/shared-mime-info/-/raw/master/data/freedesktop.org.xml.in>
4650
+ * move and rename this file to one of the locations expected by mimemagic as specified in the error message
4651
+
4652
+ * Windows:
4653
+
4654
+ * Download the file: <https://gitlab.freedesktop.org/xdg/shared-mime-info/-/raw/master/data/freedesktop.org.xml.in>
4655
+ * Place this file in the root of Ruby (or elsewhere): `C:\RubyVV-x64\freedesktop.org.xml.in`
4656
+ * Set a global variable using `SystemPropertiesAdvanced.exe` or using `cmd` (replace `VV` with version) to the exact path of this file:
4657
+
4658
+ ```cmd
4659
+ SETX FREEDESKTOP_MIME_TYPES_PATH C:\RubyVV-x64\freedesktop.org.xml.in
4660
+ ```
4661
+
4662
+ * Close the `cmd` and restart a new one if needed to get refreshed env vars
4663
+
4664
+ * Linux:
4665
+
4666
+ ```bash
4667
+ yum install shared-mime-info
4668
+ ```
4669
+
4670
+ * macOS:
4671
+
4672
+ ```bash
4673
+ brew install shared-mime-info
4674
+ ```
4247
4675
 
4248
4676
  ### Access to original files and preview creation
4249
4677
 
@@ -4256,6 +4684,23 @@ are directly written to the storage.
4256
4684
 
4257
4685
  If the preview generator does not have access to files on the file system (it is remote, no mount, or is an object storage), then the original file is first downloaded, then the result is uploaded, use method `remote`.
4258
4686
 
4687
+ ### Preview sample commands
4688
+
4689
+ ```bash
4690
+ preview check --skip-types=office
4691
+ preview folder 1 --skip-types=office --log-level=info --file-access=remote --ts=@json:'{"target_rate_kbps":1000000}'
4692
+ preview scan --skip-types=office --log-level=info
4693
+ preview test --case=test mp4 my_file_mxf --video-conversion=blend --log-level=debug
4694
+ preview test --case=test mp4 my_file_mxf --video-conversion=clips --log-level=debug
4695
+ preview test --case=test mp4 my_file_mxf --video-conversion=reencode --log-level=debug
4696
+ preview test --case=test png my_file_dcm --log-level=debug
4697
+ preview test --case=test png my_file_docx --log-level=debug
4698
+ preview test --case=test png my_file_mxf --video-png-conv=animated --log-level=debug
4699
+ preview test --case=test png my_file_mxf --video-png-conv=fixed --log-level=debug
4700
+ preview test --case=test png my_file_pdf --log-level=debug
4701
+ preview trevents --once-only=yes --skip-types=office --log-level=info
4702
+ ```
4703
+
4259
4704
  ## SMTP for email notifications
4260
4705
 
4261
4706
  Aspera CLI can send email, for that setup SMTP configuration. This is done with option `smtp`.
@@ -4273,7 +4718,7 @@ The `smtp` option is a hash table (extended value) with the following fields:
4273
4718
  <tr><td>`from_name`</td><td>same as email</td><td>John Wayne</td><td>display name of sender</td></tr>
4274
4719
  </table>
4275
4720
 
4276
- ### Example of configuration:
4721
+ ### Example of configuration
4277
4722
 
4278
4723
  ```bash
4279
4724
  ascli config preset set smtp_google server smtp.google.com
@@ -4487,7 +4932,7 @@ Note: parameters may be saved in a [option preset](#lprt) and used with `-P`.
4487
4932
 
4488
4933
  #### Scheduling
4489
4934
 
4490
- Once `ascli` parameters are defined, run the command using the OS native scheduler, e.g. every minutes, or 5 minutes, etc... Refer to section [_Scheduling_](#_scheduling_).
4935
+ Once `ascli` parameters are defined, run the command using the OS native scheduler, e.g. every minutes, or 5 minutes, etc... Refer to section [Scheduling](#scheduling).
4491
4936
 
4492
4937
  ### Example: upload folder
4493
4938
 
@@ -4570,6 +5015,10 @@ aoc.read('self')
4570
5015
 
4571
5016
  <https://github.com/IBM/aspera-cli/blob/main/examples/aoc.rb>
4572
5017
 
5018
+ ## Changes (Release notes)
5019
+
5020
+ See <CHANGELOG.md>
5021
+
4573
5022
  ## History
4574
5023
 
4575
5024
  When I joined Aspera, there was only one CLI: `ascp`, which is the implementation of the FASP protocol, but there was no CLI to access the various existing products (Server, Faspex, Shares). Once, Serban (founder) provided a shell script able to create a Faspex Package using Faspex REST API. Since all products relate to file transfers using FASP (ascp), I thought it would be interesting to have a unified CLI for transfers using FASP. Also, because there was already the `ascp` tool, I thought of an extended tool : `eascp.pl` which was accepting all `ascp` options for transfer but was also able to transfer to Faspex and Shares (destination was a kind of URI for the applications).
@@ -4586,466 +5035,9 @@ So, it evolved into `ascli`:
4586
5035
  * supports transfers with multiple [Transfer Agents](#agents), that&apos;s why transfer parameters moved from ascp command line to [*transfer-spec*](#transferspec) (more reliable , more standard)
4587
5036
  * `ruby` is consistent with other Aspera products
4588
5037
 
4589
- ## Changes (Release notes)
4590
-
4591
- * 4.7.0
4592
-
4593
- * new: option to specify font used to generate image of text file in `preview`
4594
- * new: #66 improvement for content protection (support standard transfer spec options for direct agent)
4595
- * new: option `fpac` is now applicable to all ruby based HTTP connections, i.e. API calls
4596
- * new: option `show_secrets` to reveal secrets in command output
4597
- * new: added and updated commands for Faspex 5
4598
- * new: option `cache_tokens`
4599
- * new: Faspex4 dropbox packages can now be received by id
4600
- * change: (break) command `conf gem path` replaces `conf gem_path`
4601
- * change: (break) option `fpac` expects a value instead of URL
4602
- * change: (break) option `cipher` in transfer spec must have hyphen
4603
- * change: (break) renamed option `log_passwords` to `log_secrets`
4604
- * change: (break) removed plugin `shares2` as products is now EOL
4605
- * fix: After AoC version update, wizard did not detect AoC properly
4606
-
4607
- * 4.6.0
4608
-
4609
- * new: command `conf plugin create`
4610
- * new: global option `plugin_folder`
4611
- * new: global option `transpose_single`
4612
- * new: simplified metadata passing for shared inbox package creation in AoC
4613
- * change: (break) command `aoc packages shared_inboxes list` replaces `aoc user shared_inboxes`
4614
- * change: (break) command `aoc user profile` replaces `aoc user info`
4615
- * change: (break) command `aoc user workspaces list` replaces `aoc user workspaces`
4616
- * change: (break) command `aoc user workspaces current` replaces `aoc workspace`
4617
- * change: (break) command `conf plugin list` replaces `conf plugins`
4618
- * change: (break) command `conf connect` simplified
4619
- * fix: #60 ascli executable was not installed by default in 4.5.0
4620
- * fix: add password hiding case in logs
4621
-
4622
- * 4.5.0
4623
-
4624
- * new: support transfer agent: [Transfer SDK](#agt_trsdk)
4625
- * new: support [http socket options](#http_options)
4626
- * new: logs hide passwords and secrets, option `log_passwords` to enable logging secrets
4627
- * new: `config vault` supports encrypted passwords, also macos keychain
4628
- * new: `config preset` command for consistency with id
4629
- * new: identifier can be provided using either option `id` or directly after the command, e.g. `delete 123` is the same as `delete --id=123`
4630
- * change: when using wss, use [ruby's CA certs](#certificates)
4631
- * change: unexpected parameter makes exit code not zero
4632
- * change: (break) options `id` and `name` cannot be specified at the same time anymore, use [positional identifer or name selection](#res_select)
4633
- * change: (break) `aoc admin res node` does not take workspace main node as default node if no `id` specified.
4634
- * change: (break): `orchestrator workflow status` requires id, and supports special id `ALL`
4635
- * fix: various smaller fixes and renaming of some internal classes (transfer agents and few other)
4636
-
4637
- * 4.4.0
4638
-
4639
- * new: `aoc packages list` add possibility to add filter with option `query`
4640
- * new: `aoc admin res xxx list` now get all items by default #50
4641
- * new: `preset` option can specify name or hash value
4642
- * new: `node` plugin accepts bearer token and access key as credential
4643
- * new: `node` option `token_type` allows using basic token in addition to aspera type.
4644
- * change: `server`: option `username` not mandatory anymore: xfer user is by default. If transfer spec token is provided, password or keys are optional, and bypass keys are used by default.
4645
- * change: (break) resource `apps_new` of `aoc` replaced with `application` (more clear)
4646
-
4647
- * 4.3.0
4648
-
4649
- * new: parameter `multi_incr_udp` for option `transfer_info`: control if UDP port is incremented when multi-session is used on [`direct`](#agt_direct) transfer agent.
4650
- * new: command `aoc files node_info` to get node information for a given folder in the Files application of AoC. Allows cross-org or cross-workspace transfers.
4651
-
4652
- * 4.2.2
4653
-
4654
- * new: `faspex package list` retrieves the whole list, not just first page
4655
- * new: support web based auth to aoc and faspex 5 using HTTPS, new dependency on gem `webrick`
4656
- * new: the error "Remote host is not who we expected" displays a special remediation message
4657
- * new: `conf ascp spec` displays supported transfer spec
4658
- * new: options `notif_to` and `notif_template` to send email notifications on transfer (and other events)
4659
- * fix: space character in `faspe:` url are precent encoded if needed
4660
- * fix: `preview scan`: if file_id is unknown, ignore and continue scan
4661
- * change: for commands that potentially execute several transfers (`package recv --id=ALL`), if one transfer fails then `ascli` exits with code 1 (instead of zero=success)
4662
- * change: (break) option `notify` or `aoc` replaced with `notif_to` and `notif_template`
4663
-
4664
- * 4.2.1
4665
-
4666
- * new: command `faspex package recv` supports link of type: `faspe:`
4667
- * new: command `faspex package recv` supports option `recipient` to specify dropbox with leading `*`
4668
-
4669
- * 4.2.0
4670
-
4671
- * new: command `aoc remind` to receive organization membership by email
4672
- * new: in `preview` option `value` to filter out on file name
4673
- * new: `initdemo` to initialize for demo server
4674
- * new: [`direct`](#agt_direct) transfer agent options: `spawn_timeout_sec` and `spawn_delay_sec`
4675
- * fix: on Windows `conf ascp use` expects ascp.exe
4676
- * fix: (break) multi_session_threshold is Integer, not String
4677
- * fix: `conf ascp install` renames sdk folder if it already exists (leftover shared lib may make fail)
4678
- * fix: removed replace_illegal_chars from default aspera.conf causing "Error creating illegal char conversion table"
4679
- * change: (break) `aoc apiinfo` is removed, use `aoc servers` to provide the list of cloud systems
4680
- * change: (break) parameters for resume in `transfer-info` for [`direct`](#agt_direct) are now in sub-key `"resume"`
4681
-
4682
- * 4.1.0
4683
-
4684
- * fix: remove keys from transfer spec and command line when not needed * fix: default to create_dir:true so that sending single file to a folder does not rename file if folder does not exist
4685
- * new: update documentation with regard to offline and docker installation
4686
- * new: renamed command `nagios_check` to `health`
4687
- * new: agent `http_gw` now supports upload
4688
- * new: added option `sdk_url` to install SDK from local file for offline install
4689
- * new: check new gem version periodically
4690
- * new: the --fields= option, support -_fieldname_ to remove a field from default fields
4691
- * new: Oauth tokens are discarded automatically after 30 minutes (useful for COS delegated refresh tokens)
4692
- * new: mimemagic is now optional, needs manual install for `preview`, compatible with version 0.4.x
4693
- * new: AoC a password can be provided for a public link
4694
- * new: `conf doc` take an optional parameter to go to a section
4695
- * new: initial support for Faspex 5 Beta 1
4696
-
4697
- * 4.0.0
4698
-
4699
- * now available as open source at [https://github.com/IBM/aspera-cli](https://github.com/IBM/aspera-cli) with general cleanup
4700
- * changed default tool name from `mlia` to `ascli`
4701
- * changed `aspera` command to `aoc`
4702
- * changed gem name from `asperalm` to `aspera-cli`
4703
- * changed module name from `Asperalm` to `Aspera`
4704
- * removed command `folder` in `preview`, merged to `scan`
4705
- * persistency files go to sub folder instead of main folder
4706
- * added possibility to install SDK: `config ascp install`
4707
-
4708
- * 0.11.8
4709
-
4710
- * Simplified to use `unoconv` instead of bare `libreoffice` for office conversion, as `unoconv` does not require a X server (previously using Xvfb
4711
-
4712
- * 0.11.7
4713
-
4714
- * rework on rest call error handling
4715
- * use option `display` with value `data` to remove out of extraneous information
4716
- * fixed option `lock_port` not working
4717
- * generate special icon if preview failed
4718
- * possibility to choose transfer progress bar type with option `progress`
4719
- * AoC package creation now output package id
4720
-
4721
- * 0.11.6
4722
-
4723
- * orchestrator : added more choice in auth type
4724
- * preview: cleanup in generator (removed and renamed parameters)
4725
- * preview: better documentation
4726
- * preview: animated thumbnails for video (option: `video_png_conv=animated`)
4727
- * preview: new event trigger: `trevents` (`events` seems broken)
4728
- * preview: unique tmp folder to avoid clash of multiple instances
4729
- * repo: added template for secrets used for testing
4730
-
4731
- * 0.11.5
4732
-
4733
- * added option `default_ports` for AoC (see manual)
4734
- * allow bulk delete in `aspera files` with option `bulk=yes`
4735
- * fix getting connect versions
4736
- * added section for Aix
4737
- * support all ciphers for [`direct`](#agt_direct) agent (including gcm, etc..)
4738
- * added transfer spec param `apply_local_docroot` for [`direct`](#agt_direct)
4739
-
4740
- * 0.11.4
4741
-
4742
- * possibility to give shared inbox name when sending a package (else use id and type)
4743
-
4744
- * 0.11.3
4745
-
4746
- * minor fixes on multi-session: avoid exception on progress bar
4747
-
4748
- * 0.11.2
4749
-
4750
- * fixes on multi-session: progress bat and transfer spec param for "direct"
4751
-
4752
- * 0.11.1
4753
-
4754
- * enhanced short_link creation commands (see examples)
4755
-
4756
- * 0.11
4757
-
4758
- * add transfer spec option (agent `direct` only) to provide file list directly to ascp: `EX_file_list`.
4759
-
4760
- * 0.10.18
4761
-
4762
- * new option in. `server` : `ssh_options`
4763
-
4764
- * 0.10.17
4765
-
4766
- * fixed problem on `server` for option `ssh_keys`, now accepts both single value and list.
4767
- * new modifier: `@list:<separator>val1<separator>...`
4768
-
4769
- * 0.10.16
4770
-
4771
- * added list of shared inboxes in workspace (or global), use `--query=@json:'{}'`
4772
-
4773
- * 0.10.15
4774
-
4775
- * in case of command line error, display the error cause first, and non-parsed argument second
4776
- * AoC : Activity / Analytics
4777
-
4778
- * 0.10.14
4779
-
4780
- * added missing bss plugin
4781
-
4782
- * 0.10.13
4783
-
4784
- * added Faspex5 (use option `value` to give API arguments)
4785
-
4786
- * 0.10.12
4787
-
4788
- * added support for AoC node registration keys
4789
- * replaced option : `local_resume` with `transfer_info` for agent [`direct`](#agt_direct)
4790
- * Transfer agent is no more a Singleton instance, but only one is used in CLI
4791
- * `@incps` : new extended value modifier
4792
- * ATS: no more provides access keys secrets: now user must provide it
4793
- * begin work on "aoc" transfer agent
4794
-
4795
- * 0.10.11
4796
-
4797
- * minor refactor and fixes
4798
-
4799
- * 0.10.10
4800
-
4801
- * fix on documentation
4802
-
4803
- * 0.10.9.1
4804
-
4805
- * add total number of items for AoC resource list
4806
- * better gem version dependency (and fixes to support Ruby 2.0.0)
4807
- * removed aoc search_nodes
4808
-
4809
- * 0.10.8
4810
-
4811
- * removed option: `fasp_proxy`, use pseudo transfer spec parameter: `EX_fasp_proxy_url`
4812
- * removed option: `http_proxy`, use pseudo transfer spec parameter: `EX_http_proxy_url`
4813
- * several other changes..
4814
-
4815
- * 0.10.7
4816
-
4817
- * fix: ascli fails when username cannot be computed on Linux.
4818
-
4819
- * 0.10.6
4820
-
4821
- * FaspManager: transfer spec `authentication` no more needed for local transfer to use Aspera public keys. public keys will be used if there is a token and no key or password is provided.
4822
- * gem version requirements made more open
4823
-
4824
- * 0.10.5
4825
-
4826
- * fix faspex package receive command not working
4827
-
4828
- * 0.10.4
4829
-
4830
- * new options for AoC : `secrets`
4831
- * ACLI-533 temp file list folder to use file lists is set by default, and used by asession
4832
-
4833
- * 0.10.3
4834
-
4835
- * included user name in oauth bearer token cache for AoC when JWT is used.
4836
-
4837
- * 0.10.2
4838
-
4839
- * updated `search_nodes` to be more generic, so it can search not only on access key, but also other queries.
4840
- * added doc for "cargo" like actions
4841
- * added doc for multi-session
4842
-
4843
- * 0.10.1
4844
-
4845
- * AoC and node v4 "browse" works now on non-folder items: file, link
4846
- * initial support for AoC automation (do not use yet)
4847
-
4848
- * 0.10
4849
-
4850
- * support for transfer using IBM Cloud Object Storage
4851
- * improved `find` action using arbitrary expressions
4852
-
4853
- * 0.9.36
4854
-
4855
- * added option to specify file pair lists
4856
-
4857
- * 0.9.35
4858
-
4859
- * updated plugin `preview` , changed parameter names, added documentation
4860
- * fix in `ats` plugin : instance id needed in request header
4861
-
4862
- * 0.9.34
4863
-
4864
- * parser "@preset" can be used again in option "transfer_info"
4865
- * some documentation re-organizing
4866
-
4867
- * 0.9.33
4868
-
4869
- * new command to display basic token of node
4870
- * new command to display bearer token of node in AoC
4871
- * the --fields= option, support +_fieldname_ to add a field to default fields
4872
- * many small changes
4873
-
4874
- * 0.9.32
4875
-
4876
- * all Faspex public links are now supported
4877
- * removed faspex operation recv_publink
4878
- * replaced with option `link` (consistent with AoC)
4879
-
4880
- * 0.9.31
4881
-
4882
- * added more support for public link: receive and send package, to user or dropbox and files view.
4883
- * delete expired file lists
4884
- * changed text table gem from text-table to terminal-table because it supports multiline values
4885
-
4886
- * 0.9.27
4887
-
4888
- * basic email support with SMTP
4889
- * basic proxy auto config support
4890
-
4891
- * 0.9.26
4892
-
4893
- * table display with --fields=ALL now includes all column names from all lines, not only first one
4894
- * unprocessed argument shows error even if there is an error beforehand
4895
-
4896
- * 0.9.25
4897
-
4898
- * the option `value` of command `find`, to filter on name, is not optional
4899
- * `find` now also reports all types (file, folder, link)
4900
- * `find` now is able to report all fields (type, size, etc...)
4901
-
4902
- * 0.9.24
4903
-
4904
- * fix bug where AoC node to node transfer did not work
4905
- * fix bug on error if ED25519 private key is defined in .ssh
4906
-
4907
- * 0.9.23
4908
-
4909
- * defined REST error handlers, more error conditions detected
4910
- * commands to select specific ascp location
4911
-
4912
- * 0.9.21
4913
-
4914
- * supports simplified wizard using global client
4915
- * only ascp binary is required, other SDK (keys) files are now generated
4916
-
4917
- * 0.9.20
4918
-
4919
- * improved wizard (prepare for AoC global client id)
4920
- * preview generator: addedoption : --skip-format=&lt;png,mp4&gt;
4921
- * removed outdated pictures from this doc
4922
-
4923
- * 0.9.19
4924
-
4925
- * added command aspera bearer --scope=xx
4926
-
4927
- * 0.9.18
4928
-
4929
- * enhanced aspera admin events to support query
4930
-
4931
- * 0.9.16
4932
-
4933
- * AoC transfers are now reported in activity app
4934
- * new interface for Rest class authentication (keep backward compatibility)
4935
-
4936
- * 0.9.15
4937
-
4938
- * new feature: "find" command in aspera files
4939
- * sample code for transfer API
4940
-
4941
- * 0.9.12
4942
-
4943
- * add nagios commands
4944
- * support of ATS for IBM Cloud, removed old version based on aspera id
4945
-
4946
- * 0.9.11
4947
-
4948
- * Breaking change: @stdin is now @stdin:
4949
- * support of ATS for IBM Cloud, removed old version based on aspera id
4950
-
4951
-
4952
- * 0.9.10
4953
-
4954
- * Breaking change: parameter transfer-node becomes more generic: transfer-info
4955
- * Display SaaS storage usage with command: aspera admin res node --id=nn info
4956
- * cleaner way of specifying source file list for transfers
4957
- * Breaking change: replaced download_mode option with http_download action
4958
-
4959
- * 0.9.9
4960
-
4961
- * Breaking change: "aspera package send" parameter deprecated, use the --value option instead with "recipients" value. See example.
4962
- * Now supports "cargo" for Aspera on Cloud (automatic package download)
4963
-
4964
- * 0.9.8
4965
-
4966
- * Faspex: use option once_only set to yes to enable cargo like function. id=NEW deprecated.
4967
- * AoC: share to share transfer with command "transfer"
4968
-
4969
- * 0.9.7
4970
-
4971
- * homogeneous [*transfer-spec*](#transferspec) for `node` and [`direct`](#agt_direct) transfer agents
4972
- * preview persistency goes to unique file by default
4973
- * catch mxf extension in preview as video
4974
- * Faspex: possibility to download all packages by specifying id=ALL
4975
- * Faspex: to come: cargo-like function to download only new packages with id=NEW
4976
-
4977
- * 0.9.6
4978
-
4979
- * Breaking change: `@param:`is now `@preset:` and is generic
4980
- * AoC: added command to display current workspace information
4981
-
4982
- * 0.9.5
4983
-
4984
- * new parameter: new_user_option used to choose between public_link and invite of external users.
4985
- * fixed bug in wizard, and wizard uses now product detection
4986
-
4987
- * 0.9.4
4988
-
4989
- * Breaking change: onCloud file list follow --source convention as well (plus specific case for download when first path is source folder, and other are source file names).
4990
- * AoC Package send supports external users
4991
- * new command to export AoC config to Aspera CLI config
4992
-
4993
- * 0.9.3
4994
-
4995
- * REST error message show host and code
4996
- * option for quiet display
4997
- * modified transfer interface and allow token re-generation on error
4998
- * async add admin command
4999
- * async add db parameters
5000
- * Breaking change: new option "sources" to specify files to transfer
5001
-
5002
- * 0.9.2
5003
-
5004
- * Breaking change: changed AoC package creation to match API, see AoC section
5005
-
5006
- * 0.9.1
5007
-
5008
- * Breaking change: changed faspex package creation to match API, see Faspex section
5009
-
5010
- * 0.9
5011
-
5012
- * Renamed the CLI from aslmcli to `ascli`
5013
- * Automatic rename and conversion of former config folder from aslmcli to `ascli`
5014
-
5015
- * 0.7.6
5016
-
5017
- * add "sync" plugin
5018
-
5019
- * 0.7
5020
-
5021
- * Breaking change: AoC package recv take option if for package instead of argument.
5022
- * Breaking change: Rest class and Oauth class changed init parameters
5023
- * AoC: receive package from public link
5024
- * select by col value on output
5025
- * added rename (AoC, node)
5026
-
5027
- * 0.6.19
5028
-
5029
- * change: (break) ats server list provisioned &rarr; ats cluster list
5030
- * change: (break) ats server list clouds &rarr; ats cluster clouds
5031
- * change: (break) ats server list instance --cloud=x --region=y &rarr; ats cluster show --cloud=x --region=y
5032
- * change: (break) ats server id xxx &rarr; ats cluster show --id=xxx
5033
- * change: (break) ats subscriptions &rarr; ats credential subscriptions
5034
- * change: (break) ats api_key repository list &rarr; ats credential cache list
5035
- * change: (break) ats api_key list &rarr; ats credential list
5036
- * change: (break) ats access_key id xxx &rarr; ats access_key --id=xxx
5037
-
5038
- * 0.6.18
5039
-
5040
- * some commands take now --id option instead of id command.
5041
-
5042
- * 0.6.15
5043
-
5044
- * Breaking change: "files" application renamed to "aspera" (for "Aspera on Cloud"). "repository" renamed to "files". Default is automatically reset, e.g. in config files and change key "files" to "aspera" in [option preset](#lprt) "default".
5045
-
5046
5038
  ## Common problems
5047
5039
 
5048
- ### Error "Remote host is not who we expected"
5040
+ ### Error: "Remote host is not who we expected"
5049
5041
 
5050
5042
  Cause: `ascp` >= 4.x checks fingerprint of highest server host key, including ECDSA. `ascp` < 4.0 (3.9.6 and earlier) support only to RSA level (and ignore ECDSA presented by server). `aspera.conf` supports a single fingerprint.
5051
5043
 
@@ -5059,6 +5051,13 @@ Workaround on server side: Either remove the fingerprint from `aspera.conf`, or
5059
5051
 
5060
5052
  References: ES-1944 in release notes of 4.1 and to [HSTS admin manual section "Configuring Transfer Server Authentication With a Host-Key Fingerprint"](https://www.ibm.com/docs/en/ahts/4.2?topic=upgrades-configuring-ssh-server).
5061
5053
 
5054
+ ### Error "can't find header files for ruby"
5055
+
5056
+ Some Ruby gems dependencies require compilation of native parts (C).
5057
+ This also requires Ruby header files.
5058
+ If Ruby was installed as a Linux Packages, then also install ruby dev elopment package:
5059
+ `ruby-dev` ir `ruby-devel`, depending on distribution.
5060
+
5062
5061
  ### ED255519 key not supported
5063
5062
 
5064
5063
  ED25519 keys are deactivated since version 0.9.24 so this type of key will just be ignored.
@@ -5071,19 +5070,3 @@ OpenSSH keys only supported if ED25519 is available
5071
5070
 
5072
5071
  Which meant that you do not have ruby support for ED25519 SSH keys.
5073
5072
  You may either install the suggested Gems, or remove your ed25519 key from your `.ssh` folder to solve the issue.
5074
-
5075
- ## BUGS, FEATURES, CONTRIBUTION
5076
-
5077
- For issues reports or feature requests use the Github repository and issues.
5078
-
5079
- You can also contribute to this open source project.
5080
-
5081
- One can also [create one's own plugin](#createownplugin).
5082
-
5083
- ## Miscellaneous
5084
-
5085
- * replace rest and oauth classes with ruby standard gems:
5086
- * <https://github.com/rest-client/rest-client>
5087
- * <https://github.com/oauth-xx/oauth2>
5088
- * use gem Thor <http://whatisthor.com/> (or other standard Ruby CLI manager)
5089
- * Package with <https://github.com/pmq20/ruby-packer> (rubyc)