aspera-cli 4.10.0 → 4.12.0

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 (97) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/BUGS.md +19 -0
  4. data/CHANGELOG.md +528 -0
  5. data/CONTRIBUTING.md +143 -0
  6. data/README.md +977 -589
  7. data/bin/ascli +4 -4
  8. data/bin/asession +12 -12
  9. data/docs/test_env.conf +29 -19
  10. data/examples/aoc.rb +6 -6
  11. data/examples/dascli +18 -16
  12. data/examples/faspex4.rb +15 -15
  13. data/examples/node.rb +12 -12
  14. data/examples/proxy.pac +2 -2
  15. data/examples/server.rb +12 -12
  16. data/lib/aspera/aoc.rb +344 -272
  17. data/lib/aspera/ascmd.rb +56 -54
  18. data/lib/aspera/ats_api.rb +4 -4
  19. data/lib/aspera/cli/basic_auth_plugin.rb +15 -12
  20. data/lib/aspera/cli/extended_value.rb +9 -9
  21. data/lib/aspera/cli/{formater.rb → formatter.rb} +69 -69
  22. data/lib/aspera/cli/listener/line_dump.rb +1 -1
  23. data/lib/aspera/cli/listener/logger.rb +1 -1
  24. data/lib/aspera/cli/listener/progress.rb +5 -6
  25. data/lib/aspera/cli/listener/progress_multi.rb +16 -21
  26. data/lib/aspera/cli/main.rb +72 -73
  27. data/lib/aspera/cli/manager.rb +112 -112
  28. data/lib/aspera/cli/plugin.rb +68 -48
  29. data/lib/aspera/cli/plugins/alee.rb +4 -4
  30. data/lib/aspera/cli/plugins/aoc.rb +322 -720
  31. data/lib/aspera/cli/plugins/ats.rb +50 -52
  32. data/lib/aspera/cli/plugins/bss.rb +10 -10
  33. data/lib/aspera/cli/plugins/config.rb +514 -410
  34. data/lib/aspera/cli/plugins/console.rb +12 -12
  35. data/lib/aspera/cli/plugins/cos.rb +18 -20
  36. data/lib/aspera/cli/plugins/faspex.rb +134 -136
  37. data/lib/aspera/cli/plugins/faspex5.rb +235 -70
  38. data/lib/aspera/cli/plugins/node.rb +378 -309
  39. data/lib/aspera/cli/plugins/orchestrator.rb +52 -49
  40. data/lib/aspera/cli/plugins/preview.rb +129 -120
  41. data/lib/aspera/cli/plugins/server.rb +137 -83
  42. data/lib/aspera/cli/plugins/shares.rb +77 -52
  43. data/lib/aspera/cli/plugins/sync.rb +13 -33
  44. data/lib/aspera/cli/transfer_agent.rb +61 -61
  45. data/lib/aspera/cli/version.rb +2 -1
  46. data/lib/aspera/colors.rb +3 -3
  47. data/lib/aspera/command_line_builder.rb +78 -74
  48. data/lib/aspera/cos_node.rb +31 -29
  49. data/lib/aspera/data_repository.rb +1 -1
  50. data/lib/aspera/environment.rb +30 -28
  51. data/lib/aspera/fasp/agent_base.rb +17 -15
  52. data/lib/aspera/fasp/agent_connect.rb +34 -32
  53. data/lib/aspera/fasp/agent_direct.rb +70 -73
  54. data/lib/aspera/fasp/agent_httpgw.rb +79 -74
  55. data/lib/aspera/fasp/agent_node.rb +26 -26
  56. data/lib/aspera/fasp/agent_trsdk.rb +20 -20
  57. data/lib/aspera/fasp/error.rb +3 -2
  58. data/lib/aspera/fasp/error_info.rb +11 -8
  59. data/lib/aspera/fasp/installation.rb +80 -80
  60. data/lib/aspera/fasp/listener.rb +2 -2
  61. data/lib/aspera/fasp/parameters.rb +103 -92
  62. data/lib/aspera/fasp/parameters.yaml +313 -214
  63. data/lib/aspera/fasp/resume_policy.rb +10 -10
  64. data/lib/aspera/fasp/transfer_spec.rb +22 -2
  65. data/lib/aspera/fasp/uri.rb +7 -7
  66. data/lib/aspera/faspex_gw.rb +80 -159
  67. data/lib/aspera/faspex_postproc.rb +77 -0
  68. data/lib/aspera/hash_ext.rb +3 -3
  69. data/lib/aspera/id_generator.rb +5 -5
  70. data/lib/aspera/keychain/encrypted_hash.rb +23 -28
  71. data/lib/aspera/keychain/macos_security.rb +21 -20
  72. data/lib/aspera/log.rb +13 -13
  73. data/lib/aspera/nagios.rb +24 -23
  74. data/lib/aspera/node.rb +217 -38
  75. data/lib/aspera/oauth.rb +78 -74
  76. data/lib/aspera/open_application.rb +19 -11
  77. data/lib/aspera/persistency_action_once.rb +4 -4
  78. data/lib/aspera/persistency_folder.rb +13 -13
  79. data/lib/aspera/preview/file_types.rb +8 -8
  80. data/lib/aspera/preview/generator.rb +67 -67
  81. data/lib/aspera/preview/utils.rb +27 -27
  82. data/lib/aspera/proxy_auto_config.js +63 -63
  83. data/lib/aspera/proxy_auto_config.rb +19 -19
  84. data/lib/aspera/rest.rb +65 -67
  85. data/lib/aspera/rest_call_error.rb +2 -1
  86. data/lib/aspera/rest_error_analyzer.rb +22 -21
  87. data/lib/aspera/rest_errors_aspera.rb +16 -16
  88. data/lib/aspera/secret_hider.rb +17 -14
  89. data/lib/aspera/ssh.rb +15 -14
  90. data/lib/aspera/sync.rb +177 -62
  91. data/lib/aspera/temp_file_manager.rb +2 -2
  92. data/lib/aspera/uri_reader.rb +4 -4
  93. data/lib/aspera/web_auth.rb +13 -64
  94. data/lib/aspera/web_server_simple.rb +76 -0
  95. data.tar.gz.sig +0 -0
  96. metadata +11 -6
  97. metadata.gz.sig +0 -0
