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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +1 -0
- data/README.md +1894 -1574
- data/bin/ascli +21 -1
- data/bin/asession +38 -34
- data/docs/test_env.conf +14 -3
- data/examples/aoc.rb +17 -15
- data/examples/dascli +26 -0
- data/examples/faspex4.rb +42 -35
- data/examples/proxy.pac +1 -1
- data/examples/transfer.rb +38 -37
- data/lib/aspera/aoc.rb +245 -205
- data/lib/aspera/ascmd.rb +111 -90
- data/lib/aspera/ats_api.rb +16 -14
- data/lib/aspera/cli/basic_auth_plugin.rb +19 -18
- data/lib/aspera/cli/extended_value.rb +50 -39
- data/lib/aspera/cli/formater.rb +161 -135
- data/lib/aspera/cli/info.rb +18 -0
- data/lib/aspera/cli/listener/line_dump.rb +4 -2
- data/lib/aspera/cli/listener/logger.rb +3 -1
- data/lib/aspera/cli/listener/progress.rb +20 -21
- data/lib/aspera/cli/listener/progress_multi.rb +29 -31
- data/lib/aspera/cli/main.rb +194 -183
- data/lib/aspera/cli/manager.rb +213 -206
- data/lib/aspera/cli/plugin.rb +71 -49
- data/lib/aspera/cli/plugins/alee.rb +8 -7
- data/lib/aspera/cli/plugins/aoc.rb +675 -558
- data/lib/aspera/cli/plugins/ats.rb +116 -109
- data/lib/aspera/cli/plugins/bss.rb +35 -34
- data/lib/aspera/cli/plugins/config.rb +722 -542
- data/lib/aspera/cli/plugins/console.rb +28 -22
- data/lib/aspera/cli/plugins/cos.rb +28 -37
- data/lib/aspera/cli/plugins/faspex.rb +281 -227
- data/lib/aspera/cli/plugins/faspex5.rb +129 -84
- data/lib/aspera/cli/plugins/node.rb +426 -232
- data/lib/aspera/cli/plugins/orchestrator.rb +106 -98
- data/lib/aspera/cli/plugins/preview.rb +196 -191
- data/lib/aspera/cli/plugins/server.rb +131 -126
- data/lib/aspera/cli/plugins/shares.rb +49 -36
- data/lib/aspera/cli/plugins/sync.rb +27 -28
- data/lib/aspera/cli/transfer_agent.rb +84 -79
- data/lib/aspera/cli/version.rb +3 -1
- data/lib/aspera/colors.rb +37 -28
- data/lib/aspera/command_line_builder.rb +84 -63
- data/lib/aspera/cos_node.rb +68 -34
- data/lib/aspera/data_repository.rb +4 -2
- data/lib/aspera/environment.rb +61 -46
- data/lib/aspera/fasp/agent_base.rb +36 -31
- data/lib/aspera/fasp/agent_connect.rb +44 -37
- data/lib/aspera/fasp/agent_direct.rb +101 -104
- data/lib/aspera/fasp/agent_httpgw.rb +91 -90
- data/lib/aspera/fasp/agent_node.rb +36 -33
- data/lib/aspera/fasp/agent_trsdk.rb +28 -31
- data/lib/aspera/fasp/error.rb +3 -1
- data/lib/aspera/fasp/error_info.rb +81 -54
- data/lib/aspera/fasp/installation.rb +171 -151
- data/lib/aspera/fasp/listener.rb +2 -0
- data/lib/aspera/fasp/parameters.rb +105 -111
- data/lib/aspera/fasp/parameters.yaml +305 -249
- data/lib/aspera/fasp/resume_policy.rb +20 -20
- data/lib/aspera/fasp/transfer_spec.rb +27 -0
- data/lib/aspera/fasp/uri.rb +31 -29
- data/lib/aspera/faspex_gw.rb +95 -118
- data/lib/aspera/hash_ext.rb +12 -13
- data/lib/aspera/id_generator.rb +11 -9
- data/lib/aspera/keychain/encrypted_hash.rb +73 -57
- data/lib/aspera/keychain/macos_security.rb +27 -29
- data/lib/aspera/log.rb +40 -39
- data/lib/aspera/nagios.rb +24 -22
- data/lib/aspera/node.rb +38 -30
- data/lib/aspera/oauth.rb +217 -248
- data/lib/aspera/open_application.rb +9 -7
- data/lib/aspera/persistency_action_once.rb +15 -14
- data/lib/aspera/persistency_folder.rb +15 -18
- data/lib/aspera/preview/file_types.rb +266 -270
- data/lib/aspera/preview/generator.rb +94 -92
- data/lib/aspera/preview/image_error.png +0 -0
- data/lib/aspera/preview/options.rb +20 -17
- data/lib/aspera/preview/utils.rb +99 -102
- data/lib/aspera/preview/video_error.png +0 -0
- data/lib/aspera/{proxy_auto_config.erb.js → proxy_auto_config.js} +23 -31
- data/lib/aspera/proxy_auto_config.rb +114 -21
- data/lib/aspera/rest.rb +144 -142
- data/lib/aspera/rest_call_error.rb +3 -2
- data/lib/aspera/rest_error_analyzer.rb +31 -31
- data/lib/aspera/rest_errors_aspera.rb +18 -16
- data/lib/aspera/secret_hider.rb +68 -0
- data/lib/aspera/ssh.rb +20 -16
- data/lib/aspera/sync.rb +57 -54
- data/lib/aspera/temp_file_manager.rb +20 -14
- data/lib/aspera/timer_limiter.rb +10 -8
- data/lib/aspera/uri_reader.rb +14 -15
- data/lib/aspera/web_auth.rb +85 -80
- data.tar.gz.sig +0 -0
- metadata +169 -40
- metadata.gz.sig +2 -0
- data/bin/dascli +0 -13
- data/docs/Makefile +0 -63
- data/docs/README.erb.md +0 -4221
- data/docs/README.md +0 -13
- data/docs/diagrams.txt +0 -49
- data/docs/doc_tools.rb +0 -58
- data/lib/aspera/cli/plugins/shares2.rb +0 -114
- 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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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=
|
27
|
-
region=
|
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
|
-
:
|
36
|
-
:
|
37
|
-
|
38
|
-
|
39
|
-
|
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=[
|
45
|
-
command=
|
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=
|
48
|
+
access_key_id = instance_identifier unless %i[create list].include?(command)
|
48
49
|
case command
|
49
50
|
when :create
|
50
|
-
params=
|
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
|
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
|
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 {:
|
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=
|
82
|
-
res=ats_api_pub_v1.read(
|
83
|
-
return {:
|
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 {:
|
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=
|
89
|
-
params[
|
90
|
-
|
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 {:
|
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
|
-
|
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
|
102
|
-
raise CliError,
|
103
|
-
base_url=server_data['transfer_setup_url']
|
104
|
-
api_node=Rest.new({
|
105
|
-
:
|
106
|
-
:
|
107
|
-
|
108
|
-
|
109
|
-
|
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=
|
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
|
-
:
|
117
|
-
:
|
118
|
-
|
119
|
-
|
120
|
-
|
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 {:
|
124
|
-
else raise
|
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=
|
134
|
+
command = options.get_next_command(%i[clouds list show])
|
130
135
|
case command
|
131
136
|
when :clouds
|
132
|
-
return {:
|
137
|
+
return {type: :single_object, data: @ats_api_pub.cloud_names, columns: %w[id name]}
|
133
138
|
when :list
|
134
|
-
return {:
|
139
|
+
return {type: :object_list, data: @ats_api_pub.all_servers, fields: %w[id cloud region]}
|
135
140
|
when :show
|
136
|
-
if
|
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
|
141
|
-
raise
|
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 {:
|
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
|
-
:
|
150
|
-
:
|
151
|
-
:
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
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=
|
163
|
-
if [
|
164
|
-
concerned_id=
|
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=
|
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 {:
|
190
|
+
return {type: :value_list, data: instances['data'], name: 'instance'}
|
184
191
|
when :create
|
185
|
-
create_value=
|
186
|
-
created_key=ats_ibm_api.create('api_keys',create_value)[:data]
|
187
|
-
return {:
|
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 {:
|
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 {:
|
194
|
-
when :delete
|
195
|
-
|
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
|
204
|
+
else raise 'INTERNAL ERROR'
|
198
205
|
end
|
199
206
|
end
|
200
207
|
|
201
|
-
ACTIONS=[
|
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=
|
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',{:
|
220
|
-
return {:
|
221
|
-
else raise
|
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
|
-
|
9
|
-
|
10
|
-
|
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 =
|
28
|
-
@api_bss=Rest.new(
|
29
|
-
|
30
|
-
|
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=
|
31
|
+
command = options.get_next_command(ACTIONS)
|
33
32
|
case command
|
34
33
|
when :subscription
|
35
|
-
command=
|
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 =
|
40
|
-
value =
|
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
|
44
|
+
result = @api_bss.create('graphql',request)[:data]
|
46
45
|
# give fields to keep order
|
47
|
-
return {:
|
46
|
+
return {type: :object_list, data: result['data'][object],fields: FIELDS['bssSubscriptions']}
|
48
47
|
when :show
|
49
|
-
id =
|
50
|
-
request={
|
51
|
-
'variables'=>{'id'=>id},
|
52
|
-
'query'=>"query($id: ID!) {#{object}(id: $id) { #{all_fields('bssSubscriptions')} roleAssignments(uniqueSubjectId: true) { id subjectId }
|
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
|
55
|
+
result = @api_bss.create('graphql',request)[:data]['data'][object].first
|
55
56
|
result.delete('instances')
|
56
|
-
return {:
|
57
|
+
return {type: :single_object, data: result}
|
57
58
|
when :instances
|
58
|
-
id =
|
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
|
64
|
-
return {:
|
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
|