aspera-cli 4.1.0 → 4.2.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 +150 -69
- data/docs/README.erb.md +129 -48
- data/docs/test_env.conf +13 -4
- data/lib/aspera/aoc.rb +19 -22
- data/lib/aspera/cli/main.rb +19 -15
- data/lib/aspera/cli/plugins/aoc.rb +24 -38
- data/lib/aspera/cli/plugins/ats.rb +2 -2
- data/lib/aspera/cli/plugins/config.rb +111 -108
- data/lib/aspera/cli/plugins/faspex.rb +1 -1
- data/lib/aspera/cli/plugins/faspex5.rb +7 -24
- data/lib/aspera/cli/plugins/preview.rb +10 -1
- data/lib/aspera/cli/transfer_agent.rb +6 -5
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/cos_node.rb +33 -28
- data/lib/aspera/environment.rb +2 -2
- data/lib/aspera/fasp/installation.rb +68 -45
- data/lib/aspera/fasp/local.rb +75 -40
- data/lib/aspera/fasp/parameters.rb +3 -2
- data/lib/aspera/fasp/resume_policy.rb +13 -12
- data/lib/aspera/node.rb +13 -0
- data/lib/aspera/oauth.rb +12 -2
- data/lib/aspera/rest.rb +2 -11
- data/lib/aspera/secrets.rb +20 -0
- metadata +3 -2
data/docs/README.erb.md
CHANGED
@@ -106,9 +106,10 @@ Once installation is completed, you can proceed to the first use with a demo ser
|
|
106
106
|
|
107
107
|
If you want to test with Aspera on Cloud, jump to section: [Wizard](#aocwizard)
|
108
108
|
|
109
|
-
|
109
|
+
To test with Aspera demo transfer server, setup the environment and then test:
|
110
110
|
|
111
111
|
```
|
112
|
+
$ <%=cmd%> config initdemo
|
112
113
|
$ <%=cmd%> server browse /
|
113
114
|
:............:...........:......:........:...........................:.......................:
|
114
115
|
: zmode : zuid : zgid : size : mtime : name :
|
@@ -128,7 +129,7 @@ If you want to use <%=tool%> with another server, and in order to make further c
|
|
128
129
|
* download a file
|
129
130
|
|
130
131
|
```
|
131
|
-
$ <%=cmd%> config id myserver update --url=ssh://demo.asperasoft.com:33001 --username=asperaweb --password=
|
132
|
+
$ <%=cmd%> config id myserver update --url=ssh://demo.asperasoft.com:33001 --username=asperaweb --password=_demo_pass_
|
132
133
|
updated: myserver
|
133
134
|
$ <%=cmd%> config id default set server myserver
|
134
135
|
updated: default→server to myserver
|
@@ -162,18 +163,22 @@ Then, follow the section relative to the product you want to interact with ( Asp
|
|
162
163
|
|
163
164
|
# <a name="installation"></a>Installation
|
164
165
|
|
165
|
-
It is possible to install *either*
|
166
|
+
It is possible to install *either* directly on the host operating system (Linux, Windows, Macos) or as a docker container.
|
167
|
+
|
168
|
+
The direct installation is recommended and consists in installing:
|
166
169
|
|
167
170
|
* [Ruby](#ruby) version >= <%= gemspec.required_ruby_version %>
|
168
171
|
* [<%= gemspec.name %>](#the_gem)
|
169
172
|
* [Aspera SDK (ascp)](#fasp_prot)
|
170
173
|
|
171
|
-
The following sections provide information on the installation.
|
174
|
+
The following sections provide information on the various installation methods.
|
172
175
|
|
173
176
|
An internet connection is required for the installation. If you dont have internet for the installation, refer to section [Installation without internet access](#offline_install).
|
174
177
|
|
175
178
|
## Docker container
|
176
179
|
|
180
|
+
Use this method only if you know what you do, else use the standard recommended method as described here above.
|
181
|
+
|
177
182
|
This method installs a docker image that contains: Ruby, ascli and the FASP sdk.
|
178
183
|
|
179
184
|
Ensure that you have Docker installed.
|
@@ -197,11 +202,12 @@ $ ./<%=cmd%> install
|
|
197
202
|
|
198
203
|
Start using it !
|
199
204
|
|
200
|
-
Note that the tool is run in the container.
|
205
|
+
Note that the tool is run in the container, so transfers are also executed in the container, not calling host.
|
201
206
|
|
202
|
-
The wrapping script maps the container folder `/usr/src/app/config` to configuration folder `$HOME/.aspera/<%=cmd
|
207
|
+
The wrapping script maps the container folder `/usr/src/app/config` to configuration folder `$HOME/.aspera/<%=cmd%>` on host.
|
203
208
|
|
204
209
|
To transfer to/from the native host, you will need to map a volume in docker or use the config folder (already mapped).
|
210
|
+
To add local storage as a volume edit the script: ascli and add a `--volume` stanza.
|
205
211
|
|
206
212
|
## <a name="ruby"></a>Ruby
|
207
213
|
|
@@ -211,7 +217,7 @@ A ruby interpreter is required to run the tool or to use the gem and tool.
|
|
211
217
|
|
212
218
|
Ruby minimum version: <%= gemspec.required_ruby_version %>. Ruby version 3 is also supported.
|
213
219
|
|
214
|
-
*
|
220
|
+
*Ruby can be installed using any method* : rpm, yum, dnf, rvm, brew, windows installer, ... .
|
215
221
|
|
216
222
|
Refer to the following sections for a proposed method for specific operating systems.
|
217
223
|
|
@@ -789,7 +795,7 @@ $ <%=cmd%> config id <<%=opprst%>> set|delete|show|initialize|update
|
|
789
795
|
The command `update` allows the easy creation of <%=prst%> by simply providing the options in their command line format, e.g. :
|
790
796
|
|
791
797
|
```
|
792
|
-
$ <%=cmd%> config id demo_server update --url=ssh://demo.asperasoft.com:33001 --username=asperaweb --password=
|
798
|
+
$ <%=cmd%> config id demo_server update --url=ssh://demo.asperasoft.com:33001 --username=asperaweb --password=_demo_pass_ --ts=@json:'{"precalculate_job_size":true}'
|
793
799
|
```
|
794
800
|
|
795
801
|
* This creates a <%=prst%> `demo_server` with all provided options.
|
@@ -797,13 +803,13 @@ $ <%=cmd%> config id demo_server update --url=ssh://demo.asperasoft.com:33001 --
|
|
797
803
|
The command `set` allows setting individual options in a <%=prst%>.
|
798
804
|
|
799
805
|
```
|
800
|
-
$ <%=cmd%> config id demo_server set password
|
806
|
+
$ <%=cmd%> config id demo_server set password _demo_pass_
|
801
807
|
```
|
802
808
|
|
803
809
|
The command `initialize`, like `update` allows to set several parameters at once, but it deletes an existing configuration instead of updating it, and expects a _[Structured Value](#native)_.
|
804
810
|
|
805
811
|
```
|
806
|
-
$ <%=cmd%> config id demo_server initialize @json:'{"url":"ssh://demo.asperasoft.com:33001","username":"asperaweb","password":"
|
812
|
+
$ <%=cmd%> config id demo_server initialize @json:'{"url":"ssh://demo.asperasoft.com:33001","username":"asperaweb","password":"_demo_pass_","ts":{"precalculate_job_size":true}}'
|
807
813
|
```
|
808
814
|
|
809
815
|
A good practice is to not manually edit the configuration file and use modification commands instead.
|
@@ -840,11 +846,19 @@ Note that special plugin name: `config` can be associated with a preset that is
|
|
840
846
|
Operations on this preset are done using regular `config` operations:
|
841
847
|
|
842
848
|
```
|
843
|
-
$ <%=cmd%> config id default set _plugin_name_
|
849
|
+
$ <%=cmd%> config id default set _plugin_name_ _default_preset_for_plugin_
|
844
850
|
$ <%=cmd%> config id default get _plugin_name_
|
845
|
-
"
|
851
|
+
"_default_preset_for_plugin_"
|
846
852
|
```
|
847
853
|
|
854
|
+
### <a name="lprtdef"></a>Special Plugin: config
|
855
|
+
|
856
|
+
Plugin `config` (not to be confused with <%=prstt%> config) is used to configure <%=tool%> but it also contains global options.
|
857
|
+
|
858
|
+
When <%=tool%> starts, it lookjs for the `default` <%=prstt%> and if there is a value for `config`, if so, it loads the option values for any plugin used.
|
859
|
+
|
860
|
+
If no global default is set by the user, the tool will use `global_common_defaults` when setting global parameters (e.g. `conf ascp use`)
|
861
|
+
|
848
862
|
### Format of file
|
849
863
|
|
850
864
|
The configuration file is a hash in a YAML file. Example:
|
@@ -860,7 +874,7 @@ cli_default:
|
|
860
874
|
demo_server:
|
861
875
|
url: ssh://demo.asperasoft.com:33001
|
862
876
|
username: asperaweb
|
863
|
-
password:
|
877
|
+
password: _demo_pass_
|
864
878
|
```
|
865
879
|
|
866
880
|
We can see here:
|
@@ -929,7 +943,6 @@ A <%=prst%> value can be removed with `unset`:
|
|
929
943
|
$ <%=cmd%> config id cli_default unset interactive
|
930
944
|
```
|
931
945
|
|
932
|
-
|
933
946
|
### Examples
|
934
947
|
|
935
948
|
For Faspex, Shares, Node (including ATS, Aspera Transfer Service), Console,
|
@@ -1049,21 +1062,42 @@ The `config` plugin also allows specification for the use of a local FASP client
|
|
1049
1062
|
|
1050
1063
|
```
|
1051
1064
|
$ <%=cmd%> config ascp show
|
1052
|
-
/Users/laurent/
|
1065
|
+
/Users/laurent/.aspera/ascli/sdk/ascp
|
1066
|
+
$ <%=cmd%> config ascp info
|
1067
|
+
+--------------------+-----------------------------------------------------------+
|
1068
|
+
| key | value |
|
1069
|
+
+--------------------+-----------------------------------------------------------+
|
1070
|
+
| ascp | /Users/laurent/.aspera/ascli/sdk/ascp |
|
1071
|
+
...
|
1053
1072
|
```
|
1054
1073
|
|
1055
1074
|
### Selection of local `ascp`
|
1056
1075
|
|
1076
|
+
By default, <%=tool%> uses any found local product with ascp, including SDK.
|
1077
|
+
|
1057
1078
|
To temporarily use an alternate ascp path use option `ascp_path` (`--ascp-path=`)
|
1058
1079
|
|
1059
|
-
|
1080
|
+
For a permanent change, the command `config ascp use` sets the same parameter for the global default.
|
1081
|
+
|
1082
|
+
Using a POSIX shell:
|
1060
1083
|
|
1061
1084
|
```
|
1062
1085
|
$ <%=cmd%> config ascp use '/Users/laurent/Applications/Aspera CLI/bin/ascp'
|
1063
|
-
|
1086
|
+
ascp version: 4.0.0.182279
|
1087
|
+
Updated: global_common_defaults: ascp_path <- /Users/laurent/Applications/Aspera CLI/bin/ascp
|
1088
|
+
Saved to default global preset global_common_defaults
|
1064
1089
|
```
|
1065
1090
|
|
1066
|
-
|
1091
|
+
Windows:
|
1092
|
+
|
1093
|
+
```
|
1094
|
+
$ <%=cmd%> config ascp use C:\Users\admin\.aspera\ascli\sdk\ascp.exe
|
1095
|
+
ascp version: 4.0.0.182279
|
1096
|
+
Updated: global_common_defaults: ascp_path <- C:\Users\admin\.aspera\ascli\sdk\ascp.exe
|
1097
|
+
Saved to default global preset global_common_defaults
|
1098
|
+
```
|
1099
|
+
|
1100
|
+
If the path has spaces, read section: [Shell and Command line parsing](#parsing).
|
1067
1101
|
|
1068
1102
|
### List locally installed Aspera Transfer products
|
1069
1103
|
|
@@ -1150,7 +1184,7 @@ will effectively push files to the related server from the agent node.
|
|
1150
1184
|
|
1151
1185
|
### <a name="direct"></a>Direct (local ascp using FASPManager API)
|
1152
1186
|
|
1153
|
-
By default
|
1187
|
+
By default <%=tool%> uses a local ascp, equivalent to specifying `--transfer=direct`.
|
1154
1188
|
<%=tool%> will detect locally installed Aspera products.
|
1155
1189
|
Refer to section [FASP](#client).
|
1156
1190
|
|
@@ -1160,17 +1194,33 @@ To specify a FASP proxy (only supported with the `direct` agent), set the approp
|
|
1160
1194
|
* `EX_http_proxy_url` (proxy for legacy http fallback)
|
1161
1195
|
* `EX_ascp_args`
|
1162
1196
|
|
1163
|
-
The `transfer-info`
|
1197
|
+
The `transfer-info` accepts the following optional parameters:
|
1198
|
+
|
1199
|
+
<table>
|
1200
|
+
<tr><th>Name</th><th>Type</th><th>Default</th><th>Feature</th><th>Description</th></tr>
|
1201
|
+
<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
|
+
<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
|
+
<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>
|
1204
|
+
<tr><td>resume</td><td>Hash</td><td>nil</td><td>Resumer parameters</td><td>See below</td></tr>
|
1205
|
+
</table>
|
1206
|
+
|
1207
|
+
Resume parameters:
|
1164
1208
|
|
1165
1209
|
<table>
|
1166
|
-
<tr><th>Name</th><th>Default</th><th>Feature</th><th>Description</th></tr>
|
1167
|
-
<tr><td>iter_max</td
|
1168
|
-
<tr><td>sleep_initial</td><td>2</td><td>Resume</td><td>First Sleep before retry</td></tr>
|
1169
|
-
<tr><td>sleep_factor</td>
|
1170
|
-
<tr><td>sleep_max</td
|
1171
|
-
<tr><td>wss</td> <td>false</td><td>Web Socket Session</td><td>Enable use of web socket session in case it is available</td></tr>
|
1210
|
+
<tr><th>Name</th><th>Type</th><th>Default</th><th>Feature</th><th>Description</th></tr>
|
1211
|
+
<tr><td>iter_max</td><td>int</td><td>7</td><td>Resume</td><td>Max number of retry on error</td></tr>
|
1212
|
+
<tr><td>sleep_initial</td><td>int</td><td>2</td><td>Resume</td><td>First Sleep before retry</td></tr>
|
1213
|
+
<tr><td>sleep_factor</td><td>int</td><td>2</td><td>Resume</td><td>Multiplier of Sleep</td></tr>
|
1214
|
+
<tr><td>sleep_max</td><td>int</td><td>60</td><td>Resume</td><td>Maximum sleep</td></tr>
|
1172
1215
|
</table>
|
1173
1216
|
|
1217
|
+
Examples:
|
1218
|
+
|
1219
|
+
```
|
1220
|
+
$ <%=cmd%> ... --transfer-info=@json:'{"wss":true,"resume":{"iter_max":10}}'
|
1221
|
+
$ <%=cmd%> ... --transfer-info=@json:'{"spawn_delay_sec":2.5}'
|
1222
|
+
```
|
1223
|
+
|
1174
1224
|
### IBM Aspera Connect Client GUI
|
1175
1225
|
|
1176
1226
|
By specifying option: `--transfer=connect`, <%=tool%> will start transfers
|
@@ -1220,7 +1270,7 @@ is described in a _transfer-spec_ (Transfer Specification), such as:
|
|
1220
1270
|
|
1221
1271
|
<%=tool%> builds a default _transfer-spec_ internally, so it is not necessary to provide additional parameters on the command line for this transfer.
|
1222
1272
|
|
1223
|
-
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.
|
1273
|
+
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.
|
1224
1274
|
|
1225
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.
|
1226
1276
|
|
@@ -1966,10 +2016,10 @@ $ <%=cmd%> aoc packages recv --id=ALL --once-only=yes --lock-port=12345
|
|
1966
2016
|
* `--once-only=yes` keeps memory of any downloaded package in persistency files located in the configuration folder.
|
1967
2017
|
* `--lock-port=12345` ensures that only one instance is started at the same time, to avoid collisions
|
1968
2018
|
|
1969
|
-
Typically, one would regularly execute this command on a regular basis, using the method
|
2019
|
+
Typically, one would regularly execute this command on a regular basis, using the method of your choice:
|
1970
2020
|
|
1971
|
-
* Windows scheduler
|
1972
|
-
* cron
|
2021
|
+
* Windows: [Task Scheduler](https://docs.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page)
|
2022
|
+
* Linux/Unix: [cron](https://www.man7.org/linux/man-pages/man5/crontab.5.html)
|
1973
2023
|
* etc...
|
1974
2024
|
|
1975
2025
|
## Download Files
|
@@ -2189,7 +2239,7 @@ This can also be set as default using a preset
|
|
2189
2239
|
One can test the "server" application using the well known demo server:
|
2190
2240
|
|
2191
2241
|
```
|
2192
|
-
$ <%=cmd%> config id aspera_demo_server update --url=ssh://demo.asperasoft.com:33001 --username=asperaweb --password=
|
2242
|
+
$ <%=cmd%> config id aspera_demo_server update --url=ssh://demo.asperasoft.com:33001 --username=asperaweb --password=_demo_pass_
|
2193
2243
|
$ <%=cmd%> config id default set server aspera_demo_server
|
2194
2244
|
$ <%=cmd%> server browse /aspera-test-dir-large
|
2195
2245
|
$ <%=cmd%> server download /aspera-test-dir-large/200MB
|
@@ -2493,7 +2543,7 @@ to start from ma configuration file, using <%=tool%> standard options.
|
|
2493
2543
|
|
2494
2544
|
# Plugin: Preview
|
2495
2545
|
|
2496
|
-
The `preview` generates "previews" of graphical files, i.e. thumbnails (office, images, video) and video previews on
|
2546
|
+
The `preview` generates "previews" of graphical files, i.e. thumbnails (office, images, video) and video previews on storage for use primarily in the Aspera on Cloud application.
|
2497
2547
|
This is based on the "node API" of Aspera HSTS when using Access Keys only inside it's "storage root".
|
2498
2548
|
Several parameters can be used to tune several aspects:
|
2499
2549
|
|
@@ -2622,9 +2672,10 @@ $ <%=cmd%> config id previewconf update --url=https://localhost:9092 --username=
|
|
2622
2672
|
$ <%=cmd%> config id default set preview previewconf
|
2623
2673
|
```
|
2624
2674
|
|
2625
|
-
Here we assume that Office file generation is disabled, else remove
|
2675
|
+
Here we assume that Office file generation is disabled, else remove this option.
|
2676
|
+
`lock_port` prevents concurrent execution of generation when using a scheduler.
|
2626
2677
|
|
2627
|
-
|
2678
|
+
One can check if the access key is well configured using:
|
2628
2679
|
|
2629
2680
|
```
|
2630
2681
|
$ <%=cmd%> -Ppreviewconf node browse /
|
@@ -2710,6 +2761,14 @@ $ <%=cmd%> preview scan --skip-folders=@json:'["/not_here"]'
|
|
2710
2761
|
|
2711
2762
|
The option `folder_reset_cache` forces the node service to refresh folder contents using various methods.
|
2712
2763
|
|
2764
|
+
When scanning the option `value` has the same behaviour as for the `node find` command.
|
2765
|
+
|
2766
|
+
For instance to filter out files beginning with `._` do:
|
2767
|
+
|
2768
|
+
```
|
2769
|
+
... --value='exec:!f["name"].start_with?("._") or f["name"].eql?(".DS_Store")'
|
2770
|
+
```
|
2771
|
+
|
2713
2772
|
## Preview File types
|
2714
2773
|
|
2715
2774
|
Two types of preview can be generated:
|
@@ -2847,7 +2906,7 @@ Note that in addition, many "EX_" [_transfer-spec_](#transferspec) parameters ar
|
|
2847
2906
|
## Simple session
|
2848
2907
|
|
2849
2908
|
```
|
2850
|
-
MY_TSPEC='{"remote_host":"demo.asperasoft.com","remote_user":"asperaweb","ssh_port":33001,"remote_password":"
|
2909
|
+
MY_TSPEC='{"remote_host":"demo.asperasoft.com","remote_user":"asperaweb","ssh_port":33001,"remote_password":"_demo_pass_","direction":"receive","destination_root":"./test.dir","paths":[{"source":"/aspera-test-dir-tiny/200KB.1"}],"resume_level":"none"}'
|
2851
2910
|
|
2852
2911
|
echo "${MY_TSPEC}"|asession
|
2853
2912
|
```
|
@@ -2860,7 +2919,7 @@ This is particularly useful for a persistent session ( with the [_transfer-spec_
|
|
2860
2919
|
|
2861
2920
|
```
|
2862
2921
|
$ asession
|
2863
|
-
{"remote_host":"demo.asperasoft.com","ssh_port":33001,"remote_user":"asperaweb","remote_password":"
|
2922
|
+
{"remote_host":"demo.asperasoft.com","ssh_port":33001,"remote_user":"asperaweb","remote_password":"_demo_pass_","direction":"receive","destination_root":".","keepalive":true,"resume_level":"none"}
|
2864
2923
|
{"type":"START","source":"/aspera-test-dir-tiny/200KB.2"}
|
2865
2924
|
{"type":"DONE"}
|
2866
2925
|
```
|
@@ -3009,7 +3068,20 @@ So, it evolved into <%=tool%>:
|
|
3009
3068
|
|
3010
3069
|
# Changes (Release notes)
|
3011
3070
|
|
3012
|
-
*
|
3071
|
+
* <%= gemspec.version.to_s %>
|
3072
|
+
|
3073
|
+
* new: command `aoc remind` to receive organization membership by email
|
3074
|
+
* new: in `preview` option `value` to filter out on file name
|
3075
|
+
* new: `initdemo` to initialize for demo server
|
3076
|
+
* new: `direct` transfer agent options: `spawn_timeout_sec` and `spawn_delay_sec`
|
3077
|
+
* fix: on Windows `conf ascp use` expects ascp.exe
|
3078
|
+
* fix: (break) multi_session_threshold is Integer, not String
|
3079
|
+
* fix: `conf ascp install` renames sdk folder if it already exists (leftover shared lib may make fail)
|
3080
|
+
* fix: removed replace_illegal_chars from default aspera.conf causing "Error creating illegal char conversion table"
|
3081
|
+
* 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"`
|
3083
|
+
|
3084
|
+
* 4.1.0
|
3013
3085
|
|
3014
3086
|
* fix: remove keys from transfer spec and command line when not needed
|
3015
3087
|
* fix: default to create_dir:true so that sending single file to a folder does not rename file if folder does not exist
|
@@ -3380,11 +3452,15 @@ Breaking change:
|
|
3380
3452
|
|
3381
3453
|
* 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".
|
3382
3454
|
|
3383
|
-
# BUGS
|
3455
|
+
# BUGS, FEATURES, CONTRIBUTION
|
3456
|
+
|
3457
|
+
For issues or feature requests use the Github repository and issues.
|
3458
|
+
|
3459
|
+
You can also contribute to this open source project.
|
3384
3460
|
|
3385
|
-
|
3461
|
+
One can also create one's own command nplugin.
|
3386
3462
|
|
3387
|
-
##
|
3463
|
+
## Only one value for any option
|
3388
3464
|
|
3389
3465
|
Some commands and sub commands may ask for the same option name.
|
3390
3466
|
Currently, since option definition is position independant (last one wins), it is not possible
|
@@ -3398,7 +3474,8 @@ This happens typically for the `node` sub command, e.g. identify the node by nam
|
|
3398
3474
|
|
3399
3475
|
## ED255519 key not supported
|
3400
3476
|
|
3401
|
-
|
3477
|
+
ED25519 keys are deactivated since version 0.9.24 so this type of key will just be ignored.
|
3478
|
+
|
3402
3479
|
Without this deactivation, if such key was present the following error was generated:
|
3403
3480
|
|
3404
3481
|
```
|
@@ -3408,7 +3485,17 @@ OpenSSH keys only supported if ED25519 is available
|
|
3408
3485
|
Which meant that you do not have ruby support for ED25519 SSH keys.
|
3409
3486
|
You may either install the suggested Gems, or remove your ed25519 key from your `.ssh` folder to solve the issue.
|
3410
3487
|
|
3411
|
-
|
3488
|
+
## Error "Remote host is not who we expected"
|
3489
|
+
|
3490
|
+
`ascp` version 4.x changed the algorithm used to check the SSH server certificate. To ignore the certificate (SSH fingerprint) add option on client side:
|
3491
|
+
|
3492
|
+
```
|
3493
|
+
--ts=@json:'{"sshfp":null}'
|
3494
|
+
```
|
3495
|
+
|
3496
|
+
Refer to 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): if you have access to server side, basically disable other SSH host keys than RSA.
|
3497
|
+
|
3498
|
+
## Miscelaneous
|
3412
3499
|
|
3413
3500
|
* remove rest and oauth classes and use ruby standard gems:
|
3414
3501
|
|
@@ -3424,9 +3511,3 @@ You may either install the suggested Gems, or remove your ed25519 key from your
|
|
3424
3511
|
* Going through proxy: use env var http_proxy and https_proxy, no_proxy
|
3425
3512
|
|
3426
3513
|
* easier use with https://github.com/pmq20/ruby-packer
|
3427
|
-
|
3428
|
-
# Contribution
|
3429
|
-
|
3430
|
-
Send comments !
|
3431
|
-
|
3432
|
-
Create your own plugin !
|
data/docs/test_env.conf
CHANGED
@@ -5,8 +5,8 @@ default:
|
|
5
5
|
config: cli_default
|
6
6
|
aoc: tst_aoc1
|
7
7
|
faspex: tst_faspex
|
8
|
-
faspex5:
|
9
|
-
shares:
|
8
|
+
faspex5: tst_faspex5_boot
|
9
|
+
shares: tst_shares_1
|
10
10
|
shares2: tst_shares2
|
11
11
|
node: tst_node
|
12
12
|
server: tst_server
|
@@ -47,11 +47,18 @@ tst_node_faspex:
|
|
47
47
|
url: your value here
|
48
48
|
username: your value here
|
49
49
|
password: your value here
|
50
|
-
|
50
|
+
tst_faspex5_boot:
|
51
51
|
url: your value here
|
52
52
|
auth: your value here
|
53
53
|
username: your value here
|
54
54
|
password: your value here
|
55
|
+
tst_faspex5:
|
56
|
+
url: your value here
|
57
|
+
auth: your value here
|
58
|
+
client_id: your value here
|
59
|
+
client_secret: your value here
|
60
|
+
private_key: your value here
|
61
|
+
username: your value here
|
55
62
|
tst_shares:
|
56
63
|
url: your value here
|
57
64
|
username: your value here
|
@@ -111,6 +118,8 @@ misc:
|
|
111
118
|
faspex_publink_send_to_fxuser: your value here
|
112
119
|
faspex_publink_send_to_dropbox: your value here
|
113
120
|
shares_upload: your value here
|
121
|
+
console_smart_id: your value here
|
122
|
+
console_smart_file: your value here
|
114
123
|
orch_workflow_id: your value here
|
115
124
|
file_dcm: your value here
|
116
125
|
file_pdf: your value here
|
@@ -139,5 +148,5 @@ misc:
|
|
139
148
|
email_internal: your value here
|
140
149
|
email_external: your value here
|
141
150
|
aoc_org: your value here
|
142
|
-
|
151
|
+
aoc_user_email: your value here
|
143
152
|
http_gw_fqdn_port: your value here
|
data/lib/aspera/aoc.rb
CHANGED
@@ -9,6 +9,8 @@ module Aspera
|
|
9
9
|
private
|
10
10
|
@@use_standard_ports = true
|
11
11
|
|
12
|
+
API_V1='api/v1'
|
13
|
+
|
12
14
|
PRODUCT_NAME='Aspera on Cloud'
|
13
15
|
# Production domain of AoC
|
14
16
|
PROD_DOMAIN='ibmaspera.com'
|
@@ -42,11 +44,6 @@ module Aspera
|
|
42
44
|
FILES_APP='files'
|
43
45
|
PACKAGES_APP='packages'
|
44
46
|
|
45
|
-
CLIENT_RANDOM={
|
46
|
-
'aspera.global-cli-client' => 'frpmsRsG4mjZ0PlxCgdJlvONqBg4Vlpz_IX7gXmBMAfsgMLy2FO6CXLodKfKAuhqnCqSptLbe_wdmnm9JRuEPO-PpFqpq_Kb',
|
47
|
-
'aspera.drive' => 'UegzQ3LcbLht5dLYAXaR-7ZMnJ6-kwPEXWEXaqLSOMGmtzNA9r6kPFLElqBfq66BfgMabdO96k5sPXV-H8M3vsx9LbGlewF1'
|
48
|
-
}
|
49
|
-
|
50
47
|
def self.get_client_info(client_name=CLIENT_APPS.first)
|
51
48
|
client_index=CLIENT_APPS.index(client_name)
|
52
49
|
raise "no such pre-defined client: #{client_name}" if client_index.nil?
|
@@ -68,9 +65,14 @@ module Aspera
|
|
68
65
|
return organization,instance_domain
|
69
66
|
end
|
70
67
|
|
68
|
+
# base API url depends on domain, which could be "qa.xxx"
|
69
|
+
def self.api_base_url(api_domain=PROD_DOMAIN)
|
70
|
+
return "https://api.#{api_domain}"
|
71
|
+
end
|
72
|
+
|
71
73
|
def self.metering_api(entitlement_id,customer_id,api_domain=PROD_DOMAIN)
|
72
74
|
return Rest.new({
|
73
|
-
:base_url => "
|
75
|
+
:base_url => "#{api_base_url(api_domain)}/metering/v1",
|
74
76
|
:headers => {'X-Aspera-Entitlement-Authorization' => Rest.basic_creds(entitlement_id,customer_id)}
|
75
77
|
})
|
76
78
|
end
|
@@ -126,7 +128,7 @@ module Aspera
|
|
126
128
|
# access key secrets are provided out of band to get node api access
|
127
129
|
# key: access key
|
128
130
|
# value: associated secret
|
129
|
-
@
|
131
|
+
@key_chain=nil
|
130
132
|
|
131
133
|
# init rest params
|
132
134
|
aoc_rest_p={:auth=>{:type =>:oauth2}}
|
@@ -147,12 +149,12 @@ module Aspera
|
|
147
149
|
|
148
150
|
# get org name and domain from url
|
149
151
|
organization,instance_domain=self.class.parse_url(opt[:url])
|
150
|
-
# this is the base API url
|
151
|
-
api_base_url
|
152
|
-
#
|
153
|
-
aoc_rest_p[:base_url]="#{
|
152
|
+
# this is the base API url
|
153
|
+
api_url_base=self.class.api_base_url(instance_domain)
|
154
|
+
# API URL, including subpath (version ...)
|
155
|
+
aoc_rest_p[:base_url]="#{api_url_base}/#{opt[:subpath]}"
|
154
156
|
# base auth URL
|
155
|
-
aoc_auth_p[:base_url] = "#{
|
157
|
+
aoc_auth_p[:base_url] = "#{api_url_base}/#{OAUTH_API_SUBPATH}/#{organization}"
|
156
158
|
aoc_auth_p[:client_id]=opt[:client_id]
|
157
159
|
aoc_auth_p[:client_secret] = opt[:client_secret]
|
158
160
|
|
@@ -192,17 +194,12 @@ module Aspera
|
|
192
194
|
super(aoc_rest_p)
|
193
195
|
end
|
194
196
|
|
195
|
-
def
|
196
|
-
@
|
197
|
-
|
197
|
+
def key_chain=(keychain)
|
198
|
+
raise "keychain already set" unless @key_chain.nil?
|
199
|
+
@key_chain=keychain
|
198
200
|
nil
|
199
201
|
end
|
200
202
|
|
201
|
-
def has_secret(ak)
|
202
|
-
Log.log.debug("has key:#{ak} -> #{@secrets.has_key?(ak)}")
|
203
|
-
return @secrets.has_key?(ak)
|
204
|
-
end
|
205
|
-
|
206
203
|
# additional transfer spec (tags) for package information
|
207
204
|
def self.package_tags(package_info,operation)
|
208
205
|
return {'tags'=>{'aspera'=>{'files'=>{
|
@@ -299,9 +296,9 @@ module Aspera
|
|
299
296
|
:base_url => node_info['url'],
|
300
297
|
:headers => {'X-Aspera-AccessKey'=>node_info['access_key']},
|
301
298
|
}
|
302
|
-
ak_secret=@
|
299
|
+
ak_secret=@key_chain.get_secret(node_info['access_key'],false)
|
303
300
|
if ak_secret.nil? and node_scope.nil?
|
304
|
-
raise
|
301
|
+
raise "There must be at least one of: 'secret' or 'scope' for access key #{node_info['access_key']}"
|
305
302
|
end
|
306
303
|
# if secret provided on command line or if there is no scope
|
307
304
|
if !ak_secret.nil? or node_scope.nil?
|