aspera-cli 4.14.0 → 4.16.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 (104) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/BUGS.md +29 -3
  4. data/CHANGELOG.md +300 -185
  5. data/CONTRIBUTING.md +74 -23
  6. data/README.md +2346 -1619
  7. data/bin/ascli +16 -25
  8. data/bin/asession +15 -15
  9. data/examples/dascli +2 -2
  10. data/examples/proxy.pac +1 -1
  11. data/lib/aspera/aoc.rb +216 -150
  12. data/lib/aspera/ascmd.rb +25 -18
  13. data/lib/aspera/assert.rb +45 -0
  14. data/lib/aspera/cli/basic_auth_plugin.rb +9 -6
  15. data/lib/aspera/cli/error.rb +17 -0
  16. data/lib/aspera/cli/extended_value.rb +51 -16
  17. data/lib/aspera/cli/formatter.rb +276 -174
  18. data/lib/aspera/cli/hints.rb +81 -0
  19. data/lib/aspera/cli/main.rb +114 -147
  20. data/lib/aspera/cli/manager.rb +181 -136
  21. data/lib/aspera/cli/plugin.rb +82 -64
  22. data/lib/aspera/cli/plugins/alee.rb +0 -1
  23. data/lib/aspera/cli/plugins/aoc.rb +327 -331
  24. data/lib/aspera/cli/plugins/ats.rb +12 -8
  25. data/lib/aspera/cli/plugins/bss.rb +2 -2
  26. data/lib/aspera/cli/plugins/config.rb +575 -439
  27. data/lib/aspera/cli/plugins/console.rb +40 -0
  28. data/lib/aspera/cli/plugins/cos.rb +4 -5
  29. data/lib/aspera/cli/plugins/faspex.rb +111 -92
  30. data/lib/aspera/cli/plugins/faspex5.rb +245 -182
  31. data/lib/aspera/cli/plugins/node.rb +239 -160
  32. data/lib/aspera/cli/plugins/orchestrator.rb +56 -19
  33. data/lib/aspera/cli/plugins/preview.rb +54 -38
  34. data/lib/aspera/cli/plugins/server.rb +63 -20
  35. data/lib/aspera/cli/plugins/shares.rb +64 -38
  36. data/lib/aspera/cli/sync_actions.rb +68 -0
  37. data/lib/aspera/cli/transfer_agent.rb +64 -67
  38. data/lib/aspera/cli/transfer_progress.rb +73 -0
  39. data/lib/aspera/cli/version.rb +1 -1
  40. data/lib/aspera/colors.rb +3 -1
  41. data/lib/aspera/command_line_builder.rb +27 -22
  42. data/lib/aspera/cos_node.rb +6 -4
  43. data/lib/aspera/coverage.rb +22 -0
  44. data/lib/aspera/data_repository.rb +33 -2
  45. data/lib/aspera/environment.rb +21 -8
  46. data/lib/aspera/fasp/agent_alpha.rb +116 -0
  47. data/lib/aspera/fasp/agent_base.rb +40 -76
  48. data/lib/aspera/fasp/agent_connect.rb +21 -22
  49. data/lib/aspera/fasp/agent_direct.rb +169 -179
  50. data/lib/aspera/fasp/agent_httpgw.rb +200 -195
  51. data/lib/aspera/fasp/agent_node.rb +43 -35
  52. data/lib/aspera/fasp/agent_trsdk.rb +124 -41
  53. data/lib/aspera/fasp/error_info.rb +2 -2
  54. data/lib/aspera/fasp/faux_file.rb +52 -0
  55. data/lib/aspera/fasp/installation.rb +89 -191
  56. data/lib/aspera/fasp/management.rb +249 -0
  57. data/lib/aspera/fasp/parameters.rb +86 -47
  58. data/lib/aspera/fasp/parameters.yaml +75 -8
  59. data/lib/aspera/fasp/products.rb +162 -0
  60. data/lib/aspera/fasp/resume_policy.rb +7 -5
  61. data/lib/aspera/fasp/sync.rb +273 -0
  62. data/lib/aspera/fasp/transfer_spec.rb +10 -8
  63. data/lib/aspera/fasp/uri.rb +6 -6
  64. data/lib/aspera/faspex_gw.rb +11 -8
  65. data/lib/aspera/faspex_postproc.rb +8 -7
  66. data/lib/aspera/hash_ext.rb +2 -2
  67. data/lib/aspera/id_generator.rb +3 -1
  68. data/lib/aspera/json_rpc.rb +51 -0
  69. data/lib/aspera/keychain/encrypted_hash.rb +46 -11
  70. data/lib/aspera/keychain/macos_security.rb +15 -13
  71. data/lib/aspera/line_logger.rb +23 -0
  72. data/lib/aspera/log.rb +61 -19
  73. data/lib/aspera/nagios.rb +7 -2
  74. data/lib/aspera/node.rb +105 -21
  75. data/lib/aspera/node_simulator.rb +214 -0
  76. data/lib/aspera/oauth.rb +57 -36
  77. data/lib/aspera/open_application.rb +4 -4
  78. data/lib/aspera/persistency_action_once.rb +13 -14
  79. data/lib/aspera/persistency_folder.rb +5 -4
  80. data/lib/aspera/preview/file_types.rb +56 -268
  81. data/lib/aspera/preview/generator.rb +28 -39
  82. data/lib/aspera/preview/options.rb +2 -0
  83. data/lib/aspera/preview/terminal.rb +36 -16
  84. data/lib/aspera/preview/utils.rb +23 -29
  85. data/lib/aspera/proxy_auto_config.rb +6 -3
  86. data/lib/aspera/rest.rb +127 -80
  87. data/lib/aspera/rest_call_error.rb +1 -1
  88. data/lib/aspera/rest_error_analyzer.rb +16 -14
  89. data/lib/aspera/rest_errors_aspera.rb +39 -34
  90. data/lib/aspera/secret_hider.rb +18 -17
  91. data/lib/aspera/ssh.rb +10 -5
  92. data/lib/aspera/temp_file_manager.rb +11 -4
  93. data/lib/aspera/web_auth.rb +10 -7
  94. data/lib/aspera/web_server_simple.rb +11 -5
  95. data.tar.gz.sig +0 -0
  96. metadata +108 -39
  97. metadata.gz.sig +0 -0
  98. data/lib/aspera/cli/listener/line_dump.rb +0 -19
  99. data/lib/aspera/cli/listener/logger.rb +0 -22
  100. data/lib/aspera/cli/listener/progress.rb +0 -50
  101. data/lib/aspera/cli/listener/progress_multi.rb +0 -84
  102. data/lib/aspera/cli/plugins/sync.rb +0 -44
  103. data/lib/aspera/fasp/listener.rb +0 -13
  104. data/lib/aspera/sync.rb +0 -213
