aspera-cli 4.5.0 → 4.8.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 +1 -0
  3. data/README.md +1894 -1574
  4. data/bin/ascli +21 -1
  5. data/bin/asession +38 -34
  6. data/docs/test_env.conf +14 -3
  7. data/examples/aoc.rb +17 -15
  8. data/examples/dascli +26 -0
  9. data/examples/faspex4.rb +42 -35
  10. data/examples/proxy.pac +1 -1
  11. data/examples/transfer.rb +38 -37
  12. data/lib/aspera/aoc.rb +245 -205
  13. data/lib/aspera/ascmd.rb +111 -90
  14. data/lib/aspera/ats_api.rb +16 -14
  15. data/lib/aspera/cli/basic_auth_plugin.rb +19 -18
  16. data/lib/aspera/cli/extended_value.rb +50 -39
  17. data/lib/aspera/cli/formater.rb +161 -135
  18. data/lib/aspera/cli/info.rb +18 -0
  19. data/lib/aspera/cli/listener/line_dump.rb +4 -2
  20. data/lib/aspera/cli/listener/logger.rb +3 -1
  21. data/lib/aspera/cli/listener/progress.rb +20 -21
  22. data/lib/aspera/cli/listener/progress_multi.rb +29 -31
  23. data/lib/aspera/cli/main.rb +194 -183
  24. data/lib/aspera/cli/manager.rb +213 -206
  25. data/lib/aspera/cli/plugin.rb +71 -49
  26. data/lib/aspera/cli/plugins/alee.rb +8 -7
  27. data/lib/aspera/cli/plugins/aoc.rb +675 -558
  28. data/lib/aspera/cli/plugins/ats.rb +116 -109
  29. data/lib/aspera/cli/plugins/bss.rb +35 -34
  30. data/lib/aspera/cli/plugins/config.rb +722 -542
  31. data/lib/aspera/cli/plugins/console.rb +28 -22
  32. data/lib/aspera/cli/plugins/cos.rb +28 -37
  33. data/lib/aspera/cli/plugins/faspex.rb +281 -227
  34. data/lib/aspera/cli/plugins/faspex5.rb +129 -84
  35. data/lib/aspera/cli/plugins/node.rb +426 -232
  36. data/lib/aspera/cli/plugins/orchestrator.rb +106 -98
  37. data/lib/aspera/cli/plugins/preview.rb +196 -191
  38. data/lib/aspera/cli/plugins/server.rb +131 -126
  39. data/lib/aspera/cli/plugins/shares.rb +49 -36
  40. data/lib/aspera/cli/plugins/sync.rb +27 -28
  41. data/lib/aspera/cli/transfer_agent.rb +84 -79
  42. data/lib/aspera/cli/version.rb +3 -1
  43. data/lib/aspera/colors.rb +37 -28
  44. data/lib/aspera/command_line_builder.rb +84 -63
  45. data/lib/aspera/cos_node.rb +68 -34
  46. data/lib/aspera/data_repository.rb +4 -2
  47. data/lib/aspera/environment.rb +61 -46
  48. data/lib/aspera/fasp/agent_base.rb +36 -31
  49. data/lib/aspera/fasp/agent_connect.rb +44 -37
  50. data/lib/aspera/fasp/agent_direct.rb +101 -104
  51. data/lib/aspera/fasp/agent_httpgw.rb +91 -90
  52. data/lib/aspera/fasp/agent_node.rb +36 -33
  53. data/lib/aspera/fasp/agent_trsdk.rb +28 -31
  54. data/lib/aspera/fasp/error.rb +3 -1
  55. data/lib/aspera/fasp/error_info.rb +81 -54
  56. data/lib/aspera/fasp/installation.rb +171 -151
  57. data/lib/aspera/fasp/listener.rb +2 -0
  58. data/lib/aspera/fasp/parameters.rb +105 -111
  59. data/lib/aspera/fasp/parameters.yaml +305 -249
  60. data/lib/aspera/fasp/resume_policy.rb +20 -20
  61. data/lib/aspera/fasp/transfer_spec.rb +27 -0
  62. data/lib/aspera/fasp/uri.rb +31 -29
  63. data/lib/aspera/faspex_gw.rb +95 -118
  64. data/lib/aspera/hash_ext.rb +12 -13
  65. data/lib/aspera/id_generator.rb +11 -9
  66. data/lib/aspera/keychain/encrypted_hash.rb +73 -57
  67. data/lib/aspera/keychain/macos_security.rb +27 -29
  68. data/lib/aspera/log.rb +40 -39
  69. data/lib/aspera/nagios.rb +24 -22
  70. data/lib/aspera/node.rb +38 -30
  71. data/lib/aspera/oauth.rb +217 -248
  72. data/lib/aspera/open_application.rb +9 -7
  73. data/lib/aspera/persistency_action_once.rb +15 -14
  74. data/lib/aspera/persistency_folder.rb +15 -18
  75. data/lib/aspera/preview/file_types.rb +266 -270
  76. data/lib/aspera/preview/generator.rb +94 -92
  77. data/lib/aspera/preview/image_error.png +0 -0
  78. data/lib/aspera/preview/options.rb +20 -17
  79. data/lib/aspera/preview/utils.rb +99 -102
  80. data/lib/aspera/preview/video_error.png +0 -0
  81. data/lib/aspera/{proxy_auto_config.erb.js → proxy_auto_config.js} +23 -31
  82. data/lib/aspera/proxy_auto_config.rb +114 -21
  83. data/lib/aspera/rest.rb +144 -142
  84. data/lib/aspera/rest_call_error.rb +3 -2
  85. data/lib/aspera/rest_error_analyzer.rb +31 -31
  86. data/lib/aspera/rest_errors_aspera.rb +18 -16
  87. data/lib/aspera/secret_hider.rb +68 -0
  88. data/lib/aspera/ssh.rb +20 -16
  89. data/lib/aspera/sync.rb +57 -54
  90. data/lib/aspera/temp_file_manager.rb +20 -14
  91. data/lib/aspera/timer_limiter.rb +10 -8
  92. data/lib/aspera/uri_reader.rb +14 -15
  93. data/lib/aspera/web_auth.rb +85 -80
  94. data.tar.gz.sig +0 -0
  95. metadata +169 -40
  96. metadata.gz.sig +2 -0
  97. data/bin/dascli +0 -13
  98. data/docs/Makefile +0 -63
  99. data/docs/README.erb.md +0 -4221
  100. data/docs/README.md +0 -13
  101. data/docs/diagrams.txt +0 -49
  102. data/docs/doc_tools.rb +0 -58
  103. data/lib/aspera/cli/plugins/shares2.rb +0 -114
  104. data/lib/aspera/fasp/default.rb +0 -17
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'aspera/cli/plugins/node'
2
4
  require 'aspera/ats_api'
