aspera-cli 4.14.0 → 4.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +54 -3
  4. data/CONTRIBUTING.md +7 -7
  5. data/README.md +1457 -880
  6. data/bin/ascli +18 -9
  7. data/bin/asession +12 -14
  8. data/examples/proxy.pac +1 -1
  9. data/lib/aspera/aoc.rb +198 -127
  10. data/lib/aspera/ascmd.rb +24 -14
  11. data/lib/aspera/cli/basic_auth_plugin.rb +9 -6
  12. data/lib/aspera/cli/error.rb +17 -0
  13. data/lib/aspera/cli/extended_value.rb +47 -12
  14. data/lib/aspera/cli/formatter.rb +260 -171
  15. data/lib/aspera/cli/hints.rb +80 -0
  16. data/lib/aspera/cli/main.rb +101 -147
  17. data/lib/aspera/cli/manager.rb +160 -124
  18. data/lib/aspera/cli/plugin.rb +70 -59
  19. data/lib/aspera/cli/plugins/alee.rb +0 -1
  20. data/lib/aspera/cli/plugins/aoc.rb +239 -273
  21. data/lib/aspera/cli/plugins/ats.rb +8 -5
  22. data/lib/aspera/cli/plugins/bss.rb +2 -2
  23. data/lib/aspera/cli/plugins/config.rb +516 -375
  24. data/lib/aspera/cli/plugins/console.rb +40 -0
  25. data/lib/aspera/cli/plugins/cos.rb +4 -5
  26. data/lib/aspera/cli/plugins/faspex.rb +99 -84
  27. data/lib/aspera/cli/plugins/faspex5.rb +179 -148
  28. data/lib/aspera/cli/plugins/node.rb +219 -153
  29. data/lib/aspera/cli/plugins/orchestrator.rb +52 -17
  30. data/lib/aspera/cli/plugins/preview.rb +46 -32
  31. data/lib/aspera/cli/plugins/server.rb +57 -17
  32. data/lib/aspera/cli/plugins/shares.rb +34 -12
  33. data/lib/aspera/cli/sync_actions.rb +68 -0
  34. data/lib/aspera/cli/transfer_agent.rb +45 -55
  35. data/lib/aspera/cli/transfer_progress.rb +74 -0
  36. data/lib/aspera/cli/version.rb +1 -1
  37. data/lib/aspera/colors.rb +3 -1
  38. data/lib/aspera/command_line_builder.rb +14 -11
  39. data/lib/aspera/cos_node.rb +3 -2
  40. data/lib/aspera/environment.rb +17 -6
  41. data/lib/aspera/fasp/agent_aspera.rb +126 -0
  42. data/lib/aspera/fasp/agent_base.rb +31 -77
  43. data/lib/aspera/fasp/agent_connect.rb +21 -22
  44. data/lib/aspera/fasp/agent_direct.rb +88 -102
  45. data/lib/aspera/fasp/agent_httpgw.rb +196 -192
  46. data/lib/aspera/fasp/agent_node.rb +41 -34
  47. data/lib/aspera/fasp/agent_trsdk.rb +75 -34
  48. data/lib/aspera/fasp/error_info.rb +2 -2
  49. data/lib/aspera/fasp/faux_file.rb +52 -0
  50. data/lib/aspera/fasp/installation.rb +43 -184
  51. data/lib/aspera/fasp/management.rb +244 -0
  52. data/lib/aspera/fasp/parameters.rb +59 -26
  53. data/lib/aspera/fasp/parameters.yaml +75 -8
  54. data/lib/aspera/fasp/products.rb +162 -0
  55. data/lib/aspera/fasp/transfer_spec.rb +1 -1
  56. data/lib/aspera/fasp/uri.rb +4 -4
  57. data/lib/aspera/faspex_gw.rb +2 -2
  58. data/lib/aspera/faspex_postproc.rb +2 -2
  59. data/lib/aspera/hash_ext.rb +2 -2
  60. data/lib/aspera/json_rpc.rb +49 -0
  61. data/lib/aspera/line_logger.rb +23 -0
  62. data/lib/aspera/log.rb +57 -16
  63. data/lib/aspera/node.rb +97 -14
  64. data/lib/aspera/oauth.rb +36 -18
  65. data/lib/aspera/open_application.rb +4 -4
  66. data/lib/aspera/persistency_folder.rb +2 -2
  67. data/lib/aspera/preview/file_types.rb +4 -2
  68. data/lib/aspera/preview/generator.rb +22 -35
  69. data/lib/aspera/preview/options.rb +2 -0
  70. data/lib/aspera/preview/terminal.rb +24 -13
  71. data/lib/aspera/preview/utils.rb +19 -26
  72. data/lib/aspera/rest.rb +103 -72
  73. data/lib/aspera/rest_call_error.rb +1 -1
  74. data/lib/aspera/rest_error_analyzer.rb +15 -14
  75. data/lib/aspera/rest_errors_aspera.rb +37 -34
  76. data/lib/aspera/secret_hider.rb +14 -16
  77. data/lib/aspera/ssh.rb +4 -1
  78. data/lib/aspera/sync.rb +128 -122
  79. data/lib/aspera/temp_file_manager.rb +10 -3
  80. data/lib/aspera/web_auth.rb +10 -7
  81. data/lib/aspera/web_server_simple.rb +9 -4
  82. data.tar.gz.sig +0 -0
  83. metadata +33 -15
  84. metadata.gz.sig +0 -0
  85. data/lib/aspera/cli/listener/line_dump.rb +0 -19
  86. data/lib/aspera/cli/listener/logger.rb +0 -22
  87. data/lib/aspera/cli/listener/progress.rb +0 -50
  88. data/lib/aspera/cli/listener/progress_multi.rb +0 -84
  89. data/lib/aspera/cli/plugins/sync.rb +0 -44
  90. data/lib/aspera/fasp/listener.rb +0 -13