@@ -1,7 +1,10 @@
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'
7
+ require 'aspera/assert'
5
8
 
6
9
  module Aspera
7
10
  module Cli
@@ -9,6 +12,7 @@ module Aspera
9
12
  # Access Aspera Transfer Service
10
13
  # https://developer.ibm.com/aspera/docs/ats-api-reference/creating-ats-api-keys/
11
14
  class Ats < Aspera::Cli::Plugin
15
+ CLOUD_TABLE = %w[id name].freeze
12
16
  def initialize(env)
13
17
  super(env)
14
18
  options.declare(:ibm_api_key, 'IBM API key, see https://cloud.ibm.com/iam/apikeys')
@@ -89,7 +93,7 @@ module Aspera
89
93
  res = ats_api_pub_v1.read("access_keys/#{access_key_id}")
90
94
  return {type: :single_object, data: res[:data]}
91
95
  when :modify
92
- params = value_create_modify(command: command, type: Hash)
96
+ params = value_create_modify(command: command)
93
97
  params['id'] = access_key_id
94
98
  ats_api_pub_v1.update("access_keys/#{access_key_id}", params)
95
99
  return Main.result_status('modified')
@@ -103,7 +107,7 @@ module Aspera
103
107
  when :node
104
108
  ak_data = ats_api_pub_v1.read("access_keys/#{access_key_id}")[:data]
