aspera-cli 4.23.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.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +37 -1
  4. data/CONTRIBUTING.md +86 -29
  5. data/README.md +2109 -1300
  6. data/bin/ascli +2 -1
  7. data/bin/asession +4 -4
  8. data/lib/aspera/agent/base.rb +4 -0
  9. data/lib/aspera/agent/connect.rb +20 -18
  10. data/lib/aspera/agent/desktop.rb +14 -11
  11. data/lib/aspera/agent/direct.rb +39 -31
  12. data/lib/aspera/agent/httpgw.rb +2 -2
  13. data/lib/aspera/agent/node.rb +9 -11
  14. data/lib/aspera/agent/transferd.rb +18 -11
  15. data/lib/aspera/api/aoc.rb +44 -31
  16. data/lib/aspera/api/cos_node.rb +7 -5
  17. data/lib/aspera/api/httpgw.rb +15 -18
  18. data/lib/aspera/api/node.rb +104 -22
  19. data/lib/aspera/ascmd.rb +22 -16
  20. data/lib/aspera/ascp/installation.rb +37 -40
  21. data/lib/aspera/ascp/management.rb +5 -4
  22. data/lib/aspera/assert.rb +54 -23
  23. data/lib/aspera/cli/basic_auth_plugin.rb +8 -7
  24. data/lib/aspera/cli/error.rb +1 -1
  25. data/lib/aspera/cli/extended_value.rb +28 -29
  26. data/lib/aspera/cli/formatter.rb +191 -168
  27. data/lib/aspera/cli/hints.rb +29 -3
  28. data/lib/aspera/cli/main.rb +138 -107
  29. data/lib/aspera/cli/manager.rb +50 -30
  30. data/lib/aspera/cli/plugin.rb +148 -77
  31. data/lib/aspera/cli/plugin_factory.rb +2 -2
  32. data/lib/aspera/cli/plugins/aoc.rb +189 -70
  33. data/lib/aspera/cli/plugins/ats.rb +15 -13
  34. data/lib/aspera/cli/plugins/config.rb +100 -214
  35. data/lib/aspera/cli/plugins/console.rb +49 -18
  36. data/lib/aspera/cli/plugins/cos.rb +4 -4
  37. data/lib/aspera/cli/plugins/faspex.rb +45 -51
  38. data/lib/aspera/cli/plugins/faspex5.rb +164 -165
  39. data/lib/aspera/cli/plugins/faspio.rb +6 -5
  40. data/lib/aspera/cli/plugins/httpgw.rb +2 -2
  41. data/lib/aspera/cli/plugins/node.rb +144 -162
  42. data/lib/aspera/cli/plugins/orchestrator.rb +10 -14
  43. data/lib/aspera/cli/plugins/preview.rb +26 -29
  44. data/lib/aspera/cli/plugins/server.rb +28 -28
  45. data/lib/aspera/cli/plugins/shares.rb +40 -28
  46. data/lib/aspera/cli/sync_actions.rb +101 -80
  47. data/lib/aspera/cli/transfer_agent.rb +51 -50
  48. data/lib/aspera/cli/transfer_progress.rb +29 -20
  49. data/lib/aspera/cli/version.rb +1 -1
  50. data/lib/aspera/cli/wizard.rb +157 -0
  51. data/lib/aspera/colors.rb +13 -8
  52. data/lib/aspera/command_line_builder.rb +28 -22
  53. data/lib/aspera/command_line_converter.rb +31 -0
  54. data/lib/aspera/environment.rb +145 -101
  55. data/lib/aspera/faspex_gw.rb +1 -1
  56. data/lib/aspera/faspex_postproc.rb +3 -2
  57. data/lib/aspera/hash_ext.rb +1 -1
  58. data/lib/aspera/id_generator.rb +10 -10
  59. data/lib/aspera/keychain/base.rb +18 -0
  60. data/lib/aspera/keychain/encrypted_hash.rb +6 -12
  61. data/lib/aspera/keychain/factory.rb +9 -3
  62. data/lib/aspera/keychain/hashicorp_vault.rb +9 -6
  63. data/lib/aspera/keychain/macos_security.rb +13 -13
  64. data/lib/aspera/log.rb +91 -19
  65. data/lib/aspera/nagios.rb +5 -6
  66. data/lib/aspera/node_simulator.rb +12 -7
  67. data/lib/aspera/oauth/base.rb +5 -3
  68. data/lib/aspera/oauth/factory.rb +24 -18
  69. data/lib/aspera/oauth/jwt.rb +13 -1
  70. data/lib/aspera/oauth/url_json.rb +3 -3
  71. data/lib/aspera/oauth/web.rb +5 -3
  72. data/lib/aspera/persistency_folder.rb +2 -2
  73. data/lib/aspera/preview/file_types.rb +4 -3
  74. data/lib/aspera/preview/generator.rb +25 -12
  75. data/lib/aspera/preview/terminal.rb +10 -7
  76. data/lib/aspera/preview/utils.rb +11 -9
  77. data/lib/aspera/products/connect.rb +1 -1
  78. data/lib/aspera/products/desktop.rb +1 -1
  79. data/lib/aspera/products/other.rb +2 -2
  80. data/lib/aspera/products/transferd.rb +8 -6
  81. data/lib/aspera/proxy_auto_config.rb +1 -1
  82. data/lib/aspera/rest.rb +29 -22
  83. data/lib/aspera/rest_call_error.rb +1 -1
  84. data/lib/aspera/resumer.rb +1 -1
  85. data/lib/aspera/secret_hider.rb +46 -40
  86. data/lib/aspera/ssh.rb +13 -3
  87. data/lib/aspera/sync/args.schema.yaml +102 -0
  88. data/lib/aspera/sync/conf.schema.yaml +701 -0
  89. data/lib/aspera/sync/database.rb +83 -0
  90. data/lib/aspera/sync/operations.rb +296 -0
  91. data/lib/aspera/temp_file_manager.rb +3 -2
  92. data/lib/aspera/transfer/error.rb +1 -1
  93. data/lib/aspera/transfer/error_info.rb +1 -2
  94. data/lib/aspera/transfer/faux_file.rb +11 -10
  95. data/lib/aspera/transfer/parameters.rb +6 -5
  96. data/lib/aspera/transfer/spec.rb +15 -1
  97. data/lib/aspera/transfer/spec.schema.yaml +316 -293
  98. data/lib/aspera/transfer/spec_doc.rb +34 -16
  99. data/lib/aspera/transfer/uri.rb +5 -5
  100. data/lib/aspera/uri_reader.rb +14 -10
  101. data/lib/aspera/web_auth.rb +2 -2
  102. data/lib/aspera/web_server_simple.rb +2 -2
  103. data.tar.gz.sig +0 -0
  104. metadata +15 -13
  105. metadata.gz.sig +0 -0
  106. data/lib/aspera/transfer/async_conf.schema.yaml +0 -716
  107. data/lib/aspera/transfer/convert.rb +0 -29
  108. data/lib/aspera/transfer/sync.rb +0 -232
  109. data/lib/aspera/transfer/sync_instance.schema.yaml +0 -20
  110. data/lib/aspera/transfer/sync_session.schema.yaml +0 -86
