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