@@ -6,18 +6,18 @@ require 'xmlsimple'
6
6
  module Aspera
7
7
  module Cli
8
8
  module Plugins
9
- class Orchestrator < BasicAuthPlugin
9
+ class Orchestrator < Aspera::Cli::BasicAuthPlugin
10
10
  def initialize(env)
11
11
  super(env)
12
- options.add_opt_simple(:params,'parameters hash table, use @json:{"param":"value"}')
13
- options.add_opt_simple(:result,"specify result value as: 'work step:parameter'")
14
- options.add_opt_boolean(:synchronous,'work step:parameter expected as result')
15
- options.add_opt_list(:ret_style,%i[header arg ext],'how return type is requested in api')
16
- options.add_opt_list(:auth_style,%i[arg_pass head_basic apikey],'authentication type')
17
- options.set_option(:params,{})
18
- options.set_option(:synchronous,:no)
19
- options.set_option(:ret_style,:arg)
20
- options.set_option(:auth_style,:head_basic)
12
+ options.add_opt_simple(:params, 'parameters hash table, use @json:{"param":"value"}')
13
+ options.add_opt_simple(:result, "specify result value as: 'work step:parameter'")
14
+ options.add_opt_boolean(:synchronous, 'work step:parameter expected as result')
15
+ options.add_opt_list(:ret_style, %i[header arg ext], 'how return type is requested in api')
16
+ options.add_opt_list(:auth_style, %i[arg_pass head_basic apikey], 'authentication type')
17
+ options.set_option(:params, {})
18
+ options.set_option(:synchronous, :no)
19
+ options.set_option(:ret_style, :arg)
20
+ options.set_option(:auth_style, :head_basic)
21
21
  options.parse_options!
22
22
  end
23
23
 
@@ -41,18 +41,18 @@ module Aspera
41
41
  # return @api_orch.call(call_args)
42
42
  # end
43
43
 
44
- def call_ao(endpoint,opt={})
45
- opt[:prefix] = 'api' unless opt.has_key?(:prefix)
44
+ def call_ao(endpoint, opt={})
45
+ opt[:prefix] = 'api' unless opt.key?(:prefix)
46
46
  # calls are GET