data/lib/aspera/ssh.rb CHANGED
@@ -8,6 +8,8 @@ module Aspera
8
8
  # A simple wrapper around Net::SSH
9
9
  # executes one command and get its result from stdout
10
10
  class Ssh
11
+ class Error < Aspera::Error
12
+ end
11
13
  class << self
12
14
  def disable_ed25519_keys
13
15
  Log.log.debug('Disabling SSH ed25519 user keys')
@@ -42,17 +44,25 @@ module Aspera
42
44
  @ssh_options[:logger] = Log.log
43
45
  end
44
46
 
45
- def execute(cmd, input=nil)
47
+ # Anything on stderr raises an exception
48
+ def execute(cmd, input: nil, exception: false)
46
49
  Aspera.assert_type(cmd, String)
47
50
  Log.log.debug{"cmd=#{cmd}"}
48
51
  response = []
52
+ error = []
49
53
  Net::SSH.start(@host, @username, @ssh_options) do |session|
50
54
  ssh_channel = session.open_channel do |channel|
51
55
  # prepare stdout processing
52
56
  channel.on_data{ |_chan, data| response.push(data)}
53
57
  # prepare stderr processing, stderr if type = 1
54
58
  channel.on_extended_data do |_chan, _type, data|
55
- error_message = "#{cmd}: [#{data.chomp}]"
59
+ error.push(data)
60
+ end
61
+ channel.on_request('exit-status') do |_ch, data|
62
+ exit_code = data.read_long
63
+ next if exit_code.zero?
64
+ error_message = "#{cmd}: exit #{exit_code}, #{error.join.chomp}"
65
+ raise Error, error_message if exception
56
66
  # Happens when windows user hasn't logged in and created home account.