@@ -0,0 +1,244 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspera
4
+ module Fasp
5
+ # executes a local "ascp", connects mgt port, equivalent of "Fasp Manager"
6
+ class Management
7
+ # cspell: disable
8
+ OPERATIONS = %w[
9
+ NOP
10
+ START
11
+ QUERY
12
+ QUERYRSP
13
+ STATS
14
+ STOP
15
+ ERROR
16
+ CANCEL
17
+ DONE
18
+ RATE
19
+ FILEERROR
20
+ SESSION
21
+ NOTIFICATION
22
+ INIT
23
+ VLINK
24
+ NOTIFICATION
25
+ PUT
26
+ WRITE
27
+ CLOSE
28
+ SKIP
29
+ ARGSTOP
30
+ ]
31
+
32
+ PARAMETERS = %w[
33
+ Type
34
+ File
35
+ Size
36
+ Written
37
+ Bytescont
38
+ Rate
39
+ Loss
40
+ Query
41
+ Code
42
+ Password
43
+ Progress
44
+ Remaining
45
+ Elapsed
46
+ RexInfo
47
+ BlockInfo
48
+ DiskInfo
49
+ RateInfo
50
+ MinRate
51
+ Description
52
+ Elapsedusec
53
+ ServiceLevel
54
+ SessionId
55
+ User
56
+ Host
57
+ Encryption
58
+ Adaptive
59
+ Direction
60
+ Remote
61
+ Port
62
+ UserStr
63
+ CommandId
64
+ StartByte
65
+ EndByte
66
+ Token
67
+ Cookie
68
+ QueryResponse
69
+ Source
70
+ Destination
71
+ BWMeasurement
72
+ BWInfo
73
+ PMTU
74
+ TransferBytes
75
+ FileBytes
76
+ Operation
77
+ Delay
78
+ PreTransferFiles
79
+ PreTransferDirs
80
+ PreTransferSpecial
81
+ PreTransferFailed
82
+ PartialPreTransferBytes
83
+ PreTransferBytes
84
+ Priority
85
+ Transport
86
+ VlinkID
87
+ VlinkOn
88
+ VlinkCapIn
89
+ VlinkCapOut
90
+ ManifestFile
91
+ ArgScansAttempted
92
+ ArgScansCompleted
93
+ PathScansAttempted
94
+ PathScansFailed
95
+ PathScansIrregular
96
+ PathScansExcluded
97
+ DirScansCompleted
98
+ FileScansCompleted
99
+ DirCreatesAttempted
100
+ DirCreatesFailed
101
+ DirCreatesPassed
102
+ TransfersAttempted
103
+ TransfersFailed
104
+ TransfersPassed
105
+ TransfersSkipped
106
+ FallbackProtocol
107
+ RetryTimeout
108
+ PreTransferExcluded
109
+ XferId
110
+ XferRetry
111
+ Tags
112
+ FaspFileArgIndex
113
+ ArgTransfersStatus
114
+ ArgTransfersAttempted
115
+ ArgTransfersFailed
116
+ ArgTransfersPassed
117
+ ArgTransfersSkipped
118
+ FaspFileID
119
+ RateCap
120
+ MinRateCap
121
+ PolicyCap
122
+ PriorityCap
123
+ RateLock
124
+ MinRateLock
125
+ PolicyLock
126
+ FileChecksum
127
+ ServerHostname
128
+ ServerNodeId
129
+ ClientNodeId
130
+ ServerClusterId
131
+ ClientClusterId
132
+ FileChecksumType
133
+ ServerDocroot
134
+ ClientDocroot
135
+ NodeUser
136
+ ClientUser
137
+ SourcePrefix
138
+ RemoteAddress
139
+ TCPPort
140
+ Cipher
141
+ ResumePolicy
142
+ CreatePolicy
143
+ ManifestPolicy
144
+ Precalc
145
+ OverwritePolicy
146
+ RTTAutocorrect
147
+ TimePolicy
148
+ ManifestPath
149
+ ManifestInprogress
150
+ PartialFiles
151
+ FilesEncrypt
152
+ FilesDecrypt
153
+ DatagramSize
154
+ PrepostCommand
155
+ XoptFlags
156
+ VLinkVersion
157
+ PeerVLinkVersion
158
+ VLinkLocalEnabled
159
+ VLinkLocalId
160
+ VLinkLocalCL
161
+ VLinkRemoteEnabled
162
+ VLinkRemoteId
163
+ VLRemoteCL
164
+ DSPipelineDepth
165
+ PeerDSPipelineDepth
166
+ LocalIP
167
+ SourceBase
168
+ ReadBlockSize
169
+ WriteBlockSize
170
+ ClusterNumNodes
171
+ ClusterNodeId
172
+ MoveRange
173
+ MoveRangeLow
174
+ MoveRangeHigh
175
+ Keepalive
176
+ TestLogin
177
+ UseProxy
178
+ ProxyIP
179
+ RateControlAlgorithm
180
+ ClientMacAddress
181
+ Offset
182
+ ChunkSize
183
+ PostTransferValidation
184
+ OverwritePolicyCap
185
+ ExtraCreatePolicy]
186
+ # Management port start message
187
+ MGT_HEADER = 'FASPMGR 2'
188
+ # fields description for JSON generation
189
+ # spellchecker: disable
190
+ INTEGER_FIELDS = %w[Bytescont FaspFileArgIndex StartByte Rate MinRate Port Priority RateCap MinRateCap TCPPort CreatePolicy TimePolicy
191
+ DatagramSize XoptFlags VLinkVersion PeerVLinkVersion DSPipelineDepth PeerDSPipelineDepth ReadBlockSize WriteBlockSize
192
+ ClusterNumNodes ClusterNodeId Size Written Loss FileBytes PreTransferBytes TransferBytes PMTU Elapsedusec ArgScansAttempted
193
+ ArgScansCompleted PathScansAttempted FileScansCompleted TransfersAttempted TransfersPassed Delay].freeze
194
+ BOOLEAN_FIELDS = %w[Encryption Remote RateLock MinRateLock PolicyLock FilesEncrypt FilesDecrypt VLinkLocalEnabled VLinkRemoteEnabled
195
+ MoveRange Keepalive TestLogin UseProxy Precalc RTTAutocorrect].freeze
196
+ # cspell: enable
197
+
198
+ class << self
199
+ # translates legacy event into enhanced (JSON) event
200
+ def enhanced_event_format(event)
201
+ return event.keys.each_with_object({}) do |e, h|
202
+ # capital_to_snake_case
203
+ new_name = e
204
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
205
+ .gsub(/([a-z\d])(usec)$/, '\1_\2')
206
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
207
+ .downcase
208
+ value = event[e]
209
+ value = value.to_i if INTEGER_FIELDS.include?(e)
210
+ value = value.eql?('Yes') if BOOLEAN_FIELDS.include?(e)
211
+ h[new_name] = value
212
+ end
213
+ end
214
+ end # class << self
215
+
216
+ def initialize
217
+ @event_build = nil
218
+ @last_event = nil
219
+ end
220
+ attr_reader :last_event
221
+
222
+ def process_line(line)
223
+ # Log.log.debug{"line=[#{line}]"}
224
+ case line
225
+ when MGT_HEADER
226
+ # begin event
227
+ @event_build = {}
228
+ when /^([^:]+): (.*)$/
229
+ # event field
230
+ @event_build[Regexp.last_match(1)] = Regexp.last_match(2)
231
+ when ''
232
+ # empty line is separator to end event information
233
+ raise 'unexpected empty line' if @event_build.nil?
234
+ @last_event = @event_build
235
+ @event_build = nil
236
+ return @last_event
237
+ else
238
+ raise "unexpected line:[#{line}]"
239
+ end # case
240
+ return nil
241
+ end
242
+ end
243
+ end
244
+ end
@@ -4,6 +4,9 @@ require 'aspera/log'
4
4
  require 'aspera/command_line_builder'