47
- call_args = {operation: 'GET',subpath: endpoint}
47
+ call_args = {operation: 'GET', subpath: endpoint}
48
48
  # specify prefix if necessary
49
49
  call_args[:subpath] = "#{opt[:prefix]}/#{call_args[:subpath]}" unless opt[:prefix].nil?
50
50
  # specify id if necessary
51
- call_args[:subpath] = "#{call_args[:subpath]}/#{opt[:id]}" if opt.has_key?(:id)
52
- call_type = options.get_option(:ret_style,is_type: :mandatory)
53
- call_type = opt[:ret_style] if opt.has_key?(:ret_style)
51
+ call_args[:subpath] = "#{call_args[:subpath]}/#{opt[:id]}" if opt.key?(:id)
52
+ call_type = options.get_option(:ret_style, is_type: :mandatory)
53
+ call_type = opt[:ret_style] if opt.key?(:ret_style)
54
54
  format = 'json'
55
- format = opt[:format] if opt.has_key?(:format)
55
+ format = opt[:format] if opt.key?(:format)
56
56
  call_args[:url_params] = opt[:args] unless opt[:args].nil?
57
57
  unless format.nil?
58
58
  case call_type
@@ -68,24 +68,24 @@ module Aspera
68
68
  end
69
69
  result = @api_orch.call(call_args)
70
70
  result[:data] = XmlSimple.xml_in(result[:http].body, opt[:xml_opt] || {'ForceArray' => true}) if format.eql?('xml')
71
- Log.dump(:data,result[:data])
71
+ Log.dump(:data, result[:data])
72
72
  return result
73
73
  end
74
74
 
75
75
  def execute_action
76
- rest_params = {base_url: options.get_option(:url,is_type: :mandatory)}
77
- case options.get_option(:auth_style,is_type: :mandatory)
76
+ rest_params = {base_url: options.get_option(:url, is_type: :mandatory)}
77
+ case options.get_option(:auth_style, is_type: :mandatory)
78
78
  when :arg_pass
79
79
  rest_params[:auth] = {
80
80
  type: :url,
81
81
  url_creds: {
82
- 'login' => options.get_option(:username,is_type: :mandatory),
83
- 'password' => options.get_option(:password,is_type: :mandatory) }}
82
+ 'login' => options.get_option(:username, is_type: :mandatory),
83
+ 'password' => options.get_option(:password, is_type: :mandatory) }}
84
84
  when :head_basic
85
85
  rest_params[:auth] = {
86
86
  type: :basic,
87
- username: options.get_option(:username,is_type: :mandatory),
88
- password: options.get_option(:password,is_type: :mandatory) }
87
+ username: options.get_option(:username, is_type: :mandatory),
88
+ password: options.get_option(:password, is_type: :mandatory) }
89
89
  when :apikey
90
90
  raise 'Not implemented'
91
91
  end
@@ -97,24 +97,24 @@ module Aspera
97
97
  when :health
98
98
  nagios = Nagios.new
99
99
  begin
100
- info = call_ao('remote_node_ping',format: 'xml', xml_opt: {'ForceArray' => false})[:data]
101
- nagios.add_ok('api','accessible')
102
- nagios.check_product_version('api','orchestrator', info['orchestrator-version'])
100
+ info = call_ao('remote_node_ping', format: 'xml', xml_opt: {'ForceArray' => false})[:data]
101
+ nagios.add_ok('api', 'accessible')
102
+ nagios.check_product_version('api', 'orchestrator', info['orchestrator-version'])
103
103
  rescue StandardError => e
104
- nagios.add_critical('node api',e.to_s)
104
+ nagios.add_critical('node api', e.to_s)
105
105
  end
106
106
  return nagios.result
107
107
  when :info
108
- result = call_ao('remote_node_ping',format: 'xml', xml_opt: {'ForceArray' => false})[:data]
109
- return {type: :single_object,data: result}
108
+ result = call_ao('remote_node_ping', format: 'xml', xml_opt: {'ForceArray' => false})[:data]
109
+ return {type: :single_object, data: result}
110
110
  when :processes
111
111
  # TODO: Jira ? API has only XML format
112
- result = call_ao('processes_status',format: 'xml')[:data]
113
- return {type: :object_list,data: result['process']}
112
+ result = call_ao('processes_status', format: 'xml')[:data]
113
+ return {type: :object_list, data: result['process']}
114
114
  when :plugins