57
67
  error_message += "\nHint: home not created in Windows?" if data.include?('Could not chdir to home directory')
58
68
  Log.log.debug(error_message)
@@ -62,7 +72,7 @@ module Aspera
62
72
  end
63
73
  # wait for channel to finish (command exit)
64
74
  ssh_channel.wait
65
- # main ssh session loop
75
+ # main SSH session loop
66
76
  session.loop
67
77
  end
68
78
  # response as single string
@@ -0,0 +1,102 @@
1
+ $schema: https://json-schema.org/draft/2020-12/schema
2
+ $id: https://github.com/IBM/aspera-cli/tree/main/lib/aspera/transfer/sync_instance.schema.yaml
3
+ $comment: >-
4
+ `x-` fields documented in `command_line_builder.rb`
5
+ This spec is specific to `ascli`.
6
+ The native async `conf` format is now preferred.
7
+ title: SyncInstanceSpec
8
+ description: Instance (global) and Session (per-sync) parameters for async.
9
+ type: object
10
+ properties:
11
+ alt_logdir:
12
+ type: string
13
+ watchd:
14
+ type: string
15
+ apply_local_docroot:
16
+ x-cli-switch: true
17
+ quiet:
18
+ x-cli-switch: true
19
+ ws_connect:
20
+ x-cli-switch: true
21
+ sessions:
22
+ type: array
23
+ items:
24
+ description: Session parameters for async.
25
+ type: object
26
+ properties:
27
+ name:
28
+ type: string
29
+ local_dir:
30
+ type: string
31
+ remote_dir:
32
+ type: string
33
+ local_db_dir:
34
+ type: string
35
+ remote_db_dir:
36
+ type: string
37
+ host:
38
+ type: string
39
+ x-ts-name: remote_host
40
+ user:
41
+ type: string
42
+ x-ts-name: remote_user
43
+ private_key_paths:
44
+ type: array
45
+ x-cli-option: "--private-key-path"
46
+ direction:
47
+ type: string
48
+ checksum:
49
+ type: string
50
+ tags:
51
+ type: object
52
+ x-cli-option: "--tags64"
53
+ x-cli-convert: json64
54
+ x-ts-name: tags
55
+ tcp_port:
56
+ type: integer
57
+ x-ts-name: ssh_port
58
+ rate_policy:
59
+ type: string
60
+ target_rate:
61
+ type: string
62
+ cooloff:
63
+ type: integer
64
+ pending_max:
65
+ type: integer
66
+ scan_intensity:
67
+ type: string
68
+ cipher:
69
+ type: string
70
+ x-cli-convert: remove_hyphen
71
+ x-ts-name: cipher
72
+ transfer_threads:
73
+ type: integer
74
+ preserve_time:
75
+ x-cli-switch: true
76
+ x-ts-name: preserve_times
77
+ preserve_access_time:
78
+ x-cli-switch: true
79
+ preserve_modification_time:
80
+ x-cli-switch: true
81
+ preserve_uid:
82
+ x-cli-switch: true
83
+ x-ts-name: preserve_file_owner_uid
84
+ preserve_gid:
85
+ x-cli-switch: true
86
+ x-ts-name: preserve_file_owner_gid
87
+ create_dir:
88
+ x-cli-switch: true
89
+ x-ts-name: create_dir
90
+ reset:
91
+ x-cli-switch: true
92
+ remote_password:
93
+ x-cli-envvar: ASPERA_SCP_PASS
94
+ x-ts-name: remote_password
95
+ cookie:
96
+ x-cli-envvar: ASPERA_SCP_COOKIE
97
+ x-ts-name: cookie
98
+ token:
99
+ x-cli-envvar: ASPERA_SCP_TOKEN
100
+ x-ts-name: token
101
+ license:
102
+ x-cli-envvar: ASPERA_SCP_LICENSE