5
5
  require 'aspera/temp_file_manager'
6
6
  require 'aspera/fasp/error'
7
+ require 'aspera/fasp/installation'
8
+ require 'aspera/cli/formatter'
9
+ require 'aspera/rest'
7
10
  require 'securerandom'
8
11
  require 'base64'
9
12
  require 'json'
@@ -16,11 +19,11 @@ module Aspera
16
19
  # translate transfer specification to ascp parameter list
17
20
  class Parameters
18
21
  # Agents shown in manual for parameters (sub list)
19
- SUPPORTED_AGENTS = %i[direct node connect].freeze
22
+ SUPPORTED_AGENTS = %i[direct node connect trsdk httpgw].freeze
20
23
  # Short names of columns in manual
21
24
  SUPPORTED_AGENTS_SHORT = SUPPORTED_AGENTS.map{|a|a.to_s[0].to_sym}
22
25
  FILE_LIST_OPTIONS = ['--file-list', '--file-pair-list'].freeze
23
- SUPPORTED_OPTIONS = %i[ascp_args wss].freeze
26
+ SUPPORTED_OPTIONS = %i[ascp_args wss check_ignore quiet].freeze
24
27
 
25
28
  private_constant :SUPPORTED_AGENTS, :FILE_LIST_OPTIONS
