Class: Aspera::Cli::Plugins::Ats
- Inherits:
-
Base
- Object
- Base
- Aspera::Cli::Plugins::Ats
show all
- Defined in:
- lib/aspera/cli/plugins/ats.rb
Overview
Constant Summary
Constants inherited
from Base
Base::FILTER_ARGS
Instance Attribute Summary
Attributes inherited from Base
#context, #help_path
Instance Method Summary
collapse
Methods inherited from Base
#action_for, #add_manual_header, application_name, #bulk_result, command, command_registry, commands_under, #config, crud_commands, declare_options, define_action_method, #dispatch_child, #dispatch_from_registry, #dispatch_leaf, #entity_create, #entity_delete, entity_display_name, #entity_list, #entity_modify, #entity_res_path, #entity_show, #execute_action, #execute_leaf, file_matcher, #formatter, #generate_help, #http_config, #invoke_action, option, #options, #persistency, #presets, #progress_bar, #query_read_delete, #resolve_argument, root_setup, #transfer, use_options, used_option_sources
Constructor Details
#initialize(api: nil, **base_args) ⇒ Ats
Returns a new instance of Ats.
32
33
34
35
36
37
|
# File 'lib/aspera/cli/plugins/ats.rb', line 32
def initialize(api: nil, **base_args)
super(**base_args)
@ats_api_open = Api::Ats.new
@ats_api_auth = api
options.parse_options!
end
|
Instance Method Details
#action_access_key_cluster(access_key_id:) ⇒ Object
253
254
255
256
257
258
259
260
261
262
263
264
|
# File 'lib/aspera/cli/plugins/ats.rb', line 253
def action_access_key_cluster(access_key_id:, **)
ats_url = ats_api.base_url
api_ak_auth = Rest.new(
base_url: ats_url,
auth: {
type: :basic,
username: access_key_id,
password: context.secret_finder.lookup(url: ats_url, username: access_key_id)
}
)
return Result::SingleObject.new(api_ak_auth.read('servers'))
end
|
#action_access_key_create(params: {}) ⇒ Object
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
# File 'lib/aspera/cli/plugins/ats.rb', line 158
def action_access_key_create(params: {}, **)
server_data = nil
if !params.key?('transfer_server_id')
server_data = server_by_cloud_region
params['transfer_server_id'] = server_data['id']
end
Log.log.debug { "using params: #{params}".bg_red.gray }
if params.key?('storage')
case params['storage']['type']
when 'ibm-s3'
server_data2 = nil
if server_data.nil?
server_data2 = @ats_api_open.all_servers.find { |s| s['id'].eql?(params['transfer_server_id']) }
raise "no such transfer server id: #{params['transfer_server_id']}" if server_data2.nil?
else
server_data2 = @ats_api_open.all_servers.find do |s|
s['cloud'].eql?(server_data['cloud']) &&
s['region'].eql?(server_data['region']) &&
s.key?('s3_authentication_endpoint')
end
raise "no such transfer server id: #{params['transfer_server_id']}" if server_data2.nil?
params['transfer_server_id'] = server_data2['id']
end
params['storage']['endpoint'] = server_data2['s3_authentication_endpoint'] if !params['storage'].key?('authentication_endpoint')
end
end
res = ats_api.create('access_keys', params)
return Result::SingleObject.new(res)
end
|
#action_access_key_delete(access_key_id:) ⇒ Object
198
199
200
201
|
# File 'lib/aspera/cli/plugins/ats.rb', line 198
def action_access_key_delete(access_key_id:, **)
ats_api.delete("access_keys/#{access_key_id}")
Result::Status.new("deleted #{access_key_id}")
end
|
#action_access_key_entitlement(access_key_id:) ⇒ Object
203
204
205
206
207
|
# File 'lib/aspera/cli/plugins/ats.rb', line 203
def action_access_key_entitlement(access_key_id:, **)
ak = ats_api.read("access_keys/#{access_key_id}")
api_bss = Api::Alee.new(ak['license']['entitlement_id'], ak['license']['customer_id'])
return Result::SingleObject.new(api_bss.read('entitlement'))
end
|
#action_access_key_modify(params:, access_key_id:) ⇒ Object
192
193
194
195
196
|
# File 'lib/aspera/cli/plugins/ats.rb', line 192
def action_access_key_modify(params:, access_key_id:, **)
params['id'] = access_key_id
ats_api.update("access_keys/#{access_key_id}", params)
return Result::Status.new('modified')
end
|
#action_api_key_delete(api_key_id:) ⇒ Object
248
249
250
251
|
# File 'lib/aspera/cli/plugins/ats.rb', line 248
def action_api_key_delete(api_key_id:, **)
build_ats_ibm_api_with_instance.delete("api_keys/#{api_key_id}")
Result::Status.new("deleted #{api_key_id}")
end
|
#action_api_key_instances ⇒ Object
242
243
244
245
246
|
# File 'lib/aspera/cli/plugins/ats.rb', line 242
def action_api_key_instances
instances = ats_api_v2_auth_ibm.read('instances')
Log.log.warn { "more instances remaining: #{instances['remaining']}" } unless instances['remaining'].to_i.eql?(0)
Result::ValueList.new(instances['data'], name: 'instance')
end
|
#action_cluster_show ⇒ Object
147
148
149
150
151
152
153
154
155
156
|
# File 'lib/aspera/cli/plugins/ats.rb', line 147
def action_cluster_show
if options.get_option(:cloud) || options.get_option(:region)
server_data = server_by_cloud_region
else
server_id = options.instance_identifier
server_data = @ats_api_open.all_servers.find { |i| i['id'].eql?(server_id) }
raise BadIdentifier.new('server', server_id) if server_data.nil?
end
Result::SingleObject.new(server_data)
end
|
#api_key_available? ⇒ Boolean
api_key sub-tree is only available when authenticated via ATS key (not injected API)
103
104
105
|
# File 'lib/aspera/cli/plugins/ats.rb', line 103
def api_key_available?
@ats_api_auth.nil?
end
|
#ats_api ⇒ Object
require api key only if needed
117
118
119
120
121
122
123
124
125
126
127
|
# File 'lib/aspera/cli/plugins/ats.rb', line 117
def ats_api
return @ats_api_auth unless @ats_api_auth.nil?
@ats_api_auth = Rest.new(
base_url: "#{Api::Ats::SERVICE_BASE_URL}/pub/v1",
auth: {
type: :basic,
username: options.get_option(:ats_key, mandatory: true),
password: options.get_option(:ats_secret, mandatory: true)
}
)
end
|
#ats_api_v2_auth_ibm(rest_add_headers = {}) ⇒ Object
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
# File 'lib/aspera/cli/plugins/ats.rb', line 129
def ats_api_v2_auth_ibm( = {})
return Rest.new(
base_url: "#{Api::Ats::SERVICE_BASE_URL}/v2",
headers: ,
auth: {
type: :oauth2,
grant_method: :generic,
base_url: 'https://iam.bluemix.net/identity',
grant_type: 'urn:ibm:params:oauth:grant-type:apikey',
response_type: 'cloud_iam',
params: {
apikey: options.get_option(:ibm_api_key, mandatory: true)
}
}
)
end
|
#server_by_cloud_region ⇒ Object
109
110
111
112
113
114
|
# File 'lib/aspera/cli/plugins/ats.rb', line 109
def server_by_cloud_region
cloud = options.get_option(:cloud, mandatory: true).upcase
region = options.get_option(:region, mandatory: true)
return @ats_api_open.read("servers/#{cloud}/#{region}")
end
|
#setup_ak_node(access_key_id:) ⇒ Hash
Build the Node plugin for an ATS access key.
access_key_id: is already in ctx via arguments: on the :node command.
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
# File 'lib/aspera/cli/plugins/ats.rb', line 212
def setup_ak_node(access_key_id:, **)
ak_data = ats_api.read("access_keys/#{access_key_id}")
server_data = @ats_api_open.all_servers.find { |i| i['id'].start_with?(ak_data['transfer_server_id']) }
Aspera.assert(!server_data.nil?, type: Cli::Error) { 'no such server found' }
node_url = server_data['transfer_setup_url']
api_node = Api::Node.new(
base_url: node_url,
auth: {
type: :basic,
username: access_key_id,
password: context.secret_finder.lookup(url: node_url, username: access_key_id)
}
)
{
ak_node_plugin: Node.new(context: context, api: api_node),
ak_root_file_id: ak_data['root_file_id']
}
end
|