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.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/BUGS.md +29 -3
  4. data/CHANGELOG.md +375 -280
  5. data/CONTRIBUTING.md +71 -18
  6. data/README.md +1978 -1656
  7. data/bin/ascli +13 -31
  8. data/bin/asession +32 -22
  9. data/examples/dascli +2 -2
  10. data/lib/aspera/agent/alpha.rb +117 -0
  11. data/lib/aspera/agent/base.rb +61 -0
  12. data/lib/aspera/{fasp/agent_connect.rb → agent/connect.rb} +13 -11
  13. data/lib/aspera/{fasp/agent_direct.rb → agent/direct.rb} +116 -116
  14. data/lib/aspera/{fasp/agent_httpgw.rb → agent/httpgw.rb} +21 -19
  15. data/lib/aspera/{fasp/agent_node.rb → agent/node.rb} +21 -33
  16. data/lib/aspera/agent/trsdk.rb +188 -0
  17. data/lib/aspera/api/aoc.rb +586 -0
  18. data/lib/aspera/api/ats.rb +46 -0
  19. data/lib/aspera/api/cos_node.rb +95 -0
  20. data/lib/aspera/api/node.rb +344 -0
  21. data/lib/aspera/ascmd.rb +47 -14
  22. data/lib/aspera/{fasp → ascp}/installation.rb +54 -15
  23. data/lib/aspera/{fasp → ascp}/management.rb +14 -14
  24. data/lib/aspera/{fasp → ascp}/products.rb +1 -1
  25. data/lib/aspera/assert.rb +45 -0
  26. data/lib/aspera/cli/basic_auth_plugin.rb +11 -10
  27. data/lib/aspera/cli/extended_value.rb +5 -5
  28. data/lib/aspera/cli/formatter.rb +27 -14
  29. data/lib/aspera/cli/hints.rb +7 -6
  30. data/lib/aspera/cli/main.rb +49 -29
  31. data/lib/aspera/cli/manager.rb +46 -36
  32. data/lib/aspera/cli/plugin.rb +34 -20
  33. data/lib/aspera/cli/plugin_factory.rb +61 -0
  34. data/lib/aspera/cli/plugins/alee.rb +7 -7
  35. data/lib/aspera/cli/plugins/aoc.rb +168 -132
  36. data/lib/aspera/cli/plugins/ats.rb +33 -33
  37. data/lib/aspera/cli/plugins/bss.rb +3 -4
  38. data/lib/aspera/cli/plugins/config.rb +250 -272
  39. data/lib/aspera/cli/plugins/console.rb +8 -6
  40. data/lib/aspera/cli/plugins/cos.rb +20 -19
  41. data/lib/aspera/cli/plugins/faspex.rb +71 -60
  42. data/lib/aspera/cli/plugins/faspex5.rb +212 -133
  43. data/lib/aspera/cli/plugins/node.rb +83 -75
  44. data/lib/aspera/cli/plugins/orchestrator.rb +36 -44
  45. data/lib/aspera/cli/plugins/preview.rb +33 -31
  46. data/lib/aspera/cli/plugins/server.rb +33 -32
  47. data/lib/aspera/cli/plugins/shares.rb +39 -33
  48. data/lib/aspera/cli/sync_actions.rb +9 -9
  49. data/lib/aspera/cli/transfer_agent.rb +45 -25
  50. data/lib/aspera/cli/transfer_progress.rb +2 -3
  51. data/lib/aspera/cli/version.rb +1 -1
  52. data/lib/aspera/colors.rb +5 -0
  53. data/lib/aspera/command_line_builder.rb +16 -14
  54. data/lib/aspera/coverage.rb +21 -0
  55. data/lib/aspera/data_repository.rb +33 -2
  56. data/lib/aspera/environment.rb +5 -4
  57. data/lib/aspera/faspex_gw.rb +13 -11
  58. data/lib/aspera/faspex_postproc.rb +6 -5
  59. data/lib/aspera/id_generator.rb +4 -2
  60. data/lib/aspera/json_rpc.rb +10 -8
  61. data/lib/aspera/keychain/encrypted_hash.rb +46 -11
  62. data/lib/aspera/keychain/macos_security.rb +29 -22
  63. data/lib/aspera/log.rb +5 -4
  64. data/lib/aspera/nagios.rb +7 -2
  65. data/lib/aspera/node_simulator.rb +213 -0
  66. data/lib/aspera/oauth/base.rb +143 -0
  67. data/lib/aspera/oauth/factory.rb +124 -0
  68. data/lib/aspera/oauth/generic.rb +34 -0
  69. data/lib/aspera/oauth/jwt.rb +51 -0
  70. data/lib/aspera/oauth/url_json.rb +31 -0
  71. data/lib/aspera/oauth/web.rb +50 -0
  72. data/lib/aspera/oauth.rb +5 -328
  73. data/lib/aspera/open_application.rb +7 -7
  74. data/lib/aspera/persistency_action_once.rb +13 -14
  75. data/lib/aspera/persistency_folder.rb +3 -2
  76. data/lib/aspera/preview/file_types.rb +53 -267
  77. data/lib/aspera/preview/generator.rb +7 -5
  78. data/lib/aspera/preview/terminal.rb +17 -7
  79. data/lib/aspera/preview/utils.rb +8 -7
  80. data/lib/aspera/proxy_auto_config.rb +6 -3
  81. data/lib/aspera/rest.rb +187 -140
  82. data/lib/aspera/rest_error_analyzer.rb +1 -0
  83. data/lib/aspera/rest_errors_aspera.rb +5 -3
  84. data/lib/aspera/resumer.rb +77 -0
  85. data/lib/aspera/secret_hider.rb +5 -2
  86. data/lib/aspera/ssh.rb +15 -8
  87. data/lib/aspera/temp_file_manager.rb +1 -1
  88. data/lib/aspera/{fasp → transfer}/error.rb +3 -3
  89. data/lib/aspera/{fasp → transfer}/error_info.rb +1 -1
  90. data/lib/aspera/{fasp → transfer}/faux_file.rb +1 -1
  91. data/lib/aspera/{fasp → transfer}/parameters.rb +95 -120
  92. data/lib/aspera/{fasp/transfer_spec.rb → transfer/spec.rb} +23 -19
  93. data/lib/aspera/{fasp/parameters.yaml → transfer/spec.yaml} +4 -99
  94. data/lib/aspera/transfer/sync.rb +273 -0
  95. data/lib/aspera/{fasp → transfer}/uri.rb +10 -9
  96. data/lib/aspera/web_server_simple.rb +12 -3
  97. data.tar.gz.sig +0 -0
  98. metadata +92 -68
  99. metadata.gz.sig +0 -0
  100. data/lib/aspera/aoc.rb +0 -606
  101. data/lib/aspera/ats_api.rb +0 -47
  102. data/lib/aspera/cos_node.rb +0 -93
  103. data/lib/aspera/fasp/agent_aspera.rb +0 -126
  104. data/lib/aspera/fasp/agent_base.rb +0 -48
  105. data/lib/aspera/fasp/agent_trsdk.rb +0 -146
  106. data/lib/aspera/fasp/resume_policy.rb +0 -77
  107. data/lib/aspera/node.rb +0 -338
  108. 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/ats_api'
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 < Aspera::Cli::Plugin
15
+ class Ats < Cli::Plugin
14
16
  CLOUD_TABLE = %w[id name].freeze
15
- def initialize(env)
16
- super(env)
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: AtsApi.base_url + '/pub/v1',
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 = Aspera::Node.new(params: {
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: @agents[:config].lookup_secret(url: node_url, username: access_key_id)
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(@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'])
120
122
  when :cluster
121
- ats_url = ats_api_pub_v1.params[:base_url]
122
- rest_params = {
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: @agents[:config].lookup_secret(url: ats_url, username: access_key_id)
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 raise 'INTERNAL ERROR'
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: AtsApi.base_url + '/v2',
156
+ return Rest.new(
157
+ base_url: "#{Api::Ats::SERVICE_BASE_URL}/v2",
157
158
  headers: rest_add_headers,
158
159
  auth: {
159
- type: :oauth2,
160
- base_url: 'https://iam.bluemix.net/identity',
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
- grant_method: :generic,
163
- generic: {
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
- }}})
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 raise 'INTERNAL ERROR'
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 = AtsApi.new
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 raise 'ERROR'
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 # Cli
238
- 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)