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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/BUGS.md +19 -0
- data/CHANGELOG.md +528 -0
- data/CONTRIBUTING.md +143 -0
- data/README.md +977 -589
- data/bin/ascli +4 -4
- data/bin/asession +12 -12
- data/docs/test_env.conf +29 -19
- data/examples/aoc.rb +6 -6
- data/examples/dascli +18 -16
- data/examples/faspex4.rb +15 -15
- data/examples/node.rb +12 -12
- data/examples/proxy.pac +2 -2
- data/examples/server.rb +12 -12
- data/lib/aspera/aoc.rb +344 -272
- data/lib/aspera/ascmd.rb +56 -54
- data/lib/aspera/ats_api.rb +4 -4
- data/lib/aspera/cli/basic_auth_plugin.rb +15 -12
- data/lib/aspera/cli/extended_value.rb +9 -9
- data/lib/aspera/cli/{formater.rb → formatter.rb} +69 -69
- data/lib/aspera/cli/listener/line_dump.rb +1 -1
- data/lib/aspera/cli/listener/logger.rb +1 -1
- data/lib/aspera/cli/listener/progress.rb +5 -6
- data/lib/aspera/cli/listener/progress_multi.rb +16 -21
- data/lib/aspera/cli/main.rb +72 -73
- data/lib/aspera/cli/manager.rb +112 -112
- data/lib/aspera/cli/plugin.rb +68 -48
- data/lib/aspera/cli/plugins/alee.rb +4 -4
- data/lib/aspera/cli/plugins/aoc.rb +322 -720
- data/lib/aspera/cli/plugins/ats.rb +50 -52
- data/lib/aspera/cli/plugins/bss.rb +10 -10
- data/lib/aspera/cli/plugins/config.rb +514 -410
- data/lib/aspera/cli/plugins/console.rb +12 -12
- data/lib/aspera/cli/plugins/cos.rb +18 -20
- data/lib/aspera/cli/plugins/faspex.rb +134 -136
- data/lib/aspera/cli/plugins/faspex5.rb +235 -70
- data/lib/aspera/cli/plugins/node.rb +378 -309
- data/lib/aspera/cli/plugins/orchestrator.rb +52 -49
- data/lib/aspera/cli/plugins/preview.rb +129 -120
- data/lib/aspera/cli/plugins/server.rb +137 -83
- data/lib/aspera/cli/plugins/shares.rb +77 -52
- data/lib/aspera/cli/plugins/sync.rb +13 -33
- data/lib/aspera/cli/transfer_agent.rb +61 -61
- data/lib/aspera/cli/version.rb +2 -1
- data/lib/aspera/colors.rb +3 -3
- data/lib/aspera/command_line_builder.rb +78 -74
- data/lib/aspera/cos_node.rb +31 -29
- data/lib/aspera/data_repository.rb +1 -1
- data/lib/aspera/environment.rb +30 -28
- data/lib/aspera/fasp/agent_base.rb +17 -15
- data/lib/aspera/fasp/agent_connect.rb +34 -32
- data/lib/aspera/fasp/agent_direct.rb +70 -73
- data/lib/aspera/fasp/agent_httpgw.rb +79 -74
- data/lib/aspera/fasp/agent_node.rb +26 -26
- data/lib/aspera/fasp/agent_trsdk.rb +20 -20
- data/lib/aspera/fasp/error.rb +3 -2
- data/lib/aspera/fasp/error_info.rb +11 -8
- data/lib/aspera/fasp/installation.rb +80 -80
- data/lib/aspera/fasp/listener.rb +2 -2
- data/lib/aspera/fasp/parameters.rb +103 -92
- data/lib/aspera/fasp/parameters.yaml +313 -214
- data/lib/aspera/fasp/resume_policy.rb +10 -10
- data/lib/aspera/fasp/transfer_spec.rb +22 -2
- data/lib/aspera/fasp/uri.rb +7 -7
- data/lib/aspera/faspex_gw.rb +80 -159
- data/lib/aspera/faspex_postproc.rb +77 -0
- data/lib/aspera/hash_ext.rb +3 -3
- data/lib/aspera/id_generator.rb +5 -5
- data/lib/aspera/keychain/encrypted_hash.rb +23 -28
- data/lib/aspera/keychain/macos_security.rb +21 -20
- data/lib/aspera/log.rb +13 -13
- data/lib/aspera/nagios.rb +24 -23
- data/lib/aspera/node.rb +217 -38
- data/lib/aspera/oauth.rb +78 -74
- data/lib/aspera/open_application.rb +19 -11
- data/lib/aspera/persistency_action_once.rb +4 -4
- data/lib/aspera/persistency_folder.rb +13 -13
- data/lib/aspera/preview/file_types.rb +8 -8
- data/lib/aspera/preview/generator.rb +67 -67
- data/lib/aspera/preview/utils.rb +27 -27
- data/lib/aspera/proxy_auto_config.js +63 -63
- data/lib/aspera/proxy_auto_config.rb +19 -19
- data/lib/aspera/rest.rb +65 -67
- data/lib/aspera/rest_call_error.rb +2 -1
- data/lib/aspera/rest_error_analyzer.rb +22 -21
- data/lib/aspera/rest_errors_aspera.rb +16 -16
- data/lib/aspera/secret_hider.rb +17 -14
- data/lib/aspera/ssh.rb +15 -14
- data/lib/aspera/sync.rb +177 -62
- data/lib/aspera/temp_file_manager.rb +2 -2
- data/lib/aspera/uri_reader.rb +4 -4
- data/lib/aspera/web_auth.rb +13 -64
- data/lib/aspera/web_server_simple.rb +76 -0
- data.tar.gz.sig +0 -0
- metadata +11 -6
- 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
|
16
|
-
options.add_opt_list(:auth_style
|
17
|
-
options.set_option(:params,{})
|
18
|
-
options.set_option(:synchronous
|
19
|
-
options.set_option(:ret_style
|
20
|
-
options.set_option(:auth_style
|
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.
|
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.
|
52
|
-
call_type = options.get_option(:ret_style,is_type: :mandatory)
|
53
|
-
call_type = opt[:ret_style] if opt.
|
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.
|
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?(
|
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 {
|
132
|
-
|
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
|
-
#
|
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}]"
|