aspera-cli 4.13.0 → 4.15.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/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
|