26
29
 
@@ -28,7 +31,7 @@ module Aspera
28
31
  # Temp folder for file lists, must contain only file lists
29
32
  # because of garbage collection takes any file there
30
33
  # this could be refined, as , for instance, on macos, temp folder is already user specific
31
- @file_list_folder = TempFileManager.instance.new_file_path_global('asession_filelists')
34
+ @file_list_folder = TempFileManager.instance.new_file_path_global('asession_filelists') # cspell:disable-line
32
35
  @param_description_cache = nil
33
36
  # @return normalized description of transfer spec parameters, direct from yaml
34
37
  def description
@@ -48,7 +51,7 @@ module Aspera
48
51
  param = {name: name, type: [options[:accepted_types]].flatten.join(','), description: options[:desc]}
49
52
  # add flags for supported agents in doc
50
53
  SUPPORTED_AGENTS.each do |a|
51
- param[a.to_s[0].to_sym] = options[:agents].nil? || options[:agents].include?(a) ? 'Y' : ''
54
+ param[a.to_s[0].to_sym] = Cli::Formatter.tick(options[:agents].nil? || options[:agents].include?(a))
52
55
  end
53
56
  # only keep lines that are usable in supported agents
54
57
  next if SUPPORTED_AGENTS_SHORT.inject(true){|m, j|m && param[j].empty?}
@@ -66,9 +69,12 @@ module Aspera
66
69
  else
67
70
  raise "error: #{param}"
68
71
  end.map{|n|"{#{n}}"}.join('|')
69
- conv = options[:cli].key?(:convert) ? '(conversion)' : ''
70
- "#{options[:cli][:switch]} #{conv}#{values}"
71
- else ''
72
+ conversion_tag = options[:cli].key?(:convert) ? '(conversion)' : ''
73
+ "#{options[:cli][:switch]} #{conversion_tag}#{values}"
74
+ when :special then Cli::Formatter.special('special')
75
+ when :ignore then Cli::Formatter.special('ignored')
76
+ else
77
+ param[:d].eql?(tick_yes) ? '' : 'n/a'
72
78
  end
73
79
  if options.key?(:enum)
74
80
  param[:description] += "\nAllowed values: #{options[:enum].join(', ')}"
@@ -121,11 +127,12 @@ module Aspera
121
127
  def initialize(job_spec, options)
122
128
  @job_spec = job_spec
123
129
  # check necessary options
124
- raise 'Internal: missing options' unless (SUPPORTED_OPTIONS - options.keys).empty?
130
+ missing_options = SUPPORTED_OPTIONS - options.keys
131
+ raise "Internal: missing options: #{missing_options.join(', ')}" unless missing_options.empty?
125
132
  @options = SUPPORTED_OPTIONS.each_with_object({}){|o, h| h[o] = options[o]}
