aspera-cli 4.13.0 → 4.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +81 -7
- data/CONTRIBUTING.md +22 -6
- data/README.md +2038 -1080
- data/bin/ascli +18 -9
- data/bin/asession +12 -14
- data/examples/dascli +1 -1
- data/examples/proxy.pac +1 -1
- data/examples/rubyc +24 -0
- data/lib/aspera/aoc.rb +219 -159
- data/lib/aspera/ascmd.rb +25 -14
- data/lib/aspera/cli/basic_auth_plugin.rb +12 -9
- data/lib/aspera/cli/error.rb +17 -0
- data/lib/aspera/cli/extended_value.rb +47 -12
- data/lib/aspera/cli/formatter.rb +260 -179
- data/lib/aspera/cli/hints.rb +80 -0
- data/lib/aspera/cli/main.rb +104 -156
- data/lib/aspera/cli/manager.rb +259 -209
- data/lib/aspera/cli/plugin.rb +123 -63
- data/lib/aspera/cli/plugins/alee.rb +2 -3
- data/lib/aspera/cli/plugins/aoc.rb +341 -261
- data/lib/aspera/cli/plugins/ats.rb +22 -21
- data/lib/aspera/cli/plugins/bss.rb +5 -5
- data/lib/aspera/cli/plugins/config.rb +578 -627
- data/lib/aspera/cli/plugins/console.rb +44 -6
- data/lib/aspera/cli/plugins/cos.rb +15 -17
- data/lib/aspera/cli/plugins/faspex.rb +114 -100
- data/lib/aspera/cli/plugins/faspex5.rb +411 -264
- data/lib/aspera/cli/plugins/node.rb +354 -259
- data/lib/aspera/cli/plugins/orchestrator.rb +61 -29
- data/lib/aspera/cli/plugins/preview.rb +82 -90
- data/lib/aspera/cli/plugins/server.rb +79 -32
- data/lib/aspera/cli/plugins/shares.rb +55 -42
- data/lib/aspera/cli/sync_actions.rb +68 -0
- data/lib/aspera/cli/transfer_agent.rb +66 -73
- data/lib/aspera/cli/transfer_progress.rb +74 -0
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/colors.rb +12 -8
- data/lib/aspera/command_line_builder.rb +14 -11
- data/lib/aspera/cos_node.rb +3 -2
- data/lib/aspera/data/6 +0 -0
- data/lib/aspera/environment.rb +24 -9
- data/lib/aspera/fasp/agent_aspera.rb +126 -0
- data/lib/aspera/fasp/agent_base.rb +31 -77
- data/lib/aspera/fasp/agent_connect.rb +25 -21
- data/lib/aspera/fasp/agent_direct.rb +89 -103
- data/lib/aspera/fasp/agent_httpgw.rb +231 -149
- data/lib/aspera/fasp/agent_node.rb +41 -34
- data/lib/aspera/fasp/agent_trsdk.rb +75 -32
- data/lib/aspera/fasp/error_info.rb +4 -2
- data/lib/aspera/fasp/faux_file.rb +52 -0
- data/lib/aspera/fasp/installation.rb +53 -195
- data/lib/aspera/fasp/management.rb +244 -0
- data/lib/aspera/fasp/parameters.rb +71 -37
- data/lib/aspera/fasp/parameters.yaml +76 -8
- data/lib/aspera/fasp/products.rb +162 -0
- data/lib/aspera/fasp/resume_policy.rb +3 -3
- data/lib/aspera/fasp/transfer_spec.rb +7 -6
- data/lib/aspera/fasp/uri.rb +26 -24
- data/lib/aspera/faspex_gw.rb +2 -2
- data/lib/aspera/faspex_postproc.rb +2 -2
- data/lib/aspera/hash_ext.rb +14 -4
- data/lib/aspera/json_rpc.rb +49 -0
- data/lib/aspera/keychain/macos_security.rb +13 -13
- data/lib/aspera/line_logger.rb +23 -0
- data/lib/aspera/log.rb +58 -16
- data/lib/aspera/node.rb +157 -92
- data/lib/aspera/oauth.rb +37 -19
- data/lib/aspera/open_application.rb +4 -4
- data/lib/aspera/persistency_action_once.rb +1 -1
- data/lib/aspera/persistency_folder.rb +2 -2
- data/lib/aspera/preview/file_types.rb +4 -2
- data/lib/aspera/preview/generator.rb +22 -35
- data/lib/aspera/preview/options.rb +2 -0
- data/lib/aspera/preview/terminal.rb +73 -16
- data/lib/aspera/preview/utils.rb +21 -28
- data/lib/aspera/proxy_auto_config.js +2 -2
- data/lib/aspera/rest.rb +136 -68
- data/lib/aspera/rest_call_error.rb +1 -1
- data/lib/aspera/rest_error_analyzer.rb +15 -14
- data/lib/aspera/rest_errors_aspera.rb +37 -34
- data/lib/aspera/secret_hider.rb +18 -15
- data/lib/aspera/ssh.rb +5 -2
- data/lib/aspera/sync.rb +127 -119
- data/lib/aspera/temp_file_manager.rb +10 -3
- data/lib/aspera/web_auth.rb +10 -7
- data/lib/aspera/web_server_simple.rb +9 -4
- data.tar.gz.sig +0 -0
- metadata +34 -17
- metadata.gz.sig +0 -0
- data/docs/test_env.conf +0 -186
- data/lib/aspera/cli/listener/line_dump.rb +0 -19
- data/lib/aspera/cli/listener/logger.rb +0 -22
- data/lib/aspera/cli/listener/progress.rb +0 -50
- data/lib/aspera/cli/listener/progress_multi.rb +0 -84
- data/lib/aspera/cli/plugins/sync.rb +0 -44
- data/lib/aspera/data/7 +0 -0
- data/lib/aspera/fasp/listener.rb +0 -13
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# cspell:ignore trustpolicy
|
4
|
+
|
3
5
|
require 'aspera/cli/plugins/node'
|
4
6
|
require 'aspera/ats_api'
|
5
7
|
|
@@ -7,25 +9,25 @@ module Aspera
|
|
7
9
|
module Cli
|
8
10
|
module Plugins
|
9
11
|
# Access Aspera Transfer Service
|
10
|
-
# https://52.44.83.163/docs/
|
11
12
|
# https://developer.ibm.com/aspera/docs/ats-api-reference/creating-ats-api-keys/
|
12
13
|
class Ats < Aspera::Cli::Plugin
|
14
|
+
CLOUD_TABLE = %w[id name].freeze
|
13
15
|
def initialize(env)
|
14
16
|
super(env)
|
15
|
-
options.
|
16
|
-
options.
|
17
|
-
options.
|
18
|
-
options.
|
19
|
-
options.
|
20
|
-
options.
|
21
|
-
options.
|
17
|
+
options.declare(:ibm_api_key, 'IBM API key, see https://cloud.ibm.com/iam/apikeys')
|
18
|
+
options.declare(:instance, 'ATS instance in ibm cloud')
|
19
|
+
options.declare(:ats_key, 'ATS key identifier (ats_xxx)')
|
20
|
+
options.declare(:ats_secret, 'ATS key secret')
|
21
|
+
options.declare(:params, 'Parameters access key creation (@json:)')
|
22
|
+
options.declare(:cloud, 'Cloud provider')
|
23
|
+
options.declare(:region, 'Cloud region')
|
22
24
|
options.parse_options!
|
23
25
|
end
|
24
26
|
|
25
27
|
def server_by_cloud_region
|
26
28
|
# TODO: provide list ?
|
27
|
-
cloud = options.get_option(:cloud,
|
28
|
-
region = options.get_option(:region,
|
29
|
+
cloud = options.get_option(:cloud, mandatory: true).upcase
|
30
|
+
region = options.get_option(:region, mandatory: true)
|
29
31
|
return @ats_api_pub.read("servers/#{cloud}/#{region}")[:data]
|
30
32
|
end
|
31
33
|
|
@@ -36,8 +38,8 @@ module Aspera
|
|
36
38
|
base_url: AtsApi.base_url + '/pub/v1',
|
37
39
|
auth: {
|
38
40
|
type: :basic,
|
39
|
-
username: options.get_option(:ats_key,
|
40
|
-
password: options.get_option(:ats_secret,
|
41
|
+
username: options.get_option(:ats_key, mandatory: true),
|
42
|
+
password: options.get_option(:ats_secret, mandatory: true)}
|
41
43
|
})
|
42
44
|
end
|
43
45
|
|
@@ -90,7 +92,7 @@ module Aspera
|
|
90
92
|
res = ats_api_pub_v1.read("access_keys/#{access_key_id}")
|
91
93
|
return {type: :single_object, data: res[:data]}
|
92
94
|
when :modify
|
93
|
-
params =
|
95
|
+
params = value_create_modify(command: command)
|
94
96
|
params['id'] = access_key_id
|
95
97
|
ats_api_pub_v1.update("access_keys/#{access_key_id}", params)
|
96
98
|
return Main.result_status('modified')
|
@@ -104,7 +106,7 @@ module Aspera
|
|
104
106
|
when :node
|
105
107
|
ak_data = ats_api_pub_v1.read("access_keys/#{access_key_id}")[:data]
|
106
108
|
server_data = @ats_api_pub.all_servers.find {|i| i['id'].start_with?(ak_data['transfer_server_id'])}
|
107
|
-
raise
|
109
|
+
raise Cli::Error, 'no such server found' if server_data.nil?
|
108
110
|
node_url = server_data['transfer_setup_url']
|
109
111
|
api_node = Aspera::Node.new(params: {
|
110
112
|
base_url: node_url,
|
@@ -114,7 +116,7 @@ module Aspera
|
|
114
116
|
password: @agents[:config].lookup_secret(url: node_url, username: access_key_id)
|
115
117
|
}})
|
116
118
|
command = options.get_next_command(Node::COMMANDS_GEN4)
|
117
|
-
return Node.new(@agents
|
119
|
+
return Node.new(@agents, api: api_node).execute_command_gen4(command, ak_data['root_file_id'])
|
118
120
|
when :cluster
|
119
121
|
ats_url = ats_api_pub_v1.params[:base_url]
|
120
122
|
rest_params = {
|
@@ -134,11 +136,11 @@ module Aspera
|
|
134
136
|
command = options.get_next_command(%i[clouds list show])
|
135
137
|
case command
|
136
138
|
when :clouds
|
137
|
-
return {type: :
|
139
|
+
return {type: :object_list, data: @ats_api_pub.cloud_names.map { |k, v| CLOUD_TABLE.zip([k, v]).to_h }}
|
138
140
|
when :list
|
139
141
|
return {type: :object_list, data: @ats_api_pub.all_servers, fields: %w[id cloud region]}
|
140
142
|
when :show
|
141
|
-
if options.get_option(:cloud) || options.get_option(:region
|
143
|
+
if options.get_option(:cloud) || options.get_option(:region)
|
142
144
|
server_data = server_by_cloud_region
|
143
145
|
else
|
144
146
|
server_id = instance_identifier
|
@@ -161,7 +163,7 @@ module Aspera
|
|
161
163
|
generic: {
|
162
164
|
grant_type: 'urn:ibm:params:oauth:grant-type:apikey',
|
163
165
|
response_type: 'cloud_iam',
|
164
|
-
apikey: options.get_option(:ibm_api_key,
|
166
|
+
apikey: options.get_option(:ibm_api_key, mandatory: true)
|
165
167
|
}}})
|
166
168
|
end
|
167
169
|
|
@@ -187,8 +189,7 @@ module Aspera
|
|
187
189
|
Log.log.warn{"more instances remaining: #{instances['remaining']}"} unless instances['remaining'].to_i.eql?(0)
|
188
190
|
return {type: :value_list, data: instances['data'], name: 'instance'}
|
189
191
|
when :create
|
190
|
-
|
191
|
-
created_key = ats_ibm_api.create('api_keys', create_value)[:data]
|
192
|
+
created_key = ats_ibm_api.create('api_keys', value_create_modify(command: command, default: {}))[:data]
|
192
193
|
return {type: :single_object, data: created_key}
|
193
194
|
when :list # list known api keys in ATS (this require an api_key ...)
|
194
195
|
res = ats_ibm_api.read('api_keys', {'offset' => 0, 'max_results' => 1000})
|
@@ -221,7 +222,7 @@ module Aspera
|
|
221
222
|
when :api_key # manage credential to access ATS API
|
222
223
|
return execute_action_api_key
|
223
224
|
when :aws_trust_policy
|
224
|
-
res = ats_api_pub_v1.read('aws/trustpolicy', {region: options.get_option(:region,
|
225
|
+
res = ats_api_pub_v1.read('aws/trustpolicy', {region: options.get_option(:region, mandatory: true)})[:data]
|
225
226
|
return {type: :single_object, data: res}
|
226
227
|
else raise 'ERROR'
|
227
228
|
end
|
@@ -23,7 +23,7 @@ module Aspera
|
|
23
23
|
|
24
24
|
def execute_action
|
25
25
|
if @api_bss.nil?
|
26
|
-
key = options.get_option(:password,
|
26
|
+
key = options.get_option(:password, mandatory: true)
|
27
27
|
@api_bss = Rest.new(
|
28
28
|
base_url: 'https://dashboard.bss.asperasoft.com/platform',
|
29
29
|
headers: {cookie: "_dashboard_key=#{key}"})
|
@@ -35,8 +35,8 @@ module Aspera
|
|
35
35
|
object = 'bssSubscriptions'
|
36
36
|
case command
|
37
37
|
when :find
|
38
|
-
query = options.get_option(:query,
|
39
|
-
value =
|
38
|
+
query = options.get_option(:query, mandatory: true) # AOC_ORGANIZATION_QUERY AOC_USER_EMAIL
|
39
|
+
value = value_create_modify(command: command)
|
40
40
|
request = {
|
41
41
|
'variables' => {'filter' => {'key' => query, 'value' => value}},
|
42
42
|
'query' => "query($filter: BssSubscriptionFilter!) {#{object}(filter: $filter) { #{all_fields('bssSubscriptions')} } }"
|
@@ -48,8 +48,8 @@ module Aspera
|
|
48
48
|
id = instance_identifier
|
49
49
|
request = {
|
50
50
|
'variables' => {'id' => id},
|
51
|
-
'query' => "query($id: ID!) {#{object}(id: $id) { #{all_fields('bssSubscriptions')} roleAssignments(uniqueSubjectId: true) { id subjectId } "\
|
52
|
-
'instances { id state planId serviceId ssmSubscriptionId entitlement { id } aocOrganization { id subdomainName name status tier urlId trialExpiresAt '\
|
51
|
+
'query' => "query($id: ID!) {#{object}(id: $id) { #{all_fields('bssSubscriptions')} roleAssignments(uniqueSubjectId: true) { id subjectId } " \
|
52
|
+
'instances { id state planId serviceId ssmSubscriptionId entitlement { id } aocOrganization { id subdomainName name status tier urlId trialExpiresAt ' \
|
53
53
|
'users(organizationAdmin: true) { id name email atsAdmin subscriptionAdmin } } } } }'
|
54
54
|
}
|
55
55
|
result = @api_bss.create('graphql', request)[:data]['data'][object].first
|