115
115
  # TODO: Jira ? only json format on url
116
116
  result = call_ao('plugin_version')[:data]
117
- return {type: :object_list,data: result['Plugin']}
117
+ return {type: :object_list, data: result['Plugin']}
118
118
  when :workflow
119
119
  command = options.get_next_command(%i[list status inputs details start export])
120
120
  unless [:list].include?(command)
@@ -123,22 +123,25 @@ module Aspera
123
123
  case command
124
124
  when :status
125
125
  options = {}
126
- options[:id] = wf_id unless wf_id.eql?('ALL')
127
- result = call_ao('workflows_status',options)[:data]
128
- return {type: :object_list,data: result['workflows']['workflow']}
126
+ options[:id] = wf_id unless wf_id.eql?(VAL_ALL)
127
+ result = call_ao('workflows_status', options)[:data]
128
+ return {type: :object_list, data: result['workflows']['workflow']}
129
129
  when :list
130
- result = call_ao('workflows_list',id: 0)[:data]
131
- return {type: :object_list,data: result['workflows']['workflow'],
132
- fields: %w[id portable_id name published_status published_revision_id latest_revision_id last_modification]}
130
+ result = call_ao('workflows_list', id: 0)[:data]
131
+ return {
132
+ type: :object_list,
133
+ data: result['workflows']['workflow'],
134
+ fields: %w[id portable_id name published_status published_revision_id latest_revision_id last_modification]
135
+ }
133
136
  when :details
134
- result = call_ao('workflow_details',id: wf_id)[:data]
135
- return {type: :object_list,data: result['workflows']['workflow']['statuses']}
137
+ result = call_ao('workflow_details', id: wf_id)[:data]
138
+ return {type: :object_list, data: result['workflows']['workflow']['statuses']}
136
139
  when :inputs
137
- result = call_ao('workflow_inputs_spec',id: wf_id)[:data]
138
- return {type: :single_object,data: result['workflow_inputs_spec']}
140
+ result = call_ao('workflow_inputs_spec', id: wf_id)[:data]
141
+ return {type: :single_object, data: result['workflow_inputs_spec']}
139
142
  when :export
140
- result = call_ao('export_workflow',id: wf_id,format: nil)[:http]
141
- return {type: :text,data: result.body}
143
+ result = call_ao('export_workflow', id: wf_id, format: nil)[:http]
144
+ return {type: :text, data: result.body}
142
145
  when :start
143
146
  result = {
144
147
  type: :single_object,
@@ -147,11 +150,11 @@ fields: %w[id portable_id name published_status published_revision_id latest_rev
147
150
  call_params = {format: :json}
148
151
  override_accept = nil
149
152
  # set external parameters if any
150
- self.options.get_option(:params,is_type: :mandatory).each do |name,value|
153
+ self.options.get_option(:params, is_type: :mandatory).each do |name, value|
151
154
  call_params["external_parameters[#{name}]"] = value
152
155
  end
153
156
  # synchronous call ?
154
- call_params['synchronous'] = true if self.options.get_option(:synchronous,is_type: :mandatory)
157
+ call_params['synchronous'] = true if self.options.get_option(:synchronous, is_type: :mandatory)
155
158
  # expected result for synchro call ?
156
159
  expected = self.options.get_option(:result)
157
160
  unless expected.nil?
@@ -160,14 +163,14 @@ fields: %w[id portable_id name published_status published_revision_id latest_rev
160
163
  raise "Expects: work_step:result_name format, but got #{expected}" if fields.length != 2
161
164
  call_params['explicit_output_step'] = fields[0]
162
165
  call_params['explicit_output_variable'] = fields[1]
163
- # implicitely, call is synchronous
166
+ # implicitly, call is synchronous
164
167
  call_params['synchronous'] = true
165
168
  end
166
169
  if call_params['synchronous']
167
170
  result[:type] = :text
168
171
  override_accept = 'text/plain'
169
172
  end
170
- result[:data] = call_ao('initiate',id: wf_id,args: call_params,accept: override_accept)[:data]
173
+ result[:data] = call_ao('initiate', id: wf_id, args: call_params, accept: override_accept)[:data]
171
174
  return result
172
175
  end # wf command
173
176
  else raise "ERROR, unknown command: [#{command}]"