126
- Log.dump(:options, @options)
127
- raise 'ascp args must be an Array' unless @options[:ascp_args].is_a?(Array)
128
- raise 'ascp args must be an Array of String' if @options[:ascp_args].any?{|i|!i.is_a?(String)}
133
+ Log.log.debug{Log.dump(:parameters_options, @options)}
134
+ raise 'ascp arguments must be an Array' unless @options[:ascp_args].is_a?(Array)
135
+ raise 'ascp arguments must be an Array of String' if @options[:ascp_args].any?{|i|!i.is_a?(String)}
129
136
  @builder = Aspera::CommandLineBuilder.new(@job_spec, self.class.description)
130
137
  end
131
138
 
@@ -133,7 +140,7 @@ module Aspera
133
140
  # is the file list provided through EX_ parameters?
134
141
  ascp_file_list_provided = self.class.ts_has_ascp_file_list(@job_spec, @options[:ascp_args])
135
142
  # set if paths is mandatory in ts
136
- @builder.params_definition['paths'][:mandatory] = !@job_spec.key?('keepalive') && !ascp_file_list_provided
143
+ @builder.params_definition['paths'][:mandatory] = !@job_spec.key?('keepalive') && !ascp_file_list_provided # cspell:words keepalive
137
144
  # get paths in transfer spec (after setting if it is mandatory)
138
145
  ts_paths_array = @builder.read_param('paths')
139
146
  if ascp_file_list_provided && !ts_paths_array.nil?
@@ -160,13 +167,14 @@ module Aspera
160
167
  # if there is one destination in paths, then use file-pair-list
161
168
  if is_pair_list
162
169
  option = '--file-pair-list'
163
- lines = ts_paths_array.each_with_object([]){|e, m|m.push(e['source'], e['destination'] || e['source']); }
170
+ lines = ts_paths_array.each_with_object([]){|e, m|m.push(e['source'], e['destination'] || e['source']) }
164
171
  else
165
172
  option = '--file-list'
166
173
  lines = ts_paths_array.map{|i|i['source']}
167
174
  end
168
175
  file_list_file = Aspera::TempFileManager.instance.new_file_path_in_folder(self.class.file_list_folder)
169
- File.write(file_list_file, lines.join("\n"))
176
+ Log.log.debug{Log.dump(:file_list, lines)}
177
+ File.write(file_list_file, lines.join("\n"), encoding: 'UTF-8')
170
178
  Log.log.debug{"#{option}=\n#{File.read(file_list_file)}".red}
171
179
  end
172
180
  end
@@ -184,17 +192,14 @@ module Aspera
184
192
  env: {},
185
193
  ascp_version: :ascp
186
194
  }
187
- # some ssh credentials are required to avoid interactive password input
188
- if !@job_spec.key?('remote_password') &&
189
- !@job_spec.key?('ssh_private_key') &&
190
- !@job_spec.key?('EX_ssh_key_paths')
191
- raise Fasp::Error, 'required: password or ssh key (value or path)'
192
- end
193
195
 
194
196
  # special cases
195
197
  @job_spec.delete('source_root') if @job_spec.key?('source_root') && @job_spec['source_root'].empty?
196
198
 
197
- # use web socket session initiation ?
199
+ # notify multi-session was already used, anyway it was deleted by agent direct
200
+ raise 'internal error' if @builder.read_param('multi_session')
201
+
202
+ # use web socket secure for session ?
198
203
  if @builder.read_param('wss_enabled') && (@options[:wss] || !@job_spec.key?('fasp_port'))
199
204
  # by default use web socket session if available, unless removed by user
200
205
  @builder.add_command_line_options(['--ws-connect'])
@@ -204,12 +209,30 @@ module Aspera
204
209
  @job_spec.delete('fasp_port')
205
210
  @job_spec.delete('EX_ssh_key_paths')
206
211
  @job_spec.delete('sshfp')
