aspera-cli 4.2.0 → 4.4.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.
- checksums.yaml +4 -4
- data/README.md +749 -353
- data/docs/Makefile +4 -4
- data/docs/README.erb.md +743 -283
- data/docs/doc_tools.rb +58 -0
- data/docs/test_env.conf +9 -1
- data/examples/aoc.rb +14 -3
- data/examples/faspex4.rb +89 -0
- data/lib/aspera/aoc.rb +24 -22
- data/lib/aspera/cli/main.rb +48 -20
- data/lib/aspera/cli/plugin.rb +13 -6
- data/lib/aspera/cli/plugins/aoc.rb +117 -78
- data/lib/aspera/cli/plugins/config.rb +127 -80
- data/lib/aspera/cli/plugins/faspex.rb +112 -63
- data/lib/aspera/cli/plugins/faspex5.rb +29 -25
- data/lib/aspera/cli/plugins/node.rb +54 -25
- data/lib/aspera/cli/plugins/preview.rb +94 -68
- data/lib/aspera/cli/plugins/server.rb +16 -5
- data/lib/aspera/cli/transfer_agent.rb +92 -72
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/command_line_builder.rb +48 -31
- data/lib/aspera/cos_node.rb +4 -3
- data/lib/aspera/fasp/http_gw.rb +47 -26
- data/lib/aspera/fasp/local.rb +31 -24
- data/lib/aspera/fasp/manager.rb +3 -0
- data/lib/aspera/fasp/node.rb +23 -1
- data/lib/aspera/fasp/parameters.rb +72 -89
- data/lib/aspera/fasp/parameters.yaml +531 -0
- data/lib/aspera/fasp/uri.rb +1 -1
- data/lib/aspera/faspex_gw.rb +10 -9
- data/lib/aspera/id_generator.rb +22 -0
- data/lib/aspera/node.rb +11 -3
- data/lib/aspera/oauth.rb +131 -135
- data/lib/aspera/persistency_action_once.rb +11 -7
- data/lib/aspera/persistency_folder.rb +6 -26
- data/lib/aspera/rest.rb +1 -1
- data/lib/aspera/sync.rb +40 -35
- data/lib/aspera/timer_limiter.rb +22 -0
- data/lib/aspera/web_auth.rb +105 -0
- metadata +22 -4
- data/docs/transfer_spec.html +0 -99
- data/lib/aspera/fasp/aoc.rb +0 -24
data/docs/README.erb.md
CHANGED
|
@@ -1,35 +1,20 @@
|
|
|
1
1
|
[comment1]: # (Do not edit this README.md, edit docs/README.erb.md, for details, read docs/README.md)
|
|
2
|
-
<%
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
raise "missing file #{ENV[e]}" unless File.exist?(ENV[e]) or !e.start_with?('INCL_') #_
|
|
7
|
-
end
|
|
8
|
-
cmd=ENV["EXENAME"] # just command name
|
|
9
|
-
tool='`'+cmd+'`' # used in text with formatting of command
|
|
10
|
-
evp=cmd.upcase+'_' # prefix for env vars
|
|
11
|
-
opprst='option preset' # just the name for "option preset"
|
|
12
|
-
prst='['+opprst+'](#lprt)'
|
|
13
|
-
prsts='['+opprst+'s](#lprt)'
|
|
14
|
-
prstt=opprst.capitalize # in title
|
|
15
|
-
gemspec=Gem::Specification::load(ENV["GEMSPEC"]) or raise "error loading #{ENV["GEMSPEC"]}"
|
|
16
|
-
geminstadd=gemspec.version.to_s.match(/\.[^0-9]/)?' --pre':''
|
|
17
|
-
-%>
|
|
18
|
-
# <%=tool%> : Command Line Interface for IBM Aspera products
|
|
19
|
-
|
|
20
|
-
Version : <%= gemspec.version.to_s %>
|
|
2
|
+
<%load File.join(File.dirname(__FILE__),'doc_tools.rb')-%>
|
|
3
|
+
<font size="+12"><center><%=tool%> : Command Line Interface for IBM Aspera products</center></font>
|
|
4
|
+
|
|
5
|
+
Version : <%=gemspec.version.to_s%>
|
|
21
6
|
|
|
22
7
|
_Laurent/2016-<%=Time.new.year%>_
|
|
23
8
|
|
|
24
|
-
This gem provides <%=tool
|
|
9
|
+
This gem provides the <%=tool%> Command Line Interface to IBM Aspera software.
|
|
25
10
|
|
|
26
11
|
<%=tool%> is a also great tool to learn Aspera APIs.
|
|
27
12
|
|
|
28
|
-
Ruby Gem: [<%=
|
|
13
|
+
Ruby Gem: [<%=gemspec.metadata['rubygems_uri']%>](<%=gemspec.metadata['rubygems_uri']%>)
|
|
29
14
|
|
|
30
|
-
Ruby Doc: [<%=
|
|
15
|
+
Ruby Doc: [<%=gemspec.metadata['documentation_uri']%>](<%=gemspec.metadata['documentation_uri']%>)
|
|
31
16
|
|
|
32
|
-
Ruby version
|
|
17
|
+
Required Ruby version: <%=gemspec.required_ruby_version%>
|
|
33
18
|
|
|
34
19
|
# <a name="when_to_use"></a>When to use and when not to use
|
|
35
20
|
|
|
@@ -45,7 +30,8 @@ So it is designed for:
|
|
|
45
30
|
|
|
46
31
|
<%=tool%> can be seen as a command line tool integrating:
|
|
47
32
|
|
|
48
|
-
* a configuration file (config.yaml)
|
|
33
|
+
* a configuration file (config.yaml)
|
|
34
|
+
* advanced command line options
|
|
49
35
|
* cURL (for REST calls)
|
|
50
36
|
* Aspera transfer (ascp)
|
|
51
37
|
|
|
@@ -72,7 +58,7 @@ Command line parameters in examples beginning with `my_`, like `my_param_value`
|
|
|
72
58
|
|
|
73
59
|
On Linux and Unix environments, this is typically a POSIX shell (bash, zsh, ksh, sh). In this environment shell command line parsing applies before <%=tool%> (Ruby) is executed, e.g. [bash shell operation](https://www.gnu.org/software/bash/manual/bash.html#Shell-Operation). Ruby receives a list parameters and gives it to <%=tool%>. So special character handling (quotes, spaces, env vars, ...) is done in the shell.
|
|
74
60
|
|
|
75
|
-
On Windows, `cmd` is typically used. Windows process creation does not receive the list of arguments but just the whole line. It's up to the program to parse arguments. Ruby follows the Microsoft C/C++ parameter parsing rules.
|
|
61
|
+
On Windows, `cmd.exe` is typically used. Windows process creation does not receive the list of arguments but just the whole line. It's up to the program to parse arguments. Ruby follows the Microsoft C/C++ parameter parsing rules.
|
|
76
62
|
|
|
77
63
|
* [Windows: How Command Line Parameters Are Parsed](https://daviddeley.com/autohotkey/parameters/parameters.htm#RUBY)
|
|
78
64
|
* [Understand Quoting and Escaping of Windows Command Line Arguments](http://www.windowsinspired.com/understanding-the-command-line-string-and-arguments-received-by-a-windows-program/)
|
|
@@ -97,7 +83,7 @@ Once the gem is installed, <%=tool%> shall be accessible:
|
|
|
97
83
|
|
|
98
84
|
```
|
|
99
85
|
$ <%=cmd%> --version
|
|
100
|
-
<%=
|
|
86
|
+
<%=gemspec.version.to_s%>
|
|
101
87
|
```
|
|
102
88
|
|
|
103
89
|
## First use
|
|
@@ -124,7 +110,7 @@ $ <%=cmd%> server browse /
|
|
|
124
110
|
If you want to use <%=tool%> with another server, and in order to make further calls more convenient, it is advised to define a <%=prst%> for the server's authentication options. The following example will:
|
|
125
111
|
|
|
126
112
|
* create a <%=prst%>
|
|
127
|
-
* define it as default for
|
|
113
|
+
* define it as default for `server` plugin
|
|
128
114
|
* list files in a folder
|
|
129
115
|
* download a file
|
|
130
116
|
|
|
@@ -167,8 +153,8 @@ It is possible to install *either* directly on the host operating system (Linux,
|
|
|
167
153
|
|
|
168
154
|
The direct installation is recommended and consists in installing:
|
|
169
155
|
|
|
170
|
-
* [Ruby](#ruby) version
|
|
171
|
-
* [<%=
|
|
156
|
+
* [Ruby](#ruby) version <%=gemspec.required_ruby_version%>
|
|
157
|
+
* [<%=gemspec.name%>](#the_gem)
|
|
172
158
|
* [Aspera SDK (ascp)](#fasp_prot)
|
|
173
159
|
|
|
174
160
|
The following sections provide information on the various installation methods.
|
|
@@ -181,6 +167,8 @@ Use this method only if you know what you do, else use the standard recommended
|
|
|
181
167
|
|
|
182
168
|
This method installs a docker image that contains: Ruby, ascli and the FASP sdk.
|
|
183
169
|
|
|
170
|
+
The image is: [https://hub.docker.com/r/martinlaurent/ascli](https://hub.docker.com/r/martinlaurent/ascli)
|
|
171
|
+
|
|
184
172
|
Ensure that you have Docker installed.
|
|
185
173
|
|
|
186
174
|
```
|
|
@@ -215,7 +203,7 @@ Use this method to install on the native host.
|
|
|
215
203
|
|
|
216
204
|
A ruby interpreter is required to run the tool or to use the gem and tool.
|
|
217
205
|
|
|
218
|
-
Ruby
|
|
206
|
+
Required Ruby version: <%=gemspec.required_ruby_version%>. Ruby version 3 is also supported.
|
|
219
207
|
|
|
220
208
|
*Ruby can be installed using any method* : rpm, yum, dnf, rvm, brew, windows installer, ... .
|
|
221
209
|
|
|
@@ -223,7 +211,7 @@ Refer to the following sections for a proposed method for specific operating sys
|
|
|
223
211
|
|
|
224
212
|
The recommended installation method is `rvm` for systems with "bash-like" shell (Linux, Macos, Windows with cygwin, etc...).
|
|
225
213
|
If the generic install is not suitable (e.g. Windows, no cygwin), you can use one of OS-specific install method.
|
|
226
|
-
If you have a simpler better way to install Ruby version
|
|
214
|
+
If you have a simpler better way to install Ruby version <%=gemspec.required_ruby_version%> : use it !
|
|
227
215
|
|
|
228
216
|
### Generic: RVM: single user installation (not root)
|
|
229
217
|
|
|
@@ -249,7 +237,7 @@ If you keep the same terminal (ont needed if re-login):
|
|
|
249
237
|
$ source ~/.rvm/scripts/rvm
|
|
250
238
|
```
|
|
251
239
|
|
|
252
|
-
It is advised to get one of the pre-compiled ruby version, you can list with:
|
|
240
|
+
It is advised to get one of the pre-compiled ruby version, you can list with:
|
|
253
241
|
|
|
254
242
|
```
|
|
255
243
|
$ rvm list --remote
|
|
@@ -293,10 +281,10 @@ Install Latest stable Ruby using [https://rubyinstaller.org/](https://rubyinstal
|
|
|
293
281
|
|
|
294
282
|
### macOS: pre-installed or `brew`
|
|
295
283
|
|
|
296
|
-
MacOS 10.13+ (High Sierra) comes with a recent Ruby. So you can use it directly. You will need to install <%=
|
|
284
|
+
MacOS 10.13+ (High Sierra) comes with a recent Ruby. So you can use it directly. You will need to install <%=gemspec.name%> using `sudo` :
|
|
297
285
|
|
|
298
286
|
```
|
|
299
|
-
$ sudo gem install <%=
|
|
287
|
+
$ sudo gem install <%=gemspec.name%><%=geminstadd%>
|
|
300
288
|
```
|
|
301
289
|
|
|
302
290
|
Alternatively, if you use [Homebrew](https://brew.sh/) already you can install Ruby with it:
|
|
@@ -384,18 +372,18 @@ $ <%=cmd%> conf ascp install --sdk-url=file:///SDK.zip
|
|
|
384
372
|
|
|
385
373
|
or restore the `$HOME/.aspera` folder for the user.
|
|
386
374
|
|
|
387
|
-
## <a name="the_gem"></a>`<%=
|
|
375
|
+
## <a name="the_gem"></a>`<%=gemspec.name%>` gem
|
|
388
376
|
|
|
389
377
|
Once you have Ruby and rights to install gems: Install the gem and its dependencies:
|
|
390
378
|
|
|
391
379
|
```
|
|
392
|
-
# gem install <%=
|
|
380
|
+
# gem install <%=gemspec.name%><%=geminstadd%>
|
|
393
381
|
```
|
|
394
382
|
|
|
395
383
|
To upgrade to the latest version:
|
|
396
384
|
|
|
397
385
|
```
|
|
398
|
-
# gem update <%=
|
|
386
|
+
# gem update <%=gemspec.name%>
|
|
399
387
|
```
|
|
400
388
|
|
|
401
389
|
<%=tool%> checks every week if a new version is available and notify the user in a WARN log. To de-activate this feature set the option `version_check_days` to `0`, or specify a different period in days.
|
|
@@ -445,8 +433,8 @@ by visiting the page: [https://www.ibm.com/aspera/connect/](https://www.ibm.com/
|
|
|
445
433
|
<%=tool%> will detect most of Aspera transfer products in standard locations and use the first one found.
|
|
446
434
|
Refer to section [FASP](#client) for details on how to select a client or set path to the FASP protocol.
|
|
447
435
|
|
|
448
|
-
Several methods are provided
|
|
449
|
-
other methods are available. Refer to section: [Transfer Agents](#agents)
|
|
436
|
+
Several methods are provided to start a transfer.
|
|
437
|
+
Use of a local client ([`direct`](#direct) transfer agent) is one of them, but other methods are available. Refer to section: [Transfer Agents](#agents)
|
|
450
438
|
|
|
451
439
|
## <a name="offline_install"></a>Offline Installation (without internet)
|
|
452
440
|
|
|
@@ -477,7 +465,7 @@ $ <%=cmd%> conf ascp install --sdk-url=file:///SDK.zip
|
|
|
477
465
|
|
|
478
466
|
# <a name="cli"></a>Command Line Interface: <%=tool%>
|
|
479
467
|
|
|
480
|
-
The `<%=
|
|
468
|
+
The `<%=gemspec.name%>` Gem provides a command line interface (CLI) which interacts with Aspera Products (mostly using REST APIs):
|
|
481
469
|
|
|
482
470
|
* IBM Aspera High Speed Transfer Server (FASP and Node)
|
|
483
471
|
* IBM Aspera on Cloud (including ATS)
|
|
@@ -492,7 +480,7 @@ The `<%= gemspec.name %>` Gem provides a command line interface (CLI) which inte
|
|
|
492
480
|
* Supports most Aspera server products (on-premise and SaaS)
|
|
493
481
|
* Any command line options (products URL, credentials or any option) can be provided on command line, in configuration file, in env var, in files
|
|
494
482
|
* Supports Commands, Option values and Parameters shortcuts
|
|
495
|
-
* FASP [Transfer Agents](#agents) can be:
|
|
483
|
+
* FASP [Transfer Agents](#agents) can be: local ascp, or Connect Client, or any transfer node
|
|
496
484
|
* Transfer parameters can be altered by modification of _transfer-spec_, this includes requiring multi-session
|
|
497
485
|
* Allows transfers from products to products, essentially at node level (using the node transfer agent)
|
|
498
486
|
* Supports FaspStream creation (using Node API)
|
|
@@ -616,12 +604,12 @@ The style of output can be set using the `format` parameter, supporting:
|
|
|
616
604
|
* `yaml` : YAML
|
|
617
605
|
* `csv` : Comma Separated Values
|
|
618
606
|
|
|
619
|
-
###
|
|
607
|
+
### <a name="option_select"></a>Option: `select`: Filter on columns values for `object_list`
|
|
620
608
|
|
|
621
609
|
Table output can be filtered using the `select` parameter. Example:
|
|
622
610
|
|
|
623
611
|
```
|
|
624
|
-
$ <%=cmd%> aoc admin res user list --fields=name,email,ats_admin --query=@json:'{"
|
|
612
|
+
$ <%=cmd%> aoc admin res user list --fields=name,email,ats_admin --query=@json:'{"sort":"name"}' --select=@json:'{"ats_admin":true}'
|
|
625
613
|
:...............................:..................................:...........:
|
|
626
614
|
: name : email : ats_admin :
|
|
627
615
|
:...............................:..................................:...........:
|
|
@@ -768,19 +756,15 @@ C:\Users\Kenji\.aspera\<%=cmd%>
|
|
|
768
756
|
On the first execution of <%=tool%>, an empty configuration file is created in the configuration folder.
|
|
769
757
|
Nevertheless, there is no mandatory information required in this file, the use of it is optional as any option can be provided on the command line.
|
|
770
758
|
|
|
771
|
-
Although the file is a standard YAML file, <%=tool%> provides commands to read and modify it
|
|
772
|
-
using the `config` command.
|
|
759
|
+
Although the file is a standard YAML file, <%=tool%> provides commands to read and modify it using the `config` command.
|
|
773
760
|
|
|
774
|
-
All options for <%=tool%>
|
|
761
|
+
All options for <%=tool%> can be set on command line, or by env vars, or using <%=prsts%> in the configuratin file.
|
|
775
762
|
|
|
776
|
-
A configuration file provides a way to define default values, especially
|
|
777
|
-
for authentication parameters, thus avoiding to always having to specify those parameters on the command line.
|
|
763
|
+
A configuration file provides a way to define default values, especially for authentication parameters, thus avoiding to always having to specify those parameters on the command line.
|
|
778
764
|
|
|
779
|
-
The default configuration file is: `$HOME/.aspera/<%=cmd%>/config.yaml`
|
|
780
|
-
(this can be overriden with option `--config-file=path` or equivalent env var).
|
|
765
|
+
The default configuration file is: `$HOME/.aspera/<%=cmd%>/config.yaml` (this can be overriden with option `--config-file=path` or equivalent env var).
|
|
781
766
|
|
|
782
|
-
|
|
783
|
-
called: <%=prsts%>. Then, instead of specifying some common options on the command line (e.g. address, credentials), it is possible to invoke the ones of a <%=prst%> (e.g. `mypreset`) using the option: `-Pmypreset` or `--preset=mypreset`.
|
|
767
|
+
The configuration file is simply a catalog of pre-defined lists of options, called: <%=prsts%>. Then, instead of specifying some common options on the command line (e.g. address, credentials), it is possible to invoke the ones of a <%=prst%> (e.g. `mypreset`) using the option: `-Pmypreset` or `--preset=mypreset`.
|
|
784
768
|
|
|
785
769
|
### <a name="lprt"></a><%=prstt%>
|
|
786
770
|
|
|
@@ -880,7 +864,7 @@ demo_server:
|
|
|
880
864
|
We can see here:
|
|
881
865
|
|
|
882
866
|
* The configuration was created with CLI version 0.3.7
|
|
883
|
-
* the default <%=prst%> to load for plugin
|
|
867
|
+
* the default <%=prst%> to load for `server` plugin is : `demo_server`
|
|
884
868
|
* the <%=prst%> `demo_server` defines some parameters: the URL and credentials
|
|
885
869
|
* the default <%=prst%> to load in any case is : `cli_default`
|
|
886
870
|
|
|
@@ -911,26 +895,26 @@ my_aoc_org:
|
|
|
911
895
|
|
|
912
896
|
So, the key file will be read only at execution time, but not be embedded in the configuration file.
|
|
913
897
|
|
|
898
|
+
### Options evaluation order
|
|
899
|
+
|
|
900
|
+
Some options are global, some options are available only for some plugins. (the plugin is the first level command).
|
|
901
|
+
|
|
914
902
|
Options are loaded using this algorithm:
|
|
915
903
|
|
|
916
|
-
*
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
*
|
|
920
|
-
*
|
|
904
|
+
* If option `--no-default` (or `-N`) is specified, then no default value is loaded is loaded for the plugin
|
|
905
|
+
* else it looks for the name of the plugin as key in section `default`, the value is the name of the default <%=prst%> for it, and loads it.
|
|
906
|
+
* If option `--preset=<name or extended value hash>` is specified (or `-Pxxxx`), this reads the <%=prst%> specified from the configuration file, or of the value is a Hash, it uses it as options values.
|
|
907
|
+
* Environment variables are evaluated
|
|
908
|
+
* Command line options are evaluated
|
|
921
909
|
|
|
922
910
|
Parameters are evaluated in the order of command line.
|
|
923
911
|
|
|
924
|
-
To avoid loading the default <%=prst%> for a plugin,
|
|
912
|
+
To avoid loading the default <%=prst%> for a plugin, use: `-N`
|
|
925
913
|
|
|
926
914
|
On command line, words in parameter names are separated by a dash, in configuration file, separator
|
|
927
915
|
is an underscore. E.g. --xxx-yyy on command line gives xxx_yyy in configuration file.
|
|
928
916
|
|
|
929
|
-
|
|
930
|
-
convert olver versions, remove the leading ":" in front of keys.
|
|
931
|
-
|
|
932
|
-
The main plugin name is *config*, so it is possible to define a default <%=prst%> for
|
|
933
|
-
the main plugin with:
|
|
917
|
+
The main plugin name is `config`, so it is possible to define a default <%=prst%> for the main plugin with:
|
|
934
918
|
|
|
935
919
|
```
|
|
936
920
|
$ <%=cmd%> config id cli_default set interactive no
|
|
@@ -943,6 +927,18 @@ A <%=prst%> value can be removed with `unset`:
|
|
|
943
927
|
$ <%=cmd%> config id cli_default unset interactive
|
|
944
928
|
```
|
|
945
929
|
|
|
930
|
+
Example: Define options using command line:
|
|
931
|
+
|
|
932
|
+
```
|
|
933
|
+
$ <%=cmd%> -N --url=x --password=y --username=y node --show-config
|
|
934
|
+
```
|
|
935
|
+
|
|
936
|
+
Example: Define options using a hash:
|
|
937
|
+
|
|
938
|
+
```
|
|
939
|
+
$ <%=cmd%> -N --preset=@json:'{"url":"x","password":"y","username":"y"}' node --show-config
|
|
940
|
+
```
|
|
941
|
+
|
|
946
942
|
### Examples
|
|
947
943
|
|
|
948
944
|
For Faspex, Shares, Node (including ATS, Aspera Transfer Service), Console,
|
|
@@ -1071,7 +1067,7 @@ $ <%=cmd%> config ascp info
|
|
|
1071
1067
|
...
|
|
1072
1068
|
```
|
|
1073
1069
|
|
|
1074
|
-
### Selection of
|
|
1070
|
+
### Selection of `ascp` location for [`direct`](#direct) agent
|
|
1075
1071
|
|
|
1076
1072
|
By default, <%=tool%> uses any found local product with ascp, including SDK.
|
|
1077
1073
|
|
|
@@ -1115,7 +1111,7 @@ $ <%=cmd%> config ascp products list
|
|
|
1115
1111
|
:.........................................:................................................:
|
|
1116
1112
|
```
|
|
1117
1113
|
|
|
1118
|
-
### Selection of local client
|
|
1114
|
+
### Selection of local client for `ascp` for [`direct`](#direct) agent
|
|
1119
1115
|
|
|
1120
1116
|
If no ascp is selected, this is equivalent to using option: `--use-product=FIRST`.
|
|
1121
1117
|
|
|
@@ -1170,7 +1166,7 @@ This [_transfer-spec_](#transferspec) will be executed by a transfer client, her
|
|
|
1170
1166
|
|
|
1171
1167
|
There are currently 3 agents:
|
|
1172
1168
|
|
|
1173
|
-
* `direct` : a local execution of `ascp`
|
|
1169
|
+
* [`direct`](#direct) : a local execution of `ascp`
|
|
1174
1170
|
* `connect` : use of a local Connect Client
|
|
1175
1171
|
* `node` : use of an Aspera Transfer Node (potentially _remote_).
|
|
1176
1172
|
* `httpgw` : use of an Aspera HTTP Gateway
|
|
@@ -1182,7 +1178,7 @@ will effectively push files to the related server from the agent node.
|
|
|
1182
1178
|
<%=tool%> standadizes on the use of a [_transfer-spec_](#transferspec) instead of _raw_ ascp options to provide parameters for a transfer session, as a common method for those three Transfer Agents.
|
|
1183
1179
|
|
|
1184
1180
|
|
|
1185
|
-
### <a name="direct"></a>Direct (local ascp
|
|
1181
|
+
### <a name="direct"></a>Direct (local ascp execution)
|
|
1186
1182
|
|
|
1187
1183
|
By default <%=tool%> uses a local ascp, equivalent to specifying `--transfer=direct`.
|
|
1188
1184
|
<%=tool%> will detect locally installed Aspera products.
|
|
@@ -1201,11 +1197,19 @@ The `transfer-info` accepts the following optional parameters:
|
|
|
1201
1197
|
<tr><td>spawn_timeout_sec</td><td>Float</td><td>3</td><td>Multi session</td><td>Verification time that ascp is running</td></tr>
|
|
1202
1198
|
<tr><td>spawn_delay_sec</td><td>Float</td><td>2</td><td>Multi session</td><td>Delay between startup of sessions</td></tr>
|
|
1203
1199
|
<tr><td>wss</td><td>Bool</td><td>false</td><td>Web Socket Session</td><td>Enable use of web socket session in case it is available</td></tr>
|
|
1200
|
+
<tr><td>multi_incr_udp</td><td>Bool</td><td>true</td><td>Multi Session</td><td>Increment UDP port on multi-session<br/>If true, each session will have a different UDP port starting at `fasp_port` (or default 33001)<br/>Else, each session will use `fasp_port` (or `ascp` default)</td></tr>
|
|
1204
1201
|
<tr><td>resume</td><td>Hash</td><td>nil</td><td>Resumer parameters</td><td>See below</td></tr>
|
|
1205
1202
|
</table>
|
|
1206
1203
|
|
|
1207
1204
|
Resume parameters:
|
|
1208
1205
|
|
|
1206
|
+
In case of transfer interruption, the agent will resume a transfer up to `iter_max` time.
|
|
1207
|
+
Sleep between iteration is:
|
|
1208
|
+
|
|
1209
|
+
```
|
|
1210
|
+
max( sleep_max , sleep_initial * sleep_factor ^ (iter_index-1) )
|
|
1211
|
+
```
|
|
1212
|
+
|
|
1209
1213
|
<table>
|
|
1210
1214
|
<tr><th>Name</th><th>Type</th><th>Default</th><th>Feature</th><th>Description</th></tr>
|
|
1211
1215
|
<tr><td>iter_max</td><td>int</td><td>7</td><td>Resume</td><td>Max number of retry on error</td></tr>
|
|
@@ -1218,7 +1222,7 @@ Examples:
|
|
|
1218
1222
|
|
|
1219
1223
|
```
|
|
1220
1224
|
$ <%=cmd%> ... --transfer-info=@json:'{"wss":true,"resume":{"iter_max":10}}'
|
|
1221
|
-
$ <%=cmd%> ... --transfer-info=@json:'{"spawn_delay_sec":2.5}'
|
|
1225
|
+
$ <%=cmd%> ... --transfer-info=@json:'{"spawn_delay_sec":2.5,"multi_incr_udp":false}'
|
|
1222
1226
|
```
|
|
1223
1227
|
|
|
1224
1228
|
### IBM Aspera Connect Client GUI
|
|
@@ -1272,7 +1276,7 @@ is described in a _transfer-spec_ (Transfer Specification), such as:
|
|
|
1272
1276
|
|
|
1273
1277
|
If needed, it is possible to modify or add any of the supported _transfer-spec_ parameter using the `ts` option. The `ts` option accepts a [Structured Value](#native) containing one or several _transfer-spec_ parameters. Multiple `ts` options on command line are cummulative.
|
|
1274
1278
|
|
|
1275
|
-
It is possible to specify ascp options when the `transfer` option is set to `direct` using the special [_transfer-spec_](#transferspec) parameter: `EX_ascp_args`. Example: `--ts=@json:'{"EX_ascp_args":["-l","100m"]}'`. This is espacially useful for ascp command line parameters not supported yet in the transfer spec.
|
|
1279
|
+
It is possible to specify ascp options when the `transfer` option is set to [`direct`](#direct) using the special [_transfer-spec_](#transferspec) parameter: `EX_ascp_args`. Example: `--ts=@json:'{"EX_ascp_args":["-l","100m"]}'`. This is espacially useful for ascp command line parameters not supported yet in the transfer spec.
|
|
1276
1280
|
|
|
1277
1281
|
The use of a _transfer-spec_ instead of `ascp` parameters has the advantage of:
|
|
1278
1282
|
|
|
@@ -1283,11 +1287,31 @@ A [_transfer-spec_](#transferspec) is a Hash table, so it is described on the co
|
|
|
1283
1287
|
|
|
1284
1288
|
## <a name="transferparams"></a>Transfer Parameters
|
|
1285
1289
|
|
|
1286
|
-
All standard _transfer-spec_ parameters can be
|
|
1287
|
-
|
|
1288
|
-
also be saved/overridden in the config file.
|
|
1290
|
+
All standard _transfer-spec_ parameters can be speficied.
|
|
1291
|
+
[_transfer-spec_](#transferspec) can also be saved/overridden in the config file.
|
|
1289
1292
|
|
|
1290
|
-
|
|
1293
|
+
References:
|
|
1294
|
+
|
|
1295
|
+
* [Aspera Node API Documentation](https://developer.ibm.com/apis/catalog?search=%22aspera%20node%20api%22)→/opt/transfers
|
|
1296
|
+
* [Aspera Transfer SDK Documentation](https://developer.ibm.com/apis/catalog?search=%22aspera%20transfer%20sdk%22)→Guides→API Ref→Transfer Spec V1
|
|
1297
|
+
|
|
1298
|
+
Parameters can be displayed with commands:
|
|
1299
|
+
|
|
1300
|
+
```
|
|
1301
|
+
$ <%=cmd%> config ascp spec
|
|
1302
|
+
$ <%=cmd%> config ascp spec --select=@json:'{"f":"Y"}' --fields=-f,n,c
|
|
1303
|
+
```
|
|
1304
|
+
|
|
1305
|
+
Columns:
|
|
1306
|
+
|
|
1307
|
+
* D=Direct (local `ascp` execution)
|
|
1308
|
+
* N=Node API
|
|
1309
|
+
* C=Connect Client
|
|
1310
|
+
* arg=`ascp` argument or environment variable
|
|
1311
|
+
|
|
1312
|
+
Fields with EX_ prefix are extensions to transfer agent [`direct`](#direct). (only in <%=tool%>).
|
|
1313
|
+
|
|
1314
|
+
<%=spec_table%>
|
|
1291
1315
|
|
|
1292
1316
|
### Destination folder for transfers
|
|
1293
1317
|
|
|
@@ -1303,8 +1327,8 @@ The option `to_folder` provides an equivalent and convenient way to change this
|
|
|
1303
1327
|
|
|
1304
1328
|
### List of files for transfers
|
|
1305
1329
|
|
|
1306
|
-
When uploading, downloading or sending files, the user must specify the list of files to transfer.
|
|
1307
|
-
|
|
1330
|
+
When uploading, downloading or sending files, the user must specify the list of files to transfer. The option to specify the list of files (Extensed value) is `sources`, the default value is `@args`, which means: take remain non used arguments (not starting with `-` as list of files.
|
|
1331
|
+
So, by default, the list of files to transfer will be simply specified on the command line:
|
|
1308
1332
|
|
|
1309
1333
|
```
|
|
1310
1334
|
$ <%=cmd%> server upload ~/mysample.file secondfile
|
|
@@ -1316,7 +1340,7 @@ This is equivalent to:
|
|
|
1316
1340
|
$ <%=cmd%> server upload --sources=@args ~/mysample.file secondfile
|
|
1317
1341
|
```
|
|
1318
1342
|
|
|
1319
|
-
More advanced options are provided to adapt to various cases. In fact, list of files to transfer are conveyed using the [_transfer-spec_](#transferspec) using the field: "paths" which is a list (array) of pairs of "source" (mandatory) and "destination" (optional).
|
|
1343
|
+
More advanced options are provided to adapt to various cases. In fact, list of files to transfer are normally conveyed using the [_transfer-spec_](#transferspec) using the field: "paths" which is a list (array) of pairs of "source" (mandatory) and "destination" (optional).
|
|
1320
1344
|
|
|
1321
1345
|
Note that this is different from the "ascp" command line. The paradigm used by <%=tool%> is:
|
|
1322
1346
|
all transfer parameters are kept in [_transfer-spec_](#transferspec) so that execution of a transfer is independent of the transfer agent. Note that other IBM Aspera interfaces use this: connect, node, transfer sdk.
|
|
@@ -1339,13 +1363,15 @@ For ease of use and flexibility, the list of files to transfer is specified by t
|
|
|
1339
1363
|
--sources=@ts --ts=@json:'{"paths":[{"source":"file1"},{"source":"file2"}]}'
|
|
1340
1364
|
```
|
|
1341
1365
|
|
|
1342
|
-
*
|
|
1366
|
+
* Not recommended: It is possible to specify bare ascp arguments using the pseudo [_transfer-spec_](#transferspec) parameter `EX_ascp_args`.
|
|
1343
1367
|
|
|
1344
1368
|
```
|
|
1345
1369
|
--sources=@ts --ts=@json:'{"paths":[{"source":"dummy"}],"EX_ascp_args":["--file-list","myfilelist"]}'
|
|
1346
1370
|
```
|
|
1347
1371
|
|
|
1348
|
-
|
|
1372
|
+
This method avoids creating a copy of the file list, but has drawbacks: it applies *only* to the [`direct`](#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 overriden by the bare ascp command line provided. (TODO) In next version, dummy source paths can be removed.
|
|
1373
|
+
|
|
1374
|
+
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`:
|
|
1349
1375
|
|
|
1350
1376
|
* `list` : (default) the path of destination is the same as source
|
|
1351
1377
|
* `pair` : in that case, the first element is the first source, the second element is the first destination, and so on.
|
|
@@ -1356,6 +1382,8 @@ Example:
|
|
|
1356
1382
|
$ <%=cmd%> server upload --src-type=pair ~/Documents/Samples/200KB.1 /Upload/sample1
|
|
1357
1383
|
```
|
|
1358
1384
|
|
|
1385
|
+
Internally, when transfer agent [`direct`](#direct) is used, a temporary file list (or pair) file is generated and provided to ascp, unless `--file-list` or `--file-pait-list` is provided in `ts` in `EX_ascp_args`.
|
|
1386
|
+
|
|
1359
1387
|
Note the special case when the source files are located on "Aspera on Cloud", i.e. using access keys and the `file id` API:
|
|
1360
1388
|
|
|
1361
1389
|
* All files must be in the same source folder.
|
|
@@ -1369,7 +1397,7 @@ Source files are located on "Aspera on cloud", when :
|
|
|
1369
1397
|
|
|
1370
1398
|
### <a name="multisession"></a>Support of multi-session
|
|
1371
1399
|
|
|
1372
|
-
Multi session, i.e. starting a transfer of a file set using multiple sessions is supported on "direct" and "node" agents, not yet on connect.
|
|
1400
|
+
Multi session, i.e. starting a transfer of a file set using multiple sessions (one ascp process per session) is supported on "direct" and "node" agents, not yet on connect.
|
|
1373
1401
|
|
|
1374
1402
|
* when agent=node :
|
|
1375
1403
|
|
|
@@ -1390,6 +1418,7 @@ shall be preferred.
|
|
|
1390
1418
|
|
|
1391
1419
|
Multi-session spawn is done by <%=tool%>.
|
|
1392
1420
|
|
|
1421
|
+
When multi-session is used, one separate UDP port is used per session (refer to `ascp` manual page).
|
|
1393
1422
|
|
|
1394
1423
|
### Examples
|
|
1395
1424
|
|
|
@@ -1419,22 +1448,161 @@ Multi-session spawn is done by <%=tool%>.
|
|
|
1419
1448
|
|
|
1420
1449
|
|
|
1421
1450
|
|
|
1422
|
-
## <a name="scheduling"></a>
|
|
1451
|
+
## <a name="scheduling"></a>Lock for exclusive execution
|
|
1452
|
+
|
|
1453
|
+
In some conditions, it may be desirable to ensure that <%=tool%> is not executed several times in parallel.
|
|
1454
|
+
|
|
1455
|
+
For instance when <%=tool%> is executed automatically on a schedule basis, one generally desire that a new execution is not started if a previous execution is still running because an on-going operation may last longer than the scheduling period:
|
|
1456
|
+
|
|
1457
|
+
* Executing instances may pile-up and kill the system
|
|
1458
|
+
* The same file may be transfered by multiple instances at the same time.
|
|
1459
|
+
* `preview` may generate the same files in multiple instances.
|
|
1460
|
+
|
|
1461
|
+
Usually the OS native scheduler already provides some sort of protection against parallel execution:
|
|
1462
|
+
|
|
1463
|
+
* The Windows scheduler does this by default
|
|
1464
|
+
* Linux cron can leverage the utility [`flock`](https://linux.die.net/man/1/flock) to do the same:
|
|
1465
|
+
|
|
1466
|
+
```
|
|
1467
|
+
/usr/bin/flock -w 0 /var/cron.lock ascli ...
|
|
1468
|
+
```
|
|
1469
|
+
|
|
1470
|
+
<%=tool%> natively supports a locking mechanism with option `lock_port`.
|
|
1471
|
+
(Technically, this opens a local TCP server port, and fails if this port is already used, providing a local lock. Lock is released when process exits).
|
|
1472
|
+
|
|
1473
|
+
Example:
|
|
1474
|
+
|
|
1475
|
+
Run this same command in two separate terminals within less than 30 seconds:
|
|
1476
|
+
|
|
1477
|
+
```
|
|
1478
|
+
ascli config echo @ruby:'sleep(30)' --lock-port=12345
|
|
1479
|
+
```
|
|
1480
|
+
|
|
1481
|
+
The first instance will sleep 30 seconds, the second one will immediately exit like this:
|
|
1482
|
+
|
|
1483
|
+
```
|
|
1484
|
+
WARN -- : Another instance is already running (Address already in use - bind(2) for "127.0.0.1" port 12345).
|
|
1485
|
+
```
|
|
1486
|
+
|
|
1487
|
+
## "Provençale"
|
|
1488
|
+
|
|
1489
|
+
`ascp`, the underlying executable implementing Aspera file transfer using FASP, has a capability to not only access the local file system (using system's `open`,`read`,`write`,`close` primitives), but also to do the same operations on other data storage such as S3, Hadoop and others. This mechanism is call *PVCL*. Several *PVCL* adapters are available, some are embedded in `ascp`
|
|
1490
|
+
, some are provided om shared libraries and must be activated. (e.g. using `trapd`)
|
|
1491
|
+
|
|
1492
|
+
The list of supported *PVCL* adapters can be retried with command:
|
|
1493
|
+
|
|
1494
|
+
```
|
|
1495
|
+
$ <%=cmd%> conf ascp info
|
|
1496
|
+
+--------------------+-----------------------------------------------------------+
|
|
1497
|
+
| key | value |
|
|
1498
|
+
+--------------------+-----------------------------------------------------------+
|
|
1499
|
+
-----8<----snip---------
|
|
1500
|
+
| product_name | IBM Aspera SDK |
|
|
1501
|
+
| product_version | 4.0.1.182389 |
|
|
1502
|
+
| process | pvcl |
|
|
1503
|
+
| shares | pvcl |
|
|
1504
|
+
| noded | pvcl |
|
|
1505
|
+
| faux | pvcl |
|
|
1506
|
+
| file | pvcl |
|
|
1507
|
+
| stdio | pvcl |
|
|
1508
|
+
| stdio-tar | pvcl |
|
|
1509
|
+
+--------------------+-----------------------------------------------------------+
|
|
1510
|
+
```
|
|
1511
|
+
|
|
1512
|
+
Here we can see the adapters: `process`, `shares`, `noded`, `faux`, `file`, `stdio`, `stdio-tar`.
|
|
1513
|
+
|
|
1514
|
+
Those adapters can be used wherever a file path is used in `ascp` including configuration. They act as a pseudo "drive".
|
|
1515
|
+
|
|
1516
|
+
The simplified format is:
|
|
1517
|
+
|
|
1518
|
+
```
|
|
1519
|
+
<adapter>:///<sub file path>?<arg1>=<val1>&...
|
|
1520
|
+
```
|
|
1521
|
+
|
|
1522
|
+
One of the adapters, used in this manual, for testing, is `faux`. It is a pseudo file system allowing generation of file data without actual storage (on source or destination).
|
|
1523
|
+
|
|
1524
|
+
## <a name="faux_testing"></a>`faux:` for testing
|
|
1525
|
+
|
|
1526
|
+
This is an extract of the man page of `ascp`. This feature is a feature of `ascp`, not <%=tool%>
|
|
1527
|
+
|
|
1528
|
+
This adapter can be used to simulate a file or a directory.
|
|
1529
|
+
|
|
1530
|
+
To send uninitialized data in place of an actual source file, the source file is replaced with an argument of the form `faux:///fname?fsize` where:
|
|
1531
|
+
|
|
1532
|
+
* `fname` is the name that will be assigned to the file on the destination
|
|
1533
|
+
* `fsize` is the number of bytes that will be sent (in decimal).
|
|
1534
|
+
|
|
1535
|
+
Note that the character `?` is a special shell character (wildcard), so `faux` file specification on command line shall be protected (using `\?` and `\&` or using quotes). If not, the shell may give error: `no matches found` or equivalent.
|
|
1536
|
+
|
|
1537
|
+
For all sizes, a suffix can be added (case insensitive) to the size: k,m,g,t,p,e (values are power of 2, e.g. 1M is 2^20, i.e. 1 mebibyte, not megabyte). The maximum allowed value is 8*2^60. Very large `faux` file sizes (petabyte range and above) will likely fail due to lack of system memory unless `faux://`.
|
|
1538
|
+
|
|
1539
|
+
To send uninitialized data in place of a source directory, the source argument is replaced with an argument of the form:
|
|
1540
|
+
|
|
1541
|
+
```
|
|
1542
|
+
faux:///dirname?<arg1>=<val1>&...
|
|
1543
|
+
```
|
|
1544
|
+
|
|
1545
|
+
`dirname` is the folder name and can contain `/` to specify a subfolder.
|
|
1546
|
+
|
|
1547
|
+
Supported arguments are:
|
|
1548
|
+
|
|
1549
|
+
<table>
|
|
1550
|
+
<tr><th>name</th><th>type</th><th>default</th><th>description</th></tr>
|
|
1551
|
+
<tr><td>count</td><td>int</td><td>mandatory</td><td>number of files</td></tr>
|
|
1552
|
+
<tr><td>file</td><td>string</td><td>file</td><td>basename for files</td></tr>
|
|
1553
|
+
<tr><td>size</td><td>int</td><td>0</td><td>size of first file.</td></tr>
|
|
1554
|
+
<tr><td>inc</td><td>int</td><td>0</td><td>increment applied to determine next file size</td></tr>
|
|
1555
|
+
<tr><td>seq</td><td>sequential<br/>random</td><td>sequential</td><td>sequence in determining next file size</td></tr>
|
|
1556
|
+
<tr><td>buf_init</td><td>none<br/>zero<br/>random</td><td>zero</td><td>how source data initialized.<br/>Option 'none' is not allowed for downloads.</td></tr>
|
|
1557
|
+
</table>
|
|
1558
|
+
|
|
1423
1559
|
|
|
1424
|
-
|
|
1560
|
+
The sequence parameter is applied as follows:
|
|
1425
1561
|
|
|
1426
|
-
|
|
1562
|
+
* If `seq` is `random` then each file size is:
|
|
1427
1563
|
|
|
1428
|
-
|
|
1564
|
+
* size +/- (inc * rand())
|
|
1565
|
+
* Where rand is a random number between 0 and 1
|
|
1566
|
+
* Note that file size must not be negative, inc will be set to size if it is greater than size
|
|
1567
|
+
* Similarly, overall file size must be less than 8 * 2^60. If size + inc is greater, inc will be reduced to limit size + inc to 7 * 2^60.
|
|
1429
1568
|
|
|
1430
|
-
|
|
1569
|
+
* If `seq` is `sequential` then each file size is:
|
|
1570
|
+
|
|
1571
|
+
* size + ((fileindex - 1) * inc)
|
|
1572
|
+
* Where first file is index 1
|
|
1573
|
+
* So file1 is size bytes, file2 is size + inc bytes, file3 is size + inc * 2 bytes, etc.
|
|
1574
|
+
* As with random, inc will be adjusted if size + (count * inc) is not less then 8 ^ 2^60.
|
|
1575
|
+
|
|
1576
|
+
Filenames generated are of the form: `<file>_<00000 . . . count>_<filesize>`
|
|
1577
|
+
|
|
1578
|
+
To discard data at the destination, the destination argument is set to `faux://` .
|
|
1579
|
+
|
|
1580
|
+
Examples:
|
|
1581
|
+
|
|
1582
|
+
* Upload 20 gigabytes of random data to file myfile to directory /Upload
|
|
1583
|
+
|
|
1584
|
+
```
|
|
1585
|
+
$ <%=cmd%> server upload faux:///myfile\?20g --to-folder=/Upload
|
|
1586
|
+
```
|
|
1587
|
+
|
|
1588
|
+
* Upload a file /tmp/sample but do not save results to disk (no docroot on destination)
|
|
1589
|
+
|
|
1590
|
+
```
|
|
1591
|
+
$ <%=cmd%> server upload /tmp/sample --to-folder=faux://
|
|
1592
|
+
```
|
|
1593
|
+
|
|
1594
|
+
* Upload a faux directory `mydir` containing 1 million files, sequentially with sizes ranging from 0 to 2 M - 2 bytes, with the basename of each file being `testfile` to /Upload
|
|
1595
|
+
|
|
1596
|
+
```
|
|
1597
|
+
$ <%=cmd%> server upload "faux:///mydir?file=testfile&count=1m&size=0&inc=2&seq=sequential" --to-folder=/Upload
|
|
1598
|
+
```
|
|
1431
1599
|
|
|
1432
1600
|
## <a name="commands"></a>Sample Commands
|
|
1433
1601
|
|
|
1434
1602
|
A non complete list of commands used in unit tests:
|
|
1435
1603
|
|
|
1436
1604
|
```
|
|
1437
|
-
<%=
|
|
1605
|
+
<%=File.read(ENV["INCL_COMMANDS"])%>
|
|
1438
1606
|
...and more
|
|
1439
1607
|
```
|
|
1440
1608
|
|
|
@@ -1442,7 +1610,7 @@ A non complete list of commands used in unit tests:
|
|
|
1442
1610
|
|
|
1443
1611
|
```
|
|
1444
1612
|
$ <%=cmd%> -h
|
|
1445
|
-
<%=
|
|
1613
|
+
<%=File.read(ENV["INCL_USAGE"])%>
|
|
1446
1614
|
|
|
1447
1615
|
```
|
|
1448
1616
|
|
|
@@ -1499,7 +1667,7 @@ For this, specify the option: `--use-generic-client=no`.
|
|
|
1499
1667
|
|
|
1500
1668
|
This will guide you through the steps to create.
|
|
1501
1669
|
|
|
1502
|
-
## <a name="
|
|
1670
|
+
## <a name="aocmanual"></a>Configuration: using manual setup
|
|
1503
1671
|
|
|
1504
1672
|
If you used the wizard (recommended): skip this section.
|
|
1505
1673
|
|
|
@@ -1665,7 +1833,7 @@ To activate default use of JWT authentication for <%=tool%> using the <%=prst%>,
|
|
|
1665
1833
|
|
|
1666
1834
|
* change auth method to JWT
|
|
1667
1835
|
* provide location of private key
|
|
1668
|
-
* provide username to login as (
|
|
1836
|
+
* provide username to login as (OAuth "subject")
|
|
1669
1837
|
|
|
1670
1838
|
Execute:
|
|
1671
1839
|
|
|
@@ -1697,19 +1865,55 @@ It allows actions (create, update, delete) on "resources": users, group, nodes,
|
|
|
1697
1865
|
|
|
1698
1866
|
Bulk operations are possible using option `bulk` (yes,no(default)): currently: create only. In that case, the operation expects an Array of Hash instead of a simple Hash using the [Extended Value Syntax](#extended).
|
|
1699
1867
|
|
|
1700
|
-
|
|
1868
|
+
#### Listing resources
|
|
1869
|
+
|
|
1870
|
+
The command `aoc admin res <type> list` lists all entities of given type. It uses paging and multiple requests if necessary.
|
|
1871
|
+
|
|
1872
|
+
The option `query` can be optionally used. It expects a Hash using [Extended Value Syntax](#extended), generally provided using: `--query=@json:{...}`. Values are directly sent to the API call and used as a filter on server side.
|
|
1873
|
+
|
|
1874
|
+
The following parameters are supported:
|
|
1875
|
+
|
|
1876
|
+
* `q` : a filter on name of resource (case insensitive, matches if value is contained in name)
|
|
1877
|
+
* `sort`: name of fields to sort results, prefix with `-` for reverse order.
|
|
1878
|
+
* `max` : maximum number of items to retrieve (stop pages when the maximum is passed)
|
|
1879
|
+
* `pmax` : maximum number of pages to request (stop pages when the maximum is passed)
|
|
1880
|
+
* `page` : native api parameter, in general do not use (added by
|
|
1881
|
+
* `per_page` : native api parameter, number of items par api call, in general do not use
|
|
1882
|
+
* Other specific parameters depending on resource type.
|
|
1883
|
+
|
|
1884
|
+
Both `max` and `pmax` are processed internally in <%=tool%>, not included in actual API call and limit the number of successive pages requested to API. <%=tool%> will return all values using paging if not provided.
|
|
1885
|
+
|
|
1886
|
+
Other parameters are directly sent as parameters to the GET request on API.
|
|
1887
|
+
|
|
1888
|
+
`page` and `per_page` are normally added by <%=tool%> to build successive API calls to get all values if there are more than 1000. (AoC allows a maximum page size of 1000).
|
|
1889
|
+
|
|
1890
|
+
`q` and `sort` are available on most resrouce types.
|
|
1891
|
+
|
|
1892
|
+
Other parameters depend on the type of entity (refer to AoC API).
|
|
1893
|
+
|
|
1894
|
+
Examples:
|
|
1895
|
+
|
|
1896
|
+
* List users with `laurent` in name:
|
|
1897
|
+
|
|
1898
|
+
```
|
|
1899
|
+
<%=cmd%> aoc admin res user list --query=--query=@json:'{"q":"laurent"}'
|
|
1900
|
+
```
|
|
1901
|
+
|
|
1902
|
+
* List users who logded-in before a date:
|
|
1701
1903
|
|
|
1702
1904
|
```
|
|
1703
|
-
--query=@json:'{"
|
|
1905
|
+
<%=cmd%> aoc admin res user list --query=@json:'{"q":"last_login_at:<2018-05-28"}'
|
|
1704
1906
|
```
|
|
1705
1907
|
|
|
1706
|
-
|
|
1908
|
+
* List external users and sort in reverse alphabetical order using name:
|
|
1909
|
+
|
|
1707
1910
|
```
|
|
1708
|
-
--query=@json:'{"member_of_any_workspace":
|
|
1709
|
-
--query=@json:'{"q":"laurent"}'
|
|
1911
|
+
<%=cmd%> aoc admin res user list --query=@json:'{"member_of_any_workspace":false,"sort":"-name"}'
|
|
1710
1912
|
```
|
|
1711
1913
|
|
|
1712
|
-
Refer to the AoC API for full list of query parameters.
|
|
1914
|
+
Refer to the AoC API for full list of query parameters, or use the browser in developer mode with the web UI.
|
|
1915
|
+
|
|
1916
|
+
Note the option `select` can also be used to further refine selection, refer to [section earlier](#option_select).
|
|
1713
1917
|
|
|
1714
1918
|
#### Access Key secrets
|
|
1715
1919
|
|
|
@@ -1763,10 +1967,10 @@ $ <%=cmd%> aoc admin res user list --query='@json:{"q":"dummyuser"}' --fields=id
|
|
|
1763
1967
|
: 98398 : dummyuser1@example.com :
|
|
1764
1968
|
: 98399 : dummyuser2@example.com :
|
|
1765
1969
|
:.......:........................:
|
|
1766
|
-
$ thelist=$(
|
|
1970
|
+
$ thelist=$(<%=cmd%> aoc admin res user list --query='@json:{"q":"dummyuser"}' --fields=id --format=json --display=data|jq -cr 'map(.id)')
|
|
1767
1971
|
$ echo $thelist
|
|
1768
|
-
|
|
1769
|
-
$ <%=cmd%> aoc admin res user --bulk=yes --id=@json:
|
|
1972
|
+
["113501","354061"]
|
|
1973
|
+
$ <%=cmd%> aoc admin res user --bulk=yes --id=@json:"$thelist" delete
|
|
1770
1974
|
:.......:.........:
|
|
1771
1975
|
: id : status :
|
|
1772
1976
|
:.......:.........:
|
|
@@ -1775,6 +1979,14 @@ $ <%=cmd%> aoc admin res user --bulk=yes --id=@json:[$thelist] delete
|
|
|
1775
1979
|
:.......:.........:
|
|
1776
1980
|
```
|
|
1777
1981
|
|
|
1982
|
+
* <a name="deactuser"></a>Find deactivated users since more than 2 years
|
|
1983
|
+
|
|
1984
|
+
```
|
|
1985
|
+
ascli aoc admin res user list --query=@ruby:'{"deactivated"=>true,"q"=>"last_login_at:<#{(DateTime.now.to_time.utc-2*365*86400).iso8601}"}'
|
|
1986
|
+
```
|
|
1987
|
+
|
|
1988
|
+
To delete them use the same method as before
|
|
1989
|
+
|
|
1778
1990
|
* Display current user's workspaces
|
|
1779
1991
|
|
|
1780
1992
|
```
|
|
@@ -1802,17 +2014,20 @@ $ <%=cmd%> aoc admin resource node --name=_node_name_ --secret=_secret_ v4 acces
|
|
|
1802
2014
|
$ <%=cmd%> aoc admin res node --secret=_secret_ v3 transfer list --value=@json:'[["q","*"],["count",5]]'
|
|
1803
2015
|
```
|
|
1804
2016
|
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
2017
|
+
Examples of query (TODO: cleanup):
|
|
2018
|
+
|
|
2019
|
+
```
|
|
2020
|
+
{"q":"type(file_upload OR file_delete OR file_download OR file_rename OR folder_create OR folder_delete OR folder_share OR folder_share_via_public_link)","sort":"-date"}
|
|
2021
|
+
|
|
2022
|
+
{"tag":"aspera.files.package_id=LA8OU3p8w"}
|
|
2023
|
+
|
|
1809
2024
|
# filter= 'id', 'short_summary', or 'summary'
|
|
1810
2025
|
# count=nnn
|
|
1811
2026
|
# tag=x.y.z%3Dvalue
|
|
1812
2027
|
# iteration_token=nnn
|
|
1813
2028
|
# after_time=2016-05-01T23:53:09Z
|
|
1814
2029
|
# active_only=true|false
|
|
1815
|
-
|
|
2030
|
+
```
|
|
1816
2031
|
|
|
1817
2032
|
* Display node events (events)
|
|
1818
2033
|
|
|
@@ -1823,7 +2038,7 @@ $ <%=cmd%> aoc admin res node --secret=_secret_ v3 events
|
|
|
1823
2038
|
* display members of a workspace
|
|
1824
2039
|
|
|
1825
2040
|
```
|
|
1826
|
-
$ <%=cmd%> aoc admin res workspace_membership list --fields=member_type,manager,member.email --query=@json:'{"
|
|
2041
|
+
$ <%=cmd%> aoc admin res workspace_membership list --fields=member_type,manager,member.email --query=@json:'{"embed":"member","inherited":false,"workspace_id":11363,"sort":"name"}'
|
|
1827
2042
|
:.............:.........:..................................:
|
|
1828
2043
|
: member_type : manager : member.email :
|
|
1829
2044
|
:.............:.........:..................................:
|
|
@@ -1844,27 +2059,27 @@ other query parameters:
|
|
|
1844
2059
|
|
|
1845
2060
|
* <a name="aoc_sample_member"></a>add all members of a workspace to another workspace
|
|
1846
2061
|
|
|
1847
|
-
a-
|
|
2062
|
+
a- Get id of first workspace
|
|
1848
2063
|
|
|
1849
2064
|
```
|
|
1850
2065
|
WS1='First Workspace'
|
|
1851
2066
|
WS1ID=$(<%=cmd%> aoc admin res workspace list --query=@json:'{"q":"'"$WS1"'"}' --select=@json:'{"name":"'"$WS1"'"}' --fields=id --format=csv)
|
|
1852
2067
|
```
|
|
1853
2068
|
|
|
1854
|
-
b-
|
|
2069
|
+
b- Get id of second workspace
|
|
1855
2070
|
|
|
1856
2071
|
```
|
|
1857
2072
|
WS2='Second Workspace'
|
|
1858
2073
|
WS2ID=$(<%=cmd%> aoc admin res workspace list --query=@json:'{"q":"'"$WS2"'"}' --select=@json:'{"name":"'"$WS2"'"}' --fields=id --format=csv)
|
|
1859
2074
|
```
|
|
1860
2075
|
|
|
1861
|
-
c-
|
|
2076
|
+
c- Extract membership information
|
|
1862
2077
|
|
|
1863
2078
|
```
|
|
1864
|
-
$ <%=cmd%> aoc admin res workspace_membership list --fields=manager,member_id,member_type,workspace_id --query=@json:'{"
|
|
2079
|
+
$ <%=cmd%> aoc admin res workspace_membership list --fields=manager,member_id,member_type,workspace_id --query=@json:'{"workspace_id":'"$WS1ID"'}' --format=jsonpp > ws1_members.json
|
|
1865
2080
|
```
|
|
1866
2081
|
|
|
1867
|
-
d-
|
|
2082
|
+
d- Convert to creation data for second workspace:
|
|
1868
2083
|
|
|
1869
2084
|
```
|
|
1870
2085
|
grep -Eve '(direct|effective_manager|_count|storage|"id")' ws1_members.json|sed '/workspace_id/ s/"'"$WS1ID"'"/"'"$WS2ID"'"/g' > ws2_members.json
|
|
@@ -1876,16 +2091,16 @@ or, using jq:
|
|
|
1876
2091
|
jq '[.[] | {member_type,member_id,workspace_id,manager,workspace_id:"'"$WS2ID"'"}]' ws1_members.json > ws2_members.json
|
|
1877
2092
|
```
|
|
1878
2093
|
|
|
1879
|
-
e-
|
|
2094
|
+
e- Add members to second workspace
|
|
1880
2095
|
|
|
1881
2096
|
```
|
|
1882
2097
|
$ <%=cmd%> aoc admin res workspace_membership create --bulk=yes @json:@file:ws2_members.json
|
|
1883
2098
|
```
|
|
1884
2099
|
|
|
1885
|
-
*
|
|
2100
|
+
* Get users who did not log since a date
|
|
1886
2101
|
|
|
1887
2102
|
```
|
|
1888
|
-
$ <%=cmd%> aoc admin res user list --fields=email --query=@json:'{"
|
|
2103
|
+
$ <%=cmd%> aoc admin res user list --fields=email --query=@json:'{"q":"last_login_at:<2018-05-28"}'
|
|
1889
2104
|
:...............................:
|
|
1890
2105
|
: email :
|
|
1891
2106
|
:...............................:
|
|
@@ -1894,10 +2109,10 @@ $ <%=cmd%> aoc admin res user list --fields=email --query=@json:'{"per_page":100
|
|
|
1894
2109
|
:...............................:
|
|
1895
2110
|
```
|
|
1896
2111
|
|
|
1897
|
-
*
|
|
2112
|
+
* List "Limited" users
|
|
1898
2113
|
|
|
1899
2114
|
```
|
|
1900
|
-
$ <%=cmd%> aoc admin res user list --fields=email --
|
|
2115
|
+
$ <%=cmd%> aoc admin res user list --fields=email --select=@json:'{"member_of_any_workspace":false}'
|
|
1901
2116
|
```
|
|
1902
2117
|
|
|
1903
2118
|
* Perform a multi Gbps transfer between two remote shared folders
|
|
@@ -1940,6 +2155,7 @@ $ <%=cmd%> -Paoc_show aoc files transfer --from-folder='IBM Cloud SJ' --to-folde
|
|
|
1940
2155
|
```
|
|
1941
2156
|
|
|
1942
2157
|
* create registration key to register a node
|
|
2158
|
+
|
|
1943
2159
|
```
|
|
1944
2160
|
$ <%=cmd%> aoc admin res admin/client create @json:'{"data":{"name":"laurentnode","client_subject_scopes":["alee","aejd"],"client_subject_enabled":true}}' --fields=token --format=csv
|
|
1945
2161
|
jfqslfdjlfdjfhdjklqfhdkl
|
|
@@ -1959,6 +2175,19 @@ $ <%=cmd%> aoc admin res admin/client list --fields=id --format=csv|<%=cmd%> aoc
|
|
|
1959
2175
|
+-----+---------+
|
|
1960
2176
|
```
|
|
1961
2177
|
|
|
2178
|
+
* List packages in a given shared inbox
|
|
2179
|
+
|
|
2180
|
+
First retrieve the id of the shared inbox, and then list packages with the appropriate filter.
|
|
2181
|
+
(To find out available filters, consult the API definition, or use the web interface in developer mode).
|
|
2182
|
+
|
|
2183
|
+
Note that when no query is provided, the query used by default is: `{"archived":false,"exclude_dropbox_packages":true,"has_content":true,"received":true}`. The workspace id is added if not already present in the query.
|
|
2184
|
+
|
|
2185
|
+
```
|
|
2186
|
+
shbxid=$(ascli aoc user shared_inboxes --select=@json:'{"dropbox.name":"My Shared Inbox"}' --format=csv --fields=dropbox_id --display=data)
|
|
2187
|
+
|
|
2188
|
+
ascli aoc packages list --query=@json:'{"dropbox_id":"'$shbxid'","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false,"sort":"-received_at"}'
|
|
2189
|
+
```
|
|
2190
|
+
|
|
1962
2191
|
## Shared folders
|
|
1963
2192
|
|
|
1964
2193
|
* list shared folders in node
|
|
@@ -1991,7 +2220,7 @@ Notes:
|
|
|
1991
2220
|
|
|
1992
2221
|
* the `value` parameter can contain any supported package creation parameter. Refer to the AoC package creation API, or display an existing package to find attributes.
|
|
1993
2222
|
* to provide the list of recipients, use fields: "recipients" and/or "bcc_recipients". <%=cmd%> will resolve the list of email addresses to expected user ids.
|
|
1994
|
-
* a
|
|
2223
|
+
* a recipient can be a shared inbox, in this case just use the name of the shared inbox as recipient.
|
|
1995
2224
|
* If a recipient is not already registered and the workspace allows external users, then the package is sent to an external user, and
|
|
1996
2225
|
* if the option `new_user_option` is `@json:{"package_contact":true}` (default), then a public link is sent and the external user does not need to create an account.
|
|
1997
2226
|
* if the option `new_user_option` is `@json:{}`, then external users are invited to join the workspace
|
|
@@ -2000,7 +2229,13 @@ Examples:
|
|
|
2000
2229
|
|
|
2001
2230
|
```
|
|
2002
2231
|
$ <%=cmd%> aoc package send --value=@json:'{"name":"my title","note":"my note","recipients":["laurent.martin.aspera@fr.ibm.com","other@example.com"]}' --sources=@args my_file.dat
|
|
2232
|
+
```
|
|
2233
|
+
|
|
2234
|
+
```
|
|
2003
2235
|
$ <%=cmd%> aoc package send --value=@json:'{"name":"my file in shared inbox","recipients":["The Shared Inbox"]}' my_file.dat --ts=@json:'{"target_rate_kbps":100000}'
|
|
2236
|
+
```
|
|
2237
|
+
|
|
2238
|
+
```
|
|
2004
2239
|
$ <%=cmd%> aoc package send --workspace=eudemo --value=@json:'{"name":"my pack title","recipients":["Shared Inbox 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"]}]}' ~/Documents/Samples/200KB.1
|
|
2005
2240
|
```
|
|
2006
2241
|
|
|
@@ -2016,7 +2251,7 @@ $ <%=cmd%> aoc packages recv --id=ALL --once-only=yes --lock-port=12345
|
|
|
2016
2251
|
* `--once-only=yes` keeps memory of any downloaded package in persistency files located in the configuration folder.
|
|
2017
2252
|
* `--lock-port=12345` ensures that only one instance is started at the same time, to avoid collisions
|
|
2018
2253
|
|
|
2019
|
-
Typically, one would
|
|
2254
|
+
Typically, one would execute this command on a regular basis, using the method of your choice:
|
|
2020
2255
|
|
|
2021
2256
|
* Windows: [Task Scheduler](https://docs.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page)
|
|
2022
2257
|
* Linux/Unix: [cron](https://www.man7.org/linux/man-pages/man5/crontab.5.html)
|
|
@@ -2024,45 +2259,45 @@ Typically, one would regularly execute this command on a regular basis, using th
|
|
|
2024
2259
|
|
|
2025
2260
|
## Download Files
|
|
2026
2261
|
|
|
2027
|
-
Download of files is straightforward with a specific syntax for the `
|
|
2262
|
+
Download of files is straightforward with a specific syntax for the `aoc files download` action: Like other commands the source file list is provided as a list with the `sources` option. Nevertheless, consider this:
|
|
2028
2263
|
|
|
2029
2264
|
* if only one source is provided, it is downloaded
|
|
2030
2265
|
* if multiple sources must be downloaded, then the first in list is the path of the source folder, and the remaining items are the file names in this folder (without path).
|
|
2031
2266
|
|
|
2032
2267
|
## Find Files
|
|
2033
2268
|
|
|
2034
|
-
The command `
|
|
2269
|
+
The command `aoc files find [--value=expression]` will recursively scan storage to find files matching the expression criteria. It works also on node resource using the v4 command. (see examples)
|
|
2035
2270
|
|
|
2036
2271
|
The expression can be of 3 formats:
|
|
2037
2272
|
|
|
2038
|
-
* empty (default) : all files, equivalent to: `exec:true`
|
|
2039
|
-
* not starting with `exec:` : the expression is a regular expression, using ruby
|
|
2273
|
+
* empty (default) : all files, equivalent to value: `exec:true`
|
|
2274
|
+
* not starting with `exec:` : the expression is a regular expression, using [Ruby Regex](https://ruby-doc.org/core/Regexp.html) syntax. equivalent to value: `exec:f['name'].match(/expression/)`
|
|
2040
2275
|
|
|
2041
2276
|
For instance, to find files with a special extension, use `--value='\.myext$'`
|
|
2042
2277
|
|
|
2043
|
-
* starting with `exec:` : the
|
|
2278
|
+
* starting with `exec:` : the Ruby code after the prefix is executed for each entry found. The entry variable name is `f`. The file is displayed if the result of the expression is true;
|
|
2044
2279
|
|
|
2045
|
-
Examples of expressions: (
|
|
2280
|
+
Examples of expressions: (using like this: `--value=exec:'<expression>'`)
|
|
2046
2281
|
|
|
2047
|
-
*
|
|
2282
|
+
* Find files more recent than 100 days
|
|
2048
2283
|
|
|
2049
2284
|
```
|
|
2050
2285
|
f["type"].eql?("file") and (DateTime.now-DateTime.parse(f["modified_time"]))<100
|
|
2051
2286
|
```
|
|
2052
2287
|
|
|
2053
|
-
*
|
|
2288
|
+
* Find files older than 1 year on a given node and store in file list
|
|
2054
2289
|
|
|
2055
2290
|
```
|
|
2056
2291
|
$ <%=cmd%> aoc admin res node --name='my node name' --secret='my secret' v4 find / --fields=path --value='exec:f["type"].eql?("file") and (DateTime.now-DateTime.parse(f["modified_time"]))<100' --format=csv > my_file_list.txt
|
|
2057
2292
|
```
|
|
2058
2293
|
|
|
2059
|
-
*
|
|
2294
|
+
* Delete the files, one by one
|
|
2060
2295
|
|
|
2061
2296
|
```
|
|
2062
2297
|
$ cat my_file_list.txt|while read path;do echo <%=cmd%> aoc admin res node --name='my node name' --secret='my secret' v4 delete "$path" ;done
|
|
2063
2298
|
```
|
|
2064
2299
|
|
|
2065
|
-
*
|
|
2300
|
+
* Delete the files in bulk
|
|
2066
2301
|
|
|
2067
2302
|
```
|
|
2068
2303
|
cat my_file_list.txt | <%=cmd%> aoc admin res node --name='my node name' --secret='my secret' v3 delete @lines:@stdin:
|
|
@@ -2076,19 +2311,40 @@ The activity app can be queried with:
|
|
|
2076
2311
|
$ <%=cmd%> aoc admin analytics transfers
|
|
2077
2312
|
```
|
|
2078
2313
|
|
|
2079
|
-
It can also support filters and send notification
|
|
2314
|
+
It can also support filters and send notification using option `notif_to`. a template is defined using option `notif_template` :
|
|
2315
|
+
|
|
2316
|
+
`mytemplate.erb`:
|
|
2317
|
+
|
|
2318
|
+
```
|
|
2319
|
+
From: <%='<'%>%=from_name%> <<%='<'%>%=from_email%>>
|
|
2320
|
+
To: <<%='<'%>%=ev['user_email']%>>
|
|
2321
|
+
Subject: <%='<'%>%=ev['files_completed']%> files received
|
|
2322
|
+
|
|
2323
|
+
Dear <%='<'%>%=ev[:user_email.to_s]%>,
|
|
2324
|
+
We received <%='<'%>%=ev['files_completed']%> files for a total of <%='<'%>%=ev['transferred_bytes']%> bytes, starting with file:
|
|
2325
|
+
<%='<'%>%=ev['content']%>
|
|
2080
2326
|
|
|
2327
|
+
Thank you.
|
|
2081
2328
|
```
|
|
2082
|
-
|
|
2329
|
+
The environment provided contains the following additional variable:
|
|
2330
|
+
|
|
2331
|
+
* ev : all details on the transfer event
|
|
2332
|
+
|
|
2333
|
+
Example:
|
|
2334
|
+
|
|
2335
|
+
```
|
|
2336
|
+
$ <%=cmd%> aoc admin analytics transfers --once-only=yes --lock-port=12345 \
|
|
2083
2337
|
--query=@json:'{"status":"completed","direction":"receive"}' \
|
|
2084
|
-
--
|
|
2338
|
+
--notif-to=active --notif-template=@file:mytemplate.erb
|
|
2085
2339
|
```
|
|
2086
2340
|
|
|
2341
|
+
Options:
|
|
2342
|
+
|
|
2087
2343
|
* `once_only` keep track of last date it was called, so next call will get only new events
|
|
2088
2344
|
* `query` filter (on API call)
|
|
2089
2345
|
* `notify` send an email as specified by template, this could be places in a file with the `@file` modifier.
|
|
2090
2346
|
|
|
2091
|
-
Note this must not be executed in less than 5 minutes because the analytics interface accepts only a period of time between 5 minutes and 6 months.
|
|
2347
|
+
Note this must not be executed in less than 5 minutes because the analytics interface accepts only a period of time between 5 minutes and 6 months. The period is [date of previous execution]..[now].
|
|
2092
2348
|
|
|
2093
2349
|
## Using specific transfer ports
|
|
2094
2350
|
|
|
@@ -2149,7 +2405,37 @@ $ <%=cmd%> ats api_key create
|
|
|
2149
2405
|
+--------+----------------------------------------------+
|
|
2150
2406
|
$ <%=cmd%> config id my_ibm_ats update --ats-key=ats_XXXXXXXXXXXXXXXXXXXXXXXX --ats-secret=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
|
|
2151
2407
|
```
|
|
2408
|
+
## Cross Organization transfers
|
|
2409
|
+
|
|
2410
|
+
It is possible to transfer files directly between organizations without having to first download locally and then upload...
|
|
2411
|
+
|
|
2412
|
+
Although optional, the creation of <%=prst%> is recommended to avoid placing all parameters in the command line.
|
|
2413
|
+
|
|
2414
|
+
Procedure to send a file from org1 to org2:
|
|
2415
|
+
|
|
2416
|
+
* Get access to Organization 1 and create a <%=prst%>: e.g. `org1`, for instance, use the [Wizard](#aocwizard)
|
|
2417
|
+
* Check that access works and locate the source file e.g. `mysourcefile`, e.g. using command `files browse`
|
|
2418
|
+
* Get access to Organization 2 and create a <%=prst%>: e.g. `org2`
|
|
2419
|
+
* Check that access works and locate the destination folder `mydestfolder`
|
|
2420
|
+
* execute the following:
|
|
2421
|
+
|
|
2422
|
+
```
|
|
2423
|
+
$ <%=cmd%> -Porg1 aoc files node_info /mydestfolder --format=json --display=data | <%=cmd%> -Porg2 aoc files upload mysourcefile --transfer=node --transfer-info=@json:@stdin:
|
|
2424
|
+
```
|
|
2152
2425
|
|
|
2426
|
+
Explanation:
|
|
2427
|
+
|
|
2428
|
+
* `-Porg1 aoc` use Aspera on Cloud plugin and load credentials for `org1`
|
|
2429
|
+
* `files node_info /mydestfolder` generate transfer information including node api credential and root id, suitable for the next command
|
|
2430
|
+
* `--format=json` format the output in JSON (instead of default text table)
|
|
2431
|
+
* `--display=data` display only the result, and remove other information, such as workspace name
|
|
2432
|
+
* `|` the standard output of the first command is fed into the second one
|
|
2433
|
+
* `-Porg2 aoc` use Aspera on Cloud plugin and load credentials for `org2`
|
|
2434
|
+
* `files upload mysourcefile` upload the file named `mysourcefile` (located in `org1`)
|
|
2435
|
+
* `--transfer=node` use transfer agent type `node` instead of default [`direct`](#direct)
|
|
2436
|
+
* `--transfer-info=@json:@stdin:` provide `node` transfer agent information, i.e. node API credentials, those are expected in JSON format and read from standard input
|
|
2437
|
+
|
|
2438
|
+
Note that when using a POSIX shell, another possibility to write `cmd1 | cmd2 --transfer-info=@json:stdin:` is `cmd2 --transfer-info=@json:$(cmd1)` instead of ``
|
|
2153
2439
|
## Examples
|
|
2154
2440
|
|
|
2155
2441
|
Example: create access key on softlayer:
|
|
@@ -2195,6 +2481,14 @@ This plugin works at FASP level (SSH/ascp/ascmd) and does not use the node API.
|
|
|
2195
2481
|
|
|
2196
2482
|
Both password and SSH keys auth are supported.
|
|
2197
2483
|
|
|
2484
|
+
If not username is provided, the default transfer user `xfer` is used.
|
|
2485
|
+
|
|
2486
|
+
If no ssh password or key is provided, and a token is provided in transfer spec, then standard bypass keys are used.
|
|
2487
|
+
|
|
2488
|
+
```
|
|
2489
|
+
$ <%=cmd%> server --url=ssh://... --ts=@json:'{"token":"Basic abc123"}'
|
|
2490
|
+
```
|
|
2491
|
+
|
|
2198
2492
|
Multiple SSH key paths can be provided. The value of the parameter `ssh_keys` can be a single value or an array. Each value is a path to a private key and is expanded ("~" is replaced with the user's home folder).
|
|
2199
2493
|
|
|
2200
2494
|
Examples:
|
|
@@ -2232,7 +2526,7 @@ This means that you dont have such an ssh agent running:
|
|
|
2232
2526
|
$ <%=cmd%> server --ssh-options=@ruby:'{use_agent: false}' ...
|
|
2233
2527
|
```
|
|
2234
2528
|
|
|
2235
|
-
This can also be set as default using a preset
|
|
2529
|
+
This can also be set as default using a preset.
|
|
2236
2530
|
|
|
2237
2531
|
## Example
|
|
2238
2532
|
|
|
@@ -2252,18 +2546,36 @@ This creates a <%=prst%> "aspera_demo_server" and set it as default for applicat
|
|
|
2252
2546
|
|
|
2253
2547
|
This plugin gives access to capabilities provided by HSTS node API.
|
|
2254
2548
|
|
|
2255
|
-
##
|
|
2549
|
+
## File Operations
|
|
2256
2550
|
|
|
2257
2551
|
It is possible to:
|
|
2258
2552
|
* browse
|
|
2259
2553
|
* transfer (upload / download)
|
|
2260
2554
|
* ...
|
|
2261
2555
|
|
|
2556
|
+
For transfers, it is possible to control how transfer is authorized using option: `token_type`:
|
|
2557
|
+
|
|
2558
|
+
* `aspera` : api `<upload|download>_setup` is called to create the transfer spec including the Aspera token
|
|
2559
|
+
* `basic` : transfer spec is created like this:
|
|
2560
|
+
|
|
2561
|
+
```
|
|
2562
|
+
{
|
|
2563
|
+
"remote_host": address of node url,
|
|
2564
|
+
"remote_user": "xfer",
|
|
2565
|
+
"ssh_port": 33001,
|
|
2566
|
+
"token": "Basic <base 64 encoded user/pass>",
|
|
2567
|
+
"direction": send/recv
|
|
2568
|
+
}
|
|
2569
|
+
```
|
|
2570
|
+
|
|
2571
|
+
* `hybrid` : same as `aspera`, but token is replaced with basic token like `basic`
|
|
2572
|
+
|
|
2262
2573
|
## Central
|
|
2263
2574
|
|
|
2264
2575
|
The central subcommand uses the "reliable query" API (session and file). It allows listing transfer sessions and transfered files.
|
|
2265
2576
|
|
|
2266
2577
|
Filtering can be applied:
|
|
2578
|
+
|
|
2267
2579
|
```
|
|
2268
2580
|
$ <%=cmd%> node central file list
|
|
2269
2581
|
```
|
|
@@ -2289,7 +2601,6 @@ Refer to [Aspera documentation](https://download.asperasoft.com/download/docs/en
|
|
|
2289
2601
|
* Start watchd and watchfolderd services running as a system user having access to files
|
|
2290
2602
|
* configure a watchfolder to define automated transfers
|
|
2291
2603
|
|
|
2292
|
-
|
|
2293
2604
|
```
|
|
2294
2605
|
$ <%=cmd%> node service create @json:'{"id":"mywatchd","type":"WATCHD","run_as":{"user":"user1"}}'
|
|
2295
2606
|
$ <%=cmd%> node service create @json:'{"id":"mywatchfolderd","type":"WATCHFOLDERD","run_as":{"user":"user1"}}'
|
|
@@ -2335,16 +2646,19 @@ to download files.
|
|
|
2335
2646
|
$ <%=cmd%> node access_key create --value=@json:'{"id":"eudemo-sedemo","secret":"mystrongsecret","storage":{"type":"local","path":"/data/asperafiles"}}'
|
|
2336
2647
|
```
|
|
2337
2648
|
|
|
2338
|
-
# Plugin: IBM Aspera
|
|
2649
|
+
# Plugin: IBM Aspera Faspex5
|
|
2339
2650
|
|
|
2340
|
-
|
|
2651
|
+
3 authentication methods are supported:
|
|
2341
2652
|
|
|
2342
|
-
*
|
|
2343
|
-
*
|
|
2653
|
+
* jwt
|
|
2654
|
+
* web
|
|
2655
|
+
* boot
|
|
2344
2656
|
|
|
2345
|
-
|
|
2657
|
+
For JWT, create an API client in Faspex with jwt support, and use: `--auth=jwt`.
|
|
2346
2658
|
|
|
2347
|
-
|
|
2659
|
+
For web method, create an API client in Faspex, and use: --auth=web
|
|
2660
|
+
|
|
2661
|
+
For boot method: (will be removed in future)
|
|
2348
2662
|
|
|
2349
2663
|
* open a browser
|
|
2350
2664
|
* start developer mode
|
|
@@ -2357,30 +2671,74 @@ Use it as password and use `--auth=boot`.
|
|
|
2357
2671
|
$ <%=cmd%> conf id f5boot update --url=https://localhost/aspera/faspex --auth=boot --password=ABC.DEF.GHI...
|
|
2358
2672
|
```
|
|
2359
2673
|
|
|
2360
|
-
|
|
2674
|
+
Ready to use Faspex5 with CLI.
|
|
2675
|
+
|
|
2676
|
+
# Plugin: IBM Aspera Faspex (4.x)
|
|
2677
|
+
|
|
2678
|
+
Notes:
|
|
2679
|
+
|
|
2680
|
+
* The command "v4" requires the use of APIv4, refer to the Faspex Admin manual on how to activate.
|
|
2681
|
+
* For full details on Faspex API, refer to: [Reference on Developer Site](https://developer.ibm.com/apis/catalog/?search=faspex)
|
|
2682
|
+
|
|
2683
|
+
## Listing Packages
|
|
2684
|
+
|
|
2685
|
+
Command: `faspex package list`
|
|
2686
|
+
|
|
2687
|
+
### Option `box`
|
|
2688
|
+
|
|
2689
|
+
By default it looks in box `inbox`, but the following boxes are also supported: `archive` and `sent`, selected with option `box`.
|
|
2690
|
+
|
|
2691
|
+
### Option `recipient`
|
|
2692
|
+
|
|
2693
|
+
A user can receive a package because the recipient is:
|
|
2694
|
+
|
|
2695
|
+
* the user himself (default)
|
|
2696
|
+
* the user is part of a dropbox or a workgroup (select with option `recipient` with value `*<name of WG or DB>`
|
|
2697
|
+
|
|
2698
|
+
### Option `query`
|
|
2699
|
+
|
|
2700
|
+
As inboxes may be large, it is possible to use the following query parameters:
|
|
2701
|
+
|
|
2702
|
+
* `count` : (native) number items in one API call (default=0, equivalent to 10)
|
|
2703
|
+
* `page` : (native) id of page in call (default=0)
|
|
2704
|
+
* `startIndex` : (native) index of item to start, default=0, oldest index=0
|
|
2705
|
+
* `max` : maximum number of items
|
|
2706
|
+
* `pmax` : maximum number of pages
|
|
2707
|
+
|
|
2708
|
+
(SQL query is `LIMIT <startIndex>, <count>`)
|
|
2709
|
+
|
|
2710
|
+
The API is listed in [Faspex 4 API Reference](https://developer.ibm.com/apis/catalog/?search=faspex) under "Services (API v.3)".
|
|
2711
|
+
|
|
2712
|
+
If no parameter `max` or `pmax` is provided, then all packages will be listed in the inbox, which result in paged API calls (using parameter: `count` and `page`). By default page is `0` (`10`), it can be increased to have less calls.
|
|
2713
|
+
|
|
2714
|
+
### Example
|
|
2361
2715
|
|
|
2362
2716
|
```
|
|
2363
|
-
$
|
|
2364
|
-
$ <%=cmd%> faspex5 -Pf5boot auth_client create --value=@json:'{"name":"hello","client_type":"public","redirect_uris":["https://localhost:12345"],"allow_jwt_grant":true,"public_key":"'$jsonk'"}'
|
|
2717
|
+
$ <%=cmd%> faspex package list --box=inbox --recipient='*my_dropbox' --query=@json:'{"max":20,"pmax":2,"count":20}'
|
|
2365
2718
|
```
|
|
2366
2719
|
|
|
2367
|
-
|
|
2720
|
+
List a maximum of 20 items grouped by pages of 20, with maximum 2 pages in received box (inbox) when received in dropbox `*my_dropbox`.
|
|
2721
|
+
|
|
2722
|
+
## Receiving a Package
|
|
2723
|
+
|
|
2724
|
+
The command is `package recv`, possible methods are:
|
|
2725
|
+
|
|
2726
|
+
* provide a package id with option `id`
|
|
2727
|
+
* provide a public link with option `link`
|
|
2728
|
+
* provide a `faspe:` URI with option `link`
|
|
2368
2729
|
|
|
2369
2730
|
```
|
|
2370
|
-
$
|
|
2371
|
-
$ <%=cmd%>
|
|
2731
|
+
$ <%=cmd%> faspex package recv --id=12345
|
|
2732
|
+
$ <%=cmd%> faspex package recv --link=faspe://...
|
|
2372
2733
|
```
|
|
2373
2734
|
|
|
2374
|
-
|
|
2735
|
+
If the package is in a specific dropbox, add option `recipient` for both the `list` and `recv` commands.
|
|
2375
2736
|
|
|
2376
2737
|
```
|
|
2377
|
-
$ <%=cmd%>
|
|
2378
|
-
|
|
2379
|
-
```
|
|
2380
|
-
|
|
2381
|
-
Ready to use Faspex5 with CLI.
|
|
2738
|
+
$ <%=cmd%> faspex package list --recipient='*thedropboxname'
|
|
2739
|
+
```
|
|
2382
2740
|
|
|
2383
|
-
|
|
2741
|
+
if `id` is set to `ALL`, then all packages are downloaded, and if option `once_only`is used, then a persistency file is created to keep track of already downloaded packages.
|
|
2384
2742
|
|
|
2385
2743
|
## Sending a Package
|
|
2386
2744
|
|
|
@@ -2399,7 +2757,19 @@ Additional optional parameters in `delivery_info`:
|
|
|
2399
2757
|
* Package Note: : `"note":"note this and that"`
|
|
2400
2758
|
* Package Metadata: `"metadata":{"Meta1":"Val1","Meta2":"Val2"}`
|
|
2401
2759
|
|
|
2402
|
-
##
|
|
2760
|
+
## Email notification on transfer
|
|
2761
|
+
|
|
2762
|
+
Like for any transfer, a notification can be sent by email using parameters: `notif_to` and `notif_template` .
|
|
2763
|
+
|
|
2764
|
+
Example:
|
|
2765
|
+
|
|
2766
|
+
```
|
|
2767
|
+
$ <%=cmd%> faspex package send --delivery-info=@json:'{"title":"test pkg 1","recipients":["aspera.user1@gmail.com"]}' ~/Documents/Samples/200KB.1 --notif-to=aspera.user1@gmail.com --notif-template=@ruby:'%Q{From: <%='<'%>%=from_name%> <<%='<'%>%=from_email%>>\nTo: <<%='<'%>%=to%>>\nSubject: Package sent: <%='<'%>%=ts["tags"]["aspera"]["faspex"]["metadata"]["_pkg_name"]%> files received\n\nTo user: <%='<'%>%=ts["tags"]["aspera"]["faspex"]["recipients"].first["email"]%>}'
|
|
2768
|
+
```
|
|
2769
|
+
|
|
2770
|
+
In this example the notification template is directly provided on command line. Package information placed in the message are directly taken from the tags in transfer spec. The template can be placed in a file using modifier: `@file:`
|
|
2771
|
+
|
|
2772
|
+
## Operation on dropboxes
|
|
2403
2773
|
|
|
2404
2774
|
Example:
|
|
2405
2775
|
|
|
@@ -2409,7 +2779,7 @@ $ <%=cmd%> faspex v4 dropbox list
|
|
|
2409
2779
|
$ <%=cmd%> faspex v4 dropbox delete --id=36
|
|
2410
2780
|
```
|
|
2411
2781
|
|
|
2412
|
-
##
|
|
2782
|
+
## Remote sources
|
|
2413
2783
|
|
|
2414
2784
|
Faspex lacks an API to list the contents of a remote source (available in web UI). To workaround this,
|
|
2415
2785
|
the node API is used, for this it is required to add a section ":storage" that links
|
|
@@ -2460,29 +2830,38 @@ $ for p in 1 2 3;do <%=cmd%> shares2 admin users list --value=@json:'{"page":'$p
|
|
|
2460
2830
|
# Plugin: IBM Cloud Object Storage
|
|
2461
2831
|
|
|
2462
2832
|
The IBM Cloud Object Storage provides the possibility to execute transfers using FASP.
|
|
2463
|
-
It uses the same transfer service as Aspera on Cloud.
|
|
2464
|
-
|
|
2833
|
+
It uses the same transfer service as Aspera on Cloud, called Aspera Transfer Service (ATS).
|
|
2834
|
+
Available ATS regions: [https://status.aspera.io](https://status.aspera.io)
|
|
2835
|
+
|
|
2836
|
+
There are two possibilities to provide credentials. If you already have the endpoint, apikey and CRN, use the forst method. If you dont have credentials but have access to the IBM Cloud console, then use the second method.
|
|
2465
2837
|
|
|
2466
|
-
|
|
2838
|
+
## Using endpoint, apikey and Ressource Instance ID (CRN)
|
|
2839
|
+
|
|
2840
|
+
If you have those parameters already, then following options shall be provided:
|
|
2467
2841
|
|
|
2468
2842
|
* `bucket` bucket name
|
|
2469
2843
|
* `endpoint` storage endpoint url, e.g. https://s3.hkg02.cloud-object-storage.appdomain.cloud
|
|
2470
2844
|
* `apikey` API Key
|
|
2471
2845
|
* `crn` resource instance id
|
|
2472
2846
|
|
|
2473
|
-
|
|
2847
|
+
For example, let us create a default configuration:
|
|
2474
2848
|
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2849
|
+
```
|
|
2850
|
+
$ <%=cmd%> conf id mycos update --bucket=mybucket --endpoint=https://s3.us-east.cloud-object-storage.appdomain.cloud --apikey=abcdefgh --crn=crn:v1:bluemix:public:iam-identity::a/xxxxxxx
|
|
2851
|
+
$ <%=cmd%> conf id default set cos mycos
|
|
2852
|
+
```
|
|
2478
2853
|
|
|
2479
|
-
|
|
2854
|
+
Then, jump to the transfer example.
|
|
2855
|
+
|
|
2856
|
+
## Using service credential file
|
|
2857
|
+
|
|
2858
|
+
If you are the COS administrator and dont have yet the credential: Service credentials are directly created using the IBM cloud web ui. Navigate to:
|
|
2480
2859
|
|
|
2481
2860
|
Navigation Menu → Resource List → Storage → Cloud Object Storage → Service Credentials → <select or create credentials> → view credentials → copy
|
|
2482
2861
|
|
|
2483
2862
|
Then save the copied value to a file, e.g. : `$HOME/cos_service_creds.json`
|
|
2484
2863
|
|
|
2485
|
-
or using the CLI:
|
|
2864
|
+
or using the IBM Cloud CLI:
|
|
2486
2865
|
|
|
2487
2866
|
```
|
|
2488
2867
|
$ ibmcloud resource service-keys
|
|
@@ -2513,33 +2892,38 @@ The field `resource_instance_id` is for option `crn`
|
|
|
2513
2892
|
|
|
2514
2893
|
The field `apikey` is for option `apikey`
|
|
2515
2894
|
|
|
2516
|
-
|
|
2895
|
+
(If needed: endpoints for regions can be found by querying the `endpoints` URL.)
|
|
2896
|
+
|
|
2897
|
+
The required options for this method are:
|
|
2898
|
+
|
|
2899
|
+
* `bucket` bucket name
|
|
2900
|
+
* `region` bucket region, e.g. eu-de
|
|
2901
|
+
* `service_credentials` see below
|
|
2517
2902
|
|
|
2518
|
-
For
|
|
2903
|
+
For example, let us create a default configuration:
|
|
2519
2904
|
|
|
2520
2905
|
```
|
|
2521
2906
|
$ <%=cmd%> conf id mycos update --bucket=laurent --service-credentials=@val:@json:@file:~/service_creds.json --region=us-south
|
|
2522
2907
|
$ <%=cmd%> conf id default set cos mycos
|
|
2523
2908
|
```
|
|
2524
2909
|
|
|
2525
|
-
|
|
2910
|
+
## Operations, transfers
|
|
2526
2911
|
|
|
2527
|
-
|
|
2528
|
-
$ <%=cmd%> conf id mycos update --bucket=mybucket --endpoint=https://s3.us-east.cloud-object-storage.appdomain.cloud --apikey=abcdefgh --crn=crn:v1:bluemix:public:iam-identity::a/xxxxxxx
|
|
2529
|
-
$ <%=cmd%> conf id default set cos mycos
|
|
2530
|
-
```
|
|
2912
|
+
Let's assume you created a default configuration from once of the two previous steps (else specify the access options on command lines).
|
|
2531
2913
|
|
|
2532
|
-
|
|
2914
|
+
A subset of `node` plugin operations are supported, basically node API:
|
|
2533
2915
|
|
|
2534
2916
|
```
|
|
2535
|
-
$ <%=cmd%> cos node
|
|
2536
|
-
$ <%=cmd%> cos node upload
|
|
2917
|
+
$ <%=cmd%> cos node info
|
|
2918
|
+
$ <%=cmd%> cos node upload 'faux:///sample1G?1g'
|
|
2537
2919
|
```
|
|
2538
2920
|
|
|
2921
|
+
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.
|
|
2922
|
+
|
|
2539
2923
|
# Plugin: IBM Aspera Sync
|
|
2540
2924
|
|
|
2541
|
-
A basic plugin to start an "async" using <%=tool%>.
|
|
2542
|
-
to start from ma configuration file, using <%=tool%> standard options.
|
|
2925
|
+
A basic plugin to start an "async" using <%=tool%>.
|
|
2926
|
+
The main advantage is the possibility to start from ma configuration file, using <%=tool%> standard options.
|
|
2543
2927
|
|
|
2544
2928
|
# Plugin: Preview
|
|
2545
2929
|
|
|
@@ -2631,8 +3015,10 @@ yum install -y ImageMagick optipng
|
|
|
2631
3015
|
|
|
2632
3016
|
### Video: FFmpeg
|
|
2633
3017
|
|
|
3018
|
+
The easiest method is to download and install the latest released version of ffmpeg with static libraries from [https://johnvansickle.com/ffmpeg/](https://johnvansickle.com/ffmpeg/)
|
|
3019
|
+
|
|
2634
3020
|
```
|
|
2635
|
-
curl -s https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz|(mkdir -p /opt && cd /opt &&
|
|
3021
|
+
curl -s https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz|(mkdir -p /opt && cd /opt && rm -f ffmpeg /usr/bin/{ffmpeg,ffprobe} && rm -fr ffmpeg-*-amd64-static && tar xJvf - && ln -s ffmpeg-* ffmpeg && ln -s /opt/ffmpeg/{ffmpeg,ffprobe} /usr/bin)
|
|
2636
3022
|
```
|
|
2637
3023
|
|
|
2638
3024
|
### Office: Unoconv and Libreoffice
|
|
@@ -2817,14 +3203,14 @@ Aspera CLI can send email, for that setup SMTP configuration. This is done with
|
|
|
2817
3203
|
The `smtp` option is a hash table (extended value) with the following fields:
|
|
2818
3204
|
<table>
|
|
2819
3205
|
<tr><th>field</th><th>default</th><th>example</th><th>description</th></tr>
|
|
2820
|
-
<tr><td
|
|
2821
|
-
<tr><td
|
|
2822
|
-
<tr><td
|
|
2823
|
-
<tr><td
|
|
2824
|
-
<tr><td
|
|
2825
|
-
<tr><td
|
|
2826
|
-
<tr><td
|
|
2827
|
-
<tr><td
|
|
3206
|
+
<tr><td>`server`</td><td>-</td><td>smtp.gmail.com</td><td>SMTP server address</td></tr>
|
|
3207
|
+
<tr><td>`tls`</td><td>true</td><td>false</td><td>use of TLS</td></tr>
|
|
3208
|
+
<tr><td>`port`</td><td>587 for tls<br/>25 else</td><td>587</td><td>port for service</td></tr>
|
|
3209
|
+
<tr><td>`domain`</td><td>domain of server</td><td>gmail.com</td><td>email domain of user</td></tr>
|
|
3210
|
+
<tr><td>`username`</td><td>-</td><td>john@example.com</td><td>user to authenticate on SMTP server, leave empty for open auth.</td></tr>
|
|
3211
|
+
<tr><td>`password`</td><td>-</td><td>MyP@ssword</td><td>password for above username</td></tr>
|
|
3212
|
+
<tr><td>`from_email`</td><td>username if defined</td><td>laurent.martin.l@gmail.com</td><td>address used if received replies</td></tr>
|
|
3213
|
+
<tr><td>`from_name`</td><td>same as email</td><td>John Wayne</td><td>display name of sender</td></tr>
|
|
2828
3214
|
</table>
|
|
2829
3215
|
|
|
2830
3216
|
## Example of configuration:
|
|
@@ -2854,13 +3240,52 @@ $ <%=cmd%> config id cli_default set smtp @val:@preset:smtp_google
|
|
|
2854
3240
|
$ <%=cmd%> config id default set config cli_default
|
|
2855
3241
|
```
|
|
2856
3242
|
|
|
3243
|
+
## Email templates
|
|
3244
|
+
|
|
3245
|
+
Sent emails are built using a template that uses the [ERB](https://www.tutorialspoint.com/ruby/eruby.htm) syntax.
|
|
3246
|
+
|
|
3247
|
+
The template is the full SMTP message, including headers.
|
|
3248
|
+
|
|
3249
|
+
The following variables are defined by default:
|
|
3250
|
+
|
|
3251
|
+
* from_name
|
|
3252
|
+
* from_email
|
|
3253
|
+
* to
|
|
3254
|
+
|
|
3255
|
+
Other variables are defined depending on context.
|
|
3256
|
+
|
|
2857
3257
|
## Test
|
|
2858
3258
|
|
|
2859
3259
|
Check settings with `smtp_settings` command. Send test email with `email_test`.
|
|
2860
3260
|
|
|
2861
3261
|
```
|
|
2862
3262
|
$ <%=cmd%> config --smtp=@preset:smtp_google smtp
|
|
2863
|
-
$ <%=cmd%> config --smtp=@preset:smtp_google email sample.dest@example.com
|
|
3263
|
+
$ <%=cmd%> config --smtp=@preset:smtp_google email --notif-to=sample.dest@example.com
|
|
3264
|
+
```
|
|
3265
|
+
|
|
3266
|
+
## Notifications for transfer status
|
|
3267
|
+
|
|
3268
|
+
An e-mail notification can be sent upon transfer success and failure (one email per transfer job, one job being possibly multi session, and possibly after retry).
|
|
3269
|
+
|
|
3270
|
+
To activate, use option `notif_to`.
|
|
3271
|
+
|
|
3272
|
+
A default e-mail template is used, but it can be overriden with option `notif_template`.
|
|
3273
|
+
|
|
3274
|
+
The environment provided contains the following additional variables:
|
|
3275
|
+
|
|
3276
|
+
* subject
|
|
3277
|
+
* body
|
|
3278
|
+
* global_transfer_status
|
|
3279
|
+
* ts
|
|
3280
|
+
|
|
3281
|
+
Example of template:
|
|
3282
|
+
|
|
3283
|
+
```
|
|
3284
|
+
From: <%='<'%>%=from_name%> <<%='<'%>%=from_email%>>
|
|
3285
|
+
To: <<%='<'%>%=to%>>
|
|
3286
|
+
Subject: <%='<'%>%=subject%>
|
|
3287
|
+
|
|
3288
|
+
Transfer is: <%='<'%>%=global_transfer_status%>
|
|
2864
3289
|
```
|
|
2865
3290
|
|
|
2866
3291
|
# Tool: `asession`
|
|
@@ -2891,7 +3316,7 @@ Note that there are special "extended" [_transfer-spec_](#transferspec) paramete
|
|
|
2891
3316
|
* `EX_loglevel` to change log level of the tool
|
|
2892
3317
|
* `EX_file_list_folder` to set the folder used to store (exclusively, because of garbage collection) generated file lists. By default it is `[system tmp folder]/[username]_asession_filelists`
|
|
2893
3318
|
|
|
2894
|
-
Note that in addition, many "EX_" [_transfer-spec_](#transferspec) parameters are supported for the
|
|
3319
|
+
Note that in addition, many "EX_" [_transfer-spec_](#transferspec) parameters are supported for the [`direct`](#direct) transfer agent (used by `asession`), refer to section [_transfer-spec_](#transferspec).
|
|
2895
3320
|
|
|
2896
3321
|
## Comparison of interfaces
|
|
2897
3322
|
|
|
@@ -2934,7 +3359,7 @@ Nodejs: [https://www.npmjs.com/package/aspera](https://www.npmjs.com/package/asp
|
|
|
2934
3359
|
|
|
2935
3360
|
```
|
|
2936
3361
|
$ asession -h
|
|
2937
|
-
<%=
|
|
3362
|
+
<%=File.read(ENV["INCL_ASESSION"])%>
|
|
2938
3363
|
```
|
|
2939
3364
|
|
|
2940
3365
|
# Hot folder
|
|
@@ -2971,8 +3396,8 @@ Interesting ascp features are found in its arguments: (see ascp manual):
|
|
|
2971
3396
|
Note that:
|
|
2972
3397
|
|
|
2973
3398
|
* <%=tool%> takes transfer parameters exclusively as a transfer_spec, with `--ts` parameter.
|
|
2974
|
-
* not all native ascp arguments are available as standard transfer_spec parameters
|
|
2975
|
-
* native ascp arguments can be provided with the [_transfer-spec_](#transferspec) parameter: EX_ascp_args (array), only for the
|
|
3399
|
+
* most, but not all native ascp arguments are available as standard transfer_spec parameters
|
|
3400
|
+
* native ascp arguments can be provided with the [_transfer-spec_](#transferspec) parameter: EX_ascp_args (array), only for the [`direct`](#direct) transfer agent (not connect or node)
|
|
2976
3401
|
|
|
2977
3402
|
### server side and configuration
|
|
2978
3403
|
|
|
@@ -2991,7 +3416,7 @@ $ <%=cmd%> server upload source_hot --to-folder=/Upload/target_hot --lock-port=1
|
|
|
2991
3416
|
|
|
2992
3417
|
```
|
|
2993
3418
|
|
|
2994
|
-
The local (here, relative path: source_hot) is sent (upload) to basic fasp server, source files are deleted after transfer. growing files will be sent only once they dont grow anymore (based ona 8 second cooloff period). If a transfer takes more than the execution period, then the subsequent execution is skipped (lock-port).
|
|
3419
|
+
The local folder (here, relative path: source_hot) is sent (upload) to basic fasp server, source files are deleted after transfer. growing files will be sent only once they dont grow anymore (based ona 8 second cooloff period). If a transfer takes more than the execution period, then the subsequent execution is skipped (lock-port).
|
|
2995
3420
|
|
|
2996
3421
|
# Aspera Health check and Nagios
|
|
2997
3422
|
|
|
@@ -3068,25 +3493,56 @@ So, it evolved into <%=tool%>:
|
|
|
3068
3493
|
|
|
3069
3494
|
# Changes (Release notes)
|
|
3070
3495
|
|
|
3071
|
-
* <%=
|
|
3496
|
+
* <%=gemspec.version.to_s%>
|
|
3497
|
+
|
|
3498
|
+
* new: `aoc packages list` add possibility to add filter with option `query`
|
|
3499
|
+
* new: `aoc admin res xxx list` now get all items by default #50
|
|
3500
|
+
* new: `preset` option can specify name or hash value
|
|
3501
|
+
* new: `node` plugin accepts bearer token and access key as credential
|
|
3502
|
+
* new: `node` option `token_type` allows using basic token in addition to aspera type.
|
|
3503
|
+
* 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.
|
|
3504
|
+
* change: (break) resource `apps_new` of `aoc` replaced with `application` (more clear)
|
|
3505
|
+
|
|
3506
|
+
* 4.3.0
|
|
3507
|
+
|
|
3508
|
+
* new: parameter `multi_incr_udp` for option `transfer_info`: control if UDP port is incremented when multi-session is used on [`direct`](#direct) transfer agent.
|
|
3509
|
+
* 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.
|
|
3510
|
+
|
|
3511
|
+
* 4.2.2
|
|
3512
|
+
|
|
3513
|
+
* new: `faspex package list` retrieves the whole list, not just first page
|
|
3514
|
+
* new: support web based auth to aoc and faspex 5 using HTTPS, new dependency on gem `webrick`
|
|
3515
|
+
* new: the error "Remote host is not who we expected" displays a special remediation message
|
|
3516
|
+
* new: `conf ascp spec` displays supported transfer spec
|
|
3517
|
+
* new: options `notif_to` and `notif_template` to send email notifications on transfer (and other events)
|
|
3518
|
+
* fix: space character in `faspe:` url are precent encoded if needed
|
|
3519
|
+
* fix: `preview scan`: if file_id is unknown, ignore and continue scan
|
|
3520
|
+
* change: for commands that potentially execute several transfers (`package recv --id=ALL`), if one transfer fails then <%=tool%> exits with code 1 (instead of zero=success)
|
|
3521
|
+
* change: (break) option `notify` or `aoc` replaced with `notif_to` and `notif_template`
|
|
3522
|
+
|
|
3523
|
+
* 4.2.1
|
|
3524
|
+
|
|
3525
|
+
* new: command `faspex package recv` supports link of type: `faspe:`
|
|
3526
|
+
* new: command `faspex package recv` supports option `recipient` to specify dropbox with leading `*`
|
|
3527
|
+
|
|
3528
|
+
* 4.2.0
|
|
3072
3529
|
|
|
3073
3530
|
* new: command `aoc remind` to receive organization membership by email
|
|
3074
3531
|
* new: in `preview` option `value` to filter out on file name
|
|
3075
3532
|
* new: `initdemo` to initialize for demo server
|
|
3076
|
-
* new: `direct` transfer agent options: `spawn_timeout_sec` and `spawn_delay_sec`
|
|
3533
|
+
* new: [`direct`](#direct) transfer agent options: `spawn_timeout_sec` and `spawn_delay_sec`
|
|
3077
3534
|
* fix: on Windows `conf ascp use` expects ascp.exe
|
|
3078
3535
|
* fix: (break) multi_session_threshold is Integer, not String
|
|
3079
3536
|
* fix: `conf ascp install` renames sdk folder if it already exists (leftover shared lib may make fail)
|
|
3080
3537
|
* fix: removed replace_illegal_chars from default aspera.conf causing "Error creating illegal char conversion table"
|
|
3081
3538
|
* change: (break) `aoc apiinfo` is removed, use `aoc servers` to provide the list of cloud systems
|
|
3082
|
-
* change: (break) parameters for resume in `transfer-info` for `direct` are now in sub-key `"resume"`
|
|
3539
|
+
* change: (break) parameters for resume in `transfer-info` for [`direct`](#direct) are now in sub-key `"resume"`
|
|
3083
3540
|
|
|
3084
3541
|
* 4.1.0
|
|
3085
3542
|
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
* new: renamed command `nagios_check` to `health`
|
|
3543
|
+
* 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
|
|
3544
|
+
* new: update documentation with regard to offline and docker installation
|
|
3545
|
+
* new: renamed command `nagios_check` to `health`
|
|
3090
3546
|
* new: agent `http_gw` now supports upload
|
|
3091
3547
|
* new: added option `sdk_url` to install SDK from local file for offline install
|
|
3092
3548
|
* new: check new gem version periodically
|
|
@@ -3099,7 +3555,7 @@ So, it evolved into <%=tool%>:
|
|
|
3099
3555
|
|
|
3100
3556
|
* 4.0.0
|
|
3101
3557
|
|
|
3102
|
-
* now available as open source at [<%=
|
|
3558
|
+
* now available as open source at [<%=gemspec.homepage%>](<%=gemspec.homepage%>) with general cleanup
|
|
3103
3559
|
* changed default tool name from `mlia` to `ascli`
|
|
3104
3560
|
* changed `aspera` command to `aoc`
|
|
3105
3561
|
* changed gem name from `asperalm` to `aspera-cli`
|
|
@@ -3137,8 +3593,8 @@ So, it evolved into <%=tool%>:
|
|
|
3137
3593
|
* allow bulk delete in `aspera files` with option `bulk=yes`
|
|
3138
3594
|
* fix getting connect versions
|
|
3139
3595
|
* added section for Aix
|
|
3140
|
-
* support all ciphers for `
|
|
3141
|
-
* added transfer spec param `apply_local_docroot` for `
|
|
3596
|
+
* support all ciphers for [`direct`](#direct) agent (including gcm, etc..)
|
|
3597
|
+
* added transfer spec param `apply_local_docroot` for [`direct`](#direct)
|
|
3142
3598
|
|
|
3143
3599
|
* 0.11.4
|
|
3144
3600
|
|
|
@@ -3193,7 +3649,7 @@ So, it evolved into <%=tool%>:
|
|
|
3193
3649
|
* 0.10.12
|
|
3194
3650
|
|
|
3195
3651
|
* added support for AoC node registration keys
|
|
3196
|
-
* replaced option : `local_resume` with `transfer_info` for agent `direct`
|
|
3652
|
+
* replaced option : `local_resume` with `transfer_info` for agent [`direct`](#direct)
|
|
3197
3653
|
* Transfer agent is no more a Singleton instance, but only one is used in CLI
|
|
3198
3654
|
* `@incps` : new extended value modifier
|
|
3199
3655
|
* ATS: no more provides access keys secrets: now user must provide it
|
|
@@ -3243,9 +3699,9 @@ So, it evolved into <%=tool%>:
|
|
|
3243
3699
|
|
|
3244
3700
|
* 0.10.2
|
|
3245
3701
|
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3702
|
+
* updated `search_nodes` to be more generic, so it can search not only on access key, but also other queries.
|
|
3703
|
+
* added doc for "cargo" like actions
|
|
3704
|
+
* added doc for multi-session
|
|
3249
3705
|
|
|
3250
3706
|
* 0.10.1
|
|
3251
3707
|
|
|
@@ -3273,22 +3729,22 @@ So, it evolved into <%=tool%>:
|
|
|
3273
3729
|
|
|
3274
3730
|
* 0.9.33
|
|
3275
3731
|
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3732
|
+
* new command to display basic token of node
|
|
3733
|
+
* new command to display bearer token of node in AoC
|
|
3734
|
+
* the --fields= option, support +_fieldname_ to add a field to default fields
|
|
3735
|
+
* many small changes
|
|
3280
3736
|
|
|
3281
3737
|
* 0.9.32
|
|
3282
3738
|
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3739
|
+
* all Faspex public links are now supported
|
|
3740
|
+
* removed faspex operation recv_publink
|
|
3741
|
+
* replaced with option `link` (consistent with AoC)
|
|
3286
3742
|
|
|
3287
3743
|
* 0.9.31
|
|
3288
3744
|
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3745
|
+
* added more support for public link: receive and send package, to user or dropbox and files view.
|
|
3746
|
+
* delete expired file lists
|
|
3747
|
+
* changed text table gem from text-table to terminal-table because it supports multiline values
|
|
3292
3748
|
|
|
3293
3749
|
* 0.9.27
|
|
3294
3750
|
|
|
@@ -3308,149 +3764,149 @@ So, it evolved into <%=tool%>:
|
|
|
3308
3764
|
|
|
3309
3765
|
* 0.9.24
|
|
3310
3766
|
|
|
3311
|
-
|
|
3312
|
-
|
|
3767
|
+
* fix bug where AoC node to node transfer did not work
|
|
3768
|
+
* fix bug on error if ED25519 private key is defined in .ssh
|
|
3313
3769
|
|
|
3314
3770
|
* 0.9.23
|
|
3315
3771
|
|
|
3316
|
-
|
|
3317
|
-
|
|
3772
|
+
* defined REST error handlers, more error conditions detected
|
|
3773
|
+
* commands to select specific ascp location
|
|
3318
3774
|
|
|
3319
3775
|
* 0.9.21
|
|
3320
3776
|
|
|
3321
|
-
|
|
3322
|
-
|
|
3777
|
+
* supports simplified wizard using global client
|
|
3778
|
+
* only ascp binary is required, other SDK (keys) files are now generated
|
|
3323
3779
|
|
|
3324
3780
|
* 0.9.20
|
|
3325
3781
|
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3782
|
+
* improved wizard (prepare for AoC global client id)
|
|
3783
|
+
* preview generator: addedoption : --skip-format=<png,mp4>
|
|
3784
|
+
* removed outdated pictures from this doc
|
|
3329
3785
|
|
|
3330
3786
|
* 0.9.19
|
|
3331
3787
|
|
|
3332
|
-
|
|
3788
|
+
* added command aspera bearer --scope=xx
|
|
3333
3789
|
|
|
3334
3790
|
* 0.9.18
|
|
3335
3791
|
|
|
3336
|
-
|
|
3792
|
+
* enhanced aspera admin events to support query
|
|
3337
3793
|
|
|
3338
3794
|
* 0.9.16
|
|
3339
3795
|
|
|
3340
|
-
|
|
3341
|
-
|
|
3796
|
+
* AoC transfers are now reported in activity app
|
|
3797
|
+
* new interface for Rest class authentication (keep backward compatibility)
|
|
3342
3798
|
|
|
3343
3799
|
* 0.9.15
|
|
3344
3800
|
|
|
3345
|
-
|
|
3346
|
-
|
|
3801
|
+
* new feature: "find" command in aspera files
|
|
3802
|
+
* sample code for transfer API
|
|
3347
3803
|
|
|
3348
3804
|
* 0.9.12
|
|
3349
3805
|
|
|
3350
|
-
|
|
3351
|
-
|
|
3806
|
+
* add nagios commands
|
|
3807
|
+
* support of ATS for IBM Cloud, removed old version based on aspera id
|
|
3352
3808
|
|
|
3353
3809
|
* 0.9.11
|
|
3354
3810
|
|
|
3355
|
-
|
|
3356
|
-
|
|
3811
|
+
* Breaking change: @stdin is now @stdin:
|
|
3812
|
+
* support of ATS for IBM Cloud, removed old version based on aspera id
|
|
3357
3813
|
|
|
3358
3814
|
|
|
3359
3815
|
* 0.9.10
|
|
3360
3816
|
|
|
3361
|
-
|
|
3362
|
-
|
|
3363
|
-
|
|
3364
|
-
|
|
3817
|
+
* Breaking change: parameter transfer-node becomes more generic: transfer-info
|
|
3818
|
+
* Display SaaS storage usage with command: aspera admin res node --id=nn info
|
|
3819
|
+
* cleaner way of specifying source file list for transfers
|
|
3820
|
+
* Breaking change: replaced download_mode option with http_download action
|
|
3365
3821
|
|
|
3366
3822
|
* 0.9.9
|
|
3367
3823
|
|
|
3368
|
-
|
|
3369
|
-
|
|
3824
|
+
* Breaking change: "aspera package send" parameter deprecated, use the --value option instead with "recipients" value. See example.
|
|
3825
|
+
* Now supports "cargo" for Aspera on Cloud (automatic package download)
|
|
3370
3826
|
|
|
3371
3827
|
* 0.9.8
|
|
3372
3828
|
|
|
3373
|
-
|
|
3374
|
-
|
|
3829
|
+
* Faspex: use option once_only set to yes to enable cargo like function. id=NEW deprecated.
|
|
3830
|
+
* AoC: share to share transfer with command "transfer"
|
|
3375
3831
|
|
|
3376
3832
|
* 0.9.7
|
|
3377
3833
|
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
3834
|
+
* homogeneous [_transfer-spec_](#transferspec) for `node` and [`direct`](#direct) transfer agents
|
|
3835
|
+
* preview persistency goes to unique file by default
|
|
3836
|
+
* catch mxf extension in preview as video
|
|
3837
|
+
* Faspex: possibility to download all paclages by specifying id=ALL
|
|
3838
|
+
* Faspex: to come: cargo-like function to download only new packages with id=NEW
|
|
3383
3839
|
|
|
3384
3840
|
* 0.9.6
|
|
3385
3841
|
|
|
3386
|
-
|
|
3387
|
-
|
|
3842
|
+
* Breaking change: `@param:`is now `@preset:` and is generic
|
|
3843
|
+
* AoC: added command to display current workspace information
|
|
3388
3844
|
|
|
3389
3845
|
* 0.9.5
|
|
3390
3846
|
|
|
3391
|
-
|
|
3392
|
-
|
|
3847
|
+
* new parameter: new_user_option used to choose between public_link and invite of external users.
|
|
3848
|
+
* fixed bug in wizard, and wizard uses now product detection
|
|
3393
3849
|
|
|
3394
3850
|
* 0.9.4
|
|
3395
3851
|
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
|
|
3852
|
+
* 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).
|
|
3853
|
+
* AoC Package send supports external users
|
|
3854
|
+
* new command to export AoC config to Aspera CLI config
|
|
3399
3855
|
|
|
3400
3856
|
* 0.9.3
|
|
3401
3857
|
|
|
3402
|
-
|
|
3403
|
-
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
|
|
3858
|
+
* REST error message show host and code
|
|
3859
|
+
* option for quiet display
|
|
3860
|
+
* modified transfer interface and allow token re-generation on error
|
|
3861
|
+
* async add admin command
|
|
3862
|
+
* async add db parameters
|
|
3863
|
+
* Breaking change: new option "sources" to specify files to transfer
|
|
3408
3864
|
|
|
3409
3865
|
* 0.9.2
|
|
3410
3866
|
|
|
3411
|
-
|
|
3867
|
+
* Breaking change: changed AoC package creation to match API, see AoC section
|
|
3412
3868
|
|
|
3413
3869
|
* 0.9.1
|
|
3414
3870
|
|
|
3415
|
-
|
|
3871
|
+
* Breaking change: changed faspex package creation to match API, see Faspex section
|
|
3416
3872
|
|
|
3417
3873
|
* 0.9
|
|
3418
3874
|
|
|
3419
|
-
|
|
3420
|
-
|
|
3875
|
+
* Renamed the CLI from aslmcli to <%=tool%>
|
|
3876
|
+
* Automatic rename and conversion of former config folder from aslmcli to <%=tool%>
|
|
3421
3877
|
|
|
3422
3878
|
* 0.7.6
|
|
3423
3879
|
|
|
3424
|
-
|
|
3880
|
+
* add "sync" plugin
|
|
3425
3881
|
|
|
3426
3882
|
* 0.7
|
|
3427
3883
|
|
|
3428
|
-
|
|
3429
|
-
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
|
|
3884
|
+
* Breaking change: AoC package recv take option if for package instead of argument.
|
|
3885
|
+
* Breaking change: Rest class and Oauth class changed init parameters
|
|
3886
|
+
* AoC: receive package from public link
|
|
3887
|
+
* select by col value on output
|
|
3888
|
+
* added rename (AoC, node)
|
|
3433
3889
|
|
|
3434
3890
|
* 0.6.19
|
|
3435
3891
|
|
|
3436
3892
|
Breaking change:
|
|
3437
3893
|
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3445
|
-
|
|
3894
|
+
* ats server list provisioned → ats cluster list
|
|
3895
|
+
* ats server list clouds → ats cluster clouds
|
|
3896
|
+
* ats server list instance --cloud=x --region=y → ats cluster show --cloud=x --region=y
|
|
3897
|
+
* ats server id xxx → ats cluster show --id=xxx
|
|
3898
|
+
* ats subscriptions → ats credential subscriptions
|
|
3899
|
+
* ats api_key repository list → ats credential cache list
|
|
3900
|
+
* ats api_key list → ats credential list
|
|
3901
|
+
* ats access_key id xxx → ats access_key --id=xxx
|
|
3446
3902
|
|
|
3447
3903
|
* 0.6.18
|
|
3448
3904
|
|
|
3449
|
-
|
|
3905
|
+
* some commands take now --id option instead of id command.
|
|
3450
3906
|
|
|
3451
3907
|
* 0.6.15
|
|
3452
3908
|
|
|
3453
|
-
|
|
3909
|
+
* 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 <%=prst%> "default".
|
|
3454
3910
|
|
|
3455
3911
|
# BUGS, FEATURES, CONTRIBUTION
|
|
3456
3912
|
|
|
@@ -3487,20 +3943,24 @@ You may either install the suggested Gems, or remove your ed25519 key from your
|
|
|
3487
3943
|
|
|
3488
3944
|
## Error "Remote host is not who we expected"
|
|
3489
3945
|
|
|
3490
|
-
`ascp`
|
|
3946
|
+
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.
|
|
3947
|
+
|
|
3948
|
+
Workaround on client side: To ignore the certificate (SSH fingerprint) add option on client side (this option can also be added permanently to the config file):
|
|
3491
3949
|
|
|
3492
3950
|
```
|
|
3493
3951
|
--ts=@json:'{"sshfp":null}'
|
|
3494
3952
|
```
|
|
3495
3953
|
|
|
3496
|
-
|
|
3954
|
+
Workaround on server side: Either remove the fingerprint from `aspera.conf`, or keep only RSA host keys in `sshd_config`.
|
|
3955
|
+
|
|
3956
|
+
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).
|
|
3497
3957
|
|
|
3498
3958
|
## Miscelaneous
|
|
3499
3959
|
|
|
3500
3960
|
* remove rest and oauth classes and use ruby standard gems:
|
|
3501
3961
|
|
|
3502
|
-
|
|
3503
|
-
|
|
3962
|
+
* oauth
|
|
3963
|
+
* https://github.com/rest-client/rest-client
|
|
3504
3964
|
|
|
3505
3965
|
* use Thor or any standard Ruby CLI manager
|
|
3506
3966
|
|