3
5
 
@@ -10,202 +12,207 @@ module Aspera
10
12
  class Ats < Plugin
11
13
  def initialize(env)
12
14
  super(env)
13
- self.options.add_opt_simple(:ibm_api_key,"IBM API key, see https://cloud.ibm.com/iam/apikeys")
14
- self.options.add_opt_simple(:instance,"ATS instance in ibm cloud")
15
- self.options.add_opt_simple(:ats_key,"ATS key identifier (ats_xxx)")
16
- self.options.add_opt_simple(:ats_secret,"ATS key secret")
17
- self.options.add_opt_simple(:params,"Parameters access key creation (@json:)")
18
- self.options.add_opt_simple(:cloud,"Cloud provider")
19
- self.options.add_opt_simple(:region,"Cloud region")
20
- self.options.parse_options!
15
+ options.add_opt_simple(:ibm_api_key,'IBM API key, see https://cloud.ibm.com/iam/apikeys')
16
+ options.add_opt_simple(:instance,'ATS instance in ibm cloud')
17
+ options.add_opt_simple(:ats_key,'ATS key identifier (ats_xxx)')
18
+ options.add_opt_simple(:ats_secret,'ATS key secret')
19
+ options.add_opt_simple(:params,'Parameters access key creation (@json:)')
20
+ options.add_opt_simple(:cloud,'Cloud provider')
21
+ options.add_opt_simple(:region,'Cloud region')
22
+ options.parse_options!
21
23
  end
22
24
 
23
- #
24
25
  def server_by_cloud_region
25
26
  # todo: provide list ?
26
- cloud=self.options.get_option(:cloud,:mandatory).upcase
27
- region=self.options.get_option(:region,:mandatory)
27
+ cloud = options.get_option(:cloud,is_type: :mandatory).upcase
28
+ region = options.get_option(:region,is_type: :mandatory)
28
29
  return @ats_api_pub.read("servers/#{cloud}/#{region}")[:data]
