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