207
- # set location for CA bundle to be the one of Ruby, see env var SSL_CERT_FILE / SSL_CERT_DIR
208
- @job_spec['EX_ssh_key_paths'] = [OpenSSL::X509::DEFAULT_CERT_FILE]
209
- Log.log.debug('CA certs: EX_ssh_key_paths <- DEFAULT_CERT_FILE from openssl')
212
+ if @options[:check_ignore]&.call(@job_spec['remote_host'], @job_spec['wss_port'])
213
+ http_session = Rest.start_http_session("https://#{@job_spec['remote_host']}:#{@job_spec['wss_port']}")
214
+ # wss_api = Rest.new(base_url: "/v1/transfer")
215
+ # wss_api.read('start') rescue nil
216
+ wss_cert_file = TempFileManager.instance.new_file_path_global('wss_cert')
217
+ File.write(wss_cert_file, http_session.peer_cert.to_pem)
218
+ http_session.finish
219
+ env_args[:args].unshift('-i', wss_cert_file)
220
+ Log.log.debug{"CA certs for wss: remote cert: #{wss_cert_file}"}
221
+ else
222
+ # set location for CA bundle to be the one of Ruby, see env var SSL_CERT_FILE / SSL_CERT_DIR
223
+ @options[:trusted_certs].each do |file|
224
+ env_args[:args].unshift('-i', file)
225
+ Log.log.debug{"trusted certs for wss: #{file}"}
226
+ end
227
+ end
210
228
  else
211
229
  # remove unused parameter (avoid warning)
212
230
  @job_spec.delete('wss_port')
231
+ # add SSH bypass keys when authentication is token and no auth is provided
232
+ if @job_spec.key?('token') && !@job_spec.key?('remote_password')
233
+ # @job_spec['remote_password'] = Installation.instance.ssh_cert_uuid # not used: no passphrase
234
+ Installation.instance.aspera_token_ssh_key_paths.each { |key| env_args[:args].unshift('-i', key) }
235
+ end
213
236
  end
214
237
 
215
238
  # process parameters as specified in table
@@ -225,7 +248,7 @@ module Aspera
225
248
  end
226
249
  # get list of files to transfer and build arg for ascp
227
250
  process_file_list
228
- # optional args, at the end to override previous ones (to allow override)
251
+ # optional arguments, at the end to override previous ones (to allow override)
229
252
  @builder.add_command_line_options(@builder.read_param('EX_ascp_args'))
230
253
  @builder.add_command_line_options(@options[:ascp_args])
231
254
  # process destination folder
@@ -235,7 +258,17 @@ module Aspera
235
258
  # destination MUST be last command line argument to ascp
236
259
  @builder.add_command_line_options([destination_folder])
237
260
 
238
- @builder.add_env_args(env_args[:env], env_args[:args])
261
+ Log.log.debug{"ascp args: #{env_args}"}
262
+
263
+ @builder.add_env_args(env_args)
264
+
265
+ env_args[:args].unshift('-q') if @options[:quiet]
266
+
267
+ # add fallback cert and key as arguments if needed
268
+ if ['1', 1, true, 'force'].include?(@job_spec['http_fallback'])
269
+ env_args[:args].unshift('-Y', Installation.instance.path(:fallback_private_key))
270
+ env_args[:args].unshift('-I', Installation.instance.path(:fallback_certificate))
271
+ end
239
272
 
240
273
  return env_args
241
274
  end
@@ -2,13 +2,13 @@
2
2
  # accepted_types : accepted types for non-enum
3
3
  # default : default value if not specified
4
4
  # enum : set with list of values for enum types accepted in transfer spec
5
- # agents : supported agents (for doc only)
5
+ # agents : supported agents (for doc only), if not specified: all
6
6
  # required : optional, default: false
7
7
  # cli.type : ascp: type of parameter, one of CLI_OPTION_TYPES
8
8
  # cli.switch : ascp: switch for ascp command line
9
9
  # cli.convert : ascp: transform value: either a Hash with conversion values, or name of class
10
10
  # cli.variable : ascp: name of env var
11
- # cspell:words dgram
11
+ # cspell:words dgram dnat dnats faspmgr asperanoded xattrs keepalive datagram
12
12
  ---
13
13
  cipher:
14
14
  :desc: "In transit encryption type."
@@ -79,7 +79,11 @@ destination_root:
79
79
  :cli:
80
80
  :type: :special
81
81
  destination_root_id:
82
- :desc: The file ID of the destination root directory. Required when using Bearer token auth for the destination node.
82
+ :desc: |-
83
+ The file ID of the destination root directory.
84
+ Required when using Bearer token auth for the destination node.
85
+
86
+
83
87
  :accepted_types: :string
84
88
  :agents:
85
89
  - :sdk
@@ -177,7 +181,7 @@ multi_session:
177
181
 
178
182
  :accepted_types: :int
179
183
  :cli:
180
- :type: :ignore
184
+ :type: :special
181
185
  :switch: "-C"
182
186
  multi_session_threshold:
183
187
  :desc: |-
@@ -227,15 +231,37 @@ precalculate_job_size:
227
231
  :cli:
228
232
  :type: :opt_without_arg
