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