105
109
  server_data = @ats_api_pub.all_servers.find {|i| i['id'].start_with?(ak_data['transfer_server_id'])}
106
- raise CliError, 'no such server found' if server_data.nil?
110
+ raise Cli::Error, 'no such server found' if server_data.nil?
107
111
  node_url = server_data['transfer_setup_url']
108
112
  api_node = Aspera::Node.new(params: {
109
113
  base_url: node_url,
@@ -113,7 +117,7 @@ module Aspera
113
117
  password: @agents[:config].lookup_secret(url: node_url, username: access_key_id)
114
118
  }})
115
119
  command = options.get_next_command(Node::COMMANDS_GEN4)
116
- return Node.new(@agents.merge(skip_basic_auth_options: true, node_api: api_node)).execute_command_gen4(command, ak_data['root_file_id'])
120
+ return Node.new(@agents, api: api_node).execute_command_gen4(command, ak_data['root_file_id'])
117
121
  when :cluster
118
122
  ats_url = ats_api_pub_v1.params[:base_url]
119
123
  rest_params = {
@@ -125,7 +129,7 @@ module Aspera
125
129
  }}
126
130
  api_ak_auth = Rest.new(rest_params)
127
131
  return {type: :single_object, data: api_ak_auth.read('servers')[:data]}
128
- else raise 'INTERNAL ERROR'
132
+ else error_unreachable_line
129
133
  end
130
134
  end
131
135
 
@@ -133,7 +137,7 @@ module Aspera
133
137
  command = options.get_next_command(%i[clouds list show])
134
138
  case command
135
139
  when :clouds
136
- return {type: :single_object, data: @ats_api_pub.cloud_names, columns: %w[id name]}
140
+ return {type: :object_list, data: @ats_api_pub.cloud_names.map { |k, v| CLOUD_TABLE.zip([k, v]).to_h }}
137
141
  when :list
138
142
  return {type: :object_list, data: @ats_api_pub.all_servers, fields: %w[id cloud region]}
139
143
  when :show
@@ -186,7 +190,7 @@ module Aspera
186
190
  Log.log.warn{"more instances remaining: #{instances['remaining']}"} unless instances['remaining'].to_i.eql?(0)
187
191
  return {type: :value_list, data: instances['data'], name: 'instance'}
188
192
  when :create
189
- created_key = ats_ibm_api.create('api_keys', value_create_modify(command: command, default: {}, type: Hash))[:data]
193
+ created_key = ats_ibm_api.create('api_keys', value_create_modify(command: command, default: {}))[:data]
190
194
  return {type: :single_object, data: created_key}
191
195
  when :list # list known api keys in ATS (this require an api_key ...)
192
196
  res = ats_ibm_api.read('api_keys', {'offset' => 0, 'max_results' => 1000})
@@ -197,7 +201,7 @@ module Aspera
197
201
  when :delete
198
202
  ats_ibm_api.delete("api_keys/#{concerned_id}")
199
203
  return Main.result_status("deleted #{concerned_id}")
200
- else raise 'INTERNAL ERROR'
204
+ else error_unreachable_line
201
205
  end
202
206
  end
203
207
 
@@ -221,7 +225,7 @@ module Aspera
221
225
  when :aws_trust_policy
222
226
  res = ats_api_pub_v1.read('aws/trustpolicy', {region: options.get_option(:region, mandatory: true)})[:data]
223
227
  return {type: :single_object, data: res}
224
- else raise 'ERROR'
228
+ else error_unexpected_value(command)
225
229
  end
226
230
  end
227
231
 
@@ -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