29
30
  end
30
31
 
31
32
  # require api key only if needed
32
33
  def ats_api_pub_v1
33
34
  return @ats_api_pub_v1_cache unless @ats_api_pub_v1_cache.nil?
34
- @ats_api_pub_v1_cache=Rest.new({
35
- :base_url => AtsApi.base_url+'/pub/v1',
36
- :auth => {
37
- :type => :basic,
38
- :username => self.options.get_option(:ats_key,:mandatory),
39
- :password => self.options.get_option(:ats_secret,:mandatory)}
35
+ @ats_api_pub_v1_cache = Rest.new({
36
+ base_url: AtsApi.base_url + '/pub/v1',
37
+ auth: {
38
+ type: :basic,
39
+ username: options.get_option(:ats_key,is_type: :mandatory),
40
+ password: options.get_option(:ats_secret,is_type: :mandatory)}
40
41
  })
41
42
  end
42
43
 
43
44
  def execute_action_access_key
44
- commands=[:create,:list,:show,:modify,:delete,:node,:cluster,:entitlement]
45
- command=self.options.get_next_command(commands)
45
+ commands = %i[create list show modify delete node cluster entitlement]
46
+ command = options.get_next_command(commands)
46
47
  # those dont require access key id
47
- access_key_id=self.instance_identifier() unless [:create,:list].include?(command)
48
+ access_key_id = instance_identifier unless %i[create list].include?(command)
48
49
  case command
49
50
  when :create
50
- params=self.options.get_option(:params,:optional) || {}
51
- server_data=nil
51
+ params = options.get_option(:params) || {}
52
+ server_data = nil
52
53
  # if transfer_server_id not provided, get it from command line options
53
54
  if !params.has_key?('transfer_server_id')
54
- server_data=server_by_cloud_region
55
- params['transfer_server_id']=server_data['id']
55
+ server_data = server_by_cloud_region
56
+ params['transfer_server_id'] = server_data['id']
56
57
  end
57
58
  Log.log.debug("using params: #{params}".bg_red.gray)
58
59
  if params.has_key?('storage')
59
60
  case params['storage']['type']
60
61
  # here we need somehow to map storage type to field to get for auth end point
61
62
  when 'ibm-s3'
62
- server_data2=nil
63
+ server_data2 = nil
63
64
  if server_data.nil?
64
- server_data2=@ats_api_pub.all_servers.select{|s|s['id'].eql?(params['transfer_server_id'])}.first
65
+ server_data2 = @ats_api_pub.all_servers.find{|s|s['id'].eql?(params['transfer_server_id'])}
65
66
  raise "no such transfer server id: #{params['transfer_server_id']}" if server_data2.nil?
66
67
  else
67
- server_data2=@ats_api_pub.all_servers.select{|s|s['cloud'].eql?(server_data['cloud']) and s['region'].eql?(server_data['region']) and s.has_key?('s3_authentication_endpoint')}.first
68
+ server_data2 = @ats_api_pub.all_servers.find do |s|
69
+ s['cloud'].eql?(server_data['cloud']) &&
70
+ s['region'].eql?(server_data['region']) &&
71
+ s.has_key?('s3_authentication_endpoint')
72
+ end
68
73
  raise "no such transfer server id: #{params['transfer_server_id']}" if server_data2.nil?
69
74
  # specific one do not have s3 end point in id
70
- params['transfer_server_id']=server_data2['id']
75
+ params['transfer_server_id'] = server_data2['id']
71
76
  end
72
77
  if !params['storage'].has_key?('authentication_endpoint')
73
78
  params['storage']['endpoint'] = server_data2['s3_authentication_endpoint']
74
79
  end
75
80
  end
76
81
  end
77
- res=ats_api_pub_v1.create('access_keys',params)
78
- return {:type=>:single_object, :data=>res[:data]}
82
+ res = ats_api_pub_v1.create('access_keys',params)
83
+ return {type: :single_object, data: res[:data]}
79
84
  # TODO : action : modify, with "PUT"
80
85
  when :list
81
- params=self.options.get_option(:params,:optional) || {'offset'=>0,'max_results'=>1000}
82
- res=ats_api_pub_v1.read("access_keys",params)
83
- return {:type=>:object_list, :data=>res[:data]['data'], :fields => ['name','id','created.at','modified.at']}
86
+ params = options.get_option(:params) || {'offset' => 0,'max_results' => 1000}
87
+ res = ats_api_pub_v1.read('access_keys',params)
88
+ return {type: :object_list, data: res[:data]['data'], fields: ['name','id','created.at','modified.at']}
84
89
  when :show
85
- res=ats_api_pub_v1.read("access_keys/#{access_key_id}")
86
- return {:type=>:single_object, :data=>res[:data]}
90
+ res = ats_api_pub_v1.read("access_keys/#{access_key_id}")
91
+ return {type: :single_object, data: res[:data]}
87
92
  when :modify
88
- params=self.options.get_option(:value,:mandatory)
89
- params["id"]=access_key_id
90
- res=ats_api_pub_v1.update("access_keys/#{access_key_id}",params)
93
+ params = options.get_option(:value,is_type: :mandatory)
94
+ params['id'] = access_key_id
95
+ ats_api_pub_v1.update("access_keys/#{access_key_id}",params)
91
96
  return Main.result_status('modified')
92
97
  when :entitlement
93
- ak=ats_api_pub_v1.read("access_keys/#{access_key_id}")[:data]
94
- api_bss=AoC.metering_api(ak['license']['entitlement_id'],ak['license']['customer_id'])
95
- return {:type=>:single_object, :data=>api_bss.read('entitlement')[:data]}
98
+ ak = ats_api_pub_v1.read("access_keys/#{access_key_id}")[:data]
99
+ api_bss = AoC.metering_api(ak['license']['entitlement_id'],ak['license']['customer_id'])
100
+ return {type: :single_object, data: api_bss.read('entitlement')[:data]}
96
101
  when :delete
97
- res=ats_api_pub_v1.delete("access_keys/#{access_key_id}")
102
+ ats_api_pub_v1.delete("access_keys/#{access_key_id}")
98
103
  return Main.result_status("deleted #{access_key_id}")
99
104
  when :node
100
- ak_data=ats_api_pub_v1.read("access_keys/#{access_key_id}")[:data]
101
- server_data=@ats_api_pub.all_servers.select {|i| i['id'].start_with?(ak_data['transfer_server_id'])}.first
102
- raise CliError,"no such server found" if server_data.nil?
103
- base_url=server_data['transfer_setup_url']
104
- api_node=Rest.new({
105
- :base_url => base_url,
106
- :auth => {
107
- :type => :basic,
108
- :username => access_key_id,
109
- :password => @agents[:config].get_secret(url: base_url,username: access_key_id)
105
+ ak_data = ats_api_pub_v1.read("access_keys/#{access_key_id}")[:data]
106
+ server_data = @ats_api_pub.all_servers.find {|i| i['id'].start_with?(ak_data['transfer_server_id'])}
107
+ raise CliError,'no such server found' if server_data.nil?
108
+ base_url = server_data['transfer_setup_url']
109
+ api_node = Rest.new({
110
+ base_url: base_url,
111
+ auth: {
112
+ type: :basic,
113
+ username: access_key_id,
114
+ password: @agents[:config].get_secret(url: base_url,username: access_key_id)
110
115
  }})
111
- command=self.options.get_next_command(Node::COMMON_ACTIONS)
116
+ command = options.get_next_command(Node::COMMON_ACTIONS)
112
117
  return Node.new(@agents.merge(skip_basic_auth_options: true, node_api: api_node)).execute_action(command)
113
118
  when :cluster
114
- base_url=ats_api_pub_v1.params[:base_url]
115
- rest_params={
116
- :base_url => base_url,
117
- :auth => {
118
- :type => :basic,
119
- :username => access_key_id,
120
- :password => @agents[:config].get_secret(url: base_url, username: access_key_id)
119
+ base_url = ats_api_pub_v1.params[:base_url]
120
+ rest_params = {
121
+ base_url: base_url,
122
+ auth: {
123
+ type: :basic,
124
+ username: access_key_id,
125
+ password: @agents[:config].get_secret(url: base_url, username: access_key_id)
121
126
  }}
122
- api_ak_auth=Rest.new(rest_params)
123
- return {:type=>:single_object, :data=>api_ak_auth.read("servers")[:data]}
124
- else raise "INTERNAL ERROR"
127
+ api_ak_auth = Rest.new(rest_params)
128
+ return {type: :single_object, data: api_ak_auth.read('servers')[:data]}
129
+ else raise 'INTERNAL ERROR'
125
130
  end
126
131
  end
127
132
 
128
133
  def execute_action_cluster_pub
129
- command=self.options.get_next_command([ :clouds, :list, :show])
134
+ command = options.get_next_command(%i[clouds list show])
130
135
  case command
131
136
  when :clouds
132
- return {:type=>:single_object, :data=>@ats_api_pub.cloud_names, :columns=>['id','name']}
137
+ return {type: :single_object, data: @ats_api_pub.cloud_names, columns: %w[id name]}
133
138
  when :list
134
- return {:type=>:object_list, :data=>@ats_api_pub.all_servers, :fields=>['id','cloud','region']}
139
+ return {type: :object_list, data: @ats_api_pub.all_servers, fields: %w[id cloud region]}
135
140
  when :show
136
- if self.options.get_option(:cloud,:optional) or self.options.get_option(:region,:optional)
137
- server_data=server_by_cloud_region
141
+ if options.get_option(:cloud) || options.get_option(:region,is_type: :optional)
142
+ server_data = server_by_cloud_region
138
143
  else
139
- server_id=instance_identifier()
140
- server_data=@ats_api_pub.all_servers.select {|i| i['id'].eql?(server_id)}.first
141
- raise "no such server id" if server_data.nil?
144
+ server_id = instance_identifier
145
+ server_data = @ats_api_pub.all_servers.find {|i| i['id'].eql?(server_id)}
146
+ raise 'no such server id' if server_data.nil?
142
147
  end
143
- return {:type=>:single_object, :data=>server_data}
148
+ return {type: :single_object, data: server_data}
144
149
  end
145
150
  end
146
151
 
147
152
  def ats_api_v2_auth_ibm(rest_add_headers={})
148
153
  return Rest.new({
149
- :base_url => AtsApi.base_url+'/v2',
150
- :headers => rest_add_headers,
151
- :auth => {
152
- :type => :oauth2,
153
- :base_url => 'https://iam.bluemix.net/identity',
154
- #does not work: :base_url => 'https://iam.cloud.ibm.com/identity',
155
- :grant => :ibm_apikey,
156
- :api_key => self.options.get_option(:ibm_api_key,:mandatory)
157
- }
158
- })
154
+ base_url: AtsApi.base_url + '/v2',
155
+ headers: rest_add_headers,
156
+ auth: {
157
+ type: :oauth2,
158
+ base_url: 'https://iam.bluemix.net/identity',
159
+ #does not work: base_url: 'https://iam.cloud.ibm.com/identity',
160
+ crtype: :generic,
161
+ generic: {
162
+ grant_type: 'urn:ibm:params:oauth:grant-type:apikey',
163
+ response_type: 'cloud_iam',
164
+ apikey: options.get_option(:ibm_api_key,is_type: :mandatory)
165
+ }}})
159
166
  end
160
167
 
161
168
  def execute_action_api_key
162
- command=self.options.get_next_command([:instances, :create, :list, :show, :delete])
163
- if [:show,:delete].include?(command)
164
- concerned_id=self.instance_identifier()
169
+ command = options.get_next_command(%i[instances create list show delete])
170
+ if %i[show delete].include?(command)
171
+ concerned_id = instance_identifier
165
172
  end
166
- rest_add_header={}
173
+ rest_add_header = {}
167
174
  if !command.eql?(:instances)
168
- instance=self.options.get_option(:instance,:optional)
175
+ instance = options.get_option(:instance)
169
176
  #Log.log.error("1>>#{instance}".red)
170
177
  if instance.nil?
171
178
  # Take the first Aspera on Cloud transfer service instance ID if not provided by user
172
- instance=ats_api_v2_auth_ibm.read('instances')[:data]['data'].first
179
+ instance = ats_api_v2_auth_ibm.read('instances')[:data]['data'].first
173
180
  self.format.display_status("using first instance: #{instance}")
174
181
  end
175
182
  #Log.log.error("2>>#{instance}".red)
176
- rest_add_header={'X-ATS-Service-Instance-Id'=>instance}
183
+ rest_add_header = {'X-ATS-Service-Instance-Id' => instance}
177
184
  end
178
- ats_ibm_api=ats_api_v2_auth_ibm(rest_add_header)
185
+ ats_ibm_api = ats_api_v2_auth_ibm(rest_add_header)
179
186
  case command
180
187
  when :instances
181
- instances=ats_ibm_api.read('instances')[:data]
188
+ instances = ats_ibm_api.read('instances')[:data]
182
189
  Log.log.warn("more instances remaining: #{instances['remaining']}") unless instances['remaining'].to_i.eql?(0)
183
- return {:type=>:value_list, :data=>instances['data'], :name=>'instance'}
190
+ return {type: :value_list, data: instances['data'], name: 'instance'}
184
191
  when :create
185
- create_value=self.options.get_option(:value,:optional)||{}
186
- created_key=ats_ibm_api.create('api_keys',create_value)[:data]
187
- return {:type=>:single_object, :data=>created_key}
192
+ create_value = options.get_option(:value) || {}
193
+ created_key = ats_ibm_api.create('api_keys',create_value)[:data]
194
+ return {type: :single_object, data: created_key}
188
195
  when :list # list known api keys in ATS (this require an api_key ...)
189
- res=ats_ibm_api.read('api_keys',{'offset'=>0,'max_results'=>1000})
190
- return {:type=>:value_list, :data=>res[:data]['data'], :name => 'ats_id'}
196
+ res = ats_ibm_api.read('api_keys',{'offset' => 0,'max_results' => 1000})
197
+ return {type: :value_list, data: res[:data]['data'], name: 'ats_id'}
191
198
  when :show # show one of api_key in ATS
192
- res=ats_ibm_api.read("api_keys/#{concerned_id}")
193
- return {:type=>:single_object, :data=>res[:data]}
194
- when :delete #
195
- res=ats_ibm_api.delete("api_keys/#{concerned_id}")
199
+ res = ats_ibm_api.read("api_keys/#{concerned_id}")
200
+ return {type: :single_object, data: res[:data]}
201
+ when :delete
202
+ ats_ibm_api.delete("api_keys/#{concerned_id}")
196
203
  return Main.result_status("deleted #{concerned_id}")
197
- else raise "INTERNAL ERROR"
204
+ else raise 'INTERNAL ERROR'
198
205
  end
199
206
  end
200
207
 
201
- ACTIONS=[ :cluster, :access_key ,:api_key, :aws_trust_policy]
208
+ ACTIONS = %i[cluster access_key api_key aws_trust_policy].freeze
202
209
 
203
210
  # called for legacy and AoC
204
211
  def execute_action_gen(ats_api_arg)
205
- actions=ACTIONS
212
+ actions = ACTIONS.dup
206
213
  actions.delete(:api_key) unless ats_api_arg.nil?
207
- command=self.options.get_next_command(actions)
208
- @ats_api_pub_v1_cache=ats_api_arg
214
+ command = options.get_next_command(actions)
215
+ @ats_api_pub_v1_cache = ats_api_arg
209
216
  # keep as member variable as we may want to use the api in AoC name space
210
217
  @ats_api_pub = AtsApi.new
211
218
  case command
@@ -216,9 +223,9 @@ module Aspera
216
223
  when :api_key # manage credential to access ATS API
217
224
  return execute_action_api_key
218
225
  when :aws_trust_policy
219
- res=ats_api_pub_v1.read('aws/trustpolicy',{:region=>self.options.get_option(:region,:mandatory)})[:data]
220
- return {:type=>:single_object, :data=>res}
221
- else raise "ERROR"
226
+ res = ats_api_pub_v1.read('aws/trustpolicy',{region: options.get_option(:region,is_type: :mandatory)})[:data]
227
+ return {type: :single_object, data: res}
228
+ else raise 'ERROR'
222
229
  end
223
230
  end
224
231
 
@@ -1,21 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'aspera/rest'
2
4
 
3
5
  module Aspera
4
6
  module Cli
5
7
  module Plugins
6
8
  class Bss < BasicAuthPlugin
9
+ ACTIONS = %i[subscription].freeze
7
10
 
8
- ACTIONS=[ :subscription ]
9
-
10
- FIELDS={
11
- 'bssSubscriptions' => %w{id name termVolumeGb termMonths trial startDate endDate plan renewalType chargeAgreementNumber customerName}
12
- }
11
+ FIELDS = {
12
+ 'bssSubscriptions' => %w[id name termVolumeGb termMonths trial startDate endDate plan renewalType chargeAgreementNumber customerName]
13
+ }.freeze
13
14
 
14
15
  def initialize(env)
15
16
  super(env)
16
- if env.has_key?(:bss_api)
17
- @api_bss=env[:bss_api]
18
- end
17
+ @api_bss = env[:bss_api] if env.has_key?(:bss_api)
19
18
  end
20
19
 
21
20
  def all_fields(name)
@@ -24,44 +23,46 @@ module Aspera
24
23
 
25
24
  def execute_action
26
25
  if @api_bss.nil?
27
- key = self.options.get_option(:password,:mandatory)
28
- @api_bss=Rest.new(
29
- base_url: 'https://dashboard.bss.asperasoft.com/platform',
30
- headers: {cookie: "_dashboard_key=#{key}"})
26
+ key = options.get_option(:password,is_type: :mandatory)
27
+ @api_bss = Rest.new(
28
+ base_url: 'https://dashboard.bss.asperasoft.com/platform',
29
+ headers: {cookie: "_dashboard_key=#{key}"})
31
30
  end
32
- command=self.options.get_next_command(ACTIONS)
31
+ command = options.get_next_command(ACTIONS)
33
32
  case command
34
33
  when :subscription
35
- command=self.options.get_next_command([:find,:show, :instances])
36
- object='bssSubscriptions'
34
+ command = options.get_next_command(%i[find show instances])
35
+ object = 'bssSubscriptions'
37
36
  case command
38
37
  when :find
39
- query = self.options.get_option(:query,:mandatory) # AOC_ORGANIZATION_QUERY AOC_USER_EMAIL
40
- value = self.options.get_option(:value,:mandatory)
41
- request={
42
- 'variables'=>{'filter'=>{'key'=>query,'value'=>value}},
43
- 'query'=>"query($filter: BssSubscriptionFilter!) {#{object}(filter: $filter) { #{all_fields('bssSubscriptions')} } }"
38
+ query = options.get_option(:query,is_type: :mandatory) # AOC_ORGANIZATION_QUERY AOC_USER_EMAIL
39
+ value = options.get_option(:value,is_type: :mandatory)
40
+ request = {
41
+ 'variables' => {'filter' => {'key' => query,'value' => value}},
42
+ 'query' => "query($filter: BssSubscriptionFilter!) {#{object}(filter: $filter) { #{all_fields('bssSubscriptions')} } }"
44
43
  }
45
- result=@api_bss.create('graphql',request)[:data]
44
+ result = @api_bss.create('graphql',request)[:data]
46
45
  # give fields to keep order
47
- return {:type=>:object_list, :data=>result['data'][object],:fields=> FIELDS['bssSubscriptions']}
46
+ return {type: :object_list, data: result['data'][object],fields: FIELDS['bssSubscriptions']}
48
47
  when :show
49
- id = self.instance_identifier()
50
- request={
51
- 'variables'=>{'id'=>id},
52
- 'query'=>"query($id: ID!) {#{object}(id: $id) { #{all_fields('bssSubscriptions')} roleAssignments(uniqueSubjectId: true) { id subjectId } instances { id state planId serviceId ssmSubscriptionId entitlement { id } aocOrganization { id subdomainName name status tier urlId trialExpiresAt users(organizationAdmin: true) { id name email atsAdmin subscriptionAdmin } } } } }"
48
+ id = instance_identifier
49
+ request = {
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 '\
53
+ 'users(organizationAdmin: true) { id name email atsAdmin subscriptionAdmin } } } } }'
53
54
  }
54
- result=@api_bss.create('graphql',request)[:data]['data'][object].first
55
+ result = @api_bss.create('graphql',request)[:data]['data'][object].first
55
56
  result.delete('instances')
56
- return {:type=>:single_object, :data=>result}
57
+ return {type: :single_object, data: result}
57
58
  when :instances
58
- id = self.instance_identifier()
59
- request={
60
- 'variables'=>{'id'=>id},
61
- 'query'=>"query($id: ID!) {#{object}(id: $id) { aocOrganization { id subdomainName name status tier urlId trialExpiresAt } } } }"
59
+ id = instance_identifier
60
+ request = {
61
+ 'variables' => {'id' => id},
62
+ 'query' => "query($id: ID!) {#{object}(id: $id) { aocOrganization { id subdomainName name status tier urlId trialExpiresAt } } } }"
62
63
  }
63
- result=@api_bss.create('graphql',request)[:data]['data'][object].first
64
- return {:type=>:object_list, :data=>result['instances']}
64
+ result = @api_bss.create('graphql',request)[:data]['data'][object].first
65
+ return {type: :object_list, data: result['instances']}
65
66
  end
66
67
  end
67
68
  end