229
233
  preserve_access_time:
234
+ :desc: |-
235
+ Preserve the source-file access timestamps at the destination.
236
+ Because source access times are updated by the transfer operation,
237
+ the timestamp that is preserved is the one just before to the transfer.
238
+
239
+
230
240
  :cli:
231
241
  :type: :opt_without_arg
232
242
  preserve_creation_time:
243
+ :desc: |-
244
+ (Windows only) Preserve source-file creation timestamps at the destination.
245
+ Only Windows systems retain information about creation time.
246
+ If the destination is not a Windows computer, this option is ignored.
247
+
248
+
233
249
  :cli:
234
250
  :type: :opt_without_arg
235
251
  preserve_modification_time:
252
+ :desc: |-
253
+ Set the modification time, the last time a file or directory was modified (written), of a transferred file
254
+ to the modification of the source file or directory.
255
+ Preserve source-file modification timestamps at the destination.
256
+
257
+
236
258
  :cli:
237
259
  :type: :opt_without_arg
238
260
  preserve_times:
261
+ :desc: Preserve file timestamps.
262
+ :agents:
263
+ - :sdk
264
+ - :node
239
265
  :cli:
240
266
  :type: :opt_without_arg
241
267
  rate_policy:
@@ -437,6 +463,7 @@ use_ascp4:
437
463
  :cli:
438
464
  :type: :special
439
465
  use_system_ssh:
466
+ :desc: TODO, comment...
440
467
  :accepted_types: :string
441
468
  :agents:
442
469
  - :sdk
@@ -454,22 +481,46 @@ source_root:
454
481
  :switch: "--source-prefix64"
455
482
  :convert: Aspera::Fasp::Parameters.convert_base64
456
483
  min_rate_cap_kbps:
484
+ :desc: |-
485
+ The highest minimum rate that an incoming transfer can request, in kilobits per second.
486
+ Client minimum rate requests that exceed the minimum rate cap are ignored.
487
+ The default value of unlimited applies no cap to the minimum rate. (Default: 0)
488
+
489
+
457
490
  :accepted_types: :int
458
491
  :cli:
459
492
  :type: :ignore
460
493
  lock_rate_policy:
494
+ :desc: If true, lock the rate policy to the default value.
461
495
  :accepted_types: :bool
496
+ :agents:
497
+ - :sdk
498
+ - :connect
462
499
  :cli:
463
500
  :type: :ignore
464
501
  lock_target_rate_kbps:
502
+ :desc: |-
503
+ If true, lock the target transfer rate to the default value set for target_rate_kbps.
504
+ If false, users can adjust the transfer rate up to the value set for target_rate_cap_kbps.
505
+
506
+
465
507
  :accepted_types: :bool
466
508
  :cli:
467
509
  :type: :ignore
468
510
  lock_min_rate_kbps:
511
+ :desc: |-
512
+ If true, lock the minimum transfer rate to the value set for min_rate_kbps.
513
+ If false, users can adjust the transfer rate up to the value set for target_rate_cap_kbps.
514
+
515
+
469
516
  :accepted_types: :bool
517
+ :agents:
518
+ - :sdk
519
+ - :connect
470
520
  :cli:
471
521
  :type: :ignore
472
522
  apply_local_docroot:
523
+ :desc: Apply local docroot to source paths.
473
524
  :agents:
474
525
  - :direct
475
526
  - :sdk
@@ -561,7 +612,7 @@ remove_empty_source_directory:
561
612
  :type: :opt_without_arg
562
613
  EX_at_rest_password:
563
614
  :desc: Content protection password
564
- :deprecation: "Use standard spec parameter: content_protection_password"
615
+ :deprecation: "(4.13) Use standard spec parameter: content_protection_password"
565
616
  :agents:
566
617
  - :direct
567
618
  :cli:
@@ -573,6 +624,7 @@ EX_proxy_password:
573
624
  May be overridden by password in URL provided in parameter: proxy.
574
625
 
575
626
 
627
+ :deprecation: (4.14) Use env var ASPERA_PROXY_PASS
576
628
  :agents:
577
629
  - :direct
578
630
  :cli:
@@ -580,14 +632,17 @@ EX_proxy_password:
580
632
  :variable: ASPERA_PROXY_PASS
581
633
  EX_license_text:
582
634
  :desc: "License file text override.\nBy default ascp looks for license file near executable."
635
+ :deprecation: (4.14) Use env var ASPERA_SCP_LICENSE
583
636
  :agents:
584
637
  - :direct
585
638
  :cli:
