aspera-cli 4.0.0.pre1 → 4.0.0.pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +213 -255
- data/docs/Makefile +19 -13
- data/docs/README.erb.md +109 -76
- data/docs/test_env.conf +37 -14
- data/examples/aoc.rb +2 -2
- data/examples/transfer.rb +23 -14
- data/lib/aspera/{on_cloud.rb → aoc.rb} +24 -15
- data/lib/aspera/cli/main.rb +1 -0
- data/lib/aspera/cli/plugins/alee.rb +2 -2
- data/lib/aspera/cli/plugins/{oncloud.rb → aoc.rb} +34 -34
- data/lib/aspera/cli/plugins/ats.rb +1 -1
- data/lib/aspera/cli/plugins/config.rb +31 -17
- data/lib/aspera/cli/plugins/cos.rb +9 -49
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/cos_node.rb +50 -0
- data/lib/aspera/data/1 +0 -0
- data/lib/aspera/data/2 +0 -0
- data/lib/aspera/data/3 +1 -0
- data/lib/aspera/data/4 +2 -0
- data/lib/aspera/data/5 +1 -0
- data/lib/aspera/data/6 +2 -0
- data/lib/aspera/data/7 +0 -0
- data/lib/aspera/data_repository.rb +13 -0
- data/lib/aspera/environment.rb +55 -0
- data/lib/aspera/fasp/aoc.rb +6 -6
- data/lib/aspera/fasp/installation.rb +112 -56
- data/lib/aspera/fasp/local.rb +2 -3
- data/lib/aspera/faspex_gw.rb +2 -2
- data/lib/aspera/open_application.rb +11 -24
- data/lib/aspera/preview/generator.rb +1 -5
- data/lib/aspera/rest.rb +56 -48
- data/lib/aspera/rest_error_analyzer.rb +5 -4
- data/lib/aspera/temp_file_manager.rb +1 -1
- metadata +52 -26
- data/docs/secrets.make +0 -38
- data/lib/aspera/cli/plugins/xnode.rb +0 -115
data/docs/Makefile
CHANGED
@@ -3,27 +3,29 @@
|
|
3
3
|
|
4
4
|
DIR_TOP=../
|
5
5
|
include $(DIR_TOP)common.make
|
6
|
+
# "make" shall be executed inside the folder containing this makefile
|
6
7
|
DIR_DOC=
|
7
8
|
|
8
9
|
# files generated to be included in README.md
|
9
10
|
INCL_USAGE=$(DIR_TMP)$(EXENAME)_usage.txt
|
10
11
|
INCL_COMMANDS=$(DIR_TMP)$(EXENAME)_commands.txt
|
11
12
|
INCL_ASESSION=$(DIR_TMP)asession_usage.txt
|
13
|
+
INCL_TRSPEC=$(DIR_DOC)transfer_spec.html
|
14
|
+
# env var used in README.erb.md
|
15
|
+
export EXENAME GEMSPEC INCL_USAGE INCL_COMMANDS INCL_ASESSION INCL_TRSPEC
|
16
|
+
|
12
17
|
TMPL_TEST_CONF=$(DIR_DOC)$(TEST_CONF_FILE_BASE)
|
13
|
-
TMPL_SECRETS=$(DIR_DOC)$(SECRETS_FILE_NAME)
|
14
18
|
|
15
19
|
MANUAL_BASE=$(DIR_DOC)Manual_$(EXENAME)_$(GEMVERSION)
|
16
20
|
MANUAL_PDF=$(MANUAL_BASE).pdf
|
17
21
|
MANUAL_HTML=$(MANUAL_BASE).html
|
18
22
|
|
19
23
|
# main target to build doc
|
20
|
-
all:: $(MANUAL_PDF) $(
|
24
|
+
all:: $(MANUAL_PDF) $(TMPL_TEST_CONF)
|
21
25
|
|
22
26
|
doc: all
|
23
27
|
|
24
|
-
# generate template configuration
|
25
|
-
$(TMPL_SECRETS): $(SECRETS_FILE_PATH)
|
26
|
-
sed 's/=.*/=_value_here_/' < $(SECRETS_FILE_PATH) > $(TMPL_SECRETS)
|
28
|
+
# generate template configuration file for tests, remove own secrets
|
27
29
|
$(TMPL_TEST_CONF): $(TEST_CONF_FILE_PATH)
|
28
30
|
ruby -e 'require "yaml";n={};c=YAML.load_file("$(TEST_CONF_FILE_PATH)").each{|k,v| n[k]=["config","default"].include?(k)?v:v.keys.inject({}){|m,i|m[i]="your value here";m}};File.write("$(TMPL_TEST_CONF)",n.to_yaml)'
|
29
31
|
|
@@ -31,21 +33,25 @@ $(MANUAL_PDF): $(DIR_TOP)README.md
|
|
31
33
|
pandoc --number-sections --resource-path=. --toc -o $(MANUAL_HTML) $(DIR_TOP)README.md
|
32
34
|
wkhtmltopdf toc $(MANUAL_HTML) $(MANUAL_PDF)
|
33
35
|
|
34
|
-
$(DIR_TOP)README.md: $(DIR_DOC)README.erb.md $(INCL_COMMANDS) $(INCL_USAGE) $(INCL_ASESSION)
|
35
|
-
|
36
|
+
$(DIR_TOP)README.md: $(DIR_DOC)README.erb.md $(DIR_DOC)transfer_spec.html $(INCL_COMMANDS) $(INCL_USAGE) $(INCL_ASESSION)
|
37
|
+
erb -T - --encoding UTF-8:UTF-8 $(DIR_DOC)README.erb.md > $(DIR_TOP)README.md
|
36
38
|
|
37
39
|
$(INCL_COMMANDS): $(DIR_TMP).exists $(TEST_MAKEFILE)
|
38
40
|
sed -nEe 's/.*\$$\(EXE_MAN.?\)/$(EXENAME)/p' $(TEST_MAKEFILE) > $(DIR_TMP)usg1.txt
|
39
|
-
sed -i.bak -Ee 's
|
41
|
+
sed -i.bak -Ee 's/\$$\$$\{([a-z_]+)\}/my_\1/g' $(DIR_TMP)usg1.txt
|
40
42
|
sed -i.bak -Ee 's/\$$\(([^)]+)\)/\1/g' $(DIR_TMP)usg1.txt
|
41
|
-
sed -i.bak -Ee 's/CF_([0-9A-Z_]*)/MY_\1/g' $(DIR_TMP)usg1.txt
|
42
43
|
sed -i.bak -Ee 's/\$$(\$$)/\1/g' $(DIR_TMP)usg1.txt
|
43
|
-
sed -i.bak -Ee 's/
|
44
|
-
sed -i.bak -Ee 's/="\$${([a-z_]+)}"/="my_\1"/g' $(DIR_TMP)usg1.txt
|
45
|
-
sed -i.bak -Ee 's/\$$@/xyz/g' $(DIR_TMP)usg1.txt
|
46
|
-
sed -i.bak -Ee 's/"'"'"'"/"/g' $(DIR_TMP)usg1.txt
|
44
|
+
sed -i.bak -Ee 's/\$$@/test/g' $(DIR_TMP)usg1.txt
|
47
45
|
sed -i.bak -Ee 's/"'"'"'/"/g' $(DIR_TMP)usg1.txt
|
48
46
|
sed -i.bak -Ee 's/'"'"'"/"/g' $(DIR_TMP)usg1.txt
|
47
|
+
sed -i.bak -Ee 's/""/"/g' $(DIR_TMP)usg1.txt
|
48
|
+
sed -i.bak -Ee 's/CF_//g' $(DIR_TMP)usg1.txt
|
49
|
+
sed -i.bak -Ee 's/DIR_[A-Z]+//g' $(DIR_TMP)usg1.txt
|
50
|
+
sed -i.bak -Ee 's/LOCAL_SAMPLE_FILE(NAME|PATH)/testfile.bin/g' $(DIR_TMP)usg1.txt
|
51
|
+
sed -i.bak -Ee 's/HSTS_FOLDER_UPLOAD/folder_1/g' $(DIR_TMP)usg1.txt
|
52
|
+
sed -i.bak -Ee 's/PKG_TEST_TITLE/Important files delivery/g' $(DIR_TMP)usg1.txt
|
53
|
+
sed -i.bak -Ee 's/AOC_EXTERNAL_EMAIL/external.user@example.com/g' $(DIR_TMP)usg1.txt
|
54
|
+
sed -i.bak -Ee 's/EMAIL_ADDR/internal.user@example.com/g' $(DIR_TMP)usg1.txt
|
49
55
|
sort -u < $(DIR_TMP)usg1.txt > $(INCL_COMMANDS)
|
50
56
|
# generated help of tools depends on all sources, so regenerate always
|
51
57
|
.PHONY: $(INCL_USAGE)
|
data/docs/README.erb.md
CHANGED
@@ -1,16 +1,30 @@
|
|
1
1
|
[comment1]: # (Do not edit this README.md, edit docs/README.erb.md, for details, read docs/README.md)
|
2
|
-
<%
|
3
|
-
|
2
|
+
<%
|
3
|
+
# check that required env vars exist, and files
|
4
|
+
%w{EXENAME GEMSPEC INCL_USAGE INCL_COMMANDS INCL_ASESSION INCL_TRSPEC}.each do |e|
|
5
|
+
raise "missing env var #{e}" unless ENV.has_key?(e)
|
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
|
+
-%>
|
4
18
|
# <%=tool%> : a Command Line for IBM Aspera products
|
5
19
|
|
6
|
-
Version : <%=
|
20
|
+
Version : <%= gemspec.version.to_s %>
|
7
21
|
|
8
22
|
_Laurent/2016-<%=Time.new.year%>_
|
9
23
|
|
10
24
|
This gem provides a command line interface to Aspera Applications.
|
11
25
|
|
12
26
|
Location (once released):
|
13
|
-
[
|
27
|
+
[<%= gemspec.metadata['rubygems_uri'] %>](<%= gemspec.metadata['rubygems_uri'] %>)
|
14
28
|
|
15
29
|
Disclaimers:
|
16
30
|
|
@@ -38,7 +52,7 @@ Once the gem is installed, <%=tool%> shall be accessible:
|
|
38
52
|
|
39
53
|
```
|
40
54
|
$ <%=cmd%> --version
|
41
|
-
<%=
|
55
|
+
<%= gemspec.version.to_s %>
|
42
56
|
```
|
43
57
|
|
44
58
|
## First use
|
@@ -106,7 +120,7 @@ Then, follow the section relative to the product you want to interact with ( Asp
|
|
106
120
|
In order to use the tool or the gem, it is necessary to install those components:
|
107
121
|
|
108
122
|
* [Ruby](#ruby)
|
109
|
-
* [
|
123
|
+
* [<%= gemspec.name %>](#the_gem)
|
110
124
|
* [FASP](#fasp_prot)
|
111
125
|
|
112
126
|
The following sections provide information on the installation.
|
@@ -114,8 +128,7 @@ The following sections provide information on the installation.
|
|
114
128
|
## <a name="ruby"></a>Ruby
|
115
129
|
|
116
130
|
A ruby interpreter is required to run the tool or to use the gem and tool.
|
117
|
-
|
118
|
-
Ruby 2.5+ is prefered, but it should also work with 2.1+.
|
131
|
+
The Ruby version shall be <%= gemspec.required_ruby_version %>.
|
119
132
|
Any type of Ruby installation can be used.
|
120
133
|
|
121
134
|
Refer to the following sections for a proposed method for specific operating systems.
|
@@ -123,10 +136,10 @@ Refer to the following sections for a proposed method for specific operating sys
|
|
123
136
|
### macOS
|
124
137
|
|
125
138
|
|
126
|
-
MacOS 10.13+ (High Sierra) comes with a recent Ruby, so you can use it directly, you will need to install
|
139
|
+
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` :
|
127
140
|
|
128
141
|
```
|
129
|
-
$ sudo gem install
|
142
|
+
$ sudo gem install <%= gemspec.name %><%=geminstadd%>
|
130
143
|
```
|
131
144
|
|
132
145
|
Alternatively, if you use [Homebrew](https://brew.sh/) already you can install Ruby with it:
|
@@ -200,18 +213,18 @@ For instance to build from source, and install in `/opt/ruby` :
|
|
200
213
|
# make install
|
201
214
|
```
|
202
215
|
|
203
|
-
## <a name="the_gem"></a
|
216
|
+
## <a name="the_gem"></a>`<%= gemspec.name %>` gem
|
204
217
|
|
205
218
|
Once you have Ruby and rights to install gems: Install the gem and its dependencies:
|
206
219
|
|
207
220
|
```
|
208
|
-
# gem install
|
221
|
+
# gem install <%= gemspec.name %><%=geminstadd%>
|
209
222
|
```
|
210
223
|
|
211
224
|
To upgrade to the latest version:
|
212
225
|
|
213
226
|
```
|
214
|
-
# gem update
|
227
|
+
# gem update <%= gemspec.name %>
|
215
228
|
```
|
216
229
|
|
217
230
|
## <a name="fasp_prot"></a>FASP Protocol
|
@@ -222,7 +235,13 @@ an Aspera Transfer:
|
|
222
235
|
* ascp
|
223
236
|
* aspera-license (in same folder, or ../etc)
|
224
237
|
|
225
|
-
|
238
|
+
This can be installed directly with
|
239
|
+
|
240
|
+
```
|
241
|
+
$ <%=cmd%> conf ascp install
|
242
|
+
```
|
243
|
+
|
244
|
+
Those can be found in one of IBM Aspera transfer server or client with its license file (some are free):
|
226
245
|
|
227
246
|
* IBM Aspera Connect Client (Free)
|
228
247
|
* IBM Aspera Desktop Client (Free)
|
@@ -241,7 +260,7 @@ other methods are available. Refer to section: [Transfer Agents](#agents)
|
|
241
260
|
|
242
261
|
# <a name="cli"></a>Command Line Interface: <%=tool%>
|
243
262
|
|
244
|
-
The
|
263
|
+
The `<%= gemspec.name %>` Gem provides a command line interface (CLI) which interacts with Aspera Products (mostly using REST APIs):
|
245
264
|
|
246
265
|
* IBM Aspera High Speed Transfer Server (FASP and Node)
|
247
266
|
* IBM Aspera on Cloud (including ATS)
|
@@ -385,7 +404,7 @@ The style of output can be set using the `format` parameter, supporting:
|
|
385
404
|
Table output can be filtered using the `select` parameter. Example:
|
386
405
|
|
387
406
|
```
|
388
|
-
$ <%=cmd%>
|
407
|
+
$ <%=cmd%> aoc admin res user list --fields=name,email,ats_admin --query=@json:'{"per_page":1000,"page":1,"sort":"name"}' --select=@json:'{"ats_admin":true}'
|
389
408
|
:...............................:..................................:...........:
|
390
409
|
: name : email : ats_admin :
|
391
410
|
:...............................:..................................:...........:
|
@@ -988,7 +1007,7 @@ All standard _transfer-spec_ parameters can be overloaded. To display parameters
|
|
988
1007
|
run in debug mode (--log-level=debug). [_transfer-spec_](#transferspec) can
|
989
1008
|
also be saved/overridden in the config file.
|
990
1009
|
|
991
|
-
<%= File.read(
|
1010
|
+
<%= File.read(ENV['INCL_TRSPEC']).gsub(/.*<body>(.*)<\/body>.*/m,'\1') %>
|
992
1011
|
|
993
1012
|
### Destination folder for transfers
|
994
1013
|
|
@@ -1134,7 +1153,7 @@ Usually the OS native scheduler shall already provide some sort of such protecti
|
|
1134
1153
|
A non complete list of commands used in unit tests:
|
1135
1154
|
|
1136
1155
|
```
|
1137
|
-
<%= File.read(ENV["
|
1156
|
+
<%= File.read(ENV["INCL_COMMANDS"]) %>
|
1138
1157
|
...and more
|
1139
1158
|
```
|
1140
1159
|
|
@@ -1142,7 +1161,7 @@ A non complete list of commands used in unit tests:
|
|
1142
1161
|
|
1143
1162
|
```
|
1144
1163
|
$ <%=cmd%> -h
|
1145
|
-
<%= File.read(ENV["
|
1164
|
+
<%= File.read(ENV["INCL_USAGE"]) %>
|
1146
1165
|
|
1147
1166
|
```
|
1148
1167
|
|
@@ -1182,7 +1201,7 @@ Preparing preset: aoc_myorg
|
|
1182
1201
|
Please provide path to your private RSA key, or empty to generate one:
|
1183
1202
|
option: pkeypath>
|
1184
1203
|
using existing key:
|
1185
|
-
/Users/myself/.aspera/<%=cmd%>/
|
1204
|
+
/Users/myself/.aspera/<%=cmd%>/aspera_aoc_key
|
1186
1205
|
Using global client_id.
|
1187
1206
|
option: username> john@example.com
|
1188
1207
|
Updating profile with new key
|
@@ -1191,7 +1210,7 @@ Setting config preset as default for aspera
|
|
1191
1210
|
saving config file
|
1192
1211
|
Done.
|
1193
1212
|
You can test with:
|
1194
|
-
$ <%=cmd%>
|
1213
|
+
$ <%=cmd%> aoc user info show
|
1195
1214
|
```
|
1196
1215
|
|
1197
1216
|
Optionally, it is possible to create a new organization-specific "integration".
|
@@ -1319,13 +1338,13 @@ If you are not using the built-in client_id and secret, JWT needs to be authoriz
|
|
1319
1338
|
* Using command line
|
1320
1339
|
|
1321
1340
|
```
|
1322
|
-
$ <%=cmd%>
|
1341
|
+
$ <%=cmd%> aoc admin res client list
|
1323
1342
|
:............:.........:
|
1324
1343
|
: id : name :
|
1325
1344
|
:............:.........:
|
1326
1345
|
: BJLPObQiFw : <%=cmd%> :
|
1327
1346
|
:............:.........:
|
1328
|
-
$ <%=cmd%>
|
1347
|
+
$ <%=cmd%> aoc admin res client --id=BJLPObQiFw modify @json:'{"jwt_grant_enabled":true,"explicit_authorization_required":false}'
|
1329
1348
|
modified
|
1330
1349
|
```
|
1331
1350
|
|
@@ -1346,14 +1365,14 @@ open the previously generated public key located here: `$HOME/.aspera/<%=cmd%>/a
|
|
1346
1365
|
* Using command line
|
1347
1366
|
|
1348
1367
|
```
|
1349
|
-
$ <%=cmd%>
|
1368
|
+
$ <%=cmd%> aoc admin res user list
|
1350
1369
|
:........:................:
|
1351
1370
|
: id : name :
|
1352
1371
|
:........:................:
|
1353
1372
|
: 109952 : Tech Support :
|
1354
1373
|
: 109951 : LAURENT MARTIN :
|
1355
1374
|
:........:................:
|
1356
|
-
$ <%=cmd%>
|
1375
|
+
$ <%=cmd%> aoc user info modify @ruby:'{"public_key"=>File.read(File.expand_path("~/.aspera/<%=cmd%>/aocapikey.pub"))}'
|
1357
1376
|
modified
|
1358
1377
|
```
|
1359
1378
|
|
@@ -1383,7 +1402,7 @@ After this last step, commands do not require web login anymore.
|
|
1383
1402
|
Once client has been registered and <%=prst%> created: <%=tool%> can be used:
|
1384
1403
|
|
1385
1404
|
```
|
1386
|
-
$ <%=cmd%>
|
1405
|
+
$ <%=cmd%> aoc files br /
|
1387
1406
|
Current Workspace: Default Workspace (default)
|
1388
1407
|
empty
|
1389
1408
|
```
|
@@ -1417,7 +1436,7 @@ In order to access some administrative actions on "nodes" (in fact, access keys)
|
|
1417
1436
|
secret is required, it is usually provided using the `secret` option. For example in a command like:
|
1418
1437
|
|
1419
1438
|
```
|
1420
|
-
$ <%=cmd%>
|
1439
|
+
$ <%=cmd%> aoc admin res node --id="access_key1" --secret="secret1" v3 info
|
1421
1440
|
```
|
1422
1441
|
|
1423
1442
|
It is also possible to provide a set of secrets used on a regular basis. This can be done using the `secrets` option. The value provided shall be a Hash, where keys are access key ids, and values are the associated secrets.
|
@@ -1444,7 +1463,7 @@ A secret repository can always be selected at runtime using `--secrets=@preset:x
|
|
1444
1463
|
* Bulk creation
|
1445
1464
|
|
1446
1465
|
```
|
1447
|
-
$ <%=cmd%>
|
1466
|
+
$ <%=cmd%> aoc admin res user create --bulk=yes @json:'[{"email":"dummyuser1@example.com"},{"email":"dummyuser2@example.com"}]'
|
1448
1467
|
:.......:.........:
|
1449
1468
|
: id : status :
|
1450
1469
|
:.......:.........:
|
@@ -1456,17 +1475,17 @@ $ <%=cmd%> aspera admin res user create --bulk=yes @json:'[{"email":"dummyuser1@
|
|
1456
1475
|
* Find with filter and delete
|
1457
1476
|
|
1458
1477
|
```
|
1459
|
-
$ <%=cmd%>
|
1478
|
+
$ <%=cmd%> aoc admin res user list --query='@json:{"q":"dummyuser"}' --fields=id,email
|
1460
1479
|
:.......:........................:
|
1461
1480
|
: id : email :
|
1462
1481
|
:.......:........................:
|
1463
1482
|
: 98398 : dummyuser1@example.com :
|
1464
1483
|
: 98399 : dummyuser2@example.com :
|
1465
1484
|
:.......:........................:
|
1466
|
-
$ thelist=$(echo $(<%=cmd%>
|
1485
|
+
$ thelist=$(echo $(<%=cmd%> aoc admin res user list --query='@json:{"q":"dummyuser"}' --fields=id,email --field=id --format=csv)|tr ' ' ,)
|
1467
1486
|
$ echo $thelist
|
1468
1487
|
98398,98399
|
1469
|
-
$ <%=cmd%>
|
1488
|
+
$ <%=cmd%> aoc admin res user --bulk=yes --id=@json:[$thelist] delete
|
1470
1489
|
:.......:.........:
|
1471
1490
|
: id : status :
|
1472
1491
|
:.......:.........:
|
@@ -1478,7 +1497,7 @@ $ <%=cmd%> aspera admin res user --bulk=yes --id=@json:[$thelist] delete
|
|
1478
1497
|
* Display current user's workspaces
|
1479
1498
|
|
1480
1499
|
```
|
1481
|
-
$ <%=cmd%>
|
1500
|
+
$ <%=cmd%> aoc user workspaces
|
1482
1501
|
:......:............................:
|
1483
1502
|
: id : name :
|
1484
1503
|
:......:............................:
|
@@ -1493,13 +1512,13 @@ $ <%=cmd%> aspera user workspaces
|
|
1493
1512
|
Creation of a sub-access key is like creation of access key with the following difference: authentication to node API is made with accesskey (master access key) and only the path parameter is provided: it is relative to the storage root of the master key. (id and secret are optional)
|
1494
1513
|
|
1495
1514
|
```
|
1496
|
-
$ <%=cmd%>
|
1515
|
+
$ <%=cmd%> aoc admin resource node --name=_node_name_ --secret=_secret_ v4 access_key create --value=@json:'{"storage":{"path":"/folder1"}}'
|
1497
1516
|
```
|
1498
1517
|
|
1499
1518
|
* Display transfer events (ops/transfer)
|
1500
1519
|
|
1501
1520
|
```
|
1502
|
-
$ <%=cmd%>
|
1521
|
+
$ <%=cmd%> aoc admin res node --secret=_secret_ v3 transfer list --value=@json:'[["q","*"],["count",5]]'
|
1503
1522
|
```
|
1504
1523
|
|
1505
1524
|
# page=1&per_page=10&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
|
@@ -1517,13 +1536,13 @@ $ <%=cmd%> aspera admin res node --secret=_secret_ v3 transfer list --value=@jso
|
|
1517
1536
|
* Display node events (events)
|
1518
1537
|
|
1519
1538
|
```
|
1520
|
-
$ <%=cmd%>
|
1539
|
+
$ <%=cmd%> aoc admin res node --secret=_secret_ v3 events
|
1521
1540
|
```
|
1522
1541
|
|
1523
1542
|
* display members of a workspace
|
1524
1543
|
|
1525
1544
|
```
|
1526
|
-
$ <%=cmd%>
|
1545
|
+
$ <%=cmd%> aoc admin res workspace_membership list --fields=member_type,manager,member.email --query=@json:'{"page":1,"per_page":50,"embed":"member","inherited":false,"workspace_id":11363,"sort":"name"}'
|
1527
1546
|
:.............:.........:..................................:
|
1528
1547
|
: member_type : manager : member.email :
|
1529
1548
|
:.............:.........:..................................:
|
@@ -1548,20 +1567,20 @@ a- get id of first workspace
|
|
1548
1567
|
|
1549
1568
|
```
|
1550
1569
|
WS1='First Workspace'
|
1551
|
-
WS1ID=$(<%=cmd%>
|
1570
|
+
WS1ID=$(<%=cmd%> aoc admin res workspace list --query=@json:'{"q":"'"$WS1"'"}' --select=@json:'{"name":"'"$WS1"'"}' --fields=id --format=csv)
|
1552
1571
|
```
|
1553
1572
|
|
1554
1573
|
b- get id of second workspace
|
1555
1574
|
|
1556
1575
|
```
|
1557
1576
|
WS2='Second Workspace'
|
1558
|
-
WS2ID=$(<%=cmd%>
|
1577
|
+
WS2ID=$(<%=cmd%> aoc admin res workspace list --query=@json:'{"q":"'"$WS2"'"}' --select=@json:'{"name":"'"$WS2"'"}' --fields=id --format=csv)
|
1559
1578
|
```
|
1560
1579
|
|
1561
1580
|
c- extract membership information and change workspace id
|
1562
1581
|
|
1563
1582
|
```
|
1564
|
-
$ <%=cmd%>
|
1583
|
+
$ <%=cmd%> aoc admin res workspace_membership list --fields=manager,member_id,member_type,workspace_id --query=@json:'{"per_page":10000,"workspace_id":'"$WS1ID"'}' --format=jsonpp > ws1_members.json
|
1565
1584
|
```
|
1566
1585
|
|
1567
1586
|
d- convert to creation data for second workspace:
|
@@ -1579,13 +1598,13 @@ jq '[.[] | {member_type,member_id,workspace_id,manager,workspace_id:"'"$WS2ID"'"
|
|
1579
1598
|
e- add members to second workspace
|
1580
1599
|
|
1581
1600
|
```
|
1582
|
-
$ <%=cmd%>
|
1601
|
+
$ <%=cmd%> aoc admin res workspace_membership create --bulk=yes @json:@file:ws2_members.json
|
1583
1602
|
```
|
1584
1603
|
|
1585
1604
|
* get users who did not log since a date
|
1586
1605
|
|
1587
1606
|
```
|
1588
|
-
$ <%=cmd%>
|
1607
|
+
$ <%=cmd%> aoc admin res user list --fields=email --query=@json:'{"per_page":10000,"q":"last_login_at:<2018-05-28"}'
|
1589
1608
|
:...............................:
|
1590
1609
|
: email :
|
1591
1610
|
:...............................:
|
@@ -1597,7 +1616,7 @@ $ <%=cmd%> aspera admin res user list --fields=email --query=@json:'{"per_page":
|
|
1597
1616
|
* list "Limited" users
|
1598
1617
|
|
1599
1618
|
```
|
1600
|
-
$ <%=cmd%>
|
1619
|
+
$ <%=cmd%> aoc admin res user list --fields=email --query=@json:'{"per_page":10000}' --select=@json:'{"member_of_any_workspace":false}'
|
1601
1620
|
```
|
1602
1621
|
|
1603
1622
|
* Perform a multi Gbps transfer between two remote shared folders
|
@@ -1611,7 +1630,7 @@ $ <%=cmd%> conf wizard --url=https://sedemo.ibmaspera.com --username=laurent.mar
|
|
1611
1630
|
Detected: Aspera on Cloud
|
1612
1631
|
Preparing preset: aoc_sedemo
|
1613
1632
|
Using existing key:
|
1614
|
-
/Users/laurent/.aspera/<%=cmd%>/
|
1633
|
+
/Users/laurent/.aspera/<%=cmd%>/aspera_aoc_key
|
1615
1634
|
Using global client_id.
|
1616
1635
|
Please Login to your Aspera on Cloud instance.
|
1617
1636
|
Navigate to your "Account Settings"
|
@@ -1626,7 +1645,7 @@ Setting config preset as default for aspera
|
|
1626
1645
|
saving config file
|
1627
1646
|
Done.
|
1628
1647
|
You can test with:
|
1629
|
-
$ <%=cmd%>
|
1648
|
+
$ <%=cmd%> aoc user info show
|
1630
1649
|
```
|
1631
1650
|
|
1632
1651
|
This creates the option preset "aoc_<org name>" to allow seamless command line access and sets it as default for aspera on cloud.
|
@@ -1641,14 +1660,14 @@ $ <%=cmd%> -Paoc_show aspera files transfer --from-folder='IBM Cloud SJ' --to-fo
|
|
1641
1660
|
|
1642
1661
|
* create registration key to register a node
|
1643
1662
|
```
|
1644
|
-
$ <%=cmd%>
|
1663
|
+
$ <%=cmd%> aoc admin res admin/client create @json:'{"data":{"name":"laurentnode","client_subject_scopes":["alee","aejd"],"client_subject_enabled":true}}' --fields=token --format=csv
|
1645
1664
|
jfqslfdjlfdjfhdjklqfhdkl
|
1646
1665
|
```
|
1647
1666
|
|
1648
1667
|
* delete all registration keys
|
1649
1668
|
|
1650
1669
|
```
|
1651
|
-
$ <%=cmd%>
|
1670
|
+
$ <%=cmd%> aoc admin res admin/client list --fields=id --format=csv|<%=cmd%> aoc admin res admin/client delete --bulk=yes --id=@lines:@stdin:
|
1652
1671
|
+-----+---------+
|
1653
1672
|
| id | status |
|
1654
1673
|
+-----+---------+
|
@@ -1664,19 +1683,19 @@ $ <%=cmd%> aspera admin res admin/client list --fields=id --format=csv|<%=cmd%>
|
|
1664
1683
|
* list shared folders in node
|
1665
1684
|
|
1666
1685
|
```
|
1667
|
-
$ <%=cmd%>
|
1686
|
+
$ <%=cmd%> aoc admin res node --id=8669 shared_folders
|
1668
1687
|
```
|
1669
1688
|
|
1670
1689
|
* list shared folders in workspace
|
1671
1690
|
|
1672
1691
|
```
|
1673
|
-
$ <%=cmd%>
|
1692
|
+
$ <%=cmd%> aoc admin res workspace --id=10818 shared_folders
|
1674
1693
|
```
|
1675
1694
|
|
1676
1695
|
* list members of shared folder
|
1677
1696
|
|
1678
1697
|
```
|
1679
|
-
$ <%=cmd%>
|
1698
|
+
$ <%=cmd%> aoc admin res node --id=8669 v4 perm 82 show
|
1680
1699
|
```
|
1681
1700
|
|
1682
1701
|
## Send a Package
|
@@ -1684,7 +1703,7 @@ $ <%=cmd%> aspera admin res node --id=8669 v4 perm 82 show
|
|
1684
1703
|
Send a package:
|
1685
1704
|
|
1686
1705
|
```
|
1687
|
-
$ <%=cmd%>
|
1706
|
+
$ <%=cmd%> aoc packages send --value=@json:'{"name":"my title","note":"my note","recipients":["laurent.martin.aspera@fr.ibm.com","other@example.com"]}' --sources=@args my_file.dat
|
1688
1707
|
```
|
1689
1708
|
|
1690
1709
|
Notes:
|
@@ -1699,7 +1718,7 @@ Notes:
|
|
1699
1718
|
It is possible to automatically download new packages, like using Aspera Cargo:
|
1700
1719
|
|
1701
1720
|
```
|
1702
|
-
$ <%=cmd%>
|
1721
|
+
$ <%=cmd%> aoc packages recv --id=ALL --once-only=yes --lock-port=12345
|
1703
1722
|
```
|
1704
1723
|
|
1705
1724
|
* `--id=ALL` (case sensitive) will download all packages
|
@@ -1743,19 +1762,19 @@ f["type"].eql?("file") and (DateTime.now-DateTime.parse(f["modified_time"]))<100
|
|
1743
1762
|
* expression to find files older than 1 year on a given node and store in file list
|
1744
1763
|
|
1745
1764
|
```
|
1746
|
-
$ <%=cmd%>
|
1765
|
+
$ <%=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
|
1747
1766
|
```
|
1748
1767
|
|
1749
1768
|
* delete the files, one by one
|
1750
1769
|
|
1751
1770
|
```
|
1752
|
-
$ cat my_file_list.txt|while read path;do echo <%=cmd%>
|
1771
|
+
$ 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
|
1753
1772
|
```
|
1754
1773
|
|
1755
1774
|
* delete the files in bulk
|
1756
1775
|
|
1757
1776
|
```
|
1758
|
-
cat my_file_list.txt | <%=cmd%>
|
1777
|
+
cat my_file_list.txt | <%=cmd%> aoc admin res node --name='my node name' --secret='my secret' v3 delete @lines:@stdin:
|
1759
1778
|
```
|
1760
1779
|
|
1761
1780
|
## Activity
|
@@ -1763,13 +1782,13 @@ cat my_file_list.txt | <%=cmd%> aspera admin res node --name='my node name' --se
|
|
1763
1782
|
The activity app can be queried with:
|
1764
1783
|
|
1765
1784
|
```
|
1766
|
-
$ <%=cmd%>
|
1785
|
+
$ <%=cmd%> aoc admin analytics transfers
|
1767
1786
|
```
|
1768
1787
|
|
1769
1788
|
It can also support filters and send notification email with a template:
|
1770
1789
|
|
1771
1790
|
```
|
1772
|
-
$ <%=cmd%>
|
1791
|
+
$ <%=cmd%> aoc admin analytics transfers --once-only=yes --lock-port=123455 \
|
1773
1792
|
--query=@json:'{"status":"completed","direction":"receive"}' \
|
1774
1793
|
--notify=@json:'{"to":"<''%=transfer[:user_email.to_s]%>","subject":"<''%=transfer[:files_completed.to_s]%> files received","body":"Dear <''%=transfer[:user_email.to_s]%>\nWe received <''%=transfer[:files_completed.to_s]%> files for a total of <''%=transfer[:transferred_bytes.to_s]%> bytes, starting with file:\n<''%=transfer[:content.to_s]%>\n\nThank you."}'
|
1775
1794
|
```
|
@@ -1789,9 +1808,9 @@ By default transfer nodes are expected to use ports TCP/UDP 33001. The web UI en
|
|
1789
1808
|
|
1790
1809
|
ATS is usable either :
|
1791
1810
|
|
1792
|
-
* from an AoC subscription : <%=cmd%>
|
1811
|
+
* from an AoC subscription : <%=cmd%> aoc admin ats : use AoC authentication
|
1793
1812
|
|
1794
|
-
* or from an IBM Cloud subscription : <%=cmd%> ats
|
1813
|
+
* or from an IBM Cloud subscription : <%=cmd%> ats : use IBM Cloud API key authentication
|
1795
1814
|
|
1796
1815
|
## IBM Cloud ATS : creation of api key
|
1797
1816
|
|
@@ -1895,21 +1914,35 @@ $ <%=cmd%> server --ssh-keys=@list:,~/.ssh/id_rsa
|
|
1895
1914
|
$ <%=cmd%> server --ssh-keys=@json:'["~/.ssh/id_rsa"]'
|
1896
1915
|
```
|
1897
1916
|
|
1898
|
-
The underlying ssh library `net::ssh` provides several options that may be used
|
1899
|
-
|
1917
|
+
The underlying ssh library `net::ssh` provides several options that may be used depending on environment. By default the ssh library expect that an ssh-agent is running.
|
1918
|
+
|
1919
|
+
If you get an error message such as:
|
1900
1920
|
|
1901
1921
|
```
|
1922
|
+
[Linux]
|
1902
1923
|
ERROR -- net.ssh.authentication.agent: could not connect to ssh-agent: Agent not configured
|
1903
1924
|
```
|
1904
1925
|
|
1905
|
-
|
1926
|
+
or
|
1927
|
+
|
1928
|
+
```
|
1929
|
+
[Windows]
|
1930
|
+
ERROR -- net.ssh.authentication.agent: could not connect to ssh-agent: pageant process not running
|
1931
|
+
```
|
1932
|
+
|
1933
|
+
This means that you dont have such an ssh agent running:
|
1906
1934
|
|
1907
|
-
|
1935
|
+
* check env var: `SSH_AGENT_SOCK`
|
1936
|
+
* check if the key is protected with a passphrase
|
1937
|
+
* [check the manual](https://net-ssh.github.io/ssh/v1/chapter-2.html#s2)
|
1938
|
+
* To diable use of `ssh-agent`, use the option `ssh_option` like this (or set in preset):
|
1908
1939
|
|
1909
1940
|
```
|
1910
1941
|
$ <%=cmd%> server --ssh-options=@ruby:'{use_agent: false}' ...
|
1911
1942
|
```
|
1912
1943
|
|
1944
|
+
This can also be set as default using a preset
|
1945
|
+
|
1913
1946
|
## Example
|
1914
1947
|
|
1915
1948
|
One can test the "server" application using the well known demo server:
|
@@ -2204,7 +2237,7 @@ To change this parameter in `aspera.conf`, use `asconfigurator`. To display the
|
|
2204
2237
|
|
2205
2238
|
If you use a value different than 16777216, then specify it using option `max_size`.
|
2206
2239
|
|
2207
|
-
Note: the HSTS parameter (max_request_file_create_size_kb) is in
|
2240
|
+
Note: the HSTS parameter (max_request_file_create_size_kb) is in *kiloBytes* while the generator parameter is in *Bytes* (factor of 1024).
|
2208
2241
|
|
2209
2242
|
## <a name="prev_ext"></a>External tools: Linux
|
2210
2243
|
|
@@ -2334,8 +2367,7 @@ using one of three overwrite method:
|
|
2334
2367
|
|
2335
2368
|
Deletion of preview for deleted source files: not implemented yet.
|
2336
2369
|
|
2337
|
-
If the `scan` or `events` detection method is used, then the option : `skip_folders` can be used
|
2338
|
-
to skip some folders. It expects a list of path starting with slash, use the `@json:` notation, example:
|
2370
|
+
If the `scan` or `events` detection method is used, then the option : `skip_folders` can be used to skip some folders. It expects a list of path relative to the storage root (docroot) starting with slash, use the `@json:` notation, example:
|
2339
2371
|
|
2340
2372
|
```
|
2341
2373
|
$ <%=cmd%> preview scan --skip-folders=@json:'["/not_here"]'
|
@@ -2343,14 +2375,14 @@ $ <%=cmd%> preview scan --skip-folders=@json:'["/not_here"]'
|
|
2343
2375
|
|
2344
2376
|
The option `folder_reset_cache` forces the node service to refresh folder contents using various methods.
|
2345
2377
|
|
2346
|
-
##
|
2378
|
+
## Preview File types
|
2347
2379
|
|
2348
2380
|
Two types of preview can be generated:
|
2349
2381
|
|
2350
2382
|
* png: thumbnail
|
2351
2383
|
* mp4: video preview (only for video)
|
2352
2384
|
|
2353
|
-
|
2385
|
+
Use option `skip_format` to skip generation of a format.
|
2354
2386
|
|
2355
2387
|
## Supported input Files types
|
2356
2388
|
|
@@ -2508,7 +2540,7 @@ Nodejs: [https://www.npmjs.com/package/aspera](https://www.npmjs.com/package/asp
|
|
2508
2540
|
|
2509
2541
|
```
|
2510
2542
|
$ asession -h
|
2511
|
-
<%= File.read(ENV["
|
2543
|
+
<%= File.read(ENV["INCL_ASESSION"]) %>
|
2512
2544
|
```
|
2513
2545
|
|
2514
2546
|
# Hot folder
|
@@ -2606,15 +2638,16 @@ So, it evolved into <%=tool%>:
|
|
2606
2638
|
|
2607
2639
|
# Release Notes
|
2608
2640
|
|
2609
|
-
* 4.0.0.
|
2641
|
+
* 4.0.0.pre2
|
2610
2642
|
|
2611
|
-
|
2612
|
-
|
2613
|
-
|
2614
|
-
|
2615
|
-
|
2616
|
-
|
2617
|
-
|
2643
|
+
* now available as open source at [<%= gemspec.homepage %>](<%= gemspec.homepage %>) with general cleanup
|
2644
|
+
* changed default tool name from `mlia` to `ascli`
|
2645
|
+
* changed `aspera` command to `aoc`
|
2646
|
+
* changed gem name from `asperalm` to `aspera-cli`
|
2647
|
+
* changed module name from `Asperalm` to `Aspera`
|
2648
|
+
* removed command `folder` in `preview`, merged to `scan`
|
2649
|
+
* persistency files go to sub folder instead of main folder
|
2650
|
+
* added possibility to install SDK: `config ascp install`
|
2618
2651
|
|
2619
2652
|
* 0.11.8
|
2620
2653
|
|