aspera-cli 4.15.0 → 4.17.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 +29 -3
- data/CHANGELOG.md +375 -280
- data/CONTRIBUTING.md +71 -18
- data/README.md +1978 -1656
- data/bin/ascli +13 -31
- data/bin/asession +32 -22
- data/examples/dascli +2 -2
- data/lib/aspera/agent/alpha.rb +117 -0
- data/lib/aspera/agent/base.rb +61 -0
- data/lib/aspera/{fasp/agent_connect.rb → agent/connect.rb} +13 -11
- data/lib/aspera/{fasp/agent_direct.rb → agent/direct.rb} +116 -116
- data/lib/aspera/{fasp/agent_httpgw.rb → agent/httpgw.rb} +21 -19
- data/lib/aspera/{fasp/agent_node.rb → agent/node.rb} +21 -33
- data/lib/aspera/agent/trsdk.rb +188 -0
- data/lib/aspera/api/aoc.rb +586 -0
- data/lib/aspera/api/ats.rb +46 -0
- data/lib/aspera/api/cos_node.rb +95 -0
- data/lib/aspera/api/node.rb +344 -0
- data/lib/aspera/ascmd.rb +47 -14
- data/lib/aspera/{fasp → ascp}/installation.rb +54 -15
- data/lib/aspera/{fasp → ascp}/management.rb +14 -14
- data/lib/aspera/{fasp → ascp}/products.rb +1 -1
- data/lib/aspera/assert.rb +45 -0
- data/lib/aspera/cli/basic_auth_plugin.rb +11 -10
- data/lib/aspera/cli/extended_value.rb +5 -5
- data/lib/aspera/cli/formatter.rb +27 -14
- data/lib/aspera/cli/hints.rb +7 -6
- data/lib/aspera/cli/main.rb +49 -29
- data/lib/aspera/cli/manager.rb +46 -36
- data/lib/aspera/cli/plugin.rb +34 -20
- data/lib/aspera/cli/plugin_factory.rb +61 -0
- data/lib/aspera/cli/plugins/alee.rb +7 -7
- data/lib/aspera/cli/plugins/aoc.rb +168 -132
- data/lib/aspera/cli/plugins/ats.rb +33 -33
- data/lib/aspera/cli/plugins/bss.rb +3 -4
- data/lib/aspera/cli/plugins/config.rb +250 -272
- data/lib/aspera/cli/plugins/console.rb +8 -6
- data/lib/aspera/cli/plugins/cos.rb +20 -19
- data/lib/aspera/cli/plugins/faspex.rb +71 -60
- data/lib/aspera/cli/plugins/faspex5.rb +212 -133
- data/lib/aspera/cli/plugins/node.rb +83 -75
- data/lib/aspera/cli/plugins/orchestrator.rb +36 -44
- data/lib/aspera/cli/plugins/preview.rb +33 -31
- data/lib/aspera/cli/plugins/server.rb +33 -32
- data/lib/aspera/cli/plugins/shares.rb +39 -33
- data/lib/aspera/cli/sync_actions.rb +9 -9
- data/lib/aspera/cli/transfer_agent.rb +45 -25
- data/lib/aspera/cli/transfer_progress.rb +2 -3
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/colors.rb +5 -0
- data/lib/aspera/command_line_builder.rb +16 -14
- data/lib/aspera/coverage.rb +21 -0
- data/lib/aspera/data_repository.rb +33 -2
- data/lib/aspera/environment.rb +5 -4
- data/lib/aspera/faspex_gw.rb +13 -11
- data/lib/aspera/faspex_postproc.rb +6 -5
- data/lib/aspera/id_generator.rb +4 -2
- data/lib/aspera/json_rpc.rb +10 -8
- data/lib/aspera/keychain/encrypted_hash.rb +46 -11
- data/lib/aspera/keychain/macos_security.rb +29 -22
- data/lib/aspera/log.rb +5 -4
- data/lib/aspera/nagios.rb +7 -2
- data/lib/aspera/node_simulator.rb +213 -0
- data/lib/aspera/oauth/base.rb +143 -0
- data/lib/aspera/oauth/factory.rb +124 -0
- data/lib/aspera/oauth/generic.rb +34 -0
- data/lib/aspera/oauth/jwt.rb +51 -0
- data/lib/aspera/oauth/url_json.rb +31 -0
- data/lib/aspera/oauth/web.rb +50 -0
- data/lib/aspera/oauth.rb +5 -328
- data/lib/aspera/open_application.rb +7 -7
- data/lib/aspera/persistency_action_once.rb +13 -14
- data/lib/aspera/persistency_folder.rb +3 -2
- data/lib/aspera/preview/file_types.rb +53 -267
- data/lib/aspera/preview/generator.rb +7 -5
- data/lib/aspera/preview/terminal.rb +17 -7
- data/lib/aspera/preview/utils.rb +8 -7
- data/lib/aspera/proxy_auto_config.rb +6 -3
- data/lib/aspera/rest.rb +187 -140
- data/lib/aspera/rest_error_analyzer.rb +1 -0
- data/lib/aspera/rest_errors_aspera.rb +5 -3
- data/lib/aspera/resumer.rb +77 -0
- data/lib/aspera/secret_hider.rb +5 -2
- data/lib/aspera/ssh.rb +15 -8
- data/lib/aspera/temp_file_manager.rb +1 -1
- data/lib/aspera/{fasp → transfer}/error.rb +3 -3
- data/lib/aspera/{fasp → transfer}/error_info.rb +1 -1
- data/lib/aspera/{fasp → transfer}/faux_file.rb +1 -1
- data/lib/aspera/{fasp → transfer}/parameters.rb +95 -120
- data/lib/aspera/{fasp/transfer_spec.rb → transfer/spec.rb} +23 -19
- data/lib/aspera/{fasp/parameters.yaml → transfer/spec.yaml} +4 -99
- data/lib/aspera/transfer/sync.rb +273 -0
- data/lib/aspera/{fasp → transfer}/uri.rb +10 -9
- data/lib/aspera/web_server_simple.rb +12 -3
- data.tar.gz.sig +0 -0
- metadata +92 -68
- metadata.gz.sig +0 -0
- data/lib/aspera/aoc.rb +0 -606
- data/lib/aspera/ats_api.rb +0 -47
- data/lib/aspera/cos_node.rb +0 -93
- data/lib/aspera/fasp/agent_aspera.rb +0 -126
- data/lib/aspera/fasp/agent_base.rb +0 -48
- data/lib/aspera/fasp/agent_trsdk.rb +0 -146
- data/lib/aspera/fasp/resume_policy.rb +0 -77
- data/lib/aspera/node.rb +0 -338
- data/lib/aspera/sync.rb +0 -219
|
@@ -3,17 +3,19 @@
|
|
|
3
3
|
# cspell:ignore trustpolicy
|
|
4
4
|
|
|
5
5
|
require 'aspera/cli/plugins/node'
|
|
6
|
-
require 'aspera/
|
|
6
|
+
require 'aspera/api/ats'
|
|
7
|
+
require 'aspera/api/aoc'
|
|
8
|
+
require 'aspera/assert'
|
|
7
9
|
|
|
8
10
|
module Aspera
|
|
9
11
|
module Cli
|
|
10
12
|
module Plugins
|
|
11
13
|
# Access Aspera Transfer Service
|
|
12
14
|
# https://developer.ibm.com/aspera/docs/ats-api-reference/creating-ats-api-keys/
|
|
13
|
-
class Ats <
|
|
15
|
+
class Ats < Cli::Plugin
|
|
14
16
|
CLOUD_TABLE = %w[id name].freeze
|
|
15
|
-
def initialize(env)
|
|
16
|
-
super
|
|
17
|
+
def initialize(**env)
|
|
18
|
+
super
|
|
17
19
|
options.declare(:ibm_api_key, 'IBM API key, see https://cloud.ibm.com/iam/apikeys')
|
|
18
20
|
options.declare(:instance, 'ATS instance in ibm cloud')
|
|
19
21
|
options.declare(:ats_key, 'ATS key identifier (ats_xxx)')
|
|
@@ -34,13 +36,13 @@ module Aspera
|
|
|
34
36
|
# require api key only if needed
|
|
35
37
|
def ats_api_pub_v1
|
|
36
38
|
return @ats_api_pub_v1_cache unless @ats_api_pub_v1_cache.nil?
|
|
37
|
-
@ats_api_pub_v1_cache = Rest.new(
|
|
38
|
-
base_url:
|
|
39
|
+
@ats_api_pub_v1_cache = Rest.new(
|
|
40
|
+
base_url: "#{Api::Ats::SERVICE_BASE_URL}/pub/v1",
|
|
39
41
|
auth: {
|
|
40
42
|
type: :basic,
|
|
41
43
|
username: options.get_option(:ats_key, mandatory: true),
|
|
42
44
|
password: options.get_option(:ats_secret, mandatory: true)}
|
|
43
|
-
|
|
45
|
+
)
|
|
44
46
|
end
|
|
45
47
|
|
|
46
48
|
def execute_action_access_key
|
|
@@ -98,7 +100,7 @@ module Aspera
|
|
|
98
100
|
return Main.result_status('modified')
|
|
99
101
|
when :entitlement
|
|
100
102
|
ak = ats_api_pub_v1.read("access_keys/#{access_key_id}")[:data]
|
|
101
|
-
api_bss = AoC.metering_api(ak['license']['entitlement_id'], ak['license']['customer_id'])
|
|
103
|
+
api_bss = Api::AoC.metering_api(ak['license']['entitlement_id'], ak['license']['customer_id'])
|
|
102
104
|
return {type: :single_object, data: api_bss.read('entitlement')[:data]}
|
|
103
105
|
when :delete
|
|
104
106
|
ats_api_pub_v1.delete("access_keys/#{access_key_id}")
|
|
@@ -108,27 +110,26 @@ module Aspera
|
|
|
108
110
|
server_data = @ats_api_pub.all_servers.find {|i| i['id'].start_with?(ak_data['transfer_server_id'])}
|
|
109
111
|
raise Cli::Error, 'no such server found' if server_data.nil?
|
|
110
112
|
node_url = server_data['transfer_setup_url']
|
|
111
|
-
api_node =
|
|
113
|
+
api_node = Api::Node.new(
|
|
112
114
|
base_url: node_url,
|
|
113
115
|
auth: {
|
|
114
116
|
type: :basic,
|
|
115
117
|
username: access_key_id,
|
|
116
|
-
password:
|
|
117
|
-
}
|
|
118
|
+
password: config.lookup_secret(url: node_url, username: access_key_id)
|
|
119
|
+
})
|
|
118
120
|
command = options.get_next_command(Node::COMMANDS_GEN4)
|
|
119
|
-
return Node.new(
|
|
121
|
+
return Node.new(**init_params, api: api_node).execute_command_gen4(command, ak_data['root_file_id'])
|
|
120
122
|
when :cluster
|
|
121
|
-
ats_url = ats_api_pub_v1.
|
|
122
|
-
|
|
123
|
+
ats_url = ats_api_pub_v1.base_url
|
|
124
|
+
api_ak_auth = Rest.new(
|
|
123
125
|
base_url: ats_url,
|
|
124
126
|
auth: {
|
|
125
127
|
type: :basic,
|
|
126
128
|
username: access_key_id,
|
|
127
|
-
password:
|
|
128
|
-
}
|
|
129
|
-
api_ak_auth = Rest.new(rest_params)
|
|
129
|
+
password: config.lookup_secret(url: ats_url, username: access_key_id)
|
|
130
|
+
})
|
|
130
131
|
return {type: :single_object, data: api_ak_auth.read('servers')[:data]}
|
|
131
|
-
else
|
|
132
|
+
else Aspera.error_unexpected_value(command)
|
|
132
133
|
end
|
|
133
134
|
end
|
|
134
135
|
|
|
@@ -152,19 +153,18 @@ module Aspera
|
|
|
152
153
|
end
|
|
153
154
|
|
|
154
155
|
def ats_api_v2_auth_ibm(rest_add_headers={})
|
|
155
|
-
return Rest.new(
|
|
156
|
-
base_url:
|
|
156
|
+
return Rest.new(
|
|
157
|
+
base_url: "#{Api::Ats::SERVICE_BASE_URL}/v2",
|
|
157
158
|
headers: rest_add_headers,
|
|
158
159
|
auth: {
|
|
159
|
-
type:
|
|
160
|
-
|
|
160
|
+
type: :oauth2,
|
|
161
|
+
grant_method: :generic,
|
|
162
|
+
base_url: 'https://iam.bluemix.net/identity',
|
|
161
163
|
# does not work: base_url: 'https://iam.cloud.ibm.com/identity',
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
apikey: options.get_option(:ibm_api_key, mandatory: true)
|
|
167
|
-
}}})
|
|
164
|
+
grant_type: 'urn:ibm:params:oauth:grant-type:apikey',
|
|
165
|
+
response_type: 'cloud_iam',
|
|
166
|
+
apikey: options.get_option(:ibm_api_key, mandatory: true)
|
|
167
|
+
})
|
|
168
168
|
end
|
|
169
169
|
|
|
170
170
|
def execute_action_api_key
|
|
@@ -200,7 +200,7 @@ module Aspera
|
|
|
200
200
|
when :delete
|
|
201
201
|
ats_ibm_api.delete("api_keys/#{concerned_id}")
|
|
202
202
|
return Main.result_status("deleted #{concerned_id}")
|
|
203
|
-
else
|
|
203
|
+
else Aspera.error_unexpected_value(command)
|
|
204
204
|
end
|
|
205
205
|
end
|
|
206
206
|
|
|
@@ -213,7 +213,7 @@ module Aspera
|
|
|
213
213
|
command = options.get_next_command(actions)
|
|
214
214
|
@ats_api_pub_v1_cache = ats_api_arg
|
|
215
215
|
# keep as member variable as we may want to use the api in AoC name space
|
|
216
|
-
@ats_api_pub =
|
|
216
|
+
@ats_api_pub = Api::Ats.new
|
|
217
217
|
case command
|
|
218
218
|
when :cluster # display general ATS cluster information, this uses public API, no auth
|
|
219
219
|
return execute_action_cluster_pub
|
|
@@ -224,7 +224,7 @@ module Aspera
|
|
|
224
224
|
when :aws_trust_policy
|
|
225
225
|
res = ats_api_pub_v1.read('aws/trustpolicy', {region: options.get_option(:region, mandatory: true)})[:data]
|
|
226
226
|
return {type: :single_object, data: res}
|
|
227
|
-
else
|
|
227
|
+
else Aspera.error_unexpected_value(command)
|
|
228
228
|
end
|
|
229
229
|
end
|
|
230
230
|
|
|
@@ -234,5 +234,5 @@ module Aspera
|
|
|
234
234
|
end
|
|
235
235
|
end
|
|
236
236
|
end
|
|
237
|
-
end
|
|
238
|
-
end
|
|
237
|
+
end
|
|
238
|
+
end
|
|
@@ -5,16 +5,15 @@ require 'aspera/rest'
|
|
|
5
5
|
module Aspera
|
|
6
6
|
module Cli
|
|
7
7
|
module Plugins
|
|
8
|
-
class Bss <
|
|
8
|
+
class Bss < Cli::BasicAuthPlugin
|
|
9
9
|
ACTIONS = %i[subscription].freeze
|
|
10
10
|
|
|
11
11
|
FIELDS = {
|
|
12
12
|
'bssSubscriptions' => %w[id name termVolumeGb termMonths trial startDate endDate plan renewalType chargeAgreementNumber customerName]
|
|
13
13
|
}.freeze
|
|
14
14
|
|
|
15
|
-
def initialize(env)
|
|
16
|
-
super
|
|
17
|
-
@api_bss = env[:bss_api] if env.key?(:bss_api)
|
|
15
|
+
def initialize(**env)
|
|
16
|
+
super
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
def all_fields(name)
|