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.
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.0"
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
  [![Gem Version](https://badge.fury.io/rb/aspera-cli.svg)](https://badge.fury.io/rb/aspera-cli)
12
14
  [![unit tests](https://github.com/IBM/aspera-cli/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/IBM/aspera-cli/actions)
13
15
  [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5861/badge)](https://bestpractices.coreinfrastructure.org/projects/5861)
14
16
 
15
17
  ## Introduction
16
18
 
17
- ![Hootput the Owl](../docs/ascli-impersonation-small.png)
19
+ ![Hootput the Owl](docs/ascli-impersonation-small.png)
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.0
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
- ```bash
131
+ ```shell
130
132
  ascli --version
131
133
  ```
132
134
 
133
135
  ```text
134
- 4.24.0
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
- ```bash
150
+ ```shell
149
151
  ascli config initdemo
150
152
  ```
151
153
 
152
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bat
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
397
+ ```shell
396
398
  apt-get install -y ruby-full
397
399
  ```
398
400
 
399
401
  **Other examples:**
400
402
 
401
- ```bash
403
+ ```shell
402
404
  yum install -y ruby ruby-devel rubygems ruby-json
403
405
  ```
404
406
 
405
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
439
+ ```shell
438
440
  rvm list --remote
439
441
  ```
440
442
 
441
443
  Install the chosen pre-compiled Ruby version:
442
444
 
443
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
468
+ ```shell
467
469
  source /etc/profile.d/rvm.sh.ok
468
470
  ```
469
471
 
470
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
492
+ ```shell
491
493
  source ~/.bashrc
492
494
  ```
493
495
 
494
496
  Then install Ruby:
495
497
 
496
- ```bash
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
- ```bash
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
- ```bash
553
+ ```shell
552
554
  export JRUBY_OPTS=--dev
553
555
  ascli -v
554
556
  ```
555
557
 
556
558
  or
557
559
 
558
- ```bash
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
- ```bash
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
- ```bash
599
+ ```shell
598
600
  gem install aspera-cli
599
601
  ```
600
602
 
601
603
  To upgrade to the latest version:
602
604
 
603
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
652
+ ```shell
651
653
  ascli config transferd install
652
654
  ```
653
655
 
654
656
  or
655
657
 
656
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bat
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
- ```bat
812
+ ```batchfile
811
813
  gem install --force --local *.gem
812
814
  ```
813
815
 
814
816
  - Install the Aspera Transfer Daemon SDK
815
817
 
816
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
883
+ ```shell
882
884
  ascli -v
883
885
  ```
884
886
 
885
887
  ```text
886
- 4.24.0
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
1019
+ ```shell
1018
1020
  dnf install singularity-ce
1019
1021
  ```
1020
1022
 
1021
1023
  Build an image like this:
1022
1024
 
1023
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bat
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
- ```cmd
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
- ```cmd
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
- ```cmd
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
1647
+ ```shell
1646
1648
  ascli config echo -- --sample
1647
1649
  ```
1648
1650
 
1649
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
2098
+ ```shell
2097
2099
  cat test.csv
2098
2100
  ```
2099
2101
 
2100
- ```bash
2102
+ ```shell
2101
2103
  name,email
2102
2104
  lolo,laurent@example.com
2103
2105
  toto,titi@tutu.tata
2104
2106
  ```
2105
2107
 
2106
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
2166
+ ```shell
2165
2167
  ascli config folder
2166
2168
  ```
2167
2169
 
2168
- ```bash
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
- ```bat
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
2316
+ ```shell
2315
2317
  ascli config preset set default _plugin_name_ _default_preset_for_plugin_
2316
2318
  ```
2317
2319
 
2318
- ```bash
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
- > [!NOTE]
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
- ```bash
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
- ```bash
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
- ```bash
2366
+ ```shell
2365
2367
  ascli config preset set GLOBAL version_check_days 0
2366
2368
  ```
2367
2369
 
2368
- ```bash
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
- ```bash
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
- ```bash
2556
+ ```shell
2555
2557
  ascli config preset set cli_default interactive no
2556
2558
  ```
2557
2559
 
2558
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
2787
+ ```shell
2786
2788
  ascli config preset update myconf --url=... --username=... --password=@val:@vault:myconf.password
2787
2789
  ```
2788
2790
 
2789
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
2923
+ ```shell
2922
2924
  ascli config image https://eudemo.asperademo.com/wallpaper.jpg --ui=text --image=@json:'{"text":true}'
2923
2925
  ```
2924
2926
 
2925
- ```bash
2927
+ ```shell
2926
2928
  curl -so - https://eudemo.asperademo.com/wallpaper.jpg | ascli config image @stdbin:
2927
2929
  ```
2928
2930
 
2929
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
3140
+ ```shell
3139
3141
  ascli --proxy-credentials=@json:'["__username_here__","__password_here__"]' ...
3140
3142
  ```
3141
3143
 
3142
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
3395
+ ```shell
3394
3396
  ascli config ascp errors
3395
3397
  ```
3396
3398
 
3397
3399
  Examples:
3398
3400
 
3399
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- > [!NOTE]
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
- ```bash
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
- ```bash
3917
+ ```shell
3916
3918
  --sources=@json:'["file1","file2"]'
3917
3919
  ```
3918
3920
 
3919
3921
  - Using STDIN, one path per line
3920
3922
 
3921
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
4070
+ ```shell
4069
4071
  --ts=@json:'{"ssh_port":33002}'
4070
4072
  ```
4071
4073
 
4072
4074
  - Force HTTP fallback mode:
4073
4075
 
4074
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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.0)
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- > [!NOTE]
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
5037
+ ```shell
5036
5038
  ascli aoc files bearer_token_node /
5037
5039
  ```
5038
5040
 
5039
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- > [!NOTE]
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
5900
+ ```shell
5899
5901
  ascli aoc admin node do <node ID> permission --workspace=<workspace name> <path to folder>
5900
5902
  ```
5901
5903
 
5902
- > [!NOTE]
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
6252
+ ```shell
6250
6253
  ascli config preset update my_ibm_ats --ibm-api-key=my_secret_api_key_here
6251
6254
  ```
6252
6255
 
6253
- ```bash
6256
+ ```shell
6254
6257
  ascli config preset set default ats my_ibm_ats
6255
6258
  ```
6256
6259
 
6257
- ```bash
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
- ```bash
6272
+ ```shell
6270
6273
  ascli config preset update my_ibm_ats --instance=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
6271
6274
  ```
6272
6275
 
6273
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
6367
+ ```shell
6365
6368
  ascli server --url=ssh://hsts.example.com:33001 --username=john --password=_something_here_ ...
6366
6369
  ```
6367
6370
 
6368
- ```bash
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
- ```bash
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: `--ts=@json:'{"token":""}'` : Aspera public SSH keys will be used, but the protocol will ignore the 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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
6476
+ ```shell
6473
6477
  ascli server --ssh-options=@json:'{"use_agent": false}' ...
6474
6478
  ```
6475
6479
 
6476
- > [!NOTE]
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
6590
+ ```shell
6587
6591
  ascli node access_keys do self find / @ruby:'->(f){[code here]}'
6588
6592
  ```
6589
6593
 
6590
- > [!NOTE]
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
- ```bash
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
- ```bash
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
- ```bash
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
- - `sync`: Perform a local sync, by executing `async` locally.
6672
- - `ssync` : Calls the newer `async` API on node : `/asyncs` : it can start a sync operation on the server side, and monitor only those.
6673
- - `async`: Calls the legacy `async` API on node : `/async` : get status on sync operation on server side, like Aspera Console.
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
6774
+ ```shell
6767
6775
  ascli aoc files thumbnail /preview_samples/Aspera.mpg
6768
6776
  ```
6769
6777
 
6770
- > [!NOTE]
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` or use option: ``
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
- ```bash
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
- > [!NOTE]
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
- ```bash
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
- ```bash
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, it is used to sign bearer tokens.
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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:my_node_sync2
6969
- async counters %name:my_node_sync2
6970
- async files %name:my_node_sync2
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:my_node_sync2
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 --to-folder=.
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":"my_node_sync2","reset":true}'
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
- ```bash
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
- ```bash
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
- > [!NOTE]
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
- ```bash
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
- > Include the public key `BEGIN` and `END` lines when pasting in the user profile.
7135
+ > Paste the entire public key, including the BEGIN and END lines, into the user profile.
7123
7136
 
7124
- For details on the JWT method, see the following section.
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
- > [!NOTE]
7147
- > If you don't have a private key refer to section [Private Key](#private-key) to generate one.
7159
+ > [!TIP]
7160
+ > If you dont 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 on the user logo, left to the app switcher on top right.
7152
- - Select `Account Settings`
7153
- - on the bottom in the text field: `Public key in PEM format` paste the **public** key corresponding to the private key used by the user.
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
- > The `private_key` option must contain the PEM **value** (not file path) of the private key which can be read from a file using the modifier: `@file:`, e.g. `@file:/path/to/key.pem`.
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
- As usual, typically a user will create preset to avoid having to type these options each time.
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
- ```bash
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
- The administrator must create an **API client** in Faspex for an external web app support:
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 &rarr; Configurations &rarr; API Clients &rarr; 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
- ```bash
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 are directly REST API calls.
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
- > [!NOTE]
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, receive, list) are done on the user's inbox.
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
- | Any other value | Name of a shared inbox if `group_type` is `shared_inboxes` (default)<br/>or workgroup if `group_type` is `workgroups` |
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` with either `shared_inboxes` or `workgroups`.
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
- ```bash
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
- ```bash
7339
- ascli faspex5 packages send @json:'{"title":"some title","recipients":["user@example.com"]}' mybygfile1
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
7525
+ ```shell
7512
7526
  ascli faspex5 shared_folders list --fields=id,name
7513
7527
  ```
7514
7528
 
7515
- ```markdown
7516
- +----+----------+
7517
- | id | name |
7518
- +----+----------+
7519
- | 3 | partages |
7520
- +----+----------+
7529
+ ```text
7530
+ ╭────┬──────────────╮
7531
+ id name
7532
+ ╞════╪══════════════╡
7533
+ 2 Server Files │
7534
+ ╰────┴──────────────╯
7521
7535
  ```
7522
7536
 
7523
- ```bash
7524
- ascli faspex5 shared_folders br %name:partages /folder
7537
+ ```shell
7538
+ ascli faspex5 shared_folders br %name:'Server Files' /folder
7525
7539
  ```
7526
7540
 
7527
- ```bash
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
- > [!NOTE]
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
- ```bash
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
- ```bash
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
- ```bash
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
- > [!NOTE]
7576
+ > [!WARNING]
7563
7577
  > Operation requires admin level.
7564
7578
 
7565
7579
  The default automated cleanup period can be displayed with:
7566
7580
 
7567
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
7615
+ ```shell
7602
7616
  ascli faspex5 admin accounts modify %name:some.user@example.com @json:'{"account_activated":false}'
7603
7617
  ```
7604
7618
 
7605
- ```bash
7619
+ ```shell
7606
7620
  ascli faspex5 admin accounts modify %name:some.user@example.com @json:'{"account_activated":true}'
7607
7621
  ```
7608
7622
 
7609
- > [!NOTE]
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- > [!NOTE]
7702
- > Faspex v4 is end of support since Sept. 30th, 2024.
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
8274
+ ```shell
8261
8275
  ascli preview check
8262
8276
  ```
8263
8277
 
8264
8278
  #### Image: ImageMagick and `optipng`
8265
8279
 
8266
- ```bash
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
- ```bash
8292
+ ```shell
8279
8293
  #!/bin/bash
8280
8294
  exec "$@"
8281
8295
  ```
8282
8296
 
8283
8297
  make it executable:
8284
8298
 
8285
- ```bash
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
- ```bash
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
- ```bash
8319
+ ```shell
8306
8320
  dnf install unoconv
8307
8321
  ```
8308
8322
 
8309
8323
  - Amazon Linux
8310
8324
 
8311
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
8382
+ ```shell
8369
8383
  su -s /bin/bash - xfer
8370
8384
  ```
8371
8385
 
8372
8386
  or
8373
8387
 
8374
- ```bash
8388
+ ```shell
8375
8389
  sudo -u xfer /bin/bash
8376
8390
  ```
8377
8391
 
8378
8392
  and then:
8379
8393
 
8380
- ```bash
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
- ```bash
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
- ```bash
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
- ```cmd
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
- ```bash
8507
+ ```shell
8494
8508
  dnf install shared-mime-info
8495
8509
  ```
8496
8510
 
8497
8511
  - **macOS**:
8498
8512
 
8499
- ```bash
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
- > [!NOTE]
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
- > [!NOTE]
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
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
- ```bash
9077
+ ```shell
9064
9078
  ascli config transferd install 1.1.2
9065
9079
  ```
9066
9080