586
639
  :type: :envvar
587
640
  :variable: ASPERA_SCP_LICENSE
588
641
  keepalive:
642
+ :desc: The session is running in persistent session mode.
589
643
  :agents:
590
- - :none
644
+ - :sdk
645
+ - :direct
591
646
  :cli:
592
647
  :type: :opt_without_arg
593
648
  dgram_size:
@@ -610,6 +665,7 @@ sshfp:
610
665
  :switch: "--check-sshfp"
611
666
  EX_http_proxy_url:
612
667
  :desc: Specify the proxy server address used by HTTP Fallback
668
+ :deprecation: (4.14) TODO, use proxy option ?
613
669
  :agents:
614
670
  - :direct
615
671
  :cli:
@@ -617,6 +673,7 @@ EX_http_proxy_url:
617
673
  :switch: "-x"
618
674
  EX_ssh_key_paths:
619
675
  :desc: Use public key authentication for SSH and specify the private key file paths
676
+ :deprecation: (4.14) Use option transfer_info.ascp_args
620
677
  :accepted_types: :array
621
678
  :agents:
622
679
  - :direct
@@ -625,6 +682,7 @@ EX_ssh_key_paths:
625
682
  :switch: "-i"
626
683
  EX_http_transfer_jpeg:
627
684
  :desc: HTTP transfers as JPEG file
685
+ :deprecation: (4.14) Use option transfer_info.ascp_args
628
686
  :accepted_types: :int
629
687
  :default: '0'
630
688
  :agents:
@@ -634,6 +692,7 @@ EX_http_transfer_jpeg:
634
692
  :switch: "-j"
635
693
  EX_no_read:
636
694
  :desc: no read source
695
+ :deprecation: (4.14) Use option transfer_info.ascp_args
637
696
  :agents:
638
697
  - :direct
639
698
  :cli:
@@ -641,12 +700,14 @@ EX_no_read:
641
700
  :switch: "--no-read"
642
701
  EX_no_write:
643
702
  :desc: no write on destination
703
+ :deprecation: (4.14) Use option transfer_info.ascp_args
644
704
  :agents:
645
705
  - :direct
646
706
  :cli:
647
707
  :type: :opt_without_arg
648
708
  :switch: "--no-write"
649
709
  target_rate_percentage:
710
+ :desc: "TODO: remove ?"
650
711
  :cli:
651
712
  :type: :ignore
652
713
  rate_policy_allowed:
@@ -661,15 +722,18 @@ rate_policy_allowed:
661
722
  :cli:
662
723
  :type: :ignore
663
724
  fasp_url:
725
+ :desc: Only used in Faspex.
664
726
  :agents:
665
727
  - :unknown
666
728
  :cli:
667
729
  :type: :ignore
668
730
  lock_min_rate:
731
+ :desc: "TODO: remove ?"
669
732
  :accepted_types: :bool
670
733
  :cli:
671
734
  :type: :ignore
672
735
  lock_target_rate:
736
+ :desc: "TODO: remove ?"
673
737
  :accepted_types: :bool
674
738
  :cli:
675
739
  :type: :ignore
@@ -684,13 +748,15 @@ cipher_allowed:
684
748
  :cli:
685
749
  :type: :ignore
686
750
  obfuscate_file_names:
751
+ :desc: HTTP Gateway obfuscates file names when set to true.
687
752
  :accepted_types: :bool
688
753
  :agents:
689
- - :unknown
754
+ - :httpgw
690
755
  :cli:
691
756
  :type: :ignore
692
757
  EX_file_list:
693
758
  :desc: source file list
759
+ :deprecation: (4.14) Use command line file list, or option transfer_info.ascp_args
694
760
  :agents:
695
761
  - :direct
696
762
  :cli:
@@ -698,6 +764,7 @@ EX_file_list:
698
764
  :switch: "--file-list"
699
765
  EX_file_pair_list:
700
766
  :desc: source file pair list
767
+ :deprecation: (4.14) Use command line file pair list, or option transfer_info.ascp_args
701
768
  :agents:
702
769
  - :direct
703
770
  :cli:
@@ -705,7 +772,7 @@ EX_file_pair_list:
705
772
  :switch: "--file-pair-list"
706
773
  EX_ascp_args:
707
774
  :desc: Add native command line arguments to ascp
708
- :deprecation: Use parameter ascp_args in option transfer_info
775
+ :deprecation: (4.13) Use option transfer_info.ascp_args
709
776
  :accepted_types: :array
710
777
  :agents:
711
778
  - :direct