aspera-cli 4.24.0 → 4.24.1
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +5 -0
- data/README.md +538 -524
- data/lib/aspera/cli/main.rb +1 -1
- data/lib/aspera/cli/plugins/config.rb +14 -1
- data/lib/aspera/cli/plugins/faspex5.rb +2 -2
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/cli/wizard.rb +10 -13
- data/lib/aspera/environment.rb +4 -3
- data/lib/aspera/log.rb +53 -30
- data/lib/aspera/sync/operations.rb +58 -61
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
data/README.md
CHANGED
@@ -2,19 +2,21 @@
|
|
2
2
|
<!--
|
3
3
|
DO NOT EDIT: THIS FILE IS GENERATED, edit docs/README.erb.md, for details, read docs/README.md
|
4
4
|
PANDOC_META_BEGIN
|
5
|
-
subtitle: "ascli 4.24.
|
5
|
+
subtitle: "ascli 4.24.1"
|
6
6
|
author: "Laurent MARTIN"
|
7
7
|
PANDOC_META_END
|
8
8
|
-->
|
9
9
|
<!-- markdownlint-disable MD033 -->
|
10
10
|
|
11
|
+
<!-- NOTE CAUTION WARNING IMPORTANT TIP INFO -->
|
12
|
+
|
11
13
|
[](https://badge.fury.io/rb/aspera-cli)
|
12
14
|
[](https://github.com/IBM/aspera-cli/actions)
|
13
15
|
[](https://bestpractices.coreinfrastructure.org/projects/5861)
|
14
16
|
|
15
17
|
## Introduction
|
16
18
|
|
17
|
-

|
18
20
|
|
19
21
|
Hootput lives in the terminal, watching over every command with wide, unblinking eyes.
|
20
22
|
Known for concise output and sharp insight, this owl thrives where others get lost in the dark.
|
@@ -39,7 +41,7 @@ Need to debug? I’ll show you what’s going on under the hood.
|
|
39
41
|
|
40
42
|
Think of me as Aspera’s command-line sidekick: quick, reliable, and a little no-nonsense. You bring the files; I’ll bring the horsepower."
|
41
43
|
|
42
|
-
Version : 4.24.
|
44
|
+
Version : 4.24.1
|
43
45
|
|
44
46
|
Laurent/2016-2025
|
45
47
|
|
@@ -126,12 +128,12 @@ First, follow section: [Installation](#installation) (Ruby, Gem, FASP) to start
|
|
126
128
|
|
127
129
|
Once the gem is installed, `ascli` shall be accessible:
|
128
130
|
|
129
|
-
```
|
131
|
+
```shell
|
130
132
|
ascli --version
|
131
133
|
```
|
132
134
|
|
133
135
|
```text
|
134
|
-
4.24.
|
136
|
+
4.24.1
|
135
137
|
```
|
136
138
|
|
137
139
|
> [!NOTE]
|
@@ -145,11 +147,11 @@ If you want to test with Aspera on Cloud, jump to section: [Wizard](#configurati
|
|
145
147
|
|
146
148
|
To test with Aspera demo transfer server, set up the environment and then test:
|
147
149
|
|
148
|
-
```
|
150
|
+
```shell
|
149
151
|
ascli config initdemo
|
150
152
|
```
|
151
153
|
|
152
|
-
```
|
154
|
+
```shell
|
153
155
|
ascli server browse /
|
154
156
|
```
|
155
157
|
|
@@ -172,7 +174,7 @@ The following example will:
|
|
172
174
|
- List files in a folder
|
173
175
|
- Download a file
|
174
176
|
|
175
|
-
```
|
177
|
+
```shell
|
176
178
|
ascli config preset update myserver --url=ssh://demo.asperasoft.com:33001 --username=asperaweb --password=my_password_here
|
177
179
|
```
|
178
180
|
|
@@ -181,7 +183,7 @@ Updated: myserver
|
|
181
183
|
Saving config file.
|
182
184
|
```
|
183
185
|
|
184
|
-
```
|
186
|
+
```shell
|
185
187
|
ascli config preset set default server myserver
|
186
188
|
```
|
187
189
|
|
@@ -190,7 +192,7 @@ Updated: default: server <- myserver
|
|
190
192
|
Saving config file.
|
191
193
|
```
|
192
194
|
|
193
|
-
```
|
195
|
+
```shell
|
194
196
|
ascli server browse /aspera-test-dir-large
|
195
197
|
```
|
196
198
|
|
@@ -207,7 +209,7 @@ ascli server browse /aspera-test-dir-large
|
|
207
209
|
╰────────────┴──────┴───────────┴─────────────┴───────────────────────────┴───────╯
|
208
210
|
```
|
209
211
|
|
210
|
-
```
|
212
|
+
```shell
|
211
213
|
ascli server download /aspera-test-dir-large/200MB
|
212
214
|
```
|
213
215
|
|
@@ -255,7 +257,7 @@ It is planned to provide `ascli` as a single platform-dependent executable.
|
|
255
257
|
>
|
256
258
|
> On Linux, check the minimum required GLIBC on this site: [repology.org](https://repology.org/project/glibc/versions), or check your GLIBC version with `ldd`:
|
257
259
|
|
258
|
-
```
|
260
|
+
```shell
|
259
261
|
ldd --version | head -n1
|
260
262
|
```
|
261
263
|
|
@@ -265,7 +267,7 @@ ldd (GNU libc) 2.34
|
|
265
267
|
|
266
268
|
Check an executable's (e.g. `/bin/bash`, `ascli`, `ascp`) minimum required GLIBC version:
|
267
269
|
|
268
|
-
```
|
270
|
+
```shell
|
269
271
|
objdump -p /bin/bash | sed -n 's/^.*GLIBC_//p' | sort -V | tail -n1
|
270
272
|
```
|
271
273
|
|
@@ -315,7 +317,7 @@ The Ruby installer supports silent installation, to see the options, execute it
|
|
315
317
|
|
316
318
|
Download the Ruby installer executable from <https://rubyinstaller.org/downloads/> and then install:
|
317
319
|
|
318
|
-
```
|
320
|
+
```batchfile
|
319
321
|
rubyinstaller-devkit-3.2.2-1-x64.exe /silent /currentuser /noicons /dir=C:\aspera-cli
|
320
322
|
```
|
321
323
|
|
@@ -328,7 +330,7 @@ Do not use it.
|
|
328
330
|
|
329
331
|
The recommended way is to use [Homebrew](https://brew.sh/).
|
330
332
|
|
331
|
-
```
|
333
|
+
```shell
|
332
334
|
brew install ruby
|
333
335
|
```
|
334
336
|
|
@@ -336,7 +338,7 @@ This installs a recent Ruby suitable for `ascli`.
|
|
336
338
|
|
337
339
|
To add PATH to Ruby on Apple Silicon, add this in your shell configuration file (e.g. `~/.bash_profile` or `~/.zshrc`):
|
338
340
|
|
339
|
-
```
|
341
|
+
```shell
|
340
342
|
use_ruby(){
|
341
343
|
local version=$1
|
342
344
|
case $version in list) for r in $(brew list -1 | grep '^ruby'); do
|
@@ -367,48 +369,48 @@ If your Linux distribution provides a standard Ruby package, you can use it prov
|
|
367
369
|
|
368
370
|
- Check available Ruby versions:
|
369
371
|
|
370
|
-
```
|
372
|
+
```shell
|
371
373
|
dnf module list ruby
|
372
374
|
```
|
373
375
|
|
374
376
|
- If Ruby was already installed with an older version, remove it:
|
375
377
|
|
376
|
-
```
|
378
|
+
```shell
|
377
379
|
dnf module -y reset ruby
|
378
380
|
```
|
379
381
|
|
380
382
|
- Install packages needed to build native gems:
|
381
383
|
|
382
|
-
```
|
384
|
+
```shell
|
383
385
|
dnf install -y make automake gcc gcc-c++ kernel-devel
|
384
386
|
```
|
385
387
|
|
386
388
|
- Enable the Ruby version you want:
|
387
389
|
|
388
|
-
```
|
390
|
+
```shell
|
389
391
|
dnf module -y enable ruby:3.1
|
390
392
|
dnf install -y ruby-devel
|
391
393
|
```
|
392
394
|
|
393
395
|
**Example:** Ubuntu
|
394
396
|
|
395
|
-
```
|
397
|
+
```shell
|
396
398
|
apt-get install -y ruby-full
|
397
399
|
```
|
398
400
|
|
399
401
|
**Other examples:**
|
400
402
|
|
401
|
-
```
|
403
|
+
```shell
|
402
404
|
yum install -y ruby ruby-devel rubygems ruby-json
|
403
405
|
```
|
404
406
|
|
405
|
-
```
|
407
|
+
```shell
|
406
408
|
apt install -y ruby ruby-dev rubygems ruby-json
|
407
409
|
```
|
408
410
|
|
409
411
|
One can remove all installed gems, for example to start fresh:
|
410
412
|
|
411
|
-
```
|
413
|
+
```shell
|
412
414
|
gem uninstall -axI $(ls $(gem env gemdir)/gems/|sed -e 's/-[^-]*$//'|sort -u)
|
413
415
|
```
|
414
416
|
|
@@ -420,7 +422,7 @@ Follow [https://rvm.io/](https://rvm.io/).
|
|
420
422
|
Execute the shell/curl command.
|
421
423
|
As regular user, it installs in the user's home: `~/.rvm`.
|
422
424
|
|
423
|
-
```
|
425
|
+
```shell
|
424
426
|
\curl -sSL https://get.rvm.io | bash -s stable
|
425
427
|
```
|
426
428
|
|
@@ -428,19 +430,19 @@ Follow on-screen instructions to install keys, and then re-execute the command.
|
|
428
430
|
|
429
431
|
Upon RVM installation, open a new terminal or initialize with:
|
430
432
|
|
431
|
-
```
|
433
|
+
```shell
|
432
434
|
source ~/.rvm/scripts/rvm
|
433
435
|
```
|
434
436
|
|
435
437
|
It is advised to get one of the pre-compiled Ruby version, you can list with:
|
436
438
|
|
437
|
-
```
|
439
|
+
```shell
|
438
440
|
rvm list --remote
|
439
441
|
```
|
440
442
|
|
441
443
|
Install the chosen pre-compiled Ruby version:
|
442
444
|
|
443
|
-
```
|
445
|
+
```shell
|
444
446
|
rvm install 3.2.2
|
445
447
|
```
|
446
448
|
|
@@ -450,30 +452,30 @@ Alternatively RVM can be installed system-wide, for this execute as `root`.
|
|
450
452
|
It then installs by default in `/usr/local/rvm` for all users and creates `/etc/profile.d/rvm.sh`.
|
451
453
|
One can install in another location with:
|
452
454
|
|
453
|
-
```
|
455
|
+
```shell
|
454
456
|
curl -sSL https://get.rvm.io | bash -s -- --path /usr/local
|
455
457
|
```
|
456
458
|
|
457
459
|
As root, make sure this will not collide with other application using Ruby (e.g. Faspex).
|
458
460
|
If so, one can rename the environment script so that it is not loaded by default:
|
459
461
|
|
460
|
-
```
|
462
|
+
```shell
|
461
463
|
mv /etc/profile.d/rvm.sh /etc/profile.d/rvm.sh.ok
|
462
464
|
```
|
463
465
|
|
464
466
|
To activate Ruby (and ascli) later, source it:
|
465
467
|
|
466
|
-
```
|
468
|
+
```shell
|
467
469
|
source /etc/profile.d/rvm.sh.ok
|
468
470
|
```
|
469
471
|
|
470
|
-
```
|
472
|
+
```shell
|
471
473
|
rvm version
|
472
474
|
```
|
473
475
|
|
474
476
|
On macOS, one way to force use of OpenSSL 3.0 is:
|
475
477
|
|
476
|
-
```
|
478
|
+
```shell
|
477
479
|
RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3.0)" rvm install 3.4.0
|
478
480
|
```
|
479
481
|
|
@@ -481,19 +483,19 @@ RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3.0)" rvm instal
|
|
481
483
|
|
482
484
|
If you don't have root access, you can install Ruby in your home directory using `rbenv` see [`rbenv-installer`](https://github.com/rbenv/rbenv-installer#rbenv-installer):
|
483
485
|
|
484
|
-
```
|
486
|
+
```shell
|
485
487
|
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash
|
486
488
|
```
|
487
489
|
|
488
490
|
Then open a new terminal, or `source` the shell initialization script:
|
489
491
|
|
490
|
-
```
|
492
|
+
```shell
|
491
493
|
source ~/.bashrc
|
492
494
|
```
|
493
495
|
|
494
496
|
Then install Ruby:
|
495
497
|
|
496
|
-
```
|
498
|
+
```shell
|
497
499
|
rbenv install 3.2.2
|
498
500
|
```
|
499
501
|
|
@@ -508,7 +510,7 @@ If your Unix does not provide a pre-built Ruby, you can get it using one of thos
|
|
508
510
|
|
509
511
|
For instance to build from source and install in `/opt/ruby` :
|
510
512
|
|
511
|
-
```
|
513
|
+
```shell
|
512
514
|
wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.2.tar.gz
|
513
515
|
|
514
516
|
gzip -d ruby-2.7.2.tar.gz
|
@@ -548,14 +550,14 @@ Choose the latest version from:
|
|
548
550
|
|
549
551
|
Example: start `ascli` with JRuby and reduce startup time:
|
550
552
|
|
551
|
-
```
|
553
|
+
```shell
|
552
554
|
export JRUBY_OPTS=--dev
|
553
555
|
ascli -v
|
554
556
|
```
|
555
557
|
|
556
558
|
or
|
557
559
|
|
558
|
-
```
|
560
|
+
```shell
|
559
561
|
JRUBY_OPTS=--dev ascli -v
|
560
562
|
```
|
561
563
|
|
@@ -579,7 +581,7 @@ See [Gemfile](Gemfile):
|
|
579
581
|
|
580
582
|
Install like this:
|
581
583
|
|
582
|
-
```
|
584
|
+
```shell
|
583
585
|
gem install grpc -v '~> 1.71'
|
584
586
|
gem install mimemagic -v '~> 0.4'
|
585
587
|
gem install rmagick -v '~> 6.1'
|
@@ -594,13 +596,13 @@ gem install sequel -v '~> 5.96'
|
|
594
596
|
|
595
597
|
Once you have Ruby and rights to install gems, install the `aspera-cli` gem and its dependencies:
|
596
598
|
|
597
|
-
```
|
599
|
+
```shell
|
598
600
|
gem install aspera-cli
|
599
601
|
```
|
600
602
|
|
601
603
|
To upgrade to the latest version:
|
602
604
|
|
603
|
-
```
|
605
|
+
```shell
|
604
606
|
gem update aspera-cli
|
605
607
|
```
|
606
608
|
|
@@ -609,7 +611,7 @@ To deactivate this feature, globally set the option `version_check_days` to `0`,
|
|
609
611
|
|
610
612
|
To check if a new version is available (independently of `version_check_days`):
|
611
613
|
|
612
|
-
```
|
614
|
+
```shell
|
613
615
|
ascli config check_update
|
614
616
|
```
|
615
617
|
|
@@ -622,13 +624,13 @@ For [secure installation](https://guides.rubygems.org/security/#using-gems), one
|
|
622
624
|
|
623
625
|
Import the verification certificate:
|
624
626
|
|
625
|
-
```
|
627
|
+
```shell
|
626
628
|
gem cert --add <(curl -Ls https://raw.githubusercontent.com/IBM/aspera-cli/main/certs/aspera-cli-public-cert.pem)
|
627
629
|
```
|
628
630
|
|
629
631
|
The user installs the gem with `HighSecurity` or `MediumSecurity`: this will succeed only of the gem is trusted:
|
630
632
|
|
631
|
-
```
|
633
|
+
```shell
|
632
634
|
gem install -P MediumSecurity aspera-cli
|
633
635
|
```
|
634
636
|
|
@@ -647,13 +649,13 @@ This can be installed either be installing an Aspera transfer software or using
|
|
647
649
|
The easiest option to install `ascp` is through the use of the IBM Aspera Transfer Daemon (`transferd`).
|
648
650
|
Install using `ascli` for the current platform with:
|
649
651
|
|
650
|
-
```
|
652
|
+
```shell
|
651
653
|
ascli config transferd install
|
652
654
|
```
|
653
655
|
|
654
656
|
or
|
655
657
|
|
656
|
-
```
|
658
|
+
```shell
|
657
659
|
ascli config ascp install
|
658
660
|
```
|
659
661
|
|
@@ -679,25 +681,25 @@ Available Transfer Daemon versions available from `locations_url` can be listed
|
|
679
681
|
|
680
682
|
To install a specific version, e.g. 1.1.3:
|
681
683
|
|
682
|
-
```
|
684
|
+
```shell
|
683
685
|
ascli config ascp install 1.1.3
|
684
686
|
```
|
685
687
|
|
686
688
|
To get the download URL for a specific platform and version:
|
687
689
|
|
688
|
-
```
|
690
|
+
```shell
|
689
691
|
ascli config transferd list --select=@json:'{"platform":"osx-arm64","version":"1.1.3"}' --fields=url
|
690
692
|
```
|
691
693
|
|
692
694
|
To download it, pipe to `config download`:
|
693
695
|
|
694
|
-
```
|
696
|
+
```shell
|
695
697
|
ascli config transferd list --select=@json:'{"platform":"osx-arm64","version":"1.1.3"}' --fields=url | ascli config download @stdin:
|
696
698
|
```
|
697
699
|
|
698
700
|
If installation from a local file preferred (air-gapped installation) instead of fetching from internet: one can specify the location of the SDK file with option `sdk_url`:
|
699
701
|
|
700
|
-
```
|
702
|
+
```shell
|
701
703
|
ascli config ascp install --sdk-url=file:///macos-arm64-1.1.3-c6c7a2a.zip
|
702
704
|
```
|
703
705
|
|
@@ -733,7 +735,7 @@ Refer to section: [Transfer Agents](#transfer-clients-agents)
|
|
733
735
|
|
734
736
|
The sample script: [windows/build_package.sh](windows/build_package.sh) can be used to download all necessary gems and dependencies in a `tar.gz`.
|
735
737
|
|
736
|
-
```
|
738
|
+
```shell
|
737
739
|
./build_package.sh aspera-cli 4.18.0
|
738
740
|
```
|
739
741
|
|
@@ -751,7 +753,7 @@ The procedure:
|
|
751
753
|
|
752
754
|
- Archive (zip, tar) the main RVM folder (includes ascli):
|
753
755
|
|
754
|
-
```
|
756
|
+
```shell
|
755
757
|
cd $HOME && tar zcvf rvm-ascli.tgz .rvm
|
756
758
|
```
|
757
759
|
|
@@ -761,7 +763,7 @@ cd $HOME && tar zcvf rvm-ascli.tgz .rvm
|
|
761
763
|
|
762
764
|
- On target system
|
763
765
|
|
764
|
-
```
|
766
|
+
```shell
|
765
767
|
cd $HOME
|
766
768
|
|
767
769
|
tar zxvf rvm-ascli.tgz
|
@@ -773,7 +775,7 @@ ascli config ascp install --sdk-url=file:///[SDK archive file path]
|
|
773
775
|
|
774
776
|
- Add those lines to shell environment (`.profile`)
|
775
777
|
|
776
|
-
```
|
778
|
+
```shell
|
777
779
|
source ~/.rvm/scripts/rvm
|
778
780
|
```
|
779
781
|
|
@@ -785,7 +787,7 @@ It is essentially the same procedure as installation for Windows with internet,
|
|
785
787
|
|
786
788
|
- Download the Ruby installer from <https://rubyinstaller.org/downloads/>
|
787
789
|
|
788
|
-
```
|
790
|
+
```shell
|
789
791
|
v=$(curl -s https://rubyinstaller.org/downloads/ | sed -nEe 's|.*(https://.*/releases/download/.*exe).*|\1|p' | head -n 1)
|
790
792
|
curl -o ${v##*/} $v
|
791
793
|
```
|
@@ -801,19 +803,19 @@ Then, on the target system:
|
|
801
803
|
- Unzip the archive
|
802
804
|
- Execute the installer:
|
803
805
|
|
804
|
-
```
|
806
|
+
```batchfile
|
805
807
|
rubyinstaller-devkit-3.2.2-1-x64.exe /silent /currentuser /noicons /dir=C:\aspera-cli
|
806
808
|
```
|
807
809
|
|
808
810
|
- Install the gems: Extract the gem archive and then:
|
809
811
|
|
810
|
-
```
|
812
|
+
```batchfile
|
811
813
|
gem install --force --local *.gem
|
812
814
|
```
|
813
815
|
|
814
816
|
- Install the Aspera Transfer Daemon SDK
|
815
817
|
|
816
|
-
```
|
818
|
+
```shell
|
817
819
|
ascli config ascp install --sdk-url=file:///sdk.zip
|
818
820
|
```
|
819
821
|
|
@@ -826,7 +828,7 @@ The container image is: [`docker.io/martinlaurent/ascli`](https://hub.docker.com
|
|
826
828
|
The container contains: Ruby, `ascli` and the Aspera Transfer Daemon.
|
827
829
|
To use the container, ensure that you have `podman` (or `docker`) installed.
|
828
830
|
|
829
|
-
```
|
831
|
+
```shell
|
830
832
|
podman --version
|
831
833
|
```
|
832
834
|
|
@@ -836,7 +838,7 @@ podman --version
|
|
836
838
|
|
837
839
|
Execute this:
|
838
840
|
|
839
|
-
```
|
841
|
+
```shell
|
840
842
|
podman run --rm --tty --interactive --entrypoint bash docker.io/martinlaurent/ascli:latest
|
841
843
|
```
|
842
844
|
|
@@ -845,7 +847,7 @@ podman run --rm --tty --interactive --entrypoint bash docker.io/martinlaurent/as
|
|
845
847
|
|
846
848
|
Then, execute individual `ascli` commands such as:
|
847
849
|
|
848
|
-
```
|
850
|
+
```shell
|
849
851
|
ascli config init
|
850
852
|
ascli config preset overview
|
851
853
|
ascli config ascp info
|
@@ -866,31 +868,31 @@ The entry point is `ascli` and the default command is `help`.
|
|
866
868
|
|
867
869
|
The container can be executed for individual commands like this: (add `ascli` commands and options at the end of the command line, e.g. `-v` to display the version)
|
868
870
|
|
869
|
-
```
|
871
|
+
```shell
|
870
872
|
podman run --rm --tty --interactive docker.io/martinlaurent/ascli:latest
|
871
873
|
```
|
872
874
|
|
873
875
|
For more convenience, you may define a shell alias:
|
874
876
|
|
875
|
-
```
|
877
|
+
```shell
|
876
878
|
alias ascli='podman run --rm --tty --interactive docker.io/martinlaurent/ascli:latest'
|
877
879
|
```
|
878
880
|
|
879
881
|
Then, you can execute the container like a local command:
|
880
882
|
|
881
|
-
```
|
883
|
+
```shell
|
882
884
|
ascli -v
|
883
885
|
```
|
884
886
|
|
885
887
|
```text
|
886
|
-
4.24.
|
888
|
+
4.24.1
|
887
889
|
```
|
888
890
|
|
889
891
|
In order to keep persistency of configuration on the host, you should specify your user's configuration folder as a volume for the container.
|
890
892
|
To enable write access, a possibility is to run as `root` in the container (and set the default configuration folder to `/home/cliuser/.aspera/ascli`).
|
891
893
|
Add options:
|
892
894
|
|
893
|
-
```
|
895
|
+
```shell
|
894
896
|
--user root --env ASCLI_HOME=/home/cliuser/.aspera/ascli --volume $HOME/.aspera/ascli:/home/cliuser/.aspera/ascli
|
895
897
|
```
|
896
898
|
|
@@ -902,14 +904,14 @@ Add options:
|
|
902
904
|
As shown in the quick start, if you prefer to keep a running container with a shell and `ascli` available,
|
903
905
|
you can change the entry point, add option:
|
904
906
|
|
905
|
-
```
|
907
|
+
```shell
|
906
908
|
--entrypoint bash
|
907
909
|
```
|
908
910
|
|
909
911
|
You may also probably want that files downloaded in the container are directed to the host.
|
910
912
|
In this case you need also to specify the shared transfer folder as a volume:
|
911
913
|
|
912
|
-
```
|
914
|
+
```shell
|
913
915
|
--volume $HOME/xferdir:/xferfiles
|
914
916
|
```
|
915
917
|
|
@@ -918,11 +920,11 @@ In this case you need also to specify the shared transfer folder as a volume:
|
|
918
920
|
|
919
921
|
And if you want all the above, simply use all the options:
|
920
922
|
|
921
|
-
```
|
923
|
+
```shell
|
922
924
|
alias asclish="podman run --rm --tty --interactive --user root --env ASCLI_HOME=/home/cliuser/.aspera/ascli --volume $HOME/.aspera/ascli:/home/cliuser/.aspera/ascli --volume $HOME/xferdir:/xferfiles --entrypoint bash docker.io/martinlaurent/ascli:latest"
|
923
925
|
```
|
924
926
|
|
925
|
-
```
|
927
|
+
```shell
|
926
928
|
export xferdir=$HOME/xferdir
|
927
929
|
mkdir -p $xferdir
|
928
930
|
chmod -R 777 $xferdir
|
@@ -956,7 +958,7 @@ To add local storage as a volume, you can use the env var `docker_args`:
|
|
956
958
|
|
957
959
|
Example of use:
|
958
960
|
|
959
|
-
```
|
961
|
+
```shell
|
960
962
|
curl -o ascli https://raw.githubusercontent.com/IBM/aspera-cli/main/container/dascli
|
961
963
|
chmod a+x ascli
|
962
964
|
export xferdir=$HOME/xferdir
|
@@ -981,14 +983,14 @@ echo 'Local file to transfer' > $xferdir/samplefile.txt
|
|
981
983
|
|
982
984
|
- First create the image archive:
|
983
985
|
|
984
|
-
```
|
986
|
+
```shell
|
985
987
|
podman pull docker.io/martinlaurent/ascli
|
986
988
|
podman save docker.io/martinlaurent/ascli|gzip>ascli_image_latest.tar.gz
|
987
989
|
```
|
988
990
|
|
989
991
|
- Then, on air-gapped system:
|
990
992
|
|
991
|
-
```
|
993
|
+
```shell
|
992
994
|
podman load -i ascli_image_latest.tar.gz
|
993
995
|
```
|
994
996
|
|
@@ -998,13 +1000,13 @@ podman load -i ascli_image_latest.tar.gz
|
|
998
1000
|
As the container is immutable, it is not recommended modifying this file.
|
999
1001
|
If one wants to change the content, it is possible to tell `ascp` to use another file using `ascp` option `-f`, e.g. by locating it on the host folder `$HOME/.aspera/ascli` mapped to the container folder `/home/cliuser/.aspera/ascli`:
|
1000
1002
|
|
1001
|
-
```
|
1003
|
+
```shell
|
1002
1004
|
echo '<CONF/>' > $HOME/.aspera/ascli/aspera.conf
|
1003
1005
|
```
|
1004
1006
|
|
1005
1007
|
Then, tell `ascp` to use that other configuration file:
|
1006
1008
|
|
1007
|
-
```
|
1009
|
+
```shell
|
1008
1010
|
--transfer-info=@json:'{"ascp_args":["-f","/home/cliuser/.aspera/ascli/aspera.conf"]}'
|
1009
1011
|
```
|
1010
1012
|
|
@@ -1014,25 +1016,25 @@ Singularity is another type of use of container.
|
|
1014
1016
|
|
1015
1017
|
On Linux install:
|
1016
1018
|
|
1017
|
-
```
|
1019
|
+
```shell
|
1018
1020
|
dnf install singularity-ce
|
1019
1021
|
```
|
1020
1022
|
|
1021
1023
|
Build an image like this:
|
1022
1024
|
|
1023
|
-
```
|
1025
|
+
```shell
|
1024
1026
|
singularity build ascli.sif docker://docker.io/martinlaurent/ascli
|
1025
1027
|
```
|
1026
1028
|
|
1027
1029
|
Then, start `ascli` like this:
|
1028
1030
|
|
1029
|
-
```
|
1031
|
+
```shell
|
1030
1032
|
singularity run ascli.sif
|
1031
1033
|
```
|
1032
1034
|
|
1033
1035
|
Or get a shell with access to `ascli` like this:
|
1034
1036
|
|
1035
|
-
```
|
1037
|
+
```shell
|
1036
1038
|
singularity shell ascli.sif
|
1037
1039
|
```
|
1038
1040
|
|
@@ -1042,13 +1044,13 @@ singularity shell ascli.sif
|
|
1042
1044
|
|
1043
1045
|
To display the version of **OpenSSL** used in `ascli`:
|
1044
1046
|
|
1045
|
-
```
|
1047
|
+
```shell
|
1046
1048
|
ascli config echo @ruby:OpenSSL::OPENSSL_VERSION --format=text
|
1047
1049
|
```
|
1048
1050
|
|
1049
1051
|
It is possible to specify to use another SSL library or version by executing:
|
1050
1052
|
|
1051
|
-
```
|
1053
|
+
```shell
|
1052
1054
|
gem install openssl -- --with-openssl-dir=[openssl library folder]
|
1053
1055
|
```
|
1054
1056
|
|
@@ -1056,7 +1058,7 @@ Where `[openssl library folder]` is the path to the folder containing the `lib`
|
|
1056
1058
|
|
1057
1059
|
For example, on macOS, to use the `openssl@3` library installed with `brew`:
|
1058
1060
|
|
1059
|
-
```
|
1061
|
+
```shell
|
1060
1062
|
openssl version -e|sed -n 's|ENGINESDIR: "\(.*\)/lib[^/]*/.*|\1|p'
|
1061
1063
|
```
|
1062
1064
|
|
@@ -1066,7 +1068,7 @@ openssl version -e|sed -n 's|ENGINESDIR: "\(.*\)/lib[^/]*/.*|\1|p'
|
|
1066
1068
|
|
1067
1069
|
Then install the `openssl` gem with:
|
1068
1070
|
|
1069
|
-
```
|
1071
|
+
```shell
|
1070
1072
|
gem install openssl -- --with-openssl-dir=$(openssl version -e|sed -n 's|ENGINESDIR: "\(.*\)/lib[^/]*/.*|\1|p')
|
1071
1073
|
```
|
1072
1074
|
|
@@ -1076,7 +1078,7 @@ SSL certificates are validated using a certificate store, by default it is the o
|
|
1076
1078
|
|
1077
1079
|
To display trusted certificate store locations:
|
1078
1080
|
|
1079
|
-
```
|
1081
|
+
```shell
|
1080
1082
|
ascli --show-config --fields=cert_stores
|
1081
1083
|
```
|
1082
1084
|
|
@@ -1085,7 +1087,7 @@ Ruby's default values can be overridden using env vars: `SSL_CERT_FILE` and `SSL
|
|
1085
1087
|
|
1086
1088
|
One can display those default values:
|
1087
1089
|
|
1088
|
-
```
|
1090
|
+
```shell
|
1089
1091
|
ascli config echo @ruby:OpenSSL::X509::DEFAULT_CERT_DIR --format=text
|
1090
1092
|
ascli config echo @ruby:OpenSSL::X509::DEFAULT_CERT_FILE --format=text
|
1091
1093
|
```
|
@@ -1095,7 +1097,7 @@ Check this repository on how to update the system's CA certificate bundle: [http
|
|
1095
1097
|
|
1096
1098
|
For example on RHEL/Rocky Linux:
|
1097
1099
|
|
1098
|
-
```
|
1100
|
+
```shell
|
1099
1101
|
dnf install -y ca-certificates
|
1100
1102
|
update-ca-trust extract
|
1101
1103
|
```
|
@@ -1115,7 +1117,7 @@ When `cert_stores` is provided:
|
|
1115
1117
|
|
1116
1118
|
For example, on Linux to force the use the system's certificate store:
|
1117
1119
|
|
1118
|
-
```
|
1120
|
+
```shell
|
1119
1121
|
--cert-stores=$(openssl version -d|cut -f2 -d'"')/cert.pem
|
1120
1122
|
```
|
1121
1123
|
|
@@ -1124,7 +1126,7 @@ For example, on Linux to force the use the system's certificate store:
|
|
1124
1126
|
By default,`ascp` uses a hard coded root location `OPENSSLDIR`.
|
1125
1127
|
Original `ascp`'s hard coded locations can be found using:
|
1126
1128
|
|
1127
|
-
```
|
1129
|
+
```shell
|
1128
1130
|
ascli config ascp info --fields=openssldir
|
1129
1131
|
```
|
1130
1132
|
|
@@ -1138,13 +1140,13 @@ Typically done by updating the system's root certificate store.
|
|
1138
1140
|
|
1139
1141
|
An up-to-date version of the certificate bundle can also be retrieved with:
|
1140
1142
|
|
1141
|
-
```
|
1143
|
+
```shell
|
1142
1144
|
ascli config echo @uri:https://curl.haxx.se/ca/cacert.pem --format=text
|
1143
1145
|
```
|
1144
1146
|
|
1145
1147
|
To download that certificate store:
|
1146
1148
|
|
1147
|
-
```
|
1149
|
+
```shell
|
1148
1150
|
ascli config echo @uri:https://curl.haxx.se/ca/cacert.pem --format=text --output=/tmp/cacert.pem
|
1149
1151
|
```
|
1150
1152
|
|
@@ -1152,7 +1154,7 @@ Then, use this store by setting the option `cert_stores` (or env var `SSL_CERT_F
|
|
1152
1154
|
|
1153
1155
|
To trust a specific certificate (e.g. self-signed), **provided that the `CN` is correct**, save the certificate chain to a file:
|
1154
1156
|
|
1155
|
-
```
|
1157
|
+
```shell
|
1156
1158
|
ascli config remote_certificate chain https://localhost:9092 --insecure=yes --output=myserver.pem
|
1157
1159
|
```
|
1158
1160
|
|
@@ -1161,7 +1163,7 @@ ascli config remote_certificate chain https://localhost:9092 --insecure=yes --ou
|
|
1161
1163
|
|
1162
1164
|
Then, use this file as certificate store (e.g. here, Node API):
|
1163
1165
|
|
1164
|
-
```
|
1166
|
+
```shell
|
1165
1167
|
ascli config echo @uri:https://localhost:9092/ping --cert-stores=myserver.pem
|
1166
1168
|
```
|
1167
1169
|
|
@@ -1195,7 +1197,7 @@ The `aspera-cli` gem provides a command line interface (CLI) which interacts wit
|
|
1195
1197
|
|
1196
1198
|
Basic usage is displayed by executing:
|
1197
1199
|
|
1198
|
-
```
|
1200
|
+
```shell
|
1199
1201
|
ascli -h
|
1200
1202
|
```
|
1201
1203
|
|
@@ -1252,7 +1254,7 @@ One can also run `ascli` with option `--log-level=debug` to display the command
|
|
1252
1254
|
|
1253
1255
|
It is also possible to display arguments received by Ruby using this command:
|
1254
1256
|
|
1255
|
-
```
|
1257
|
+
```batchfile
|
1256
1258
|
C:> ruby -e 'puts ARGV' "Hello World" 1 2
|
1257
1259
|
```
|
1258
1260
|
|
@@ -1289,19 +1291,19 @@ The following examples give the same result on Windows using `cmd.exe`:
|
|
1289
1291
|
|
1290
1292
|
- Single quote protects the double quote
|
1291
1293
|
|
1292
|
-
```
|
1294
|
+
```batchfile
|
1293
1295
|
ascli config echo @json:'{"url":"https://..."}'
|
1294
1296
|
```
|
1295
1297
|
|
1296
1298
|
- Triple double quotes are replaced with a single double quote
|
1297
1299
|
|
1298
|
-
```
|
1300
|
+
```batchfile
|
1299
1301
|
ascli config echo @json:{"""url""":"""https://..."""}
|
1300
1302
|
```
|
1301
1303
|
|
1302
1304
|
- Double quote is escaped with backslash within double quotes
|
1303
1305
|
|
1304
|
-
```
|
1306
|
+
```batchfile
|
1305
1307
|
ascli config echo @json:"{\"url\":\"https://...\"}"
|
1306
1308
|
```
|
1307
1309
|
|
@@ -1355,7 +1357,7 @@ Unprocessed command line arguments are shown in the error message.
|
|
1355
1357
|
Example:
|
1356
1358
|
The shell parses three arguments (as `String`: `1`, `2` and `3`), so the additional two arguments are not processed by the `echo` command.
|
1357
1359
|
|
1358
|
-
```
|
1360
|
+
```shell
|
1359
1361
|
ascli config echo 1 2 3
|
1360
1362
|
```
|
1361
1363
|
|
@@ -1379,7 +1381,7 @@ For example, in the simple string `Hello World`, the space character is special
|
|
1379
1381
|
Double quotes are processed by the shell to create a single string argument.
|
1380
1382
|
For **POSIX shells**, single quotes can also be used in this case, or protect the special character ` ` (space) with a backslash. <!-- markdownlint-disable-line -->
|
1381
1383
|
|
1382
|
-
```
|
1384
|
+
```shell
|
1383
1385
|
ascli config echo "Hello World" --format=text
|
1384
1386
|
ascli config echo 'Hello World' --format=text
|
1385
1387
|
ascli config echo Hello\ World --format=text
|
@@ -1398,7 +1400,7 @@ Even if the variable contains spaces it results only in one argument for `ascli`
|
|
1398
1400
|
> We use a simple shell variable in this example.
|
1399
1401
|
> Note that it does not need to be exported as an environment variable.
|
1400
1402
|
|
1401
|
-
```
|
1403
|
+
```shell
|
1402
1404
|
MYVAR="Hello World"
|
1403
1405
|
ascli config echo @json:'{"title":"'$MYVAR'"}' --format=json
|
1404
1406
|
ascli config echo @json:{\"title\":\"$MYVAR\"} --format=json
|
@@ -1413,7 +1415,7 @@ ascli config echo @json:{\"title\":\"$MYVAR\"} --format=json
|
|
1413
1415
|
Double quote is a shell special character.
|
1414
1416
|
Like any shell special character, it can be protected either by preceding with a backslash or by enclosing in a single quote.
|
1415
1417
|
|
1416
|
-
```
|
1418
|
+
```shell
|
1417
1419
|
ascli config echo \"
|
1418
1420
|
ascli config echo '"'
|
1419
1421
|
```
|
@@ -1425,7 +1427,7 @@ ascli config echo '"'
|
|
1425
1427
|
Double quote in JSON is a little tricky because `"` is special both for the shell and JSON.
|
1426
1428
|
Both shell and JSON syntax allow protecting `"`, but only the shell allows protection using single quote.
|
1427
1429
|
|
1428
|
-
```
|
1430
|
+
```shell
|
1429
1431
|
ascli config echo @json:'"\""' --format=text
|
1430
1432
|
ascli config echo @json:\"\\\"\" --format=text
|
1431
1433
|
ascli config echo @ruby:\'\"\' --format=text
|
@@ -1461,7 +1463,7 @@ Both `"` and `\` are special characters for JSON and Ruby and can be protected w
|
|
1461
1463
|
|
1462
1464
|
- Then, since the value will be evaluated by shell, any shell special characters must be protected, either using preceding `\` for each character to protect, or by enclosing in single quote:
|
1463
1465
|
|
1464
|
-
```
|
1466
|
+
```shell
|
1465
1467
|
ascli config echo @json:{\"title\":\"Test\ \\\"\ \'\ \&\ \\\\\"} --format=json
|
1466
1468
|
ascli config echo @json:'{"title":"Test \" '\'' & \\"}' --format=json
|
1467
1469
|
ascli config echo @ruby:"{'title'=>%q{Test \" ' & \\\\}}" --format=json
|
@@ -1475,7 +1477,7 @@ ascli config echo @ruby:"{'title'=>%q{Test \" ' & \\\\}}" --format=json
|
|
1475
1477
|
|
1476
1478
|
If `ascli` is used interactively (a user typing on terminal), it is easy to require the user to type values:
|
1477
1479
|
|
1478
|
-
```
|
1480
|
+
```shell
|
1479
1481
|
ascli config echo @ruby:"{'title'=>gets.chomp}" --format=json
|
1480
1482
|
```
|
1481
1483
|
|
@@ -1485,13 +1487,13 @@ ascli config echo @ruby:"{'title'=>gets.chomp}" --format=json
|
|
1485
1487
|
|
1486
1488
|
If you need to provide a list of command line argument from lines that are in a file, on Linux you can use the `xargs` command:
|
1487
1489
|
|
1488
|
-
```
|
1490
|
+
```shell
|
1489
1491
|
xargs -a lines.txt -d \\n ascli config echo
|
1490
1492
|
```
|
1491
1493
|
|
1492
1494
|
This is equivalent to execution of:
|
1493
1495
|
|
1494
|
-
```
|
1496
|
+
```shell
|
1495
1497
|
ascli config echo [line1] [line2] [line3] ...
|
1496
1498
|
```
|
1497
1499
|
|
@@ -1501,7 +1503,7 @@ If there are spaces in the lines, those are not taken as separator, as we provid
|
|
1501
1503
|
|
1502
1504
|
Using a text editor or shell: create a file `title.txt` (and env var) that contains exactly the text required: `Test " ' & \` :
|
1503
1505
|
|
1504
|
-
```
|
1506
|
+
```shell
|
1505
1507
|
export MYTITLE='Test " '\'' & \'
|
1506
1508
|
echo -n $MYTITLE > title.txt
|
1507
1509
|
```
|
@@ -1510,7 +1512,7 @@ Using those values will not require any escaping of characters since values do n
|
|
1510
1512
|
|
1511
1513
|
If the value is to be assigned directly to an option of ascli, then you can directly use the content of the file or env var using the `@file:` or `@env:` readers:
|
1512
1514
|
|
1513
|
-
```
|
1515
|
+
```shell
|
1514
1516
|
ascli config echo @file:title.txt --format=text
|
1515
1517
|
ascli config echo @env:MYTITLE --format=text
|
1516
1518
|
```
|
@@ -1522,7 +1524,7 @@ Test " ' & \
|
|
1522
1524
|
If the value to be used is in a more complex structure, then the `@ruby:` modifier can be used: it allows any Ruby code in expression, including reading from file or env var.
|
1523
1525
|
In those cases, there is no character to protect because values are not parsed by the shell, or JSON or even Ruby.
|
1524
1526
|
|
1525
|
-
```
|
1527
|
+
```shell
|
1526
1528
|
ascli config echo @ruby:"{'title'=>File.read('title.txt')}" --format=json
|
1527
1529
|
ascli config echo @ruby:"{'title'=>ENV['MYTITLE']}" --format=json
|
1528
1530
|
```
|
@@ -1543,7 +1545,7 @@ The tokenization of the command line is typically done by the shell, refer to th
|
|
1543
1545
|
|
1544
1546
|
For example:
|
1545
1547
|
|
1546
|
-
```
|
1548
|
+
```shell
|
1547
1549
|
ascli command subcommand --option-name=VAL1 VAL2
|
1548
1550
|
```
|
1549
1551
|
|
@@ -1569,7 +1571,7 @@ Its value is a `String` that must belong to a fixed list of values in a given co
|
|
1569
1571
|
|
1570
1572
|
Example:
|
1571
1573
|
|
1572
|
-
```
|
1574
|
+
```shell
|
1573
1575
|
ascli config ascp info
|
1574
1576
|
```
|
1575
1577
|
|
@@ -1642,11 +1644,11 @@ Exceptions and Special Cases:
|
|
1642
1644
|
|
1643
1645
|
Example:
|
1644
1646
|
|
1645
|
-
```
|
1647
|
+
```shell
|
1646
1648
|
ascli config echo -- --sample
|
1647
1649
|
```
|
1648
1650
|
|
1649
|
-
```
|
1651
|
+
```shell
|
1650
1652
|
"--sample"
|
1651
1653
|
```
|
1652
1654
|
|
@@ -1739,13 +1741,13 @@ For `format=csv`, options are described in gem [`csv`](https://ruby.github.io/cs
|
|
1739
1741
|
|
1740
1742
|
For example, to display a table with thick Unicode borders:
|
1741
1743
|
|
1742
|
-
```
|
1744
|
+
```shell
|
1743
1745
|
ascli config preset over --table-style=@ruby:'{border: :unicode_thick_edge}'
|
1744
1746
|
```
|
1745
1747
|
|
1746
1748
|
For example, to display a CSV with headers and quotes:
|
1747
1749
|
|
1748
|
-
```
|
1750
|
+
```shell
|
1749
1751
|
ascli config echo @json:'[{"name":"foo","id":1},{"name":"bar","id":8}]' --format=csv --table=@json:'{"headers":true,"force_quotes":true}'
|
1750
1752
|
```
|
1751
1753
|
|
@@ -1765,7 +1767,7 @@ In this case, it is possible to filter fields using the option `fields` using th
|
|
1765
1767
|
|
1766
1768
|
Example: Result of command is a list of objects with a single object:
|
1767
1769
|
|
1768
|
-
```
|
1770
|
+
```shell
|
1769
1771
|
ascli config echo @json:'{"A":"a","B":[{"name":"B1","value":"b1"},{"name":"B2","value":"b2"}],"C":[{"C1":"c1"},{"C2":"c2"}],"D":{"D1":"d1","D2":"d2"}}'
|
1770
1772
|
```
|
1771
1773
|
|
@@ -1783,7 +1785,7 @@ ascli config echo @json:'{"A":"a","B":[{"name":"B1","value":"b1"},{"name":"B2","
|
|
1783
1785
|
╰────────┴───────╯
|
1784
1786
|
```
|
1785
1787
|
|
1786
|
-
```
|
1788
|
+
```shell
|
1787
1789
|
ascli config echo @json:'{"A":"a","B":[{"name":"B1","value":"b1"},{"name":"B2","value":"b2"}],"C":[{"C1":"c1"},{"C2":"c2"}],"D":{"D1":"d1","D2":"d2"}}' -
|
1788
1790
|
-flat=no
|
1789
1791
|
```
|
@@ -1812,7 +1814,7 @@ Special values are highlighted as follows::
|
|
1812
1814
|
|
1813
1815
|
Example:
|
1814
1816
|
|
1815
|
-
```
|
1817
|
+
```shell
|
1816
1818
|
ascli config echo @json:'{"ni":null,"es":"","ea":[],"eh":{}}'
|
1817
1819
|
```
|
1818
1820
|
|
@@ -1854,7 +1856,7 @@ The display of result is as follows:
|
|
1854
1856
|
|
1855
1857
|
This parameter can be set as a global default with:
|
1856
1858
|
|
1857
|
-
```
|
1859
|
+
```shell
|
1858
1860
|
ascli config preset set GLOBAL multi_single single
|
1859
1861
|
```
|
1860
1862
|
|
@@ -1862,7 +1864,7 @@ Examples:
|
|
1862
1864
|
|
1863
1865
|
Simulate a result by executing this command:
|
1864
1866
|
|
1865
|
-
```
|
1867
|
+
```shell
|
1866
1868
|
ascli config echo @json:'<json value here>' --multi-single=<no|yes|single>
|
1867
1869
|
```
|
1868
1870
|
|
@@ -1978,7 +1980,7 @@ The `Proc` takes as argument a line (`Hash`) in the table and is a Ruby lambda e
|
|
1978
1980
|
|
1979
1981
|
Example:
|
1980
1982
|
|
1981
|
-
```
|
1983
|
+
```shell
|
1982
1984
|
ascli aoc admin user list --fields=name,email,ats_admin --query=@json:'{"sort":"name"}' --select=@json:'{"ats_admin":true}'
|
1983
1985
|
```
|
1984
1986
|
|
@@ -1996,7 +1998,7 @@ ascli aoc admin user list --fields=name,email,ats_admin --query=@json:'{"sort":"
|
|
1996
1998
|
|
1997
1999
|
In above example, the same result is obtained with option:
|
1998
2000
|
|
1999
|
-
```
|
2001
|
+
```shell
|
2000
2002
|
--select=@ruby:'->(i){i["ats_admin"]}'
|
2001
2003
|
```
|
2002
2004
|
|
@@ -2011,7 +2013,7 @@ Syntax: `%<field>:<value>`
|
|
2011
2013
|
When a command is executed on a single entity, the entity is identified by a unique identifier that follows the command.
|
2012
2014
|
For example, in the following command, `1234` is the user's identifier:
|
2013
2015
|
|
2014
|
-
```
|
2016
|
+
```shell
|
2015
2017
|
ascli aoc admin user show 1234
|
2016
2018
|
```
|
2017
2019
|
|
@@ -2019,7 +2021,7 @@ Some commands provide the following capability:
|
|
2019
2021
|
If the entity can also be uniquely identified by a name, then the name can be used instead of the identifier, using the **percent selector**.
|
2020
2022
|
For example, if the name of the user is `john` and a field for this entity named `name` has a value `john`:
|
2021
2023
|
|
2022
|
-
```
|
2024
|
+
```shell
|
2023
2025
|
ascli aoc admin user show %name:john
|
2024
2026
|
```
|
2025
2027
|
|
@@ -2033,7 +2035,7 @@ The **Extended Value** Syntax allows to specify such values and even read values
|
|
2033
2035
|
|
2034
2036
|
The syntax is:
|
2035
2037
|
|
2036
|
-
```
|
2038
|
+
```shell
|
2037
2039
|
<0 or more decoders><some text value or nothing>
|
2038
2040
|
```
|
2039
2041
|
|
@@ -2075,35 +2077,35 @@ It expects a `@` to close the embedded extended value syntax.
|
|
2075
2077
|
|
2076
2078
|
Example: Create a `Hash` value with the convenient `@json:` decoder:
|
2077
2079
|
|
2078
|
-
```
|
2080
|
+
```shell
|
2079
2081
|
ascli config echo @json:'{"key1":"value1","key2":"value2"}'
|
2080
2082
|
```
|
2081
2083
|
|
2082
2084
|
Example: read the content of the specified file, then, base64 decode, then unzip:
|
2083
2085
|
|
2084
|
-
```
|
2086
|
+
```shell
|
2085
2087
|
ascli config echo @zlib:@base64:@file:myfile.dat
|
2086
2088
|
```
|
2087
2089
|
|
2088
2090
|
Example: Create a `Hash` value with one key and the value is read from a file:
|
2089
2091
|
|
2090
|
-
```
|
2092
|
+
```shell
|
2091
2093
|
ascli config echo @ruby:'{"token_verification_key"=>File.read("mykey.txt")}'
|
2092
2094
|
```
|
2093
2095
|
|
2094
2096
|
Example: read a CSV file and create an `Array` of `Hash` for bulk provisioning:
|
2095
2097
|
|
2096
|
-
```
|
2098
|
+
```shell
|
2097
2099
|
cat test.csv
|
2098
2100
|
```
|
2099
2101
|
|
2100
|
-
```
|
2102
|
+
```shell
|
2101
2103
|
name,email
|
2102
2104
|
lolo,laurent@example.com
|
2103
2105
|
toto,titi@tutu.tata
|
2104
2106
|
```
|
2105
2107
|
|
2106
|
-
```
|
2108
|
+
```shell
|
2107
2109
|
ascli config echo @csvt:@file:test.csv
|
2108
2110
|
```
|
2109
2111
|
|
@@ -2118,7 +2120,7 @@ ascli config echo @csvt:@file:test.csv
|
|
2118
2120
|
|
2119
2121
|
Example: create a `Hash` with values coming from a preset named `config`
|
2120
2122
|
|
2121
|
-
```
|
2123
|
+
```shell
|
2122
2124
|
ascli config echo @json:@extend:'{"hello":true,"version":"@preset:config.version@"}'
|
2123
2125
|
```
|
2124
2126
|
|
@@ -2133,7 +2135,7 @@ ascli config echo @json:@extend:'{"hello":true,"version":"@preset:config.version
|
|
2133
2135
|
|
2134
2136
|
Example: Create a `Hash` from YAML provided as shell **Here document**:
|
2135
2137
|
|
2136
|
-
```
|
2138
|
+
```shell
|
2137
2139
|
ascli config echo @yaml:@stdin: --format=json<<EOF
|
2138
2140
|
key1: value1
|
2139
2141
|
key2:
|
@@ -2161,11 +2163,11 @@ EOF
|
|
2161
2163
|
|
2162
2164
|
The configuration folder can be displayed using :
|
2163
2165
|
|
2164
|
-
```
|
2166
|
+
```shell
|
2165
2167
|
ascli config folder
|
2166
2168
|
```
|
2167
2169
|
|
2168
|
-
```
|
2170
|
+
```shell
|
2169
2171
|
/Users/kenji/.aspera/ascli
|
2170
2172
|
```
|
2171
2173
|
|
@@ -2176,7 +2178,7 @@ It can be overridden using option `home`.
|
|
2176
2178
|
|
2177
2179
|
Example (Windows):
|
2178
2180
|
|
2179
|
-
```
|
2181
|
+
```batchfile
|
2180
2182
|
set ASCLI_HOME=C:\Users\Kenji\.aspera\ascli
|
2181
2183
|
|
2182
2184
|
ascli config folder
|
@@ -2232,13 +2234,13 @@ An [Option Preset](#option-preset) is a collection of options and their associat
|
|
2232
2234
|
|
2233
2235
|
A named [Option Preset](#option-preset) can be modified directly using `ascli`, which will update the configuration file :
|
2234
2236
|
|
2235
|
-
```
|
2237
|
+
```shell
|
2236
2238
|
ascli config preset set|delete|show|initialize|update <option preset>
|
2237
2239
|
```
|
2238
2240
|
|
2239
2241
|
The command `update` allows the easy creation of [Option Preset](#option-preset) by simply providing the options in their command line format, e.g. :
|
2240
2242
|
|
2241
|
-
```
|
2243
|
+
```shell
|
2242
2244
|
ascli config preset update demo_server --url=ssh://demo.asperasoft.com:33001 --username=asperaweb --password=my_password_here --ts=@json:'{"precalculate_job_size":true}'
|
2243
2245
|
```
|
2244
2246
|
|
@@ -2246,32 +2248,32 @@ ascli config preset update demo_server --url=ssh://demo.asperasoft.com:33001 --u
|
|
2246
2248
|
|
2247
2249
|
The command `set` allows setting individual options in an [Option Preset](#option-preset).
|
2248
2250
|
|
2249
|
-
```
|
2251
|
+
```shell
|
2250
2252
|
ascli config preset set demo_server password my_password_here
|
2251
2253
|
```
|
2252
2254
|
|
2253
2255
|
The command `initialize`, like `update` allows to set several options at once, but it deletes an existing configuration instead of updating it, and expects a [`Hash` Extended Value](#extended-value-syntax).
|
2254
2256
|
|
2255
|
-
```
|
2257
|
+
```shell
|
2256
2258
|
ascli config preset initialize demo_server @json:'{"url":"ssh://demo.asperasoft.com:33001","username":"asperaweb","password":"my_pass_here","ts":{"precalculate_job_size":true}}'
|
2257
2259
|
```
|
2258
2260
|
|
2259
2261
|
A full terminal based overview of the configuration can be displayed using:
|
2260
2262
|
|
2261
|
-
```
|
2263
|
+
```shell
|
2262
2264
|
ascli config preset over
|
2263
2265
|
```
|
2264
2266
|
|
2265
2267
|
A list of [Option Preset](#option-preset) can be displayed using:
|
2266
2268
|
|
2267
|
-
```
|
2269
|
+
```shell
|
2268
2270
|
ascli config preset list
|
2269
2271
|
```
|
2270
2272
|
|
2271
2273
|
A good practice is to not manually edit the configuration file and use modification commands instead.
|
2272
2274
|
If necessary, the configuration file can be opened in a text editor with:
|
2273
2275
|
|
2274
|
-
```
|
2276
|
+
```shell
|
2275
2277
|
ascli config open
|
2276
2278
|
```
|
2277
2279
|
|
@@ -2280,7 +2282,7 @@ ascli config open
|
|
2280
2282
|
|
2281
2283
|
The former format for commands is still supported:
|
2282
2284
|
|
2283
|
-
```
|
2285
|
+
```shell
|
2284
2286
|
ascli config preset set|delete|show|initialize|update <name>
|
2285
2287
|
ascli config preset over
|
2286
2288
|
ascli config preset list
|
@@ -2289,7 +2291,7 @@ ascli config preset list
|
|
2289
2291
|
It is possible to load an [Option Preset](#option-preset) from within another [Option Preset](#option-preset) using the `preset` option.
|
2290
2292
|
For example if `pcommon` is a preset with common options, and `pspecific` is a preset with specific options, then `pspecific` can load `pcommon` using:
|
2291
2293
|
|
2292
|
-
```
|
2294
|
+
```shell
|
2293
2295
|
ascli config preset set pspecific preset pcommon
|
2294
2296
|
```
|
2295
2297
|
|
@@ -2311,11 +2313,11 @@ When a plugin is invoked, the preset associated with the name of the plugin is l
|
|
2311
2313
|
|
2312
2314
|
Operations on this preset are done using regular `config` operations:
|
2313
2315
|
|
2314
|
-
```
|
2316
|
+
```shell
|
2315
2317
|
ascli config preset set default _plugin_name_ _default_preset_for_plugin_
|
2316
2318
|
```
|
2317
2319
|
|
2318
|
-
```
|
2320
|
+
```shell
|
2319
2321
|
ascli config preset get default _plugin_name_
|
2320
2322
|
```
|
2321
2323
|
|
@@ -2340,12 +2342,12 @@ If set, it loads the options independently of the plugin used.
|
|
2340
2342
|
> [!NOTE]
|
2341
2343
|
> If no global default is set by the user, `ascli` will use `global_common_defaults` when setting global options (e.g. `config ascp use`)
|
2342
2344
|
|
2343
|
-
> [!
|
2345
|
+
> [!TIP]
|
2344
2346
|
> If you don't know the name of the global preset, you can use `GLOBAL` to refer to it.
|
2345
2347
|
|
2346
2348
|
Show current default (global) Option Preset (`config` plugin):
|
2347
2349
|
|
2348
|
-
```
|
2350
|
+
```shell
|
2349
2351
|
ascli config preset get default config
|
2350
2352
|
```
|
2351
2353
|
|
@@ -2355,17 +2357,17 @@ global_common_defaults
|
|
2355
2357
|
|
2356
2358
|
Set a global parameter:
|
2357
2359
|
|
2358
|
-
```
|
2360
|
+
```shell
|
2359
2361
|
ascli config preset set GLOBAL version_check_days 0
|
2360
2362
|
```
|
2361
2363
|
|
2362
2364
|
If the default global Option Preset is not set, and you want to use a different name:
|
2363
2365
|
|
2364
|
-
```
|
2366
|
+
```shell
|
2365
2367
|
ascli config preset set GLOBAL version_check_days 0
|
2366
2368
|
```
|
2367
2369
|
|
2368
|
-
```
|
2370
|
+
```shell
|
2369
2371
|
ascli config preset set default config my_common_defaults
|
2370
2372
|
```
|
2371
2373
|
|
@@ -2515,7 +2517,7 @@ Values in the configuration also follow the [Extended Value Syntax](#extended-va
|
|
2515
2517
|
|
2516
2518
|
Example:
|
2517
2519
|
|
2518
|
-
```
|
2520
|
+
```shell
|
2519
2521
|
ascli config preset set my_aoc_org private_key @val:@file:"$HOME/.aspera/ascli/my_private_key"
|
2520
2522
|
```
|
2521
2523
|
|
@@ -2551,29 +2553,29 @@ E.g. `--xxx-yyy` on command line gives `xxx_yyy` in configuration file.
|
|
2551
2553
|
|
2552
2554
|
The main plugin name is `config`, so it is possible to define a default [Option Preset](#option-preset) for the main plugin with:
|
2553
2555
|
|
2554
|
-
```
|
2556
|
+
```shell
|
2555
2557
|
ascli config preset set cli_default interactive no
|
2556
2558
|
```
|
2557
2559
|
|
2558
|
-
```
|
2560
|
+
```shell
|
2559
2561
|
ascli config preset set default config cli_default
|
2560
2562
|
```
|
2561
2563
|
|
2562
2564
|
An [Option Preset](#option-preset) value can be removed with `unset`:
|
2563
2565
|
|
2564
|
-
```
|
2566
|
+
```shell
|
2565
2567
|
ascli config preset unset cli_default interactive
|
2566
2568
|
```
|
2567
2569
|
|
2568
2570
|
Example: Define options using command line:
|
2569
2571
|
|
2570
|
-
```
|
2572
|
+
```shell
|
2571
2573
|
ascli -N --url=_url_here_ --password=my_password_here --username=_name_here_ node --show-config
|
2572
2574
|
```
|
2573
2575
|
|
2574
2576
|
Example: Define options using a `Hash`:
|
2575
2577
|
|
2576
|
-
```
|
2578
|
+
```shell
|
2577
2579
|
ascli -N --preset=@json:'{"url":"_url_here_","password":"my_password_here","username":"_name_here_"}' node --show-config
|
2578
2580
|
```
|
2579
2581
|
|
@@ -2601,7 +2603,7 @@ They will be added to the [Option Preset](#option-preset) created by the wizard.
|
|
2601
2603
|
|
2602
2604
|
The simplest invocation is:
|
2603
2605
|
|
2604
|
-
```
|
2606
|
+
```shell
|
2605
2607
|
ascli config wizard
|
2606
2608
|
```
|
2607
2609
|
|
@@ -2611,7 +2613,7 @@ For Faspex, Shares, Node (including ATS, Aspera Transfer Service), Console,
|
|
2611
2613
|
only username/password and URL are required (either on command line, or from configuration file).
|
2612
2614
|
Those can be usually provided on the command line:
|
2613
2615
|
|
2614
|
-
```
|
2616
|
+
```shell
|
2615
2617
|
ascli shares repo browse / --url=https://10.25.0.6 --username=john --password=my_password_here
|
2616
2618
|
```
|
2617
2619
|
|
@@ -2619,7 +2621,7 @@ This can also be provisioned in a configuration file:
|
|
2619
2621
|
|
2620
2622
|
- Build [Option Preset](#option-preset)
|
2621
2623
|
|
2622
|
-
```
|
2624
|
+
```shell
|
2623
2625
|
ascli config preset set shares06 url https://10.25.0.6
|
2624
2626
|
ascli config preset set shares06 username john
|
2625
2627
|
ascli config preset set shares06 password my_password_here
|
@@ -2627,31 +2629,31 @@ ascli config preset set shares06 password my_password_here
|
|
2627
2629
|
|
2628
2630
|
This can also be done with one single command:
|
2629
2631
|
|
2630
|
-
```
|
2632
|
+
```shell
|
2631
2633
|
ascli config preset init shares06 @json:'{"url":"https://10.25.0.6","username":"john","password":"my_password_here"}'
|
2632
2634
|
```
|
2633
2635
|
|
2634
2636
|
or
|
2635
2637
|
|
2636
|
-
```
|
2638
|
+
```shell
|
2637
2639
|
ascli config preset update shares06 --url=https://10.25.0.6 --username=john --password=my_password_here
|
2638
2640
|
```
|
2639
2641
|
|
2640
2642
|
- Define this [Option Preset](#option-preset) as the default [Option Preset](#option-preset) for the specified plugin (`shares`)
|
2641
2643
|
|
2642
|
-
```
|
2644
|
+
```shell
|
2643
2645
|
ascli config preset set default shares shares06
|
2644
2646
|
```
|
2645
2647
|
|
2646
2648
|
- Display the content of configuration file in table format
|
2647
2649
|
|
2648
|
-
```
|
2650
|
+
```shell
|
2649
2651
|
ascli config preset overview
|
2650
2652
|
```
|
2651
2653
|
|
2652
2654
|
- Execute a command on the **Shares** application using default options
|
2653
2655
|
|
2654
|
-
```
|
2656
|
+
```shell
|
2655
2657
|
ascli shares repo browse /
|
2656
2658
|
```
|
2657
2659
|
|
@@ -2674,7 +2676,7 @@ Mandatory command line options can be requested interactively (e.g. password) us
|
|
2674
2676
|
It is possible to use extended value `@secret:[name]` to ask for a secret interactively.
|
2675
2677
|
It is also possible to enter an option as an environment variable, e.g. `ASCLI_PASSWORD` for option `password` and read the env var like this:
|
2676
2678
|
|
2677
|
-
```
|
2679
|
+
```shell
|
2678
2680
|
read -s ASCLI_PASSWORD
|
2679
2681
|
export ASCLI_PASSWORD
|
2680
2682
|
```
|
@@ -2694,7 +2696,7 @@ The vault is used with options `vault` and `vault_password`.
|
|
2694
2696
|
Although it can be specified on command line, for security reason you should avoid exposing the secret.
|
2695
2697
|
For example, it can be securely specified on command line like this:
|
2696
2698
|
|
2697
|
-
```
|
2699
|
+
```shell
|
2698
2700
|
read -s ASCLI_VAULT_PASSWORD
|
2699
2701
|
export ASCLI_VAULT_PASSWORD
|
2700
2702
|
```
|
@@ -2705,7 +2707,7 @@ export ASCLI_VAULT_PASSWORD
|
|
2705
2707
|
|
2706
2708
|
Quick start macOS:
|
2707
2709
|
|
2708
|
-
```
|
2710
|
+
```shell
|
2709
2711
|
brew tap hashicorp/tap
|
2710
2712
|
brew install hashicorp/tap/vault
|
2711
2713
|
vault server -dev -dev-root-token-id=dev-only-token
|
@@ -2717,7 +2719,7 @@ vault server -dev -dev-root-token-id=dev-only-token
|
|
2717
2719
|
| `url` | `http://127.0.0.1:8200` | The URL of the vault |
|
2718
2720
|
| `token` | `dev-only-token` | The token for the vault, by default uses parameter `vault_password` |
|
2719
2721
|
|
2720
|
-
```
|
2722
|
+
```shell
|
2721
2723
|
--vault=@json:'{"type":"vault","url":"http://127.0.0.1:8200"}' --vault_password=dev-only-token
|
2722
2724
|
```
|
2723
2725
|
|
@@ -2733,7 +2735,7 @@ It is possible to manage secrets in macOS keychain (only read supported currentl
|
|
2733
2735
|
| `type` | `system` | The type of the vault |
|
2734
2736
|
| `name` | ``ascli`` | The name of the keychain to use |
|
2735
2737
|
|
2736
|
-
```
|
2738
|
+
```shell
|
2737
2739
|
--vault=@json:'{"type":"system","name":"ascli"}'
|
2738
2740
|
```
|
2739
2741
|
|
@@ -2761,7 +2763,7 @@ Then secrets can be manipulated using commands:
|
|
2761
2763
|
- `list`
|
2762
2764
|
- `delete`
|
2763
2765
|
|
2764
|
-
```
|
2766
|
+
```shell
|
2765
2767
|
ascli config vault create @json:'{"label":"mylabel","password":"my_password_here","description":"for this account"}'
|
2766
2768
|
```
|
2767
2769
|
|
@@ -2776,17 +2778,17 @@ The lookup is done by comparing the service URL and username (or access key).
|
|
2776
2778
|
A password can be saved in clear in an [Option Preset](#option-preset) together with other account information (URL, username, etc...).
|
2777
2779
|
Example:
|
2778
2780
|
|
2779
|
-
```
|
2781
|
+
```shell
|
2780
2782
|
ascli config preset update myconf --url=... --username=... --password=...
|
2781
2783
|
```
|
2782
2784
|
|
2783
2785
|
For a more secure storage one can do:
|
2784
2786
|
|
2785
|
-
```
|
2787
|
+
```shell
|
2786
2788
|
ascli config preset update myconf --url=... --username=... --password=@val:@vault:myconf.password
|
2787
2789
|
```
|
2788
2790
|
|
2789
|
-
```
|
2791
|
+
```shell
|
2790
2792
|
ascli config vault create @json:'{"label":"myconf","password":"my_password_here"}'
|
2791
2793
|
```
|
2792
2794
|
|
@@ -2811,7 +2813,7 @@ Set it to the desired safe location of the private key.
|
|
2811
2813
|
Typically, located in folder `$HOME/.ssh` or `$HOME/.aspera/ascli`.
|
2812
2814
|
For example:
|
2813
2815
|
|
2814
|
-
```
|
2816
|
+
```shell
|
2815
2817
|
KEY_PAIR_PATH=~/.aspera/ascli/my_private_key
|
2816
2818
|
```
|
2817
2819
|
|
@@ -2827,13 +2829,13 @@ The generated key is of type `RSA`, by default: **4096** bit.
|
|
2827
2829
|
For convenience, the public key is also extracted with extension `.pub`.
|
2828
2830
|
The key is not passphrase protected.
|
2829
2831
|
|
2830
|
-
```
|
2832
|
+
```shell
|
2831
2833
|
ascli config genkey ${KEY_PAIR_PATH} 4096
|
2832
2834
|
```
|
2833
2835
|
|
2834
2836
|
To display the public key of a private key:
|
2835
2837
|
|
2836
|
-
```
|
2838
|
+
```shell
|
2837
2839
|
ascli config pubkey @file:${KEY_PAIR_PATH}
|
2838
2840
|
```
|
2839
2841
|
|
@@ -2841,7 +2843,7 @@ ascli config pubkey @file:${KEY_PAIR_PATH}
|
|
2841
2843
|
|
2842
2844
|
Both private and public keys are generated, option `-N` is for passphrase.
|
2843
2845
|
|
2844
|
-
```
|
2846
|
+
```shell
|
2845
2847
|
ssh-keygen -t rsa -b 4096 -m PEM -N '' -f ${KEY_PAIR_PATH}
|
2846
2848
|
```
|
2847
2849
|
|
@@ -2849,7 +2851,7 @@ ssh-keygen -t rsa -b 4096 -m PEM -N '' -f ${KEY_PAIR_PATH}
|
|
2849
2851
|
|
2850
2852
|
To generate a key pair with a passphrase the following can be used on any system:
|
2851
2853
|
|
2852
|
-
```
|
2854
|
+
```shell
|
2853
2855
|
openssl genrsa -passout pass:_passphrase_here_ -out ${KEY_PAIR_PATH} 4096
|
2854
2856
|
openssl rsa -pubout -in ${KEY_PAIR_PATH} -out ${KEY_PAIR_PATH}.pub
|
2855
2857
|
```
|
@@ -2859,14 +2861,14 @@ In that case, add option `-nodes` instead of `-passout pass:_passphrase_here_` t
|
|
2859
2861
|
|
2860
2862
|
If option `-nodes` is not available, the passphrase can be removed using this method:
|
2861
2863
|
|
2862
|
-
```
|
2864
|
+
```shell
|
2863
2865
|
openssl rsa -passin pass:_passphrase_here_ -in ${KEY_PAIR_PATH} -out ${KEY_PAIR_PATH}.no_des
|
2864
2866
|
mv ${KEY_PAIR_PATH}.no_des ${KEY_PAIR_PATH}
|
2865
2867
|
```
|
2866
2868
|
|
2867
2869
|
To change (or add) the passphrase for a key do:
|
2868
2870
|
|
2869
|
-
```
|
2871
|
+
```shell
|
2870
2872
|
openssl rsa -des3 -in ${KEY_PAIR_PATH} -out ${KEY_PAIR_PATH}.with_des
|
2871
2873
|
mv ${KEY_PAIR_PATH}.with_des ${KEY_PAIR_PATH}
|
2872
2874
|
```
|
@@ -2918,15 +2920,15 @@ The following options can be specified in the option `image`:
|
|
2918
2920
|
| double | `Bool` | Display double text resolution (half characters) |
|
2919
2921
|
| font_ratio | `Float` | Font height/width ratio in terminal |
|
2920
2922
|
|
2921
|
-
```
|
2923
|
+
```shell
|
2922
2924
|
ascli config image https://eudemo.asperademo.com/wallpaper.jpg --ui=text --image=@json:'{"text":true}'
|
2923
2925
|
```
|
2924
2926
|
|
2925
|
-
```
|
2927
|
+
```shell
|
2926
2928
|
curl -so - https://eudemo.asperademo.com/wallpaper.jpg | ascli config image @stdbin:
|
2927
2929
|
```
|
2928
2930
|
|
2929
|
-
```
|
2931
|
+
```shell
|
2930
2932
|
echo -n https://eudemo.asperademo.com/wallpaper.jpg | ascli config image @uri:@stdin:
|
2931
2933
|
```
|
2932
2934
|
|
@@ -2981,13 +2983,13 @@ Examples:
|
|
2981
2983
|
|
2982
2984
|
- Display debugging log on `stdout`:
|
2983
2985
|
|
2984
|
-
```
|
2986
|
+
```shell
|
2985
2987
|
ascli config pre over --log-level=debug --logger=stdout
|
2986
2988
|
```
|
2987
2989
|
|
2988
2990
|
- Log errors to `syslog`:
|
2989
2991
|
|
2990
|
-
```
|
2992
|
+
```shell
|
2991
2993
|
ascli config pre over --log-level=error --logger=syslog
|
2992
2994
|
```
|
2993
2995
|
|
@@ -3041,7 +3043,7 @@ Like any other option, those can be set either on command line, or in configurat
|
|
3041
3043
|
|
3042
3044
|
Example:
|
3043
3045
|
|
3044
|
-
```
|
3046
|
+
```shell
|
3045
3047
|
ascli aoc admin package list --http-options=@json:'{"read_timeout":10.0}'
|
3046
3048
|
```
|
3047
3049
|
|
@@ -3085,13 +3087,13 @@ E.g. `http://myproxy.org.net:3128`.
|
|
3085
3087
|
|
3086
3088
|
Credentials for proxy are optional but can also be specified:
|
3087
3089
|
|
3088
|
-
```
|
3090
|
+
```shell
|
3089
3091
|
export http_proxy=http://my_user_here:my_pass_here@proxy.example.com:3128
|
3090
3092
|
```
|
3091
3093
|
|
3092
3094
|
Option `http_proxy` does the same (set env var) but on command line:
|
3093
3095
|
|
3094
|
-
```
|
3096
|
+
```shell
|
3095
3097
|
ascli --http-proxy=http://my_user_here:my_pass_here@host:port ...
|
3096
3098
|
```
|
3097
3099
|
|
@@ -3102,14 +3104,14 @@ Note that proxy credentials are not supported in PAC files.
|
|
3102
3104
|
To read the script from a URL (`http:`, `https:` and `file:`), use prefix: `@uri:`.
|
3103
3105
|
A minimal script can be specified to define the use of a local proxy:
|
3104
3106
|
|
3105
|
-
```
|
3107
|
+
```shell
|
3106
3108
|
ascli --fpac='function FindProxyForURL(url, host){return "PROXY localhost:3128"}' ...
|
3107
3109
|
```
|
3108
3110
|
|
3109
3111
|
The result of a PAC file can be tested with command: `config proxy_check`.
|
3110
3112
|
Example, using command line option:
|
3111
3113
|
|
3112
|
-
```
|
3114
|
+
```shell
|
3113
3115
|
ascli config proxy_check --fpac='function FindProxyForURL(url, host) {return "PROXY proxy.example.com:3128;DIRECT";}' http://example.com
|
3114
3116
|
```
|
3115
3117
|
|
@@ -3117,7 +3119,7 @@ ascli config proxy_check --fpac='function FindProxyForURL(url, host) {return "PR
|
|
3117
3119
|
PROXY proxy.example.com:1234;DIRECT
|
3118
3120
|
```
|
3119
3121
|
|
3120
|
-
```
|
3122
|
+
```shell
|
3121
3123
|
ascli config proxy_check --fpac=@file:./proxy.pac http://www.example.com
|
3122
3124
|
```
|
3123
3125
|
|
@@ -3125,7 +3127,7 @@ ascli config proxy_check --fpac=@file:./proxy.pac http://www.example.com
|
|
3125
3127
|
PROXY proxy.example.com:8080
|
3126
3128
|
```
|
3127
3129
|
|
3128
|
-
```
|
3130
|
+
```shell
|
3129
3131
|
ascli config proxy_check --fpac=@uri:http://server/proxy.pac http://www.example.com
|
3130
3132
|
```
|
3131
3133
|
|
@@ -3135,11 +3137,11 @@ PROXY proxy.example.com:8080
|
|
3135
3137
|
|
3136
3138
|
If the proxy found with the PAC requires credentials, then use option `proxy_credentials` with username and password provided as an `Array`:
|
3137
3139
|
|
3138
|
-
```
|
3140
|
+
```shell
|
3139
3141
|
ascli --proxy-credentials=@json:'["__username_here__","__password_here__"]' ...
|
3140
3142
|
```
|
3141
3143
|
|
3142
|
-
```
|
3144
|
+
```shell
|
3143
3145
|
ascli --proxy-credentials=@list::__username_here__:__password_here__ ...
|
3144
3146
|
```
|
3145
3147
|
|
@@ -3153,13 +3155,13 @@ To specify a FASP proxy (forward), set the [**transfer-spec**](#transfer-specifi
|
|
3153
3155
|
|
3154
3156
|
For example, for an Aspera forward proxy not encrypted (HTTP) without authentication running on port 9091, the option would be:
|
3155
3157
|
|
3156
|
-
```
|
3158
|
+
```shell
|
3157
3159
|
--ts=@json:'{"proxy":"dnat://proxy.example.org:9091"}'
|
3158
3160
|
```
|
3159
3161
|
|
3160
3162
|
Or, alternatively, (prefer transfer spec like above, generally):
|
3161
3163
|
|
3162
|
-
```
|
3164
|
+
```shell
|
3163
3165
|
--transfer-info=@json:'{"ascp_args":["--proxy","dnat://proxy.example.org:9091"]}'
|
3164
3166
|
```
|
3165
3167
|
|
@@ -3188,7 +3190,7 @@ It provides the following commands for `ascp` sub-command:
|
|
3188
3190
|
|
3189
3191
|
#### Show path of currently used `ascp`
|
3190
3192
|
|
3191
|
-
```
|
3193
|
+
```shell
|
3192
3194
|
ascli config ascp show
|
3193
3195
|
```
|
3194
3196
|
|
@@ -3196,7 +3198,7 @@ ascli config ascp show
|
|
3196
3198
|
/Users/laurent/.aspera/ascli/sdk/ascp
|
3197
3199
|
```
|
3198
3200
|
|
3199
|
-
```
|
3201
|
+
```shell
|
3200
3202
|
ascli config ascp info
|
3201
3203
|
```
|
3202
3204
|
|
@@ -3219,7 +3221,7 @@ For a permanent change, the command `config ascp use` sets the same option for t
|
|
3219
3221
|
|
3220
3222
|
Using a POSIX shell:
|
3221
3223
|
|
3222
|
-
```
|
3224
|
+
```shell
|
3223
3225
|
ascli config ascp use @path:'~/Applications/Aspera CLI/bin/ascp'
|
3224
3226
|
```
|
3225
3227
|
|
@@ -3250,7 +3252,7 @@ this is equivalent to using option: `--use-product=FIRST`.
|
|
3250
3252
|
|
3251
3253
|
Locally installed Aspera products can be listed with:
|
3252
3254
|
|
3253
|
-
```
|
3255
|
+
```shell
|
3254
3256
|
ascli config ascp products list
|
3255
3257
|
```
|
3256
3258
|
|
@@ -3269,14 +3271,14 @@ Using the option `use_product` finds the `ascp` binary of the selected product.
|
|
3269
3271
|
|
3270
3272
|
To permanently use the `ascp` of a product:
|
3271
3273
|
|
3272
|
-
```
|
3274
|
+
```shell
|
3273
3275
|
ascli config ascp products use 'Aspera Connect'
|
3274
3276
|
saved to default global preset /Users/laurent/Applications/Aspera Connect.app/Contents/Resources/ascp
|
3275
3277
|
```
|
3276
3278
|
|
3277
3279
|
#### Installation of Connect Client on command line
|
3278
3280
|
|
3279
|
-
```
|
3281
|
+
```shell
|
3280
3282
|
ascli config ascp connect list
|
3281
3283
|
```
|
3282
3284
|
|
@@ -3293,7 +3295,7 @@ ascli config ascp connect list
|
|
3293
3295
|
+-----------------------------------------------+--------------------------------------+-----------+
|
3294
3296
|
```
|
3295
3297
|
|
3296
|
-
```
|
3298
|
+
```shell
|
3297
3299
|
ascli config ascp connect version 'Aspera Connect for Mac Intel' list
|
3298
3300
|
```
|
3299
3301
|
|
@@ -3308,7 +3310,7 @@ ascli config ascp connect version 'Aspera Connect for Mac Intel' list
|
|
3308
3310
|
+-------------------------------------------+--------------------------+-----------------------------------------------------------------------------------------+----------+---------------------+
|
3309
3311
|
```
|
3310
3312
|
|
3311
|
-
```
|
3313
|
+
```shell
|
3312
3314
|
ascli config ascp connect version 'Aspera Connect for Mac Intel' download enclosure --to-folder=.
|
3313
3315
|
```
|
3314
3316
|
|
@@ -3374,7 +3376,7 @@ The `transfer_info` option accepts the following optional parameters to control
|
|
3374
3376
|
In case of transfer interruption, the agent will **resume** a transfer up to `iter_max` time.
|
3375
3377
|
Sleep between iterations is given by the following formula where `iter_index` is the current iteration index, starting at 0:
|
3376
3378
|
|
3377
|
-
```
|
3379
|
+
```shell
|
3378
3380
|
max( sleep_max, sleep_initial * sleep_factor ^ iter_index )
|
3379
3381
|
```
|
3380
3382
|
|
@@ -3390,13 +3392,13 @@ To use `ascp`'s default, use option: `--transfer-info=@json:'{"trusted_certs":nu
|
|
3390
3392
|
Some transfer errors are considered **retry-able** (e.g. timeout) and some other not (e.g. wrong password).
|
3391
3393
|
The list of known protocol errors and retry level can be listed:
|
3392
3394
|
|
3393
|
-
```
|
3395
|
+
```shell
|
3394
3396
|
ascli config ascp errors
|
3395
3397
|
```
|
3396
3398
|
|
3397
3399
|
Examples:
|
3398
3400
|
|
3399
|
-
```
|
3401
|
+
```shell
|
3400
3402
|
ascli ... --transfer-info=@json:'{"wss":true,"resume":{"iter_max":20}}'
|
3401
3403
|
ascli ... --transfer-info=@json:'{"spawn_delay_sec":2.5,"multi_incr_udp":false}'
|
3402
3404
|
```
|
@@ -3404,7 +3406,7 @@ ascli ... --transfer-info=@json:'{"spawn_delay_sec":2.5,"multi_incr_udp":false}'
|
|
3404
3406
|
This can be useful to activate logging using option `-L` of `ascp`.
|
3405
3407
|
For example, to activate debug level 2 for `ascp` (`DD`), and display those logs on the terminal (`-`):
|
3406
3408
|
|
3407
|
-
```
|
3409
|
+
```shell
|
3408
3410
|
--transfer-info=@json:'{"ascp_args":["-DDL-"]}'
|
3409
3411
|
```
|
3410
3412
|
|
@@ -3419,7 +3421,7 @@ In addition to standard methods described in section [File List](#list-of-files-
|
|
3419
3421
|
|
3420
3422
|
- Using option `transfer_info` parameter `ascp_args`
|
3421
3423
|
|
3422
|
-
```
|
3424
|
+
```shell
|
3423
3425
|
--sources=@ts --transfer-info=@json:'{"ascp_args":["--file-list","myfilelist"]}'
|
3424
3426
|
```
|
3425
3427
|
|
@@ -3438,7 +3440,7 @@ This agent supports a local configuration file: `aspera.conf` where Virtual link
|
|
3438
3440
|
|
3439
3441
|
On a server (HSTS), the following commands can be used to set a global virtual link:
|
3440
3442
|
|
3441
|
-
```
|
3443
|
+
```shell
|
3442
3444
|
asconfigurator -x 'set_trunk_data;id,1;trunk_name,in;trunk_capacity,45000;trunk_on,true'
|
3443
3445
|
asconfigurator -x 'set_trunk_data;id,2;trunk_name,out;trunk_capacity,45000;trunk_on,true'
|
3444
3446
|
asconfigurator -x 'set_node_data;transfer_in_bandwidth_aggregate_trunk_id,1'
|
@@ -3506,7 +3508,7 @@ For example, let's assume we want to replace illegal character: `|` with an unde
|
|
3506
3508
|
|
3507
3509
|
1. First, locate the configuration file with:
|
3508
3510
|
|
3509
|
-
```
|
3511
|
+
```shell
|
3510
3512
|
ascli conf ascp info --fields=aspera_conf
|
3511
3513
|
```
|
3512
3514
|
|
@@ -3585,13 +3587,13 @@ Parameters provided in option `transfer_info` are:
|
|
3585
3587
|
|
3586
3588
|
Like any other option, `transfer_info` can get its value from a pre-configured [Option Preset](#option-preset) :
|
3587
3589
|
|
3588
|
-
```
|
3590
|
+
```shell
|
3589
3591
|
--transfer-info=@preset:_name_here_
|
3590
3592
|
```
|
3591
3593
|
|
3592
3594
|
or be specified using the extended value syntax :
|
3593
3595
|
|
3594
|
-
```
|
3596
|
+
```shell
|
3595
3597
|
--transfer-info=@json:'{"url":"https://...","username":"_user_here_","password":"my_password_here"}'
|
3596
3598
|
```
|
3597
3599
|
|
@@ -3617,7 +3619,7 @@ Parameters provided in option `transfer_info` are:
|
|
3617
3619
|
|
3618
3620
|
Example:
|
3619
3621
|
|
3620
|
-
```
|
3622
|
+
```shell
|
3621
3623
|
ascli faspex package recv 323 --transfer=httpgw --transfer-info=@json:'{"url":"https://asperagw.example.com:9443/aspera/http-gwy"}'
|
3622
3624
|
```
|
3623
3625
|
|
@@ -3645,20 +3647,20 @@ Options for `transfer_info` are:
|
|
3645
3647
|
|
3646
3648
|
For example, to use an external, already running `transferd`, use option:
|
3647
3649
|
|
3648
|
-
```
|
3650
|
+
```shell
|
3649
3651
|
--transfer-info=@json:'{"url":":55002","start":false,"stop":false}'
|
3650
3652
|
```
|
3651
3653
|
|
3652
3654
|
The gem `grpc` is not part of default dependencies, as it requires compilation of a native part.
|
3653
3655
|
So, to use the Transfer Daemon you should install this gem:
|
3654
3656
|
|
3655
|
-
```
|
3657
|
+
```shell
|
3656
3658
|
gem install grpc
|
3657
3659
|
```
|
3658
3660
|
|
3659
3661
|
If the execution complains about incompatible libraries, then force recompilation of the native part:
|
3660
3662
|
|
3661
|
-
```
|
3663
|
+
```shell
|
3662
3664
|
gem uninstall grpc
|
3663
3665
|
|
3664
3666
|
gem install grpc --platform ruby
|
@@ -3700,7 +3702,7 @@ To remove a (deep) key from transfer spec, set the value to `null`.
|
|
3700
3702
|
> [!NOTE]
|
3701
3703
|
> Default transfer spec values can be displayed with command:
|
3702
3704
|
|
3703
|
-
```
|
3705
|
+
```shell
|
3704
3706
|
ascli config ascp info --fields=ts --flat-hash=no
|
3705
3707
|
```
|
3706
3708
|
|
@@ -3726,20 +3728,20 @@ References:
|
|
3726
3728
|
|
3727
3729
|
Parameters can be displayed with commands:
|
3728
3730
|
|
3729
|
-
```
|
3731
|
+
```shell
|
3730
3732
|
ascli config ascp spec
|
3731
3733
|
ascli config ascp spec --select=@json:'{"d":"Y"}' --fields=-d,n,c
|
3732
3734
|
```
|
3733
3735
|
|
3734
3736
|
A JSON Schema can be generated with command:
|
3735
3737
|
|
3736
|
-
```
|
3738
|
+
```shell
|
3737
3739
|
ascli config ascp schema --format=jsonpp
|
3738
3740
|
```
|
3739
3741
|
|
3740
3742
|
An optional parameter can be specified to display the schema for a specific transfer agent:
|
3741
3743
|
|
3742
|
-
```
|
3744
|
+
```shell
|
3743
3745
|
ascli config ascp schema transferd --format=jsonpp
|
3744
3746
|
```
|
3745
3747
|
|
@@ -3878,19 +3880,19 @@ Possible values for option `sources` are:
|
|
3878
3880
|
So, by default, the list of files to transfer will be simply specified on the command line.
|
3879
3881
|
Example:
|
3880
3882
|
|
3881
|
-
```
|
3883
|
+
```shell
|
3882
3884
|
ascli server upload ~/first.file secondfile
|
3883
3885
|
```
|
3884
3886
|
|
3885
3887
|
This is the same as (with default values):
|
3886
3888
|
|
3887
|
-
```
|
3889
|
+
```shell
|
3888
3890
|
ascli server upload --sources=@args --src-type=list ~/mysample.file secondfile
|
3889
3891
|
```
|
3890
3892
|
|
3891
3893
|
- An [Extended Value](#extended-value-syntax) with type **Array of String**
|
3892
3894
|
|
3893
|
-
> [!
|
3895
|
+
> [!TIP]
|
3894
3896
|
> Extended values can be tested with the command `config echo`
|
3895
3897
|
|
3896
3898
|
Examples:
|
@@ -3899,7 +3901,7 @@ Example:
|
|
3899
3901
|
|
3900
3902
|
Create the file list:
|
3901
3903
|
|
3902
|
-
```
|
3904
|
+
```shell
|
3903
3905
|
echo ~/mysample.file > myfilelist.txt
|
3904
3906
|
echo secondfile >> myfilelist.txt
|
3905
3907
|
```
|
@@ -3912,13 +3914,13 @@ Example:
|
|
3912
3914
|
|
3913
3915
|
- Using JSON array
|
3914
3916
|
|
3915
|
-
```
|
3917
|
+
```shell
|
3916
3918
|
--sources=@json:'["file1","file2"]'
|
3917
3919
|
```
|
3918
3920
|
|
3919
3921
|
- Using STDIN, one path per line
|
3920
3922
|
|
3921
|
-
```
|
3923
|
+
```shell
|
3922
3924
|
--sources=@lines:@stdin:
|
3923
3925
|
```
|
3924
3926
|
|
@@ -3933,7 +3935,7 @@ Examples:
|
|
3933
3935
|
|
3934
3936
|
- Using transfer spec
|
3935
3937
|
|
3936
|
-
```
|
3938
|
+
```shell
|
3937
3939
|
--sources=@ts --ts=@json:'{"paths":[{"source":"file1"},{"source":"file2"}]}'
|
3938
3940
|
```
|
3939
3941
|
|
@@ -3949,7 +3951,7 @@ Supported values for `src_type` are:
|
|
3949
3951
|
|
3950
3952
|
Example: Source file `200KB.1` is renamed `sample1` on destination:
|
3951
3953
|
|
3952
|
-
```
|
3954
|
+
```shell
|
3953
3955
|
ascli server upload --src-type=pair ~/Documents/Samples/200KB.1 /Upload/sample1
|
3954
3956
|
```
|
3955
3957
|
|
@@ -4020,7 +4022,7 @@ Multi session, i.e. starting a transfer of a file set using multiple sessions (o
|
|
4020
4022
|
|
4021
4023
|
- `--transfer=node`
|
4022
4024
|
|
4023
|
-
```
|
4025
|
+
```shell
|
4024
4026
|
--ts=@json:'{"multi_session":10,"multi_session_threshold":1}'
|
4025
4027
|
```
|
4026
4028
|
|
@@ -4028,7 +4030,7 @@ Multi-session is directly supported by the node daemon.
|
|
4028
4030
|
|
4029
4031
|
- `--transfer=direct`
|
4030
4032
|
|
4031
|
-
```
|
4033
|
+
```shell
|
4032
4034
|
--ts=@json:'{"multi_session":5,"multi_session_threshold":1,"resume_policy":"none"}'
|
4033
4035
|
```
|
4034
4036
|
|
@@ -4051,7 +4053,7 @@ Activating CSEAR consists in using transfer spec parameters:
|
|
4051
4053
|
|
4052
4054
|
Example: parameter to download a Faspex package and decrypt on the fly
|
4053
4055
|
|
4054
|
-
```
|
4056
|
+
```shell
|
4055
4057
|
--ts=@json:'{"content_protection":"decrypt","content_protection_password":"my_password_here"}'
|
4056
4058
|
```
|
4057
4059
|
|
@@ -4059,25 +4061,25 @@ Example: parameter to download a Faspex package and decrypt on the fly
|
|
4059
4061
|
|
4060
4062
|
- Change target rate
|
4061
4063
|
|
4062
|
-
```
|
4064
|
+
```shell
|
4063
4065
|
--ts=@json:'{"target_rate_kbps":500000}'
|
4064
4066
|
```
|
4065
4067
|
|
4066
4068
|
- Override the FASP SSH port to a specific TCP port:
|
4067
4069
|
|
4068
|
-
```
|
4070
|
+
```shell
|
4069
4071
|
--ts=@json:'{"ssh_port":33002}'
|
4070
4072
|
```
|
4071
4073
|
|
4072
4074
|
- Force HTTP fallback mode:
|
4073
4075
|
|
4074
|
-
```
|
4076
|
+
```shell
|
4075
4077
|
--ts=@json:'{"http_fallback":"force"}'
|
4076
4078
|
```
|
4077
4079
|
|
4078
4080
|
- Activate progress when not activated by default on server
|
4079
4081
|
|
4080
|
-
```
|
4082
|
+
```shell
|
4081
4083
|
--ts=@json:'{"precalculate_job_size":true}'
|
4082
4084
|
```
|
4083
4085
|
|
@@ -4112,7 +4114,7 @@ Linux also provides `anacron`, if tasks are hourly or daily.
|
|
4112
4114
|
|
4113
4115
|
For example, on Linux it is convenient to create a wrapping script, e.g. `cron_ascli` that will set up the environment (e.g. Ruby) to properly start `ascli`:
|
4114
4116
|
|
4115
|
-
```
|
4117
|
+
```shell
|
4116
4118
|
#!/bin/bash
|
4117
4119
|
# load the Ruby environment
|
4118
4120
|
. /etc/profile.d/rvm.sh
|
@@ -4125,7 +4127,7 @@ exec timeout ${tmout} ascli "${@}"
|
|
4125
4127
|
|
4126
4128
|
Example of cronjob created for user `xfer`.
|
4127
4129
|
|
4128
|
-
```
|
4130
|
+
```shell
|
4129
4131
|
crontab<<EOF
|
4130
4132
|
0 * * * * /home/xfer/cron_ascli preview scan --logger=syslog --display=error
|
4131
4133
|
2-59 * * * * /home/xfer/cron_ascli preview trev --logger=syslog --display=error
|
@@ -4147,7 +4149,7 @@ Let's give a base name for our service: `my_ascli_svc`
|
|
4147
4149
|
|
4148
4150
|
The startup script can be simply the `ascli` command line, for example: `/usr/local/bin/start_my_ascli_svc.sh`:
|
4149
4151
|
|
4150
|
-
```
|
4152
|
+
```shell
|
4151
4153
|
#!/bin/bash
|
4152
4154
|
set -e
|
4153
4155
|
echo "Starting my_ascli_svc at $(date)"
|
@@ -4157,7 +4159,7 @@ exec ascli .....
|
|
4157
4159
|
|
4158
4160
|
And make this script executable:
|
4159
4161
|
|
4160
|
-
```
|
4162
|
+
```shell
|
4161
4163
|
chmod a+x /usr/local/bin/start_my_ascli_svc.sh
|
4162
4164
|
```
|
4163
4165
|
|
@@ -4185,7 +4187,7 @@ WantedBy=multi-user.target
|
|
4185
4187
|
|
4186
4188
|
Then enable and start with:
|
4187
4189
|
|
4188
|
-
```
|
4190
|
+
```shell
|
4189
4191
|
sudo systemctl daemon-reload
|
4190
4192
|
sudo systemctl enable --now my_ascli_svc.service
|
4191
4193
|
systemctl status my_ascli_svc.service
|
@@ -4207,7 +4209,7 @@ Usually the OS native scheduler already provides some sort of protection against
|
|
4207
4209
|
- The Windows scheduler does this by default
|
4208
4210
|
- Linux `cron` can leverage the utility [`flock`](https://man.cx/flock%281%29) to do the same:
|
4209
4211
|
|
4210
|
-
```
|
4212
|
+
```shell
|
4211
4213
|
/usr/bin/flock -w 0 /var/cron.lock ascli ...
|
4212
4214
|
```
|
4213
4215
|
|
@@ -4220,13 +4222,13 @@ Testing `ascli` locking:
|
|
4220
4222
|
|
4221
4223
|
Run this same command in two separate terminals within less than 30 seconds:
|
4222
4224
|
|
4223
|
-
```
|
4225
|
+
```shell
|
4224
4226
|
ascli config echo @ruby:'sleep(30)' --lock-port=12345
|
4225
4227
|
```
|
4226
4228
|
|
4227
4229
|
The first instance will sleep 30 seconds, the second one will immediately exit like this:
|
4228
4230
|
|
4229
|
-
```
|
4231
|
+
```shell
|
4230
4232
|
WARN -- : Another instance is already running (Address already in use - bind(2) for "127.0.0.1" port 12345).
|
4231
4233
|
```
|
4232
4234
|
|
@@ -4238,7 +4240,7 @@ Several **PVCL** adapters are available, one is embedded in `ascp`, the others a
|
|
4238
4240
|
|
4239
4241
|
The list of supported **PVCL** adapters can be retrieved with command:
|
4240
4242
|
|
4241
|
-
```
|
4243
|
+
```shell
|
4242
4244
|
ascli config ascp info --fields=@re:'^pvcl'
|
4243
4245
|
```
|
4244
4246
|
|
@@ -4259,7 +4261,7 @@ They act as a **pseudo drive**.
|
|
4259
4261
|
|
4260
4262
|
The simplified format is:
|
4261
4263
|
|
4262
|
-
```
|
4264
|
+
```shell
|
4263
4265
|
<adapter>:///<sub file path>?<arg1>=<val1>&...
|
4264
4266
|
```
|
4265
4267
|
|
@@ -4276,7 +4278,7 @@ To discard data at the destination, the destination argument is set to `faux://`
|
|
4276
4278
|
|
4277
4279
|
To send uninitialized data in place of an actual source file, the source file is replaced with an argument of the form:
|
4278
4280
|
|
4279
|
-
```
|
4281
|
+
```shell
|
4280
4282
|
faux:///filename?filesize
|
4281
4283
|
```
|
4282
4284
|
|
@@ -4295,7 +4297,7 @@ Very large `faux` file sizes (petabyte range and above) will likely fail due to
|
|
4295
4297
|
|
4296
4298
|
To send uninitialized data in place of a source directory, the source argument is replaced with an argument of the form:
|
4297
4299
|
|
4298
|
-
```
|
4300
|
+
```shell
|
4299
4301
|
faux:///dirname?<arg1>=<val1>&...
|
4300
4302
|
```
|
4301
4303
|
|
@@ -4336,25 +4338,25 @@ Examples:
|
|
4336
4338
|
|
4337
4339
|
- Upload 20 gibibyte of random data to file `myfile` to directory /Upload
|
4338
4340
|
|
4339
|
-
```
|
4341
|
+
```shell
|
4340
4342
|
ascli server upload faux:///myfile\?20g --to-folder=/Upload
|
4341
4343
|
```
|
4342
4344
|
|
4343
4345
|
- Upload a file /tmp/sample but do not save results to disk (no docroot on destination)
|
4344
4346
|
|
4345
|
-
```
|
4347
|
+
```shell
|
4346
4348
|
ascli server upload /tmp/sample --to-folder=faux://
|
4347
4349
|
```
|
4348
4350
|
|
4349
4351
|
- Upload a faux directory `mydir` containing 1 million files, sequentially with sizes ranging from 0 to 2 Mebibyte - 2 bytes, with the base name of each file being `testfile` to /Upload
|
4350
4352
|
|
4351
|
-
```
|
4353
|
+
```shell
|
4352
4354
|
ascli server upload "faux:///mydir?file=testfile&count=1m&size=0&inc=2&seq=sequential" --to-folder=/Upload
|
4353
4355
|
```
|
4354
4356
|
|
4355
4357
|
- Upload a faux directory `mydir` containing 1000 files, of size 1 byte, with the base name of each file being `testfile` to /Upload
|
4356
4358
|
|
4357
|
-
```
|
4359
|
+
```shell
|
4358
4360
|
ascli server upload "faux:///mydir?file=testfile&count=1000&size=1" --to-folder=/Upload
|
4359
4361
|
```
|
4360
4362
|
|
@@ -4363,7 +4365,7 @@ ascli server upload "faux:///mydir?file=testfile&count=1000&size=1" --to-folder=
|
|
4363
4365
|
```text
|
4364
4366
|
ascli -h
|
4365
4367
|
NAME
|
4366
|
-
ascli -- a command line tool for Aspera Applications (v4.24.
|
4368
|
+
ascli -- a command line tool for Aspera Applications (v4.24.1)
|
4367
4369
|
|
4368
4370
|
SYNOPSIS
|
4369
4371
|
ascli COMMANDS [OPTIONS] [ARGS]
|
@@ -4690,7 +4692,7 @@ For instance, the plugin `faspex` allows operations on **Aspera Faspex**.
|
|
4690
4692
|
|
4691
4693
|
Available plugins can be found using command:
|
4692
4694
|
|
4693
|
-
```
|
4695
|
+
```shell
|
4694
4696
|
ascli config plugin list
|
4695
4697
|
```
|
4696
4698
|
|
@@ -4712,13 +4714,13 @@ Aspera on Cloud and Faspex 5 rely on OAuth.
|
|
4712
4714
|
|
4713
4715
|
By default, plugins are looked-up in folders specified by (multi-value) option `plugin_folder`:
|
4714
4716
|
|
4715
|
-
```
|
4717
|
+
```shell
|
4716
4718
|
ascli --show-config --fields=plugin_folder
|
4717
4719
|
```
|
4718
4720
|
|
4719
4721
|
You can create the skeleton of a new plugin like this:
|
4720
4722
|
|
4721
|
-
```
|
4723
|
+
```shell
|
4722
4724
|
ascli config plugin create foo .
|
4723
4725
|
```
|
4724
4726
|
|
@@ -4726,7 +4728,7 @@ ascli config plugin create foo .
|
|
4726
4728
|
Created ./foo.rb
|
4727
4729
|
```
|
4728
4730
|
|
4729
|
-
```
|
4731
|
+
```shell
|
4730
4732
|
ascli --plugin-folder=. foo
|
4731
4733
|
```
|
4732
4734
|
|
@@ -4785,7 +4787,7 @@ For this, specify the option: `--use-generic-client=no`.
|
|
4785
4787
|
|
4786
4788
|
If you already know the application, and want to limit the detection to it, provide URL and plugin name:
|
4787
4789
|
|
4788
|
-
```
|
4790
|
+
```shell
|
4789
4791
|
ascli config wizard _your_instance_ aoc
|
4790
4792
|
```
|
4791
4793
|
|
@@ -4795,7 +4797,7 @@ ascli config wizard _your_instance_ aoc
|
|
4795
4797
|
After successful completion of the wizard, a new configuration preset is created, and set as default for the `aoc` plugin.
|
4796
4798
|
This can be verified with command:
|
4797
4799
|
|
4798
|
-
```
|
4800
|
+
```shell
|
4799
4801
|
ascli config preset over
|
4800
4802
|
```
|
4801
4803
|
|
@@ -4857,7 +4859,7 @@ If you did not use the wizard, you can also manually create an [Option Preset](#
|
|
4857
4859
|
|
4858
4860
|
Let's create an [Option Preset](#option-preset) called: `my_aoc_org` using `ask` for interactive input (client info from previous step):
|
4859
4861
|
|
4860
|
-
```
|
4862
|
+
```shell
|
4861
4863
|
ascli config preset ask my_aoc_org url client_id client_secret
|
4862
4864
|
option: url> https://_your_instance_.ibmaspera.com/
|
4863
4865
|
option: client_id> my_client_id_here
|
@@ -4872,7 +4874,7 @@ updated: my_aoc_org
|
|
4872
4874
|
|
4873
4875
|
Define this [Option Preset](#option-preset) as default configuration for the `aspera` plugin:
|
4874
4876
|
|
4875
|
-
```
|
4877
|
+
```shell
|
4876
4878
|
ascli config preset set default aoc my_aoc_org
|
4877
4879
|
```
|
4878
4880
|
|
@@ -4904,7 +4906,7 @@ This can be done in two manners:
|
|
4904
4906
|
|
4905
4907
|
- Using command line
|
4906
4908
|
|
4907
|
-
```
|
4909
|
+
```shell
|
4908
4910
|
ascli aoc admin client list
|
4909
4911
|
```
|
4910
4912
|
|
@@ -4920,7 +4922,7 @@ Items: 4/4
|
|
4920
4922
|
╰────────────┴─────────────────────╯
|
4921
4923
|
```
|
4922
4924
|
|
4923
|
-
```
|
4925
|
+
```shell
|
4924
4926
|
ascli aoc admin client modify my_BJbQiFw @json:'{"jwt_grant_enabled":true,"explicit_authorization_required":false}'
|
4925
4927
|
```
|
4926
4928
|
|
@@ -4946,7 +4948,7 @@ Open the previously generated public key located here: `$HOME/.aspera/ascli/my_p
|
|
4946
4948
|
|
4947
4949
|
##### Using command line
|
4948
4950
|
|
4949
|
-
```
|
4951
|
+
```shell
|
4950
4952
|
ascli aoc admin user list
|
4951
4953
|
```
|
4952
4954
|
|
@@ -4968,7 +4970,7 @@ ascli aoc user profile modify @ruby:'{"public_key"=>File.read(File.expand_path("
|
|
4968
4970
|
modified
|
4969
4971
|
```
|
4970
4972
|
|
4971
|
-
> [!
|
4973
|
+
> [!TIP]
|
4972
4974
|
> The `aspera user info show` command can be used to verify modifications.
|
4973
4975
|
|
4974
4976
|
#### [Option Preset](#option-preset) modification for JWT
|
@@ -4981,7 +4983,7 @@ To activate default use of JWT authentication for `ascli` using the [Option Pres
|
|
4981
4983
|
|
4982
4984
|
Execute:
|
4983
4985
|
|
4984
|
-
```
|
4986
|
+
```shell
|
4985
4987
|
ascli config preset update my_aoc_org --auth=jwt --private-key=@val:@file:~/.aspera/ascli/my_private_key --username=someuser@example.com
|
4986
4988
|
```
|
4987
4989
|
|
@@ -5010,7 +5012,7 @@ In that case, it is possible to list those shared folder by using a value for op
|
|
5010
5012
|
|
5011
5013
|
Once client has been registered and [Option Preset](#option-preset) created: `ascli` can be used:
|
5012
5014
|
|
5013
|
-
```
|
5015
|
+
```shell
|
5014
5016
|
ascli aoc files br /
|
5015
5017
|
```
|
5016
5018
|
|
@@ -5026,17 +5028,17 @@ This can be useful when a command is not yet available.
|
|
5026
5028
|
|
5027
5029
|
Example:
|
5028
5030
|
|
5029
|
-
```
|
5031
|
+
```shell
|
5030
5032
|
curl -s -H "Authorization: $(ascli aoc bearer_token)" 'https://api.ibmaspera.com/api/v1/group_memberships?embed[]=dropbox&embed[]=workspace'|jq -r '.[]|(.workspace.name + " -> " + .dropbox.name)'
|
5031
5033
|
```
|
5032
5034
|
|
5033
5035
|
It is also possible to get the bearer token for node, as user or as admin using:
|
5034
5036
|
|
5035
|
-
```
|
5037
|
+
```shell
|
5036
5038
|
ascli aoc files bearer_token_node /
|
5037
5039
|
```
|
5038
5040
|
|
5039
|
-
```
|
5041
|
+
```shell
|
5040
5042
|
ascli aoc admin node v4 1234 --secret=_ak_secret_here_ bearer_token_node /
|
5041
5043
|
```
|
5042
5044
|
|
@@ -5081,25 +5083,25 @@ Examples:
|
|
5081
5083
|
|
5082
5084
|
- List users with `laurent` in name:
|
5083
5085
|
|
5084
|
-
```
|
5086
|
+
```shell
|
5085
5087
|
ascli aoc admin user list --query=@json:'{"q":"laurent"}'
|
5086
5088
|
```
|
5087
5089
|
|
5088
5090
|
- List users who logged-in before a date:
|
5089
5091
|
|
5090
|
-
```
|
5092
|
+
```shell
|
5091
5093
|
ascli aoc admin user list --query=@json:'{"q":"last_login_at:<2018-05-28"}'
|
5092
5094
|
```
|
5093
5095
|
|
5094
5096
|
- List external users and sort in reverse alphabetical order using name:
|
5095
5097
|
|
5096
|
-
```
|
5098
|
+
```shell
|
5097
5099
|
ascli aoc admin user list --query=@json:'{"member_of_any_workspace":false,"sort":"-name"}'
|
5098
5100
|
```
|
5099
5101
|
|
5100
5102
|
Refer to the AoC API for full list of query parameters, or use the browser in developer mode with the web UI.
|
5101
5103
|
|
5102
|
-
> [!
|
5104
|
+
> [!TIP]
|
5103
5105
|
> The option `select` can also be used to further refine selection, refer to [section earlier](#option-select).
|
5104
5106
|
|
5105
5107
|
#### Selecting a resource
|
@@ -5117,7 +5119,7 @@ To execute an action on a specific resource, select it using one of those method
|
|
5117
5119
|
|
5118
5120
|
New resources (users, groups, workspaces, etc...) can be created using a command like:
|
5119
5121
|
|
5120
|
-
```
|
5122
|
+
```shell
|
5121
5123
|
ascli aoc admin create <resource type> @json:'{<...parameters...>}'
|
5122
5124
|
```
|
5123
5125
|
|
@@ -5126,7 +5128,7 @@ Sadly, not all.
|
|
5126
5128
|
|
5127
5129
|
Nevertheless, it is possible to guess the structure of the creation value by simply dumping an existing resource, and use the same parameters for the creation.
|
5128
5130
|
|
5129
|
-
```
|
5131
|
+
```shell
|
5130
5132
|
ascli aoc admin group show 12345 --format=json
|
5131
5133
|
```
|
5132
5134
|
|
@@ -5138,7 +5140,7 @@ Remove the parameters that are either obviously added by the system: `id`, `crea
|
|
5138
5140
|
|
5139
5141
|
And then craft your command:
|
5140
5142
|
|
5141
|
-
```
|
5143
|
+
```shell
|
5142
5144
|
ascli aoc admin group create @json:'{"wrong":"param"}'
|
5143
5145
|
```
|
5144
5146
|
|
@@ -5162,7 +5164,7 @@ In order to access some administrative actions on **nodes** (in fact, access key
|
|
5162
5164
|
The secret is provided using the `secret` option.
|
5163
5165
|
For example in a command like:
|
5164
5166
|
|
5165
|
-
```
|
5167
|
+
```shell
|
5166
5168
|
ascli aoc admin node 123 --secret="my_secret_here" v3 info
|
5167
5169
|
```
|
5168
5170
|
|
@@ -5172,7 +5174,7 @@ It is also possible to store secrets in the [secret vault](#secret-vault) and th
|
|
5172
5174
|
|
5173
5175
|
The activity app can be queried with:
|
5174
5176
|
|
5175
|
-
```
|
5177
|
+
```shell
|
5176
5178
|
ascli aoc admin analytics transfers
|
5177
5179
|
```
|
5178
5180
|
|
@@ -5199,7 +5201,7 @@ The environment provided contains the following additional variable:
|
|
5199
5201
|
|
5200
5202
|
Example:
|
5201
5203
|
|
5202
|
-
```
|
5204
|
+
```shell
|
5203
5205
|
ascli aoc admin analytics transfers --once-only=yes --lock-port=12345 --query=@json:'{"status":"completed","direction":"receive"}' --notify-to=active --notify-template=@file:mytemplate.erb
|
5204
5206
|
```
|
5205
5207
|
|
@@ -5233,7 +5235,7 @@ To list the target folder content, add a `/` at the end of the path.
|
|
5233
5235
|
|
5234
5236
|
Example:
|
5235
5237
|
|
5236
|
-
```
|
5238
|
+
```shell
|
5237
5239
|
ascli aoc files br the_link
|
5238
5240
|
```
|
5239
5241
|
|
@@ -5246,7 +5248,7 @@ Current Workspace: Default (default)
|
|
5246
5248
|
+------------+------+----------------+------+----------------------+--------------+
|
5247
5249
|
```
|
5248
5250
|
|
5249
|
-
```
|
5251
|
+
```shell
|
5250
5252
|
ascli aoc files br the_link/
|
5251
5253
|
```
|
5252
5254
|
|
@@ -5261,7 +5263,7 @@ Current Workspace: Default (default)
|
|
5261
5263
|
|
5262
5264
|
#### Example: Bulk creation of users
|
5263
5265
|
|
5264
|
-
```
|
5266
|
+
```shell
|
5265
5267
|
ascli aoc admin user create --bulk=yes @json:'[{"email":"dummyuser1@example.com"},{"email":"dummyuser2@example.com"}]'
|
5266
5268
|
```
|
5267
5269
|
|
@@ -5276,7 +5278,7 @@ ascli aoc admin user create --bulk=yes @json:'[{"email":"dummyuser1@example.com"
|
|
5276
5278
|
|
5277
5279
|
#### Example: Find with filter and delete
|
5278
5280
|
|
5279
|
-
```
|
5281
|
+
```shell
|
5280
5282
|
ascli aoc admin user list --query='@json:{"q":"dummyuser"}' --fields=id,email
|
5281
5283
|
```
|
5282
5284
|
|
@@ -5289,7 +5291,7 @@ ascli aoc admin user list --query='@json:{"q":"dummyuser"}' --fields=id,email
|
|
5289
5291
|
+-------+------------------------+
|
5290
5292
|
```
|
5291
5293
|
|
5292
|
-
```
|
5294
|
+
```shell
|
5293
5295
|
ascli aoc admin user list --query='@json:{"q":"dummyuser"}' --fields=id --display=data --format=csv | ascli aoc admin user delete @lines:@stdin: --bulk=yes
|
5294
5296
|
```
|
5295
5297
|
|
@@ -5312,7 +5314,7 @@ To delete them use the same method as before
|
|
5312
5314
|
|
5313
5315
|
#### Example: Display current user's workspaces
|
5314
5316
|
|
5315
|
-
```
|
5317
|
+
```shell
|
5316
5318
|
ascli aoc user workspaces list
|
5317
5319
|
```
|
5318
5320
|
|
@@ -5330,13 +5332,13 @@ ascli aoc user workspaces list
|
|
5330
5332
|
|
5331
5333
|
Creation of a sub-access key is like creation of access key with the following difference: authentication to Node API is made with access key (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)
|
5332
5334
|
|
5333
|
-
```
|
5335
|
+
```shell
|
5334
5336
|
ascli aoc admin resource node --name=_node_name_ --secret=_secret_ v4 access_key create @json:'{"storage":{"path":"/folder1"}}'
|
5335
5337
|
```
|
5336
5338
|
|
5337
5339
|
#### Example: Display transfer events (ops/transfer)
|
5338
5340
|
|
5339
|
-
```
|
5341
|
+
```shell
|
5340
5342
|
ascli aoc admin node --secret=_secret_ v3 transfer list --query=@json:'[["q","*"],["count",5]]'
|
5341
5343
|
```
|
5342
5344
|
|
@@ -5352,13 +5354,13 @@ Examples of query:
|
|
5352
5354
|
|
5353
5355
|
#### Example: Display node events (events)
|
5354
5356
|
|
5355
|
-
```
|
5357
|
+
```shell
|
5356
5358
|
ascli aoc admin node --secret=_secret_ v3 events
|
5357
5359
|
```
|
5358
5360
|
|
5359
5361
|
#### Example: Display members of a workspace
|
5360
5362
|
|
5361
|
-
```
|
5363
|
+
```shell
|
5362
5364
|
ascli aoc admin workspace_membership list --fields=member_type,manager,member.email --query=@json:'{"embed":"member","inherited":false,"workspace_id":11363,"sort":"name"}'
|
5363
5365
|
```
|
5364
5366
|
|
@@ -5385,45 +5387,45 @@ Other query parameters:
|
|
5385
5387
|
|
5386
5388
|
a- Get ID of first workspace
|
5387
5389
|
|
5388
|
-
```
|
5390
|
+
```shell
|
5389
5391
|
WS1='First Workspace'
|
5390
5392
|
WS1ID=$(ascli aoc admin workspace list --query=@json:'{"q":"'"$WS1"'"}' --select=@json:'{"name":"'"$WS1"'"}' --fields=id --format=csv)
|
5391
5393
|
```
|
5392
5394
|
|
5393
5395
|
b- Get ID of second workspace
|
5394
5396
|
|
5395
|
-
```
|
5397
|
+
```shell
|
5396
5398
|
WS2='Second Workspace'
|
5397
5399
|
WS2ID=$(ascli aoc admin workspace list --query=@json:'{"q":"'"$WS2"'"}' --select=@json:'{"name":"'"$WS2"'"}' --fields=id --format=csv)
|
5398
5400
|
```
|
5399
5401
|
|
5400
5402
|
c- Extract membership information
|
5401
5403
|
|
5402
|
-
```
|
5404
|
+
```shell
|
5403
5405
|
ascli aoc admin workspace_membership list --fields=manager,member_id,member_type,workspace_id --query=@json:'{"workspace_id":'"$WS1ID"'}' --format=jsonpp --output=ws1_members.json
|
5404
5406
|
```
|
5405
5407
|
|
5406
5408
|
d- Convert to creation data for second workspace:
|
5407
5409
|
|
5408
|
-
```
|
5410
|
+
```shell
|
5409
5411
|
grep -Eve '(direct|effective_manager|_count|storage|"id")' ws1_members.json|sed '/workspace_id/ s/"'"$WS1ID"'"/"'"$WS2ID"'"/g' > ws2_members.json
|
5410
5412
|
```
|
5411
5413
|
|
5412
5414
|
or, using `jq`:
|
5413
5415
|
|
5414
|
-
```
|
5416
|
+
```shell
|
5415
5417
|
jq '[.[] | {member_type,member_id,workspace_id,manager,workspace_id:"'"$WS2ID"'"}]' ws1_members.json > ws2_members.json
|
5416
5418
|
```
|
5417
5419
|
|
5418
5420
|
e- Add members to second workspace
|
5419
5421
|
|
5420
|
-
```
|
5422
|
+
```shell
|
5421
5423
|
ascli aoc admin workspace_membership create --bulk=yes @json:@file:ws2_members.json
|
5422
5424
|
```
|
5423
5425
|
|
5424
5426
|
#### Example: Get users who did not log since a date
|
5425
5427
|
|
5426
|
-
```
|
5428
|
+
```shell
|
5427
5429
|
ascli aoc admin user list --fields=email --query=@json:'{"q":"last_login_at:<2018-05-28"}'
|
5428
5430
|
```
|
5429
5431
|
|
@@ -5438,7 +5440,7 @@ ascli aoc admin user list --fields=email --query=@json:'{"q":"last_login_at:<201
|
|
5438
5440
|
|
5439
5441
|
#### Example: List **Limited** users
|
5440
5442
|
|
5441
|
-
```
|
5443
|
+
```shell
|
5442
5444
|
ascli aoc admin user list --fields=email --select=@json:'{"member_of_any_workspace":false}'
|
5443
5445
|
```
|
5444
5446
|
|
@@ -5446,7 +5448,7 @@ ascli aoc admin user list --fields=email --select=@json:'{"member_of_any_workspa
|
|
5446
5448
|
|
5447
5449
|
- Create the group and take note of `id`
|
5448
5450
|
|
5449
|
-
```
|
5451
|
+
```shell
|
5450
5452
|
ascli aoc admin group create @json:'{"name":"group 1","description":"my super group"}'
|
5451
5453
|
```
|
5452
5454
|
|
@@ -5454,7 +5456,7 @@ Group: `11111`
|
|
5454
5456
|
|
5455
5457
|
- Get the workspace ID
|
5456
5458
|
|
5457
|
-
```
|
5459
|
+
```shell
|
5458
5460
|
ascli aoc admin workspace list --query=@json:'{"q":"myworkspace"}' --fields=id --format=csv --display=data
|
5459
5461
|
```
|
5460
5462
|
|
@@ -5462,13 +5464,13 @@ Workspace: 22222
|
|
5462
5464
|
|
5463
5465
|
- Add group to workspace
|
5464
5466
|
|
5465
|
-
```
|
5467
|
+
```shell
|
5466
5468
|
ascli aoc admin workspace_membership create @json:'{"workspace_id":22222,"member_type":"user","member_id":11111}'
|
5467
5469
|
```
|
5468
5470
|
|
5469
5471
|
- Get a user's ID
|
5470
5472
|
|
5471
|
-
```
|
5473
|
+
```shell
|
5472
5474
|
ascli aoc admin user list --query=@json:'{"q":"manu.macron@example.com"}' --fields=id --format=csv --display=data
|
5473
5475
|
```
|
5474
5476
|
|
@@ -5476,7 +5478,7 @@ User: 33333
|
|
5476
5478
|
|
5477
5479
|
- Add user to group
|
5478
5480
|
|
5479
|
-
```
|
5481
|
+
```shell
|
5480
5482
|
ascli aoc admin group_membership create @json:'{"group_id":11111,"member_type":"user","member_id":33333}'
|
5481
5483
|
```
|
5482
5484
|
|
@@ -5486,7 +5488,7 @@ In this example, a user has access to a workspace where two shared folders are l
|
|
5486
5488
|
|
5487
5489
|
First, set up the environment (skip if already done)
|
5488
5490
|
|
5489
|
-
```
|
5491
|
+
```shell
|
5490
5492
|
ascli config wizard --url=https://sedemo.ibmaspera.com --username=someuser@example.com
|
5491
5493
|
```
|
5492
5494
|
|
@@ -5518,7 +5520,7 @@ Then, create two shared folders located in two regions, in your files home, in a
|
|
5518
5520
|
|
5519
5521
|
Then, transfer between those:
|
5520
5522
|
|
5521
|
-
```
|
5523
|
+
```shell
|
5522
5524
|
ascli -Paoc_show aoc files transfer --from-folder='IBM Cloud SJ' --to-folder='AWS Singapore' 100GB.file --ts=@json:'{"target_rate_kbps":"1000000","multi_session":10,"multi_session_threshold":1}'
|
5523
5525
|
```
|
5524
5526
|
|
@@ -5526,13 +5528,13 @@ ascli -Paoc_show aoc files transfer --from-folder='IBM Cloud SJ' --to-folder='AW
|
|
5526
5528
|
|
5527
5529
|
The following command will create and display a secret token to register a self-managed Aspera Transfer Server:
|
5528
5530
|
|
5529
|
-
```
|
5531
|
+
```shell
|
5530
5532
|
ascli aoc admin client_registration_token create @json:'{"data":{"name":"laurentnode","client_subject_scopes":["alee","aejd"],"client_subject_enabled":true}}' --fields=token --show-secrets=yes
|
5531
5533
|
```
|
5532
5534
|
|
5533
5535
|
#### Example: Delete all registration keys
|
5534
5536
|
|
5535
|
-
```
|
5537
|
+
```shell
|
5536
5538
|
ascli aoc admin client_registration_token list --fields=id --format=csv|ascli aoc admin client_registration_token delete @lines:@stdin: --bulk=yes
|
5537
5539
|
```
|
5538
5540
|
|
@@ -5566,7 +5568,7 @@ So, for example, the creation of a node using ATS in IBM Cloud looks like (see o
|
|
5566
5568
|
|
5567
5569
|
The creation options are the ones of ATS API, refer to the [section on ATS](#ats-access-key-creation-parameters) for more details and examples.
|
5568
5570
|
|
5569
|
-
```
|
5571
|
+
```shell
|
5570
5572
|
ascli aoc admin ats access_key create --cloud=softlayer --region=eu-de --params=@json:'{"storage":{"type":"ibm-s3","bucket":"mybucket","credentials":{"access_key_id":"mykey","secret_access_key":"mysecret"},"path":"/"}}'
|
5571
5573
|
```
|
5572
5574
|
|
@@ -5580,13 +5582,13 @@ So, for example, the creation of a node using ATS in IBM Cloud looks like (see o
|
|
5580
5582
|
|
5581
5583
|
First, Retrieve the ATS node address
|
5582
5584
|
|
5583
|
-
```
|
5585
|
+
```shell
|
5584
5586
|
ascli aoc admin ats cluster show --cloud=softlayer --region=eu-de --fields=transfer_setup_url --format=csv
|
5585
5587
|
```
|
5586
5588
|
|
5587
5589
|
Then use the returned address for the `url` key to actually create the AoC Node entity:
|
5588
5590
|
|
5589
|
-
```
|
5591
|
+
```shell
|
5590
5592
|
ascli aoc admin node create @json:'{"name":"myname","access_key":"myaccesskeyid","ats_access_key":true,"ats_storage_type":"ibm-s3","url":"https://ats-sl-fra-all.aspera.io"}'
|
5591
5593
|
```
|
5592
5594
|
|
@@ -5606,7 +5608,7 @@ The web-mail-like application.
|
|
5606
5608
|
|
5607
5609
|
General syntax:
|
5608
5610
|
|
5609
|
-
```
|
5611
|
+
```shell
|
5610
5612
|
ascli aoc packages send [package extended value] [other parameters such as options and file list]
|
5611
5613
|
```
|
5612
5614
|
|
@@ -5615,7 +5617,7 @@ Refer to the AoC package creation API, or display an existing package in JSON to
|
|
5615
5617
|
|
5616
5618
|
List allowed shared inbox destinations with:
|
5617
5619
|
|
5618
|
-
```
|
5620
|
+
```shell
|
5619
5621
|
ascli aoc packages shared_inboxes list
|
5620
5622
|
```
|
5621
5623
|
|
@@ -5633,19 +5635,19 @@ If a user recipient (email) is not already registered and the workspace allows e
|
|
5633
5635
|
|
5634
5636
|
##### Example: Send a package with one file to two users, using their email
|
5635
5637
|
|
5636
|
-
```
|
5638
|
+
```shell
|
5637
5639
|
ascli aoc packages send @json:'{"name":"my title","note":"my note","recipients":["someuser@example.com","other@example.com"]}' my_file.dat
|
5638
5640
|
```
|
5639
5641
|
|
5640
5642
|
##### Example: Send a package to a shared inbox with metadata
|
5641
5643
|
|
5642
|
-
```
|
5644
|
+
```shell
|
5643
5645
|
ascli aoc packages send --workspace="my ws" @json:'{"name":"my pack title","recipients":["Shared Inbox With Meta"],"metadata":{"Project Id":"123","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' ~/Documents/Samples/200KB.1
|
5644
5646
|
```
|
5645
5647
|
|
5646
5648
|
It is also possible to use identifiers and API parameters:
|
5647
5649
|
|
5648
|
-
```
|
5650
|
+
```shell
|
5649
5651
|
ascli aoc packages send --workspace="my ws" @json:'{"name":"my pack title","recipients":[{"type":"dropbox","id":"12345"}],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' ~/Documents/Samples/200KB.1
|
5650
5652
|
```
|
5651
5653
|
|
@@ -5653,7 +5655,7 @@ ascli aoc packages send --workspace="my ws" @json:'{"name":"my pack title","reci
|
|
5653
5655
|
|
5654
5656
|
Find files in Files app:
|
5655
5657
|
|
5656
|
-
```
|
5658
|
+
```shell
|
5657
5659
|
ascli aoc files browse /src_folder
|
5658
5660
|
```
|
5659
5661
|
|
@@ -5670,7 +5672,7 @@ ascli aoc files browse /src_folder
|
|
5670
5672
|
|
5671
5673
|
Let's send a package with the file `10M.dat` from subfolder /src_folder in a package:
|
5672
5674
|
|
5673
|
-
```
|
5675
|
+
```shell
|
5674
5676
|
ascli aoc files node_info /src_folder --format=json --display=data | ascli aoc packages send @json:'{"name":"test","recipients":["someuser@example.com"]}' 10M.dat --transfer=node --transfer-info=@json:@stdin:
|
5675
5677
|
```
|
5676
5678
|
|
@@ -5678,7 +5680,7 @@ ascli aoc files node_info /src_folder --format=json --display=data | ascli aoc p
|
|
5678
5680
|
|
5679
5681
|
The command to receive one or multiple packages is:
|
5680
5682
|
|
5681
|
-
```
|
5683
|
+
```shell
|
5682
5684
|
ascli aoc packages recv <package id> [<file> ...]
|
5683
5685
|
```
|
5684
5686
|
|
@@ -5724,7 +5726,7 @@ Examples:
|
|
5724
5726
|
|
5725
5727
|
##### Example: Receive all packages from a given shared inbox
|
5726
5728
|
|
5727
|
-
```
|
5729
|
+
```shell
|
5728
5730
|
ascli aoc packages recv ALL --workspace=_workspace_ --once-only=yes --lock-port=12345 --query=@json:'{"dropbox_name":"_shared_inbox_name_","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false}' --ts=@json:'{"resume_policy":"sparse_csum","target_rate_kbps":50000}'
|
5729
5731
|
```
|
5730
5732
|
|
@@ -5734,7 +5736,7 @@ To list packages that would be downloaded, without actually downloading them, re
|
|
5734
5736
|
|
5735
5737
|
It is possible to automatically download new packages, like using Aspera Cargo:
|
5736
5738
|
|
5737
|
-
```
|
5739
|
+
```shell
|
5738
5740
|
ascli aoc packages recv ALL --once-only=yes --lock-port=12345
|
5739
5741
|
```
|
5740
5742
|
|
@@ -5750,7 +5752,7 @@ Some `node` operations are available for a package, such as `browse` and `find`.
|
|
5750
5752
|
|
5751
5753
|
To list the content of a package, use command `packages browse <package id> <folder>`:
|
5752
5754
|
|
5753
|
-
```
|
5755
|
+
```shell
|
5754
5756
|
ascli aoc package browse my5CnbeWng /
|
5755
5757
|
```
|
5756
5758
|
|
@@ -5758,7 +5760,7 @@ Use command `find` to list recursively.
|
|
5758
5760
|
|
5759
5761
|
For advanced users, it's also possible to pipe node information for the package and use node operations:
|
5760
5762
|
|
5761
|
-
```
|
5763
|
+
```shell
|
5762
5764
|
ascli aoc package node_info <package ID here> / --format=json --show-secrets=yes --display=data | ascli node -N --preset=@json:@stdin: access_key do self browse /
|
5763
5765
|
```
|
5764
5766
|
|
@@ -5792,22 +5794,22 @@ Additional parameters can be specified, as supported by the API (to find out ava
|
|
5792
5794
|
The current workspace is added unless specified in the query.
|
5793
5795
|
|
5794
5796
|
> [!NOTE]
|
5795
|
-
> By default, `exclude_dropbox_packages` is set to `true` for user packages, and to false for shared inbox packages.
|
5797
|
+
> By default, `exclude_dropbox_packages` is set to `true` for user packages, and to `false` for shared inbox packages.
|
5796
5798
|
> This can be overridden in the query.
|
5797
5799
|
|
5798
5800
|
Using shared inbox name:
|
5799
5801
|
|
5800
|
-
```
|
5802
|
+
```shell
|
5801
5803
|
ascli aoc packages list --query=@json:'{"dropbox_name":"My Shared Inbox","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false,"sort":"-received_at"}'
|
5802
5804
|
```
|
5803
5805
|
|
5804
5806
|
Using shared inbox identifier: first retrieve the ID of the shared inbox, and then list packages with the appropriate filter.
|
5805
5807
|
|
5806
|
-
```
|
5808
|
+
```shell
|
5807
5809
|
shared_box_id=$(ascli aoc packages shared_inboxes show --name='My Shared Inbox' --format=csv --display=data --fields=id)
|
5808
5810
|
```
|
5809
5811
|
|
5810
|
-
```
|
5812
|
+
```shell
|
5811
5813
|
ascli aoc packages list --query=@json:'{"dropbox_id":"'$shared_box_id'","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false,"sort":"-received_at"}'
|
5812
5814
|
```
|
5813
5815
|
|
@@ -5823,7 +5825,7 @@ Files located here are either user's files, or shared folders.
|
|
5823
5825
|
|
5824
5826
|
The general download command is:
|
5825
5827
|
|
5826
|
-
```
|
5828
|
+
```shell
|
5827
5829
|
ascli aoc files download <source folder path> <source filename 1> ...
|
5828
5830
|
```
|
5829
5831
|
|
@@ -5831,7 +5833,7 @@ I.e. the first argument is the source folder, and the following arguments are th
|
|
5831
5833
|
|
5832
5834
|
If a single file or folder is to be downloaded, then a single argument can be provided.
|
5833
5835
|
|
5834
|
-
```
|
5836
|
+
```shell
|
5835
5837
|
ascli aoc files download <single file path>
|
5836
5838
|
```
|
5837
5839
|
|
@@ -5883,41 +5885,41 @@ In order to share a folder with a different, special tags are set, but this is c
|
|
5883
5885
|
|
5884
5886
|
Personal shared folders, created by users in a workspace follow the syntax:
|
5885
5887
|
|
5886
|
-
```
|
5888
|
+
```shell
|
5887
5889
|
ascli aoc files permission --workspace=<workspace name> <path to folder> ...
|
5888
5890
|
```
|
5889
5891
|
|
5890
5892
|
> [!NOTE]
|
5891
5893
|
> The workspace is identified by name, and folder by path, relative to the user's home.
|
5892
|
-
To use an identifier instead, one can use the percent selector, like `%id:1234`
|
5894
|
+
> To use an identifier instead, one can use the percent selector, like `%id:1234`
|
5893
5895
|
|
5894
5896
|
##### Admin Shared Folders
|
5895
5897
|
|
5896
5898
|
Admin shared folders, created by administrators in a workspace follow the syntax:
|
5897
5899
|
|
5898
|
-
```
|
5900
|
+
```shell
|
5899
5901
|
ascli aoc admin node do <node ID> permission --workspace=<workspace name> <path to folder>
|
5900
5902
|
```
|
5901
5903
|
|
5902
|
-
> [!
|
5904
|
+
> [!TIP]
|
5903
5905
|
> The node is identified by identifier.
|
5904
|
-
To use an name instead, one can use the percent selector, like `%name:"my node"`
|
5906
|
+
> To use an name instead, one can use the percent selector, like `%name:"my node"`
|
5905
5907
|
|
5906
5908
|
##### Example: List permissions on a shared folder
|
5907
5909
|
|
5908
|
-
```
|
5910
|
+
```shell
|
5909
5911
|
ascli aoc files permission /shared_folder_test1 list
|
5910
5912
|
```
|
5911
5913
|
|
5912
5914
|
##### Example: Share a personal folder with other users
|
5913
5915
|
|
5914
|
-
```
|
5916
|
+
```shell
|
5915
5917
|
ascli aoc files permission /shared_folder_test1 create @json:'{"with":"laurent"}'
|
5916
5918
|
```
|
5917
5919
|
|
5918
5920
|
##### Example: Revoke shared access
|
5919
5921
|
|
5920
|
-
```
|
5922
|
+
```shell
|
5921
5923
|
ascli aoc files permission /shared_folder_test1 delete 6161
|
5922
5924
|
```
|
5923
5925
|
|
@@ -5925,7 +5927,7 @@ ascli aoc files permission /shared_folder_test1 delete 6161
|
|
5925
5927
|
|
5926
5928
|
They can be managed with commands:
|
5927
5929
|
|
5928
|
-
```
|
5930
|
+
```shell
|
5929
5931
|
ascli aoc files short_link <path to folder> private create
|
5930
5932
|
ascli aoc files short_link <path to folder> private list
|
5931
5933
|
ascli aoc files short_link <path to folder> public list
|
@@ -5960,19 +5962,19 @@ First, identify the node ID where the shared folder will be created.
|
|
5960
5962
|
|
5961
5963
|
To get the node ID of the default node for workspace `my ws`, use the command:
|
5962
5964
|
|
5963
|
-
```
|
5965
|
+
```shell
|
5964
5966
|
ascli aoc admin workspace show %name:'my ws' --fields=node_id
|
5965
5967
|
```
|
5966
5968
|
|
5967
5969
|
Alternatively (longer):
|
5968
5970
|
|
5969
|
-
```
|
5971
|
+
```shell
|
5970
5972
|
ascli aoc admin workspace list --select=@json:'{"name":"my ws"}' --fields=node_id
|
5971
5973
|
```
|
5972
5974
|
|
5973
5975
|
Or select a node identifier manually from the list of nodes:
|
5974
5976
|
|
5975
|
-
```
|
5977
|
+
```shell
|
5976
5978
|
ascli aoc admin node list --fields=id,name
|
5977
5979
|
```
|
5978
5980
|
|
@@ -5986,7 +5988,7 @@ The node can also be conveniently identified using the **percent selector** inst
|
|
5986
5988
|
|
5987
5989
|
If the shared folder does not exist, then create it:
|
5988
5990
|
|
5989
|
-
```
|
5991
|
+
```shell
|
5990
5992
|
ascli aoc admin node do 1234 mkdir /folder_on_node
|
5991
5993
|
```
|
5992
5994
|
|
@@ -5994,7 +5996,7 @@ Create the shared folder in workspace `my ws` (set `with` to empty string, or do
|
|
5994
5996
|
Optionally use `as` to set the name of the shared folder if different from the folder name on the node.
|
5995
5997
|
For other options, refer to the previous section on shared folders.
|
5996
5998
|
|
5997
|
-
```
|
5999
|
+
```shell
|
5998
6000
|
ascli aoc admin node do 1234 permission /folder_on_node create @json:'{"with":"","as":"folder_for_users"}' --workspace="my ws"
|
5999
6001
|
```
|
6000
6002
|
|
@@ -6005,15 +6007,15 @@ To share with a user, group, or workspace, use the `with` parameter with the nam
|
|
6005
6007
|
The `"with"` parameter will perform a lookup, and set fields `access_type` and `access_id` accordingly.
|
6006
6008
|
The native fields `access_type` and `access_id` can also be used, instead of `with`.
|
6007
6009
|
|
6008
|
-
```
|
6010
|
+
```shell
|
6009
6011
|
ascli aoc admin node do 1234 permission /folder_on_node create @json:'{"with":"john@example.com","as":"folder_for_one_user"}' --workspace="my ws"
|
6010
6012
|
```
|
6011
6013
|
|
6012
|
-
```
|
6014
|
+
```shell
|
6013
6015
|
ascli aoc admin node do 1234 permission /folder_on_node create @json:'{"with":"group 1","as":"folder_for_a_group"}' --workspace="my ws"
|
6014
6016
|
```
|
6015
6017
|
|
6016
|
-
```
|
6018
|
+
```shell
|
6017
6019
|
ascli aoc admin node do 1234 permission /folder_on_node create @json:'{"with":"my ws","as":"folder_for_all_workspace"}' --workspace="my ws"
|
6018
6020
|
```
|
6019
6021
|
|
@@ -6034,7 +6036,7 @@ Procedure to send a file from org1 to org2:
|
|
6034
6036
|
- Check that access works and locate the destination folder `mydestfolder`
|
6035
6037
|
- Execute the following:
|
6036
6038
|
|
6037
|
-
```
|
6039
|
+
```shell
|
6038
6040
|
ascli -Porg1 aoc files node_info /mydestfolder --format=json --display=data | ascli -Porg2 aoc files upload mysourcefile --transfer=node --transfer-info=@json:@stdin:
|
6039
6041
|
```
|
6040
6042
|
|
@@ -6058,7 +6060,7 @@ The command `aoc files find` allows searching for files in a given workspace.
|
|
6058
6060
|
|
6059
6061
|
It works also on `node` resource using the `v4` command:
|
6060
6062
|
|
6061
|
-
```
|
6063
|
+
```shell
|
6062
6064
|
ascli aoc admin node --name='my node name' --secret='my_secret_here' v4 find ...
|
6063
6065
|
```
|
6064
6066
|
|
@@ -6148,6 +6150,7 @@ files find /
|
|
6148
6150
|
files find / '\.partial$'
|
6149
6151
|
files find / @ruby:'->(f){f["type"].eql?("file")}'
|
6150
6152
|
files mkdir /testsrc
|
6153
|
+
files modify /some_folder @json:'{"mount_point":false}'
|
6151
6154
|
files modify my_test_folder
|
6152
6155
|
files permission my_test_folder list
|
6153
6156
|
files rename /some_folder testdst
|
@@ -6217,7 +6220,7 @@ If you are using ATS as part of AoC, then authentication is through AoC, not IBM
|
|
6217
6220
|
First get your IBM Cloud API key.
|
6218
6221
|
For instance, it can be created using the IBM Cloud web interface, or using command line:
|
6219
6222
|
|
6220
|
-
```
|
6223
|
+
```shell
|
6221
6224
|
ibmcloud iam api-key-create mykeyname -d 'my sample key'
|
6222
6225
|
```
|
6223
6226
|
|
@@ -6246,15 +6249,15 @@ References:
|
|
6246
6249
|
Then, to register the key by default for the `ats` plugin, create a preset.
|
6247
6250
|
Execute:
|
6248
6251
|
|
6249
|
-
```
|
6252
|
+
```shell
|
6250
6253
|
ascli config preset update my_ibm_ats --ibm-api-key=my_secret_api_key_here
|
6251
6254
|
```
|
6252
6255
|
|
6253
|
-
```
|
6256
|
+
```shell
|
6254
6257
|
ascli config preset set default ats my_ibm_ats
|
6255
6258
|
```
|
6256
6259
|
|
6257
|
-
```
|
6260
|
+
```shell
|
6258
6261
|
ascli ats api_key instances
|
6259
6262
|
```
|
6260
6263
|
|
@@ -6266,11 +6269,11 @@ ascli ats api_key instances
|
|
6266
6269
|
+--------------------------------------+
|
6267
6270
|
```
|
6268
6271
|
|
6269
|
-
```
|
6272
|
+
```shell
|
6270
6273
|
ascli config preset update my_ibm_ats --instance=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
|
6271
6274
|
```
|
6272
6275
|
|
6273
|
-
```
|
6276
|
+
```shell
|
6274
6277
|
ascli ats api_key create
|
6275
6278
|
```
|
6276
6279
|
|
@@ -6293,19 +6296,19 @@ Those are directly the parameters expected by the [ATS API](https://developer.ib
|
|
6293
6296
|
|
6294
6297
|
Example: create access key on IBM Cloud (Softlayer):
|
6295
6298
|
|
6296
|
-
```
|
6299
|
+
```shell
|
6297
6300
|
ascli ats access_key create --cloud=softlayer --region=ams --params=@json:'{"storage":{"type":"softlayer_swift","container":"_container_name_","credentials":{"api_key":"my_secret_here","username":"_name_:_usr_name_"},"path":"/"},"id":"_optional_id_","name":"_optional_name_"}'
|
6298
6301
|
```
|
6299
6302
|
|
6300
6303
|
Example: create access key on AWS:
|
6301
6304
|
|
6302
|
-
```
|
6305
|
+
```shell
|
6303
6306
|
ascli ats access_key create --cloud=aws --region=eu-west-1 --params=@json:'{"id":"myaccesskey","name":"laurent key AWS","storage":{"type":"aws_s3","bucket":"my-bucket","credentials":{"access_key_id":"_access_key_id_here_","secret_access_key":"my_secret_here"},"path":"/laurent"}}'
|
6304
6307
|
```
|
6305
6308
|
|
6306
6309
|
Example: create access key on Azure SAS:
|
6307
6310
|
|
6308
|
-
```
|
6311
|
+
```shell
|
6309
6312
|
ascli ats access_key create --cloud=azure --region=eastus --params=@json:'{"id":"myaccesskey","name":"laurent key azure","storage":{"type":"azure_sas","credentials":{"shared_access_signature":"https://containername.blob.core.windows.net/blobname?sr=c&..."},"path":"/"}}'
|
6310
6313
|
```
|
6311
6314
|
|
@@ -6314,13 +6317,13 @@ ascli ats access_key create --cloud=azure --region=eastus --params=@json:'{"id":
|
|
6314
6317
|
|
6315
6318
|
Example: create access key on Azure:
|
6316
6319
|
|
6317
|
-
```
|
6320
|
+
```shell
|
6318
6321
|
ascli ats access_key create --cloud=azure --region=eastus --params=@json:'{"id":"myaccesskey","name":"laurent key azure","storage":{"type":"azure","credentials":{"account":"myaccount","key":"myaccesskey","storage_endpoint":"myblob"},"path":"/"}}'
|
6319
6322
|
```
|
6320
6323
|
|
6321
6324
|
delete all my access keys:
|
6322
6325
|
|
6323
|
-
```
|
6326
|
+
```shell
|
6324
6327
|
ascli ats access_key list --field=id --format=csv | ascli ats access_key delete @lines:@stdin: --bulk=yes
|
6325
6328
|
```
|
6326
6329
|
|
@@ -6361,11 +6364,11 @@ The URL to be provided with option `url` shall be like `ssh://_server_address_:3
|
|
6361
6364
|
|
6362
6365
|
Typically:
|
6363
6366
|
|
6364
|
-
```
|
6367
|
+
```shell
|
6365
6368
|
ascli server --url=ssh://hsts.example.com:33001 --username=john --password=_something_here_ ...
|
6366
6369
|
```
|
6367
6370
|
|
6368
|
-
```
|
6371
|
+
```shell
|
6369
6372
|
ascli server --url=ssh://hsts.example.com:33001 --username=john --ssh-keys=~/.ssh/id_rsa ...
|
6370
6373
|
```
|
6371
6374
|
|
@@ -6419,19 +6422,20 @@ If neither SSH password nor key is provided and a transfer token is provided in
|
|
6419
6422
|
|
6420
6423
|
Example:
|
6421
6424
|
|
6422
|
-
```
|
6425
|
+
```shell
|
6423
6426
|
ascli server --url=ssh://_server_address_:33001 ... --ts=@json:'{"token":"Basic _token_here_"}'
|
6424
6427
|
```
|
6425
6428
|
|
6426
6429
|
> [!NOTE]
|
6427
|
-
> If you need to use the Aspera public keys, then specify an empty token:
|
6430
|
+
> If you need to use the Aspera public keys, then specify an empty token:
|
6431
|
+
> `--ts=@json:'{"token":""}'` : Aspera public SSH keys will be used, but the protocol will ignore the empty token.
|
6428
6432
|
|
6429
6433
|
The value of the `ssh_keys` option can be a single value or an `Array`.
|
6430
6434
|
Each value is a **path** to a private key and is expanded (`~` is replaced with the user's home folder).
|
6431
6435
|
|
6432
6436
|
Examples:
|
6433
6437
|
|
6434
|
-
```
|
6438
|
+
```shell
|
6435
6439
|
ascli server --ssh-keys=~/.ssh/id_rsa
|
6436
6440
|
ascli server --ssh-keys=@list:,~/.ssh/id_rsa
|
6437
6441
|
ascli server --ssh-keys=@json:'["~/.ssh/id_rsa"]'
|
@@ -6451,13 +6455,13 @@ By default, the SSH library will check if a local `ssh-agent` is running.
|
|
6451
6455
|
|
6452
6456
|
On Linux, if you get an error message such as:
|
6453
6457
|
|
6454
|
-
```
|
6458
|
+
```shell
|
6455
6459
|
ERROR -- net.ssh.authentication.agent: could not connect to ssh-agent: Agent not configured
|
6456
6460
|
```
|
6457
6461
|
|
6458
6462
|
or on Windows:
|
6459
6463
|
|
6460
|
-
```
|
6464
|
+
```shell
|
6461
6465
|
ERROR -- net.ssh.authentication.agent: could not connect to ssh-agent: pageant process not running
|
6462
6466
|
```
|
6463
6467
|
|
@@ -6469,11 +6473,11 @@ This means that your environment suggests using an agent, but you don't have suc
|
|
6469
6473
|
- [Check the Ruby SSH options in start method](https://github.com/net-ssh/net-ssh/blob/master/lib/net/ssh.rb)
|
6470
6474
|
- To disable the use of `ssh-agent`, use the option `ssh_options` like this:
|
6471
6475
|
|
6472
|
-
```
|
6476
|
+
```shell
|
6473
6477
|
ascli server --ssh-options=@json:'{"use_agent": false}' ...
|
6474
6478
|
```
|
6475
6479
|
|
6476
|
-
> [!
|
6480
|
+
> [!TIP]
|
6477
6481
|
> This can also be set using a preset.
|
6478
6482
|
|
6479
6483
|
If one of the SSH private keys is passphrase-protected, then option `passphrase` can be used.
|
@@ -6495,7 +6499,7 @@ As, most of the time, SSH is used, if a `http` scheme is provided without token,
|
|
6495
6499
|
|
6496
6500
|
One can test the `server` application using the well known demo server:
|
6497
6501
|
|
6498
|
-
```
|
6502
|
+
```shell
|
6499
6503
|
ascli config initdemo
|
6500
6504
|
ascli server browse /aspera-test-dir-large
|
6501
6505
|
ascli server download /aspera-test-dir-large/200MB
|
@@ -6505,7 +6509,7 @@ ascli server download /aspera-test-dir-large/200MB
|
|
6505
6509
|
|
6506
6510
|
If an SSH private key is used for authentication with a passphrase, the passphrase needs to be provided to both options: `ssh_options` (for browsing) and `ts` (for transfers):
|
6507
6511
|
|
6508
|
-
```
|
6512
|
+
```shell
|
6509
6513
|
ascli server --url=ssh://_server_address_here_:33001 --username=_user_here_ --ssh_keys=_private_key_path_here_ --passphrase=_passphrase_here_
|
6510
6514
|
```
|
6511
6515
|
|
@@ -6571,23 +6575,23 @@ Examples of expressions:
|
|
6571
6575
|
|
6572
6576
|
- Find all files and folders under `/`
|
6573
6577
|
|
6574
|
-
```
|
6578
|
+
```shell
|
6575
6579
|
ascli node access_keys do self find
|
6576
6580
|
```
|
6577
6581
|
|
6578
6582
|
- Find all text files `/Documents`
|
6579
6583
|
|
6580
|
-
```
|
6584
|
+
```shell
|
6581
6585
|
ascli node access_keys do self find /Documents '*.txt'
|
6582
6586
|
```
|
6583
6587
|
|
6584
6588
|
The following are examples of Ruby lambda code to be provided in the following template command:
|
6585
6589
|
|
6586
|
-
```
|
6590
|
+
```shell
|
6587
6591
|
ascli node access_keys do self find / @ruby:'->(f){[code here]}'
|
6588
6592
|
```
|
6589
6593
|
|
6590
|
-
> [!
|
6594
|
+
> [!TIP]
|
6591
6595
|
> Single quotes are used here above to protect the whole **Ruby** expression from the shell.
|
6592
6596
|
> Then double quotes are used for strings in the **Ruby** expression to not mix with the shell.
|
6593
6597
|
|
@@ -6623,12 +6627,12 @@ The following are examples of Ruby lambda code to be provided in the following t
|
|
6623
6627
|
|
6624
6628
|
`ascli` commands can be piped in order to combine operations, such as **find and delete**:
|
6625
6629
|
|
6626
|
-
```
|
6630
|
+
```shell
|
6627
6631
|
ascli node access_keys do self find / @ruby:'->(f){f["type"].eql?("file") and (DateTime.now-DateTime.parse(f["modified_time"]))>365}' --fields=path --format=csv | ascli node --bulk=yes delete @lines:@stdin:
|
6628
6632
|
```
|
6629
6633
|
|
6630
6634
|
> [!NOTE]
|
6631
|
-
> The pipe `|` character on the last line.
|
6635
|
+
> The pipe `|` character on the last line is used to chain commands.
|
6632
6636
|
|
6633
6637
|
### Listing transfer events
|
6634
6638
|
|
@@ -6639,7 +6643,7 @@ If the number of transfers is too large, then the list will be retrieved using s
|
|
6639
6643
|
|
6640
6644
|
In addition, it is possible to list "only new information" using option `once_only`.
|
6641
6645
|
|
6642
|
-
```
|
6646
|
+
```shell
|
6643
6647
|
ascli node transfer list --once-only=yes
|
6644
6648
|
```
|
6645
6649
|
|
@@ -6655,7 +6659,7 @@ It allows listing transfer sessions and transferred files.
|
|
6655
6659
|
|
6656
6660
|
Filtering can be applied:
|
6657
6661
|
|
6658
|
-
```
|
6662
|
+
```shell
|
6659
6663
|
ascli node central file list
|
6660
6664
|
```
|
6661
6665
|
|
@@ -6668,12 +6672,16 @@ By providing the `validator` option, offline transfer validation can be done.
|
|
6668
6672
|
|
6669
6673
|
There are three commands related to file synchronisation:
|
6670
6674
|
|
6671
|
-
|
6672
|
-
|
6673
|
-
|
6675
|
+
| Command | `node` | `shares` | `aoc` | `server` | Description |
|
6676
|
+
|---------|--------|----------|-------|----------|-------------|
|
6677
|
+
| `sync` | Yes | Yes | Yes | Yes | Perform a local sync, by executing `async` locally. |
|
6678
|
+
| `async` | Yes | | | | Uses API `/async`.<br/>Get status on sync operation on server side, like Aspera Console. |
|
6679
|
+
| `ssync` | Yes | | | | Uses API `/asyncs`.<br/>It can start a sync operation on the server side, and monitor only those. |
|
6674
6680
|
|
6675
6681
|
For details on the `sync` action, refer to [IBM Aspera Sync](#ibm-aspera-sync).
|
6676
6682
|
|
6683
|
+
`async` subcommands: `show` and `delete` accept special identifier `ALL`.
|
6684
|
+
|
6677
6685
|
### FASP Stream
|
6678
6686
|
|
6679
6687
|
It is possible to start a faspstream session using the Node API:
|
@@ -6694,7 +6702,7 @@ Operations are:
|
|
6694
6702
|
- Start `watchd` and `watchfolderd` services running as a system user having access to files
|
6695
6703
|
- Configure a **Watchfolder** to define automated transfers
|
6696
6704
|
|
6697
|
-
```
|
6705
|
+
```shell
|
6698
6706
|
ascli node service create @json:'{"id":"mywatchd","type":"WATCHD","run_as":{"user":"user1"}}'
|
6699
6707
|
ascli node service create @json:'{"id":"mywatchfolderd","type":"WATCHFOLDERD","run_as":{"user":"user1"}}'
|
6700
6708
|
ascli node watch_folder create @json:'{"id":"mywfolder","source_dir":"/watch1","target_dir":"/","transport":{"host":"10.25.0.4","user":"user1","pass":"mypassword"}}'
|
@@ -6706,7 +6714,7 @@ Follow the Aspera Transfer Server configuration to activate this feature.
|
|
6706
6714
|
|
6707
6715
|
The following command lists one file that requires validation, and assign it to the unique validator identifier provided:
|
6708
6716
|
|
6709
|
-
```
|
6717
|
+
```shell
|
6710
6718
|
ascli node central file list --validator=ascli @json:'{"file_transfer_filter":{"max_result":1}}'
|
6711
6719
|
```
|
6712
6720
|
|
@@ -6720,7 +6728,7 @@ ascli node central file list --validator=ascli @json:'{"file_transfer_filter":{"
|
|
6720
6728
|
|
6721
6729
|
To update the status of the file, use the following command:
|
6722
6730
|
|
6723
|
-
```
|
6731
|
+
```shell
|
6724
6732
|
ascli node central file update --validator=ascli @json:'{"files":[{"session_uuid": "1a74444c-...","file_id": "084fb181-...","status": "completed"}]}'
|
6725
6733
|
```
|
6726
6734
|
|
@@ -6737,7 +6745,7 @@ Then create a configuration for the **SHOD** instance in the configuration file:
|
|
6737
6745
|
Create another configuration for the Azure ATS instance: in section **node**, named `azure_ats`.
|
6738
6746
|
Then execute the following command:
|
6739
6747
|
|
6740
|
-
```
|
6748
|
+
```shell
|
6741
6749
|
ascli node download /share/sourcefile --to-folder=/destination_folder --preset=aws_shod --transfer=node --transfer-info=@preset:azure_ats
|
6742
6750
|
```
|
6743
6751
|
|
@@ -6750,38 +6758,39 @@ When Node API is used with an **Access key**, extra information can be retrieved
|
|
6750
6758
|
> [!NOTE]
|
6751
6759
|
> Display of preview on terminal requires installation of extra gem: `rmagick`
|
6752
6760
|
|
6753
|
-
```
|
6761
|
+
```shell
|
6754
6762
|
dnf install -y ImageMagick-devel
|
6755
6763
|
gem install rmagick rainbow
|
6756
6764
|
```
|
6757
6765
|
|
6758
6766
|
For example, it is possible to display the preview of a file, if it exists, using an access key on node:
|
6759
6767
|
|
6760
|
-
```
|
6768
|
+
```shell
|
6761
6769
|
ascli node access_key do self thumbnail /preview_samples/Aspera.mpg
|
6762
6770
|
```
|
6763
6771
|
|
6764
6772
|
Previews are mainly used in AoC, this also works with AoC:
|
6765
6773
|
|
6766
|
-
```
|
6774
|
+
```shell
|
6767
6775
|
ascli aoc files thumbnail /preview_samples/Aspera.mpg
|
6768
6776
|
```
|
6769
6777
|
|
6770
|
-
> [!
|
6778
|
+
> [!TIP]
|
6771
6779
|
> To specify the file by its file ID, use the selector syntax: `%id:_file_id_here_`
|
6772
6780
|
|
6773
6781
|
> [!NOTE]
|
6774
|
-
> To force textual display of the preview on **iTerm**, prefix command with: `env -u TERM_PROGRAM -u LC_TERMINAL`
|
6782
|
+
> To force textual display of the preview on **iTerm**, prefix command with: `env -u TERM_PROGRAM -u LC_TERMINAL`
|
6775
6783
|
|
6776
6784
|
### Create access key
|
6777
6785
|
|
6778
|
-
```
|
6786
|
+
```shell
|
6779
6787
|
ascli node access_key create @json:'{"id":"myaccesskey","secret":"my_secret_here","storage":{"type":"local","path":"/data/mydir"}}'
|
6780
6788
|
```
|
6781
6789
|
|
6782
|
-
> [!
|
6783
|
-
> The `id` and `secret` are optional.
|
6790
|
+
> [!TIP]
|
6791
|
+
> The `id` and `secret` fields are optional.
|
6784
6792
|
> If not provided, they will be generated and returned into the result.
|
6793
|
+
> In that case, provide option `--show-secrets=yes` to get the generated secret.
|
6785
6794
|
|
6786
6795
|
Access keys support extra overriding parameters using parameter: `configuration` and sub keys `transfer` and `server`.
|
6787
6796
|
For example, an access key can be modified or created with the following options:
|
@@ -6792,7 +6801,7 @@ For example, an access key can be modified or created with the following options
|
|
6792
6801
|
|
6793
6802
|
The list of supported options can be displayed using command:
|
6794
6803
|
|
6795
|
-
```
|
6804
|
+
```shell
|
6796
6805
|
ascli node info --field=@ruby:'/^access_key_configuration_capabilities.*/'
|
6797
6806
|
```
|
6798
6807
|
|
@@ -6856,18 +6865,19 @@ Using `ascli`, an access key can be created using the `access_key create` on the
|
|
6856
6865
|
|
6857
6866
|
Create a private key (organization key) that will be used to sign bearer tokens:
|
6858
6867
|
|
6859
|
-
```
|
6868
|
+
```shell
|
6860
6869
|
my_private_pem=./myorgkey.pem
|
6861
6870
|
ascli config genkey $my_private_pem
|
6862
6871
|
```
|
6863
6872
|
|
6864
6873
|
> [!NOTE]
|
6865
|
-
> This key is not used for authentication
|
6874
|
+
> This private key is not used for authentication.
|
6875
|
+
> It is used to sign bearer tokens.
|
6866
6876
|
> Refer to section [private key](#private-key) for more details on generation.
|
6867
6877
|
|
6868
6878
|
The corresponding public key shall be placed as an attribute of the **access key** (done with `PUT /access_keys/<id>`):
|
6869
6879
|
|
6870
|
-
```
|
6880
|
+
```shell
|
6871
6881
|
ascli node access_key set_bearer_key self @file:$my_private_pem
|
6872
6882
|
```
|
6873
6883
|
|
@@ -6878,7 +6888,7 @@ ascli node access_key set_bearer_key self @file:$my_private_pem
|
|
6878
6888
|
|
6879
6889
|
Alternatively, use the following equivalent command, as `ascli` kindly extracts the public key with extension `.pub`:
|
6880
6890
|
|
6881
|
-
```
|
6891
|
+
```shell
|
6882
6892
|
ascli node access_key modify %id:self @ruby:'{token_verification_key: File.read("'$my_private_pem'.pub")}'
|
6883
6893
|
```
|
6884
6894
|
|
@@ -6886,17 +6896,16 @@ ascli node access_key modify %id:self @ruby:'{token_verification_key: File.read(
|
|
6886
6896
|
|
6887
6897
|
- Select a folder for which we want to grant access to a user, and get its identifier:
|
6888
6898
|
|
6889
|
-
```
|
6899
|
+
```shell
|
6890
6900
|
my_folder_id=$(ascli node access_key do self show / --fields=id)
|
6891
6901
|
```
|
6892
6902
|
|
6893
6903
|
> [!NOTE]
|
6894
|
-
>
|
6895
6904
|
> Here we simply select `/`, but any folder can be selected in the access key storage.
|
6896
6905
|
|
6897
6906
|
- Let's designate a user by its ID:
|
6898
6907
|
|
6899
|
-
```
|
6908
|
+
```shell
|
6900
6909
|
my_user_id=777
|
6901
6910
|
```
|
6902
6911
|
|
@@ -6906,13 +6915,13 @@ ascli node access_key modify %id:self @ruby:'{token_verification_key: File.read(
|
|
6906
6915
|
|
6907
6916
|
- Grant this user access to the selected folder:
|
6908
6917
|
|
6909
|
-
```
|
6918
|
+
```shell
|
6910
6919
|
ascli node access_key do self permission %id:$my_folder_id create @json:'{"access_type":"user","access_id":"'$my_user_id'"}'
|
6911
6920
|
```
|
6912
6921
|
|
6913
6922
|
- Create a Bearer token for the user:
|
6914
6923
|
|
6915
|
-
```
|
6924
|
+
```shell
|
6916
6925
|
ascli node bearer_token @file:./myorgkey.pem @json:'{"user_id":"'$my_user_id'","_validity":3600}' --output=bearer.txt
|
6917
6926
|
```
|
6918
6927
|
|
@@ -6931,7 +6940,7 @@ Now, let's assume we are the user, the only information received are:
|
|
6931
6940
|
|
6932
6941
|
Let's use it:
|
6933
6942
|
|
6934
|
-
```
|
6943
|
+
```shell
|
6935
6944
|
ascli node -N --url=https://... --password="Bearer $(cat bearer.txt)" --root-id=$my_folder_id access_key do self br /
|
6936
6945
|
```
|
6937
6946
|
|
@@ -6952,6 +6961,8 @@ access_key do my_ak_name find my_test_folder
|
|
6952
6961
|
access_key do my_ak_name find my_test_folder @re:'\.jpg$'
|
6953
6962
|
access_key do my_ak_name find my_test_folder @ruby:'->(f){f["name"].end_with?(".jpg")}'
|
6954
6963
|
access_key do my_ak_name mkdir /tst_nd_ak
|
6964
|
+
access_key do my_ak_name mkfile /mkfile.txt "hello world"
|
6965
|
+
access_key do my_ak_name mklink /mklink.txt --query=@json:'{"target":"/mkfile.txt","target_node_id":"123"}'
|
6955
6966
|
access_key do my_ak_name node_info /
|
6956
6967
|
access_key do my_ak_name rename /tst_nd_ak test_nd_ak2
|
6957
6968
|
access_key do my_ak_name show %id:1
|
@@ -6965,16 +6976,18 @@ access_key set_bearer_key self @file:my_private_key
|
|
6965
6976
|
access_key show %id:self
|
6966
6977
|
api_details
|
6967
6978
|
asperabrowser
|
6968
|
-
async bandwidth %name:
|
6969
|
-
async counters %name:
|
6970
|
-
async
|
6979
|
+
async bandwidth %name:SYNC_NAME
|
6980
|
+
async counters %name:SYNC_NAME
|
6981
|
+
async delete ALL
|
6982
|
+
async files %name:SYNC_NAME
|
6983
|
+
async files %name:SYNC_NAME --once-only=yes
|
6971
6984
|
async list
|
6972
|
-
async show %name:
|
6985
|
+
async show %name:SYNC_NAME
|
6973
6986
|
async show ALL
|
6974
6987
|
basic_token
|
6975
6988
|
bearer_token @file:my_private_key @json:'{"user_id":"666"}' --output=bearer_666
|
6976
6989
|
browse / --log-level=trace2
|
6977
|
-
cat my_upload_folder/test_file.bin
|
6990
|
+
cat my_upload_folder/test_file.bin
|
6978
6991
|
central file list
|
6979
6992
|
central file modify --validator=1 @json:'{"files":[]}'
|
6980
6993
|
central session list
|
@@ -7007,7 +7020,7 @@ ssync stop %name:my_node_sync
|
|
7007
7020
|
ssync summary %name:my_node_sync
|
7008
7021
|
stream list
|
7009
7022
|
sync admin status /data/local_sync
|
7010
|
-
sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"name":"
|
7023
|
+
sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"name":"SYNC_NAME","reset":true}'
|
7011
7024
|
sync pull /aspera-test-dir-tiny --to-folder=/data/local_sync @json:'{"reset":true}'
|
7012
7025
|
transfer list --once-only=yes
|
7013
7026
|
transfer list --query=@json:'{"active_only":true}'
|
@@ -7042,13 +7055,13 @@ Identify the region and the endpoint URL will be `https://otlp-[region]-saas.ins
|
|
7042
7055
|
|
7043
7056
|
For convenience, those parameters can be provided in a preset, e.g. named `otel_default`.
|
7044
7057
|
|
7045
|
-
```
|
7058
|
+
```shell
|
7046
7059
|
ascli config preset init otel_default @json:'{"url":"https://otlp-orange-saas.instana.io:4318","key":"*********","interval":1.1}'
|
7047
7060
|
```
|
7048
7061
|
|
7049
7062
|
Then it is invoked like this (assuming a default node is configured):
|
7050
7063
|
|
7051
|
-
```
|
7064
|
+
```shell
|
7052
7065
|
ascli node telemetry @preset:otel_default
|
7053
7066
|
```
|
7054
7067
|
|
@@ -7071,12 +7084,12 @@ IBM Aspera's newer self-managed application.
|
|
7071
7084
|
| `public_link` | Public link authentication (set when option `url` is a public link) |
|
7072
7085
|
| `boot` | Use authentication token copied from browser (experimental) |
|
7073
7086
|
|
7074
|
-
> [!
|
7087
|
+
> [!TIP]
|
7075
7088
|
> If you have a Faspex 5 public link, provide it, unchanged, through the option `url`
|
7076
7089
|
|
7077
7090
|
For a quick start, one can use the wizard, which will help to create an [Option Preset](#option-preset):
|
7078
7091
|
|
7079
|
-
```
|
7092
|
+
```shell
|
7080
7093
|
ascli config wizard
|
7081
7094
|
```
|
7082
7095
|
|
@@ -7119,9 +7132,9 @@ Saving configuration file.
|
|
7119
7132
|
```
|
7120
7133
|
|
7121
7134
|
> [!NOTE]
|
7122
|
-
>
|
7135
|
+
> Paste the entire public key, including the BEGIN and END lines, into the user profile.
|
7123
7136
|
|
7124
|
-
For
|
7137
|
+
For more information on the JWT method, refer to the section below.
|
7125
7138
|
|
7126
7139
|
### Faspex 5 JWT authentication
|
7127
7140
|
|
@@ -7143,14 +7156,14 @@ Activation is in two steps:
|
|
7143
7156
|
|
7144
7157
|
- The user will authenticate with a private key and set the public key in his Faspex 5 profile.
|
7145
7158
|
|
7146
|
-
> [!
|
7147
|
-
> If you don
|
7159
|
+
> [!TIP]
|
7160
|
+
> If you don’t have a private key, see [Private Key](#private-key) to generate one.
|
7148
7161
|
|
7149
7162
|
This operation is done by each user using the CLI.
|
7150
7163
|
|
7151
|
-
- As user, click
|
7152
|
-
- Select `Account Settings
|
7153
|
-
-
|
7164
|
+
- As a user, click the user logo located to the left of the app switcher in the top-right corner.
|
7165
|
+
- Select `Account Settings`.
|
7166
|
+
- At the bottom, in the `Public key in PEM format` field, paste the **public key** that corresponds to the private key assigned to your account.
|
7154
7167
|
|
7155
7168
|
Then use these options:
|
7156
7169
|
|
@@ -7163,13 +7176,14 @@ Then use these options:
|
|
7163
7176
|
```
|
7164
7177
|
|
7165
7178
|
> [!NOTE]
|
7166
|
-
>
|
7179
|
+
> Use the `private_key` option to provide the PEM content (not the file path).
|
7180
|
+
> To load from a file, prefix the path with `@file:`, e.g. `@file:/path/to/key.pem`.
|
7167
7181
|
|
7168
|
-
|
7182
|
+
Typically, users create a preset so they don’t have to enter these options each time.
|
7169
7183
|
|
7170
7184
|
Example:
|
7171
7185
|
|
7172
|
-
```
|
7186
|
+
```shell
|
7173
7187
|
ascli config preset update myf5 --auth=jwt --client-id=_client_id_here_ --client-secret=my_secret_here --username=_username_here_ --private-key=@file:.../path/to/key.pem
|
7174
7188
|
|
7175
7189
|
ascli config preset set default faspx5 myf5
|
@@ -7179,7 +7193,7 @@ ascli faspex5 user profile show
|
|
7179
7193
|
|
7180
7194
|
### Faspex 5 web authentication
|
7181
7195
|
|
7182
|
-
|
7196
|
+
For web-based authentication, the administrator must create an **API client** in Faspex for an external web app support:
|
7183
7197
|
|
7184
7198
|
- As Admin, Navigate to the web UI: Admin → Configurations → API Clients → Create
|
7185
7199
|
- Do not Activate JWT
|
@@ -7207,7 +7221,7 @@ For `boot` method: (will be removed in future)
|
|
7207
7221
|
|
7208
7222
|
Use this token as password and use `--auth=boot`.
|
7209
7223
|
|
7210
|
-
```
|
7224
|
+
```shell
|
7211
7225
|
ascli config preset update f5boot --url=https://localhost/aspera/faspex --auth=boot --password=_token_here_
|
7212
7226
|
```
|
7213
7227
|
|
@@ -7291,16 +7305,16 @@ user profile show
|
|
7291
7305
|
version
|
7292
7306
|
```
|
7293
7307
|
|
7294
|
-
Most commands
|
7308
|
+
Most commands correspond directly to REST API calls.
|
7295
7309
|
Parameters to commands are carried through option `query`, as extended value, for `list`, or through **Command Parameter** for creation.
|
7296
7310
|
One can conveniently use the JSON format with prefix `@json:`.
|
7297
7311
|
|
7298
|
-
> [!
|
7312
|
+
> [!TIP]
|
7299
7313
|
> The API is listed in [Faspex 5 API Reference](https://developer.ibm.com/apis/catalog?search="faspex+5") under **IBM Aspera Faspex API**.
|
7300
7314
|
|
7301
7315
|
### Faspex 5: Inbox selection
|
7302
7316
|
|
7303
|
-
By default, package operations (send
|
7317
|
+
By default, package operations (`send`, `receive`, `list`) are performed on the user's inbox.
|
7304
7318
|
|
7305
7319
|
To select another inbox, use option `box` with one of the following values:
|
7306
7320
|
|
@@ -7316,16 +7330,16 @@ To select another inbox, use option `box` with one of the following values:
|
|
7316
7330
|
| `pending_history` | |
|
7317
7331
|
| `all` | |
|
7318
7332
|
| `ALL` | **admin only**, all inboxes of all users |
|
7319
|
-
|
|
7333
|
+
| Open value | Name of a shared inbox if `group_type` is `shared_inboxes` (default)<br/>or workgroup if `group_type` is `workgroups` |
|
7320
7334
|
|
7321
7335
|
> [!NOTE]
|
7322
|
-
> In case the name of the `box` is an open value, use option `group_type`
|
7336
|
+
> In case the name of the `box` is an open value, use option `group_type` set to either `shared_inboxes` or `workgroups`.
|
7323
7337
|
|
7324
7338
|
### Faspex 5: Send a package
|
7325
7339
|
|
7326
7340
|
A package can be sent with the command:
|
7327
7341
|
|
7328
|
-
```
|
7342
|
+
```shell
|
7329
7343
|
ascli faspex5 packages send [extended value: Hash with package info] [files...]
|
7330
7344
|
```
|
7331
7345
|
|
@@ -7335,8 +7349,8 @@ Required fields are `title` and `recipients`.
|
|
7335
7349
|
|
7336
7350
|
Example (assuming a default preset is created for the connection information):
|
7337
7351
|
|
7338
|
-
```
|
7339
|
-
ascli faspex5 packages send @json:'{"title":"some title","recipients":["user@example.com"]}'
|
7352
|
+
```shell
|
7353
|
+
ascli faspex5 packages send @json:'{"title":"some title","recipients":["user@example.com"]}' mybigfile1
|
7340
7354
|
```
|
7341
7355
|
|
7342
7356
|
Longer example for the payload of `@json:`:
|
@@ -7406,13 +7420,13 @@ Examples:
|
|
7406
7420
|
|
7407
7421
|
- List only available packages: (filtering is done in Faspex)
|
7408
7422
|
|
7409
|
-
```
|
7423
|
+
```shell
|
7410
7424
|
ascli faspex5 packages list --query=@json:'{"status":"completed"}'
|
7411
7425
|
```
|
7412
7426
|
|
7413
7427
|
- Similar, using filtering in `ascli`:
|
7414
7428
|
|
7415
|
-
```
|
7429
|
+
```shell
|
7416
7430
|
ascli faspex5 packages list @ruby:'->(p){p["state"].eql?("released")}'
|
7417
7431
|
```
|
7418
7432
|
|
@@ -7465,26 +7479,26 @@ To keep the content encrypted, use option: `--ts=@json:'{"content_protection":nu
|
|
7465
7479
|
|
7466
7480
|
If you are a regular user, to list work groups you belong to:
|
7467
7481
|
|
7468
|
-
```
|
7482
|
+
```shell
|
7469
7483
|
ascli faspex5 admin workgroup list
|
7470
7484
|
```
|
7471
7485
|
|
7472
7486
|
If you are admin or manager, add option: `--query=@json:'{"all":true}'`, this will list items you manage, even if you do not belong to them.
|
7473
7487
|
Example:
|
7474
7488
|
|
7475
|
-
```
|
7489
|
+
```shell
|
7476
7490
|
ascli faspex5 admin shared list --query=@json:'{"all":true}' --fields=id,name
|
7477
7491
|
```
|
7478
7492
|
|
7479
7493
|
Shared inbox members can also be listed, added, removed, and external users can be invited to a shared inbox.
|
7480
7494
|
|
7481
|
-
```
|
7495
|
+
```shell
|
7482
7496
|
ascli faspex5 admin shared_inboxes invite '%name:the shared inbox' john@example.com
|
7483
7497
|
```
|
7484
7498
|
|
7485
7499
|
It is equivalent to:
|
7486
7500
|
|
7487
|
-
```
|
7501
|
+
```shell
|
7488
7502
|
ascli faspex5 admin shared_inboxes invite '%name:the shared inbox' @json:'{"email_address":"john@example.com"}'
|
7489
7503
|
```
|
7490
7504
|
|
@@ -7496,52 +7510,52 @@ Other payload parameters are possible for `invite` in this last `Hash` **Command
|
|
7496
7510
|
|
7497
7511
|
### Faspex 5: Create Metadata profile
|
7498
7512
|
|
7499
|
-
```
|
7513
|
+
```shell
|
7500
7514
|
ascli faspex5 admin metadata_profiles create @json:'{"name":"the profile","default":false,"title":{"max_length":200,"illegal_chars":[]},"note":{"max_length":400,"illegal_chars":[],"enabled":false},"fields":[{"ordering":0,"name":"field1","type":"text_area","require":true,"illegal_chars":[],"max_length":100},{"ordering":1,"name":"fff2","type":"option_list","require":false,"choices":["opt1","opt2"]}]}'
|
7501
7515
|
```
|
7502
7516
|
|
7503
7517
|
### Faspex 5: Create a Shared inbox with specific metadata profile
|
7504
7518
|
|
7505
|
-
```
|
7519
|
+
```shell
|
7506
7520
|
ascli faspex5 admin shared create @json:'{"name":"the shared inbox","metadata_profile_id":1}'
|
7507
7521
|
```
|
7508
7522
|
|
7509
7523
|
### Faspex 5: List content in Shared folder and send package from remote source
|
7510
7524
|
|
7511
|
-
```
|
7525
|
+
```shell
|
7512
7526
|
ascli faspex5 shared_folders list --fields=id,name
|
7513
7527
|
```
|
7514
7528
|
|
7515
|
-
```
|
7516
|
-
|
7517
|
-
|
7518
|
-
|
7519
|
-
|
7520
|
-
|
7529
|
+
```text
|
7530
|
+
╭────┬──────────────╮
|
7531
|
+
│ id │ name │
|
7532
|
+
╞════╪══════════════╡
|
7533
|
+
│ 2 │ Server Files │
|
7534
|
+
╰────┴──────────────╯
|
7521
7535
|
```
|
7522
7536
|
|
7523
|
-
```
|
7524
|
-
ascli faspex5 shared_folders br %name:
|
7537
|
+
```shell
|
7538
|
+
ascli faspex5 shared_folders br %name:'Server Files' /folder
|
7525
7539
|
```
|
7526
7540
|
|
7527
|
-
```
|
7541
|
+
```shell
|
7528
7542
|
ascli faspex5 packages send @json:'{"title":"hello","recipients":[{"name":"_recipient_here_"}]}' --shared-folder=%name:partages /folder/file
|
7529
7543
|
```
|
7530
7544
|
|
7531
|
-
> [!
|
7545
|
+
> [!TIP]
|
7532
7546
|
> The shared folder can be identified by its numerical `id` or by name using percent selector: `%<field>:<value>`. e.g. `--shared-folder=3`
|
7533
7547
|
|
7534
7548
|
### Faspex 5: Receive all packages (cargo)
|
7535
7549
|
|
7536
7550
|
To receive all packages, only once, through persistency of already received packages:
|
7537
7551
|
|
7538
|
-
```
|
7552
|
+
```shell
|
7539
7553
|
ascli faspex5 packages receive ALL --once-only=yes --query=@json:'{"status":"completed"}'
|
7540
7554
|
```
|
7541
7555
|
|
7542
7556
|
To initialize, and skip all current package so that next time `ALL` is used, only newer packages are downloaded:
|
7543
7557
|
|
7544
|
-
```
|
7558
|
+
```shell
|
7545
7559
|
ascli faspex5 packages receive INIT --once-only=yes
|
7546
7560
|
```
|
7547
7561
|
|
@@ -7551,7 +7565,7 @@ There are two types of invitations of package submission: public or private.
|
|
7551
7565
|
|
7552
7566
|
Public invitations are for external users, provide just the email address.
|
7553
7567
|
|
7554
|
-
```
|
7568
|
+
```shell
|
7555
7569
|
ascli faspex5 invitations create @json:'{"email_address":"john@example.com"}' --fields=access_url
|
7556
7570
|
```
|
7557
7571
|
|
@@ -7559,24 +7573,24 @@ Private invitations are for internal users, provide the user or shared inbox ide
|
|
7559
7573
|
|
7560
7574
|
### Faspex 5: Cleanup packages
|
7561
7575
|
|
7562
|
-
> [!
|
7576
|
+
> [!WARNING]
|
7563
7577
|
> Operation requires admin level.
|
7564
7578
|
|
7565
7579
|
The default automated cleanup period can be displayed with:
|
7566
7580
|
|
7567
|
-
```
|
7581
|
+
```shell
|
7568
7582
|
ascli faspex5 admin configuration show --fields=days_before_deleting_package_records
|
7569
7583
|
```
|
7570
7584
|
|
7571
7585
|
This parameter can be modified with:
|
7572
7586
|
|
7573
|
-
```
|
7587
|
+
```shell
|
7574
7588
|
ascli faspex5 admin configuration modify @json:'{"days_before_deleting_package_records":30}'
|
7575
7589
|
```
|
7576
7590
|
|
7577
7591
|
To start package purge, i.e. permanently remove packages marked for deletion older than `days_before_deleting_package_records`, use command:
|
7578
7592
|
|
7579
|
-
```
|
7593
|
+
```shell
|
7580
7594
|
ascli faspex5 admin clean_deleted
|
7581
7595
|
```
|
7582
7596
|
|
@@ -7586,7 +7600,7 @@ ascli faspex5 admin clean_deleted
|
|
7586
7600
|
|
7587
7601
|
To delete all packages, one can use the following command:
|
7588
7602
|
|
7589
|
-
```
|
7603
|
+
```shell
|
7590
7604
|
ascli faspex5 packages list --box=ALL --format=yaml --fields=id | ascli faspex5 packages delete @yaml:@stdin:
|
7591
7605
|
```
|
7592
7606
|
|
@@ -7598,15 +7612,15 @@ ascli faspex5 packages list --box=ALL --format=yaml --fields=id | ascli faspex5
|
|
7598
7612
|
|
7599
7613
|
To unlock a user, you can deactivate and then re-activate the user:
|
7600
7614
|
|
7601
|
-
```
|
7615
|
+
```shell
|
7602
7616
|
ascli faspex5 admin accounts modify %name:some.user@example.com @json:'{"account_activated":false}'
|
7603
7617
|
```
|
7604
7618
|
|
7605
|
-
```
|
7619
|
+
```shell
|
7606
7620
|
ascli faspex5 admin accounts modify %name:some.user@example.com @json:'{"account_activated":true}'
|
7607
7621
|
```
|
7608
7622
|
|
7609
|
-
> [!
|
7623
|
+
> [!TIP]
|
7610
7624
|
> Here we use the convenient percent selector, but the numerical ID can be used as well.
|
7611
7625
|
|
7612
7626
|
To send a password reset link to a user, use command `reset_password` on the `account`.
|
@@ -7622,7 +7636,7 @@ Nevertheless, on long term, a native approach shall be considered, such as using
|
|
7622
7636
|
|
7623
7637
|
It is invoked like this:
|
7624
7638
|
|
7625
|
-
```
|
7639
|
+
```shell
|
7626
7640
|
ascli faspex5 postprocessing
|
7627
7641
|
```
|
7628
7642
|
|
@@ -7645,7 +7659,7 @@ When a request on `ascli` is received the following happens:
|
|
7645
7659
|
|
7646
7660
|
For example:
|
7647
7661
|
|
7648
|
-
```
|
7662
|
+
```shell
|
7649
7663
|
ascli faspex5 postprocessing @json:'{"url":"http://localhost:8080/processing","script_folder":"/opt/scripts"}'
|
7650
7664
|
```
|
7651
7665
|
|
@@ -7669,7 +7683,7 @@ For legacy Faspex client applications that use the `send` API (only) of Faspex v
|
|
7669
7683
|
|
7670
7684
|
It takes a single argument which is the URL at which the gateway will be located (locally):
|
7671
7685
|
|
7672
|
-
```
|
7686
|
+
```shell
|
7673
7687
|
ascli faspex5 gateway @json:'{"url":"https://localhost:12345/aspera/faspex"}'
|
7674
7688
|
```
|
7675
7689
|
|
@@ -7692,14 +7706,14 @@ For other parameters, see [Web service](#web-service).
|
|
7692
7706
|
|
7693
7707
|
If a command is missing, then it is still possible to execute command by calling directly the API on the command line using `curl`:
|
7694
7708
|
|
7695
|
-
```
|
7709
|
+
```shell
|
7696
7710
|
curl -H "Authorization: $(ascli ascli bearer)" https://faspex5.example.com/aspera/faspex/api/v5/api_endpoint_here
|
7697
7711
|
```
|
7698
7712
|
|
7699
7713
|
## Plugin: `faspex`: IBM Aspera Faspex v4
|
7700
7714
|
|
7701
|
-
> [!
|
7702
|
-
> Faspex v4 is end of support since
|
7715
|
+
> [!WARNING]
|
7716
|
+
> Faspex v4 is end of support since September 30th, 2024.
|
7703
7717
|
> So this plugin for Faspex v4 is deprecated.
|
7704
7718
|
> If you still need to use Faspex4, then use `ascli` version 4.19.0 or earlier.
|
7705
7719
|
|
@@ -7746,7 +7760,7 @@ By default, `count` is `0` (`10`), it can be increased to issue less HTTP calls.
|
|
7746
7760
|
|
7747
7761
|
#### Example: List packages in dropbox
|
7748
7762
|
|
7749
|
-
```
|
7763
|
+
```shell
|
7750
7764
|
ascli faspex package list --box=inbox --recipient='*my_dropbox' --query=@json:'{"max":20,"pmax":2,"count":20}'
|
7751
7765
|
```
|
7752
7766
|
|
@@ -7760,14 +7774,14 @@ The command is `package recv`, possible methods are:
|
|
7760
7774
|
- Provide a public link with option `link`
|
7761
7775
|
- Provide a `faspe:` URI with option `link`
|
7762
7776
|
|
7763
|
-
```
|
7777
|
+
```shell
|
7764
7778
|
ascli faspex package recv 12345
|
7765
7779
|
ascli faspex package recv --link=faspe://...
|
7766
7780
|
```
|
7767
7781
|
|
7768
7782
|
If the package is in a specific **dropbox**/**workgroup**, add option `recipient` for both the `list` and `recv` commands.
|
7769
7783
|
|
7770
|
-
```
|
7784
|
+
```shell
|
7771
7785
|
ascli faspex package list --recipient='*dropbox_name'
|
7772
7786
|
ascli faspex package recv 125 --recipient='*dropbox_name'
|
7773
7787
|
```
|
@@ -7782,7 +7796,7 @@ The content of `delivery_info` is directly the contents of the `send` v3 [API of
|
|
7782
7796
|
|
7783
7797
|
Example:
|
7784
7798
|
|
7785
|
-
```
|
7799
|
+
```shell
|
7786
7800
|
ascli faspex package send --delivery-info=@json:'{"title":"my title","recipients":["someuser@example.com"]}' /tmp/file1 /home/bar/file2
|
7787
7801
|
```
|
7788
7802
|
|
@@ -7810,7 +7824,7 @@ Like for any transfer, a notification can be sent by email using options: `notif
|
|
7810
7824
|
|
7811
7825
|
Example:
|
7812
7826
|
|
7813
|
-
```
|
7827
|
+
```shell
|
7814
7828
|
ascli faspex package send --delivery-info=@json:'{"title":"test pkg 1","recipients":["aspera.user1@gmail.com"]}' ~/Documents/Samples/200KB.1 --notify-to=aspera.user1@gmail.com --notify-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"]%>}'
|
7815
7829
|
```
|
7816
7830
|
|
@@ -7822,7 +7836,7 @@ The template can be placed in a file using modifier: `@file:`
|
|
7822
7836
|
|
7823
7837
|
Example:
|
7824
7838
|
|
7825
|
-
```
|
7839
|
+
```shell
|
7826
7840
|
ascli faspex v4 dropbox create @json:'{"dropbox":{"e_wg_name":"test1","e_wg_desc":"test1"}}'
|
7827
7841
|
ascli faspex v4 dropbox list
|
7828
7842
|
ascli faspex v4 dropbox delete 36
|
@@ -7862,7 +7876,7 @@ The node configuration name is `my_faspex_node` here.
|
|
7862
7876
|
It is possible to tell `ascli` to download newly received packages, much like the official cargo client, or drive.
|
7863
7877
|
Refer to the [same section](#receive-new-packages-only-cargo) in the Aspera on Cloud plugin:
|
7864
7878
|
|
7865
|
-
```
|
7879
|
+
```shell
|
7866
7880
|
ascli faspex packages recv ALL --once-only=yes --lock-port=12345
|
7867
7881
|
```
|
7868
7882
|
|
@@ -7931,7 +7945,7 @@ Example: Create a Node: Attributes are like API:
|
|
7931
7945
|
|
7932
7946
|
Example: Create a share and add a user to it.
|
7933
7947
|
|
7934
|
-
```
|
7948
|
+
```shell
|
7935
7949
|
ascli shares admin share create @json:'{"node_id":1,"name":"test1","directory":"test1","create_directory":true}'
|
7936
7950
|
|
7937
7951
|
share_id=$(ascli shares admin share list --select=@json:'{"name":"test1"}' --fields=id)
|
@@ -8046,7 +8060,7 @@ If you have those parameters already, then following options shall be provided:
|
|
8046
8060
|
|
8047
8061
|
For example, let us create a default configuration:
|
8048
8062
|
|
8049
|
-
```
|
8063
|
+
```shell
|
8050
8064
|
ascli config preset update mycos --bucket=mybucket --endpoint=https://s3.us-east.cloud-object-storage.appdomain.cloud --apikey=abcdefgh --crn=crn:v1:bluemix:public:iam-identity::a/xxxxxxx
|
8051
8065
|
ascli config preset set default cos mycos
|
8052
8066
|
```
|
@@ -8071,7 +8085,7 @@ Then save the copied value to a file, e.g. : `$HOME/cos_service_creds.json`
|
|
8071
8085
|
|
8072
8086
|
or using the IBM Cloud CLI:
|
8073
8087
|
|
8074
|
-
```
|
8088
|
+
```shell
|
8075
8089
|
ibmcloud resource service-keys
|
8076
8090
|
ibmcloud resource service-key _service_key_name_here_ --output JSON|jq '.[0].credentials'>$HOME/service_creds.json
|
8077
8091
|
```
|
@@ -8113,7 +8127,7 @@ The required options for this method are:
|
|
8113
8127
|
|
8114
8128
|
For example, let us create a default configuration:
|
8115
8129
|
|
8116
|
-
```
|
8130
|
+
```shell
|
8117
8131
|
ascli config preset update mycos --bucket=laurent --service-credentials=@val:@json:@file:~/service_creds.json --region=us-south
|
8118
8132
|
ascli config preset set default cos mycos
|
8119
8133
|
```
|
@@ -8124,7 +8138,7 @@ Let's assume you created a default configuration from one of the two previous st
|
|
8124
8138
|
|
8125
8139
|
A subset of `node` plugin operations are supported, basically Node API:
|
8126
8140
|
|
8127
|
-
```
|
8141
|
+
```shell
|
8128
8142
|
ascli cos node info
|
8129
8143
|
ascli cos node upload 'faux:///sample1G?1g'
|
8130
8144
|
```
|
@@ -8206,7 +8220,7 @@ Specify the preview's folder as shown in:
|
|
8206
8220
|
By default, the `preview` plugin expects previews to be generated in a folder named `previews` located in the storage root.
|
8207
8221
|
On the transfer server execute:
|
8208
8222
|
|
8209
|
-
```
|
8223
|
+
```shell
|
8210
8224
|
PATH=/opt/aspera/bin:$PATH
|
8211
8225
|
|
8212
8226
|
asconfigurator -x "server;preview_dir,previews"
|
@@ -8225,7 +8239,7 @@ This size is internally capped to `1<<24` Bytes (16777216), i.e. 16384 KB, i.e.
|
|
8225
8239
|
To change this parameter in `aspera.conf`, use `asconfigurator`.
|
8226
8240
|
To display the value, use `asuserdata`:
|
8227
8241
|
|
8228
|
-
```
|
8242
|
+
```shell
|
8229
8243
|
asuserdata -a | grep max_request_file_create_size_kb
|
8230
8244
|
```
|
8231
8245
|
|
@@ -8233,7 +8247,7 @@ asuserdata -a | grep max_request_file_create_size_kb
|
|
8233
8247
|
max_request_file_create_size_kb: "1024"
|
8234
8248
|
```
|
8235
8249
|
|
8236
|
-
```
|
8250
|
+
```shell
|
8237
8251
|
asconfigurator -x "server; max_request_file_create_size_kb,16384"
|
8238
8252
|
```
|
8239
8253
|
|
@@ -8257,13 +8271,13 @@ Other OSes should work as well, but are not tested.
|
|
8257
8271
|
|
8258
8272
|
To check if all tools are found properly, execute:
|
8259
8273
|
|
8260
|
-
```
|
8274
|
+
```shell
|
8261
8275
|
ascli preview check
|
8262
8276
|
```
|
8263
8277
|
|
8264
8278
|
#### Image: ImageMagick and `optipng`
|
8265
8279
|
|
8266
|
-
```
|
8280
|
+
```shell
|
8267
8281
|
dnf install -y ImageMagick optipng
|
8268
8282
|
```
|
8269
8283
|
|
@@ -8275,14 +8289,14 @@ More info on ImageMagick at <https://imagemagick.org/>
|
|
8275
8289
|
|
8276
8290
|
If your OS has only ImageMagick v6, then you can create a script called `magick` and add it to your `PATH`:
|
8277
8291
|
|
8278
|
-
```
|
8292
|
+
```shell
|
8279
8293
|
#!/bin/bash
|
8280
8294
|
exec "$@"
|
8281
8295
|
```
|
8282
8296
|
|
8283
8297
|
make it executable:
|
8284
8298
|
|
8285
|
-
```
|
8299
|
+
```shell
|
8286
8300
|
chmod a+x /usr/local/bin/magick
|
8287
8301
|
```
|
8288
8302
|
|
@@ -8290,7 +8304,7 @@ chmod a+x /usr/local/bin/magick
|
|
8290
8304
|
|
8291
8305
|
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/)
|
8292
8306
|
|
8293
|
-
```
|
8307
|
+
```shell
|
8294
8308
|
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)
|
8295
8309
|
```
|
8296
8310
|
|
@@ -8302,13 +8316,13 @@ The generation of preview in based on the use of LibreOffice's `unoconv`.
|
|
8302
8316
|
|
8303
8317
|
- RHEL 8/Rocky Linux 8+
|
8304
8318
|
|
8305
|
-
```
|
8319
|
+
```shell
|
8306
8320
|
dnf install unoconv
|
8307
8321
|
```
|
8308
8322
|
|
8309
8323
|
- Amazon Linux
|
8310
8324
|
|
8311
|
-
```
|
8325
|
+
```shell
|
8312
8326
|
amazon-linux-extras enable libreoffice
|
8313
8327
|
yum clean metadata
|
8314
8328
|
yum install libreoffice-core libreoffice-calc libreoffice-opensymbol-fonts libreoffice-ure libreoffice-writer libreoffice-pyuno libreoffice-impress
|
@@ -8329,7 +8343,7 @@ The configuration file must be created with the same user used to run so that it
|
|
8329
8343
|
The `xfer` user has a special protected shell: `aspshell`, so in order to update the configuration, and when changing identity, specify an alternate shell.
|
8330
8344
|
E.g.:
|
8331
8345
|
|
8332
|
-
```
|
8346
|
+
```shell
|
8333
8347
|
su -s /bin/bash - xfer
|
8334
8348
|
|
8335
8349
|
ascli config preset update mypreviewconf --url=https://localhost:9092 --username=my_access_key --password=my_secret --skip-types=office --lock-port=12346
|
@@ -8342,7 +8356,7 @@ Here we assume that Office file generation is disabled, else remove this option.
|
|
8342
8356
|
|
8343
8357
|
One can check if the access key is well configured using:
|
8344
8358
|
|
8345
|
-
```
|
8359
|
+
```shell
|
8346
8360
|
ascli -Ppreviewconf node browse /
|
8347
8361
|
```
|
8348
8362
|
|
@@ -8365,19 +8379,19 @@ So, in order to be consistent, and generate the appropriate access rights, the g
|
|
8365
8379
|
|
8366
8380
|
Let's do a one shot test, using the configuration previously created:
|
8367
8381
|
|
8368
|
-
```
|
8382
|
+
```shell
|
8369
8383
|
su -s /bin/bash - xfer
|
8370
8384
|
```
|
8371
8385
|
|
8372
8386
|
or
|
8373
8387
|
|
8374
|
-
```
|
8388
|
+
```shell
|
8375
8389
|
sudo -u xfer /bin/bash
|
8376
8390
|
```
|
8377
8391
|
|
8378
8392
|
and then:
|
8379
8393
|
|
8380
|
-
```
|
8394
|
+
```shell
|
8381
8395
|
ascli preview scan --overwrite=always
|
8382
8396
|
```
|
8383
8397
|
|
@@ -8393,7 +8407,7 @@ Shorter commands can be specified if a configuration preset was created as shown
|
|
8393
8407
|
|
8394
8408
|
For example the timeout value can be differentiated depending on the option: event versus scan:
|
8395
8409
|
|
8396
|
-
```
|
8410
|
+
```shell
|
8397
8411
|
case "$*" in *trev*) tmout=10m ;; *) tmout=30m ;; esac
|
8398
8412
|
```
|
8399
8413
|
|
@@ -8420,7 +8434,7 @@ Deletion of preview for deleted source files: not implemented yet (TODO).
|
|
8420
8434
|
If the `scan` or `events` detection method is used, then the option : `skip_folders` can be used to skip some folders.
|
8421
8435
|
It expects a list of path relative to the storage root (docroot) starting with slash, use the `@json:` notation, example:
|
8422
8436
|
|
8423
|
-
```
|
8437
|
+
```shell
|
8424
8438
|
ascli preview scan --skip-folders=@json:'["/not_here"]'
|
8425
8439
|
```
|
8426
8440
|
|
@@ -8482,7 +8496,7 @@ If the `mimemagic` gem complains about missing mime info file:
|
|
8482
8496
|
- Place this file in the root of Ruby (or elsewhere): `C:\RubyVV-x64\freedesktop.org.xml.in`
|
8483
8497
|
- Set a global variable using `SystemPropertiesAdvanced.exe` or using `cmd` (replace `VV` with version) to the exact path of this file:
|
8484
8498
|
|
8485
|
-
```
|
8499
|
+
```batchfile
|
8486
8500
|
SETX FREEDESKTOP_MIME_TYPES_PATH C:\RubyVV-x64\freedesktop.org.xml.in
|
8487
8501
|
```
|
8488
8502
|
|
@@ -8490,13 +8504,13 @@ If the `mimemagic` gem complains about missing mime info file:
|
|
8490
8504
|
|
8491
8505
|
- Linux RHEL 8+:
|
8492
8506
|
|
8493
|
-
```
|
8507
|
+
```shell
|
8494
8508
|
dnf install shared-mime-info
|
8495
8509
|
```
|
8496
8510
|
|
8497
8511
|
- **macOS**:
|
8498
8512
|
|
8499
|
-
```
|
8513
|
+
```shell
|
8500
8514
|
brew install shared-mime-info
|
8501
8515
|
```
|
8502
8516
|
|
@@ -8651,7 +8665,7 @@ Interesting `ascp` features are found in its arguments: (see `ascp` manual):
|
|
8651
8665
|
> [!NOTE]
|
8652
8666
|
> Usual native `ascp` arguments are available as standard [**transfer-spec**](#transfer-specification) parameters, but not special or advanced options.
|
8653
8667
|
|
8654
|
-
> [!
|
8668
|
+
> [!TIP]
|
8655
8669
|
> Only for the [`direct`](#agent-direct) transfer agent (not others, like connect or node), native `ascp` arguments can be provided with parameter `ascp_args` of option `transfer_info`.
|
8656
8670
|
|
8657
8671
|
#### Server side and configuration
|
@@ -8661,7 +8675,7 @@ Virtually any transfer on a **repository** on a regular basis might emulate a ho
|
|
8661
8675
|
> [!NOTE]
|
8662
8676
|
> File detection is not based on events (`inotify`, etc...), but on a simple folder scan on source side.
|
8663
8677
|
|
8664
|
-
> [!
|
8678
|
+
> [!TIP]
|
8665
8679
|
> Options may be saved in an [Option Preset](#option-preset) and used with `-P`.
|
8666
8680
|
|
8667
8681
|
#### Scheduling
|
@@ -8672,7 +8686,7 @@ Refer to section [Scheduler](#scheduler).
|
|
8672
8686
|
|
8673
8687
|
### Example: Upload hot folder
|
8674
8688
|
|
8675
|
-
```
|
8689
|
+
```shell
|
8676
8690
|
ascli server upload source_hot --to-folder=/Upload/target_hot --lock-port=12345 --ts=@json:'{"remove_after_transfer":true,"remove_empty_directories":true,"exclude_newer_than:-8,"src_base":"source_hot"}'
|
8677
8691
|
```
|
8678
8692
|
|
@@ -8683,7 +8697,7 @@ If a transfer takes more than the execution period, then the subsequent executio
|
|
8683
8697
|
|
8684
8698
|
### Example: Unidirectional synchronization (upload) to server
|
8685
8699
|
|
8686
|
-
```
|
8700
|
+
```shell
|
8687
8701
|
ascli server upload source_sync --to-folder=/Upload/target_sync --lock-port=12345 --ts=@json:'{"resume_policy":"sparse_csum","exclude_newer_than":-8,"src_base":"source_sync"}'
|
8688
8702
|
```
|
8689
8703
|
|
@@ -8691,7 +8705,7 @@ This can also be used with other folder-based applications: Aspera on Cloud, Sha
|
|
8691
8705
|
|
8692
8706
|
### Example: Unidirectional synchronization (download) from Aspera on Cloud Files
|
8693
8707
|
|
8694
|
-
```
|
8708
|
+
```shell
|
8695
8709
|
ascli aoc files download . --to-folder=. --lock-port=12345 --progress-bar=no --display=data --ts=@json:'{"resume_policy":"sparse_csum","target_rate_kbps":50000,"exclude_newer_than":-8,"delete_before_transfer":true}'
|
8696
8710
|
```
|
8697
8711
|
|
@@ -8706,7 +8720,7 @@ ascli aoc files download . --to-folder=. --lock-port=12345 --progress-bar=no --d
|
|
8706
8720
|
Most plugin provide a `health` command that will check the health status of the application.
|
8707
8721
|
Example:
|
8708
8722
|
|
8709
|
-
```
|
8723
|
+
```shell
|
8710
8724
|
ascli console health
|
8711
8725
|
```
|
8712
8726
|
|
@@ -8727,7 +8741,7 @@ Typically, the health check uses the REST API of the application with the follow
|
|
8727
8741
|
`ascli` can be called by Nagios to check the health status of an Aspera server.
|
8728
8742
|
The output can be made compatible to Nagios with option `--format=nagios` :
|
8729
8743
|
|
8730
|
-
```
|
8744
|
+
```shell
|
8731
8745
|
ascli server health transfer --to-folder=/Upload --format=nagios --progress-bar=no
|
8732
8746
|
```
|
8733
8747
|
|
@@ -8758,7 +8772,7 @@ The `smtp` option is a `Hash` (extended value) with the following fields:
|
|
8758
8772
|
|
8759
8773
|
### Example of configuration
|
8760
8774
|
|
8761
|
-
```
|
8775
|
+
```shell
|
8762
8776
|
ascli config preset set smtp_google server smtp.google.com
|
8763
8777
|
ascli config preset set smtp_google username john@gmail.com
|
8764
8778
|
ascli config preset set smtp_google password my_password_here
|
@@ -8766,19 +8780,19 @@ ascli config preset set smtp_google password my_password_here
|
|
8766
8780
|
|
8767
8781
|
or
|
8768
8782
|
|
8769
|
-
```
|
8783
|
+
```shell
|
8770
8784
|
ascli config preset init smtp_google @json:'{"server":"smtp.google.com","username":"john@gmail.com","password":"my_password_here"}'
|
8771
8785
|
```
|
8772
8786
|
|
8773
8787
|
or
|
8774
8788
|
|
8775
|
-
```
|
8789
|
+
```shell
|
8776
8790
|
ascli config preset update smtp_google --server=smtp.google.com --username=john@gmail.com --password=my_password_here
|
8777
8791
|
```
|
8778
8792
|
|
8779
8793
|
Set this configuration as global default, for instance:
|
8780
8794
|
|
8781
|
-
```
|
8795
|
+
```shell
|
8782
8796
|
ascli config preset set cli_default smtp @val:@preset:smtp_google
|
8783
8797
|
ascli config preset set default config cli_default
|
8784
8798
|
```
|
@@ -8802,7 +8816,7 @@ Other variables are defined depending on context.
|
|
8802
8816
|
Check settings with `smtp_settings` command.
|
8803
8817
|
Send test email with `email_test`.
|
8804
8818
|
|
8805
|
-
```
|
8819
|
+
```shell
|
8806
8820
|
ascli config --smtp=@preset:smtp_google smtp
|
8807
8821
|
ascli config --smtp=@preset:smtp_google email --notify-to=sample.dest@example.com
|
8808
8822
|
```
|
@@ -8882,11 +8896,11 @@ Create a file `session.json` with:
|
|
8882
8896
|
|
8883
8897
|
```json
|
8884
8898
|
{"remote_host":"demo.asperasoft.com","remote_user":"asperaweb","ssh_port":33001,"remote_password":"my_password_here","direction":"receive","destination_root":"./test.dir","paths":[{"source":"/aspera-test-dir-tiny/200KB.1"}],"resume_level":"none"}
|
8885
|
-
|
8899
|
+
```
|
8886
8900
|
|
8887
8901
|
Then start the session:
|
8888
8902
|
|
8889
|
-
```
|
8903
|
+
```shell
|
8890
8904
|
asession < session.json
|
8891
8905
|
```
|
8892
8906
|
|
@@ -8913,7 +8927,7 @@ NodeJS: [https://www.npmjs.com/package/aspera](https://www.npmjs.com/package/asp
|
|
8913
8927
|
|
8914
8928
|
### Help
|
8915
8929
|
|
8916
|
-
```
|
8930
|
+
```shell
|
8917
8931
|
asession -h
|
8918
8932
|
USAGE
|
8919
8933
|
asession
|
@@ -8977,7 +8991,7 @@ It had the advantage of being relatively easy to installed, as a single executab
|
|
8977
8991
|
|
8978
8992
|
Enjoy a coffee on me:
|
8979
8993
|
|
8980
|
-
```
|
8994
|
+
```shell
|
8981
8995
|
ascli config coffee --ui=text
|
8982
8996
|
ascli config coffee --ui=text --image=@json:'{"text":true}'
|
8983
8997
|
ascli config coffee
|
@@ -8995,7 +9009,7 @@ Cause: `ascp` >= 4.x checks fingerprint of the highest server host key, includin
|
|
8995
9009
|
|
8996
9010
|
Workaround on client side: To ignore the certificate (SSH fingerprint) add option on client side (this option can also be added permanently to the configuration file):
|
8997
9011
|
|
8998
|
-
```
|
9012
|
+
```shell
|
8999
9013
|
--ts=@json:'{"sshfp":null}'
|
9000
9014
|
```
|
9001
9015
|
|
@@ -9041,7 +9055,7 @@ Add the following to option `ssh_options`:
|
|
9041
9055
|
|
9042
9056
|
e.g.
|
9043
9057
|
|
9044
|
-
```
|
9058
|
+
```shell
|
9045
9059
|
--ssh-options=@json:'{"host_key":["rsa-sha2-512","rsa-sha2-256"],"kex":["curve25519-sha256","diffie-hellman-group14-sha256"],"encryption": ["aes256-ctr", "aes192-ctr", "aes128-ctr"]}'
|
9046
9060
|
```
|
9047
9061
|
|
@@ -9050,7 +9064,7 @@ e.g.
|
|
9050
9064
|
Newer OpenSSL library expects a clean SSL close.
|
9051
9065
|
To deactivate this error, enable option `IGNORE_UNEXPECTED_EOF` for `ssl_options` in option `http_options`.
|
9052
9066
|
|
9053
|
-
```
|
9067
|
+
```shell
|
9054
9068
|
--http-options=@json:'{"ssl_options":["IGNORE_UNEXPECTED_EOF"]}'
|
9055
9069
|
```
|
9056
9070
|
|
@@ -9060,7 +9074,7 @@ This happens on Linux x86 if you try to install `transferd` on a Linux version t
|
|
9060
9074
|
|
9061
9075
|
Workaround: Install an older version:
|
9062
9076
|
|
9063
|
-
```
|
9077
|
+
```shell
|
9064
9078
|
ascli config transferd install 1.1.2
|
9065
9079
|
```
|
9066
9080
|
|