morpheus-cli 7.0.6 → 8.0.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.
@@ -163,6 +163,9 @@ class Morpheus::Cli::LibraryContainerTypesCommand
163
163
  "Virtual Image" => lambda {|it|
164
164
  it['virtualImage'] ? it['virtualImage']['name'] : ''
165
165
  },
166
+ "OsType" => lambda {|it|
167
+ it['osType'] ? it['osType']['name'] : ''
168
+ },
166
169
  # "Category" => lambda {|it| it['category'].to_s.capitalize },
167
170
  # # "Logo" => lambda {|it| it['logo'].to_s },
168
171
  # "Visiblity" => lambda {|it| it['visibility'].to_s.capitalize },
@@ -474,6 +477,9 @@ class Morpheus::Cli::LibraryContainerTypesCommand
474
477
  opts.on('--version VALUE', String, "Version") do |val|
475
478
  params['containerVersion'] = val
476
479
  end
480
+ opts.on('--osType VALUE', Integer, "OsType") do |val|
481
+ params['osTypeId'] = val
482
+ end
477
483
  # opts.on('--technology CODE', String, "Technology") do |val|
478
484
  # params['provisionTypeCode'] = val
479
485
  # end
@@ -0,0 +1,671 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::LibraryOperatingSystemsCommand
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::LibraryHelper
6
+ include Morpheus::Cli::WhoamiHelper
7
+
8
+ set_command_name :'library-operating-systems'
9
+
10
+ register_subcommands :list, :get, :add, :update, :remove, :add_image, :remove_image, :get_image
11
+
12
+ def initialize()
13
+ end
14
+
15
+ def connect(opts)
16
+ @api_client = establish_remote_appliance_connection(opts)
17
+ @library_operating_systems_interface = @api_client.library_operating_systems
18
+ end
19
+
20
+ def handle(args)
21
+ handle_subcommand(args)
22
+ end
23
+
24
+ def list(args)
25
+ options = {}
26
+ params = {}
27
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
28
+ opts.banner = subcommand_usage()
29
+ build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
30
+ opts.footer = "List os types."
31
+ end
32
+ optparse.parse!(args)
33
+ # verify_args!(args:args, optparse:optparse, count:0)
34
+ if args.count > 0
35
+ options[:phrase] = args.join(" ")
36
+ end
37
+ connect(options)
38
+ begin
39
+ # construct payload
40
+ params.merge!(parse_list_options(options))
41
+ @library_operating_systems_interface.setopts(options)
42
+ if options[:dry_run]
43
+ print_dry_run @library_operating_systems_interface.dry.list_os_types(params)
44
+ return
45
+ end
46
+ # do it
47
+ json_response = @library_operating_systems_interface.list_os_types(params)
48
+ # print and/or return result
49
+ # return 0 if options[:quiet]
50
+ if options[:json]
51
+ puts as_json(json_response, options, "osTypes")
52
+ return 0
53
+ elsif options[:csv]
54
+ puts records_as_csv(json_response['osTypes'], options)
55
+ return 0
56
+ elsif options[:yaml]
57
+ puts as_yaml(json_response, options, "osTypes")
58
+ return 0
59
+ end
60
+ os_types = json_response['osTypes']
61
+ title = "Morpheus Library - OS Types"
62
+ subtitles = parse_list_subtitles(options)
63
+ print_h1 title, subtitles
64
+ if os_types.empty?
65
+ print cyan,"No os types found.",reset,"\n"
66
+ else
67
+ rows = os_types.collect do |os_type|
68
+ {
69
+ id: os_type['id'],
70
+ name: os_type['name'],
71
+ code: os_type['code'],
72
+ platform: os_type['platform'],
73
+ vendor: os_type['vendor'],
74
+ category: os_type['category'],
75
+ family: os_type['osFamily'],
76
+ owner: os_type['owner']['name'] ? os_type['owner']['name'] : 'System'
77
+ }
78
+ end
79
+ print as_pretty_table(rows, [:id, :name, :code, :platform, :vendor, :category, :family, :owner], options)
80
+ print_results_pagination(json_response, {})
81
+ end
82
+ print reset,"\n"
83
+ rescue RestClient::Exception => e
84
+ print_rest_exception(e, options)
85
+ return 1
86
+ end
87
+ end
88
+
89
+ def get(args)
90
+ options = {}
91
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
92
+ opts.banner = subcommand_usage("[osType]")
93
+ build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
94
+ opts.footer = "Display osType details." + "\n" +
95
+ "[osType] is required. This is the id of an osType."
96
+ end
97
+ optparse.parse!(args)
98
+ if args.count < 1
99
+ puts optparse
100
+ return 1
101
+ end
102
+ connect(options)
103
+ id_list = parse_id_list(args)
104
+ id_list.each do |id|
105
+
106
+ end
107
+ return run_command_for_each_arg(id_list) do |arg|
108
+ _get(arg, options)
109
+ end
110
+ end
111
+
112
+ def _get(id, options)
113
+ begin
114
+ @library_operating_systems_interface.setopts(options)
115
+
116
+ if options[:dry_run]
117
+ print_dry_run @library_operating_systems_interface.dry.get(id)
118
+ return
119
+ end
120
+ os_type = find_os_type_by_id(id)
121
+ if os_type.nil?
122
+ return 1
123
+ end
124
+
125
+ json_response = {'osType' => os_type}
126
+
127
+ if options[:json]
128
+ puts as_json(json_response, options, "osType")
129
+ return 0
130
+ elsif options[:yaml]
131
+ puts as_yaml(json_response, options, "osType")
132
+ return 0
133
+ elsif options[:csv]
134
+ puts records_as_csv([json_response['osType']], options)
135
+ return 0
136
+ end
137
+
138
+ print_h1 "OsType Details"
139
+ print cyan
140
+ description_cols = {
141
+ "ID" => lambda {|it| it['id'] },
142
+ "Name" => lambda {|it| it['name'] },
143
+ "Code" => lambda {|it| it['code']},
144
+ "Platform" => lambda {|it| it['platform']},
145
+ "Category" => lambda {|it|it['category']},
146
+ "Vendor" => lambda {|it| it['vendor']},
147
+ "Family" => lambda {|it| it['osFamily']},
148
+ "Os Name" => lambda {|it| it['osName'] },
149
+ "Install Agent" => lambda {|it| format_boolean(it['installAgent'])},
150
+ "Bit Count" => lambda {|it| it['bitCount'] },
151
+ "Owner" => lambda { |it| it['owner']}
152
+ }
153
+ if is_master_account
154
+ description_cols["Visibility"] = lambda {|it| it['visibility']}
155
+ end
156
+
157
+ print_description_list(description_cols, os_type)
158
+ title = "OsType - Images"
159
+ print_h2 title
160
+ if os_type['images'].empty?
161
+ print cyan,"No images found.",reset,"\n"
162
+ else
163
+ rows = os_type['images'].collect do |image|
164
+ {
165
+ id: image['id'],
166
+ virtual_image_id: image['virtualImageId'],
167
+ virtual_image_name: image['virtualImageName'],
168
+ account: image['account'],
169
+ cloud: image['zone']
170
+ }
171
+ end
172
+ print as_pretty_table(rows, [:id, :virtual_image_id, :virtual_image_name, :account, :cloud], options)
173
+ end
174
+
175
+ print reset,"\n"
176
+ rescue RestClient::Exception => e
177
+ print_rest_exception(e, options)
178
+ return 1
179
+ end
180
+ end
181
+
182
+ def get_image(args)
183
+ options = {}
184
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
185
+ opts.banner = subcommand_usage("[osTypeImage]")
186
+ build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
187
+ opts.footer = "Display osTypeImage details." + "\n" +
188
+ "[osTypeImage] is required. This is the id of an osTypeImage."
189
+ end
190
+ optparse.parse!(args)
191
+ if args.count < 1
192
+ puts optparse
193
+ return 1
194
+ end
195
+ connect(options)
196
+ id_list = parse_id_list(args)
197
+ id_list.each do |id|
198
+
199
+ end
200
+ return run_command_for_each_arg(id_list) do |arg|
201
+ _get_image(arg)
202
+ end
203
+ end
204
+
205
+ def _get_image(id)
206
+ begin
207
+ image = find_os_type_image_by_id(id)
208
+
209
+ if image.nil?
210
+ return 1
211
+ end
212
+
213
+ json_response = {'osTypeImage' => image}
214
+
215
+
216
+ print_h1 "OsTypeImage Details"
217
+ print cyan
218
+ description_cols = {
219
+ "ID" => lambda {|it| it['id'] },
220
+ "VirtualImage ID" => lambda {|it| it['virtualImageId'] },
221
+ "VirtualImage Name" => lambda {|it| it['virtualImageName'] },
222
+ "Account" => lambda {|it| it['account']},
223
+ "Provision Type" => lambda {|it| it['provisionType']},
224
+ "Cloud" => lambda {|it|it['zone']}
225
+ }
226
+
227
+ print_description_list(description_cols, image)
228
+
229
+ print reset,"\n"
230
+ rescue RestClient::Exception => e
231
+ print_rest_exception(e, options)
232
+ return 1
233
+ end
234
+ end
235
+
236
+
237
+ def add(args)
238
+ options = {}
239
+ params = {}
240
+ optparse = Morpheus::Cli::OptionParser.new do|opts|
241
+ opts.banner = subcommand_usage("[name] [options]")
242
+ opts.on('-n', '--name VALUE', String, "Name of OsType") do |val|
243
+ params['name'] = val
244
+ end
245
+ opts.on('-c', '--code VALUE', String, "Code of OsType") do |val|
246
+ params['code'] = val
247
+ end
248
+ opts.on('-p', '--platform VALUE', String, "Platform of OsType") do |val|
249
+ params['platform'] = val
250
+ end
251
+ opts.on('-v', '--vendor VALUE', String, "Vendor of OsType") do |val|
252
+ params['vendor'] = val
253
+ end
254
+ opts.on('-ca', '--category VALUE', String, "Category of OsType") do |val|
255
+ params['category'] = val
256
+ end
257
+ opts.on('-o', '--osName VALUE', String, "OsName of OsType") do |val|
258
+ params['osName'] = val
259
+ end
260
+ opts.on('-ov', '--osVersion VALUE', String, "OsVersion of OsType") do |val|
261
+ params['osVersion'] = val
262
+ end
263
+ opts.on('-oc', '--osCodename VALUE', String, "OsCodename of OsType") do |val|
264
+ params['osCodename'] = val
265
+ end
266
+ opts.on('-of', '--osFamily VALUE', String, "OsFamily of OsType") do |val|
267
+ params['osFamily'] = val
268
+ end
269
+ opts.on('-b', '--bitCount VALUE', Integer, "BitCount of OsType") do |val|
270
+ params['bitCount'] = val
271
+ end
272
+ opts.on('-i', '--cloudInitVersion VALUE', Integer, "CloudInitVersion of OsType") do |val|
273
+ params['cloudInitVersion'] = val
274
+ end
275
+ opts.on('-d', '--description VALUE', String, "Description of OsType") do |val|
276
+ params['description'] = val
277
+ end
278
+ opts.on('--install-agent [on|off]', String, "Install Agent? Pass true to install agent. Default is false.") do |val|
279
+ params['installAgent'] = !['false','off','0'].include?(val.to_s)
280
+ end
281
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
282
+ opts.footer = "Create an OsType."
283
+ end
284
+ optparse.parse!(args)
285
+ connect(options)
286
+ if args.count > 1
287
+ print_error Morpheus::Terminal.angry_prompt
288
+ puts_error "wrong number of arguments, expected 0-1 and got (#{args.count}) #{args.inspect}\n#{optparse}"
289
+ return 1
290
+ end
291
+
292
+ begin
293
+ if options[:payload]
294
+ payload = options[:payload]
295
+ else
296
+ # support the old -O OPTION switch
297
+ params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
298
+
299
+ # prompt for options
300
+ prompt_if_nil(params, options, 'name', 'Name', true)
301
+ prompt_if_nil(params, options, 'code', 'Code', true)
302
+ prompt_if_nil(params, options, 'description', 'Description')
303
+ prompt_if_nil(params, options, 'category', 'Category')
304
+
305
+ if params['platform'].nil?
306
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'platform', 'fieldLabel' => 'Platform', 'type' => 'select', 'optionSource' => 'platforms', 'description' => 'Platform', 'required' => true}], options, @api_client, {})
307
+ params['platform'] = v_prompt['platform']
308
+ end
309
+
310
+ prompt_if_nil(params, options, 'vendor', 'Vendor')
311
+ prompt_if_nil(params, options, 'osName', 'OsName')
312
+ prompt_if_nil(params, options, 'osVersion', 'OsVersion')
313
+ prompt_if_nil(params, options, 'osCodename', 'OsCodename')
314
+ prompt_if_nil(params, options, 'osFamily', 'OsFamily')
315
+
316
+ if params['bitCount'].nil?
317
+ params['bitCount'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'bitCount', 'type' => 'number', 'fieldLabel' => 'BitCount', 'required' => true, 'description' => 'BitCount.'}],options[:options],@api_client,{})['bitCount']
318
+ end
319
+
320
+ if params['cloudInitVersion'].nil?
321
+ params['cloudInitVersion'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'cloudInitVersion', 'type' => 'number', 'fieldLabel' => 'CloudInitVersion', 'required' => false, 'description' => 'CloudInitVersion.'}],options[:options],@api_client,{})['cloudInitVersion']
322
+ end
323
+
324
+ if params['installAgent'].nil?
325
+ params['installAgent'] = Morpheus::Cli::OptionTypes.confirm("Install Agent?", {:default => false})
326
+ end
327
+
328
+ payload = {'osType' => params}
329
+ end
330
+
331
+ @library_operating_systems_interface.setopts(options)
332
+ if options[:dry_run]
333
+ print_dry_run @library_operating_systems_interface.dry.create(payload)
334
+ return
335
+ end
336
+
337
+ json_response = @library_operating_systems_interface.create(payload)
338
+
339
+ if options[:json]
340
+ print JSON.pretty_generate(json_response), "\n"
341
+ return
342
+ end
343
+ print_green_success "Added Os Type"
344
+ _get(json_response['id'], {})
345
+ rescue RestClient::Exception => e
346
+ print_rest_exception(e, options)
347
+ exit 1
348
+ end
349
+ end
350
+
351
+
352
+ def update(args)
353
+ options = {}
354
+ params = {}
355
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
356
+ opts.banner = subcommand_usage("[osType] [options]")
357
+ opts.on('-n', '--name VALUE', String, "Name of OsType") do |val|
358
+ params['name'] = val
359
+ end
360
+ opts.on('-c', '--code VALUE', String, "Code of OsType") do |val|
361
+ params['code'] = val
362
+ end
363
+ opts.on('-p', '--platform VALUE', String, "Platform of OsType") do |val|
364
+ params['platform'] = val
365
+ end
366
+ opts.on('-v', '--vendor VALUE', String, "Vendor of OsType") do |val|
367
+ params['vendor'] = val
368
+ end
369
+ opts.on('-ca', '--category VALUE', String, "Category of OsType") do |val|
370
+ params['category'] = val
371
+ end
372
+ opts.on('-o', '--osName VALUE', String, "OsName of OsType") do |val|
373
+ params['osName'] = val
374
+ end
375
+ opts.on('-ov', '--osVersion VALUE', String, "OsVersion of OsType") do |val|
376
+ params['osVersion'] = val
377
+ end
378
+ opts.on('-oc', '--osCodename VALUE', String, "OsCodename of OsType") do |val|
379
+ params['osCodename'] = val
380
+ end
381
+ opts.on('-of', '--osFamily VALUE', String, "OsFamily of OsType") do |val|
382
+ params['osFamily'] = val
383
+ end
384
+ opts.on('-b', '--bitCount VALUE', Integer, "BitCount of OsType") do |val|
385
+ params['bitCount'] = val
386
+ end
387
+ opts.on('-i', '--cloudInitVersion VALUE', Integer, "CloudInitVersion of OsType") do |val|
388
+ params['cloudInitVersion'] = val
389
+ end
390
+ opts.on('-d', '--description VALUE', String, "Description of OsType") do |val|
391
+ params['description'] = val
392
+ end
393
+ opts.on('--install-agent [on|off]', String, "Install Agent? Pass true to install agent. Default is false.") do |val|
394
+ params['installAgent'] = !['false','off','0'].include?(val.to_s)
395
+ end
396
+
397
+ build_common_options(opts, options, [:options, :json, :dry_run, :remote])
398
+ opts.footer = "Update an osType." + "\n" +
399
+ "[osType] is required. This is the id of an osType."
400
+ end
401
+ optparse.parse!(args)
402
+ if args.count != 1
403
+ print_error Morpheus::Terminal.angry_prompt
404
+ puts_error "wrong number of arguments, expected 1 and got #{args.count}\n#{optparse}"
405
+ return 1
406
+ end
407
+ connect(options)
408
+
409
+ begin
410
+ os_type = find_os_type_by_id(args[0])
411
+ return 1 if os_type.nil?
412
+
413
+ payload = {
414
+ 'osType' => {}
415
+ }
416
+
417
+ # no prompting, just collect all user passed options
418
+ params.deep_merge!(options.reject {|k,v| k.is_a?(Symbol) })
419
+ params.deep_merge!(options[:options]) if options[:options]
420
+
421
+ if params.empty?
422
+ print_error Morpheus::Terminal.angry_prompt
423
+ puts_error "Specify at least one option to update\n#{optparse}"
424
+ return 1
425
+ end
426
+ payload['osType'].deep_merge!(params)
427
+
428
+
429
+ @library_operating_systems_interface.setopts(options)
430
+ if options[:dry_run]
431
+ print_dry_run @library_operating_systems_interface.dry.update(os_type["id"], payload)
432
+ return
433
+ end
434
+
435
+ json_response = @library_operating_systems_interface.update(os_type["id"], payload)
436
+
437
+ if options[:json]
438
+ puts as_json(json_response)
439
+ else
440
+ print_green_success "Updated osType #{os_type['id']}"
441
+ get([os_type['id']])
442
+ end
443
+ return 0
444
+ rescue RestClient::Exception => e
445
+ print_rest_exception(e, options)
446
+ return 1
447
+ end
448
+ end
449
+
450
+
451
+
452
+ def add_image(args)
453
+ options = {}
454
+ params = {}
455
+ optparse = Morpheus::Cli::OptionParser.new do|opts|
456
+ opts.banner = subcommand_usage("[name] [options]")
457
+ opts.on('-o', '--osType VALUE', String, "Id of OsType") do |val|
458
+ params['osType'] = val
459
+ end
460
+ opts.on('-v', '--virtualImage VALUE', String, "Id of Virtual Image") do |val|
461
+ params['virtualImage'] = val
462
+ end
463
+ opts.on('-p', '--provisionType VALUE', String, "Provision Type") do |val|
464
+ params['provisionType'] = val
465
+ end
466
+ opts.on('-z', '--zone VALUE', String, "Zone") do |val|
467
+ params['zone'] = val
468
+ end
469
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
470
+ opts.footer = "Create an OsType Image."
471
+ end
472
+ optparse.parse!(args)
473
+ connect(options)
474
+ if args.count > 1
475
+ print_error Morpheus::Terminal.angry_prompt
476
+ puts_error "wrong number of arguments, expected 0-1 and got (#{args.count}) #{args.inspect}\n#{optparse}"
477
+ return 1
478
+ end
479
+ if args[0]
480
+ params['osType'] = args[0]
481
+ end
482
+ begin
483
+ if options[:payload]
484
+ payload = options[:payload]
485
+ else
486
+ # support the old -O OPTION switch
487
+ params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
488
+
489
+ # prompt for options
490
+ if params['osType'].nil?
491
+ params['osType'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'osType', 'type' => 'select', 'fieldLabel' => 'Os Type', 'required' => true, 'optionSource' => 'osTypes'}], options[:options], @api_client,{})['osType']
492
+ end
493
+
494
+ if params['provisionType'].nil?
495
+ params['provisionType'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'provisionType', 'type' => 'select', 'fieldLabel' => 'Provision Type', 'required' => false, 'optionSource' => 'provisionTypes'}], options[:options], @api_client,{'cli' => true})['provisionType']
496
+ end
497
+
498
+ if params['zone'].nil?
499
+ params['zone'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'zone', 'type' => 'select', 'fieldLabel' => 'Cloud', 'required' => false, 'optionSource' => 'clouds'}], options[:options], @api_client,{'provisionTypeIds' => params['provisionType']})['zone']
500
+ end
501
+
502
+ if params['virtualImage'].nil?
503
+ virtual_image = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'virtualImage', 'fieldLabel' => 'Virtual Image', 'type' => 'select', 'required' => true, 'optionSource' => 'osTypeVirtualImage'}], options[:options], @api_client, {'osTypeImage' => params})['virtualImage']
504
+
505
+ params['virtualImage'] = virtual_image
506
+ end
507
+
508
+ payload = {'osTypeImage' => params}
509
+ end
510
+
511
+ @library_operating_systems_interface.setopts(options)
512
+ if options[:dry_run]
513
+ print_dry_run @library_operating_systems_interface.dry.create_image(payload)
514
+ return
515
+ end
516
+
517
+ json_response = @library_operating_systems_interface.create_image(payload)
518
+
519
+ if options[:json]
520
+ print JSON.pretty_generate(json_response), "\n"
521
+ return
522
+ end
523
+ print_green_success "Added Os Type Image"
524
+ _get_image(json_response['id'])
525
+ rescue RestClient::Exception => e
526
+ print_rest_exception(e, options)
527
+ exit 1
528
+ end
529
+ end
530
+
531
+ def remove(args)
532
+ options = {}
533
+ optparse = Morpheus::Cli::OptionParser.new do|opts|
534
+ opts.banner = subcommand_usage("[osType]")
535
+ build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :remote])
536
+ opts.footer = "Delete an Os Type." + "\n" +
537
+ "[osType] is required. This is the id of an osType."
538
+ end
539
+ optparse.parse!(args)
540
+
541
+ if args.count != 1
542
+ print_error Morpheus::Terminal.angry_prompt
543
+ puts_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.inspect}\n#{optparse}"
544
+ return 1
545
+ end
546
+
547
+ connect(options)
548
+
549
+ begin
550
+ os_type = find_os_type_by_id(args[0])
551
+ if os_type.nil?
552
+ return 1
553
+ end
554
+
555
+ unless Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the OsType?", options)
556
+ exit
557
+ end
558
+
559
+ @library_operating_systems_interface.setopts(options)
560
+ if options[:dry_run]
561
+ print_dry_run @library_operating_systems_interface.dry.destroy(os_type['id'])
562
+ return
563
+ end
564
+ json_response = @library_operating_systems_interface.destroy(os_type['id'])
565
+
566
+ if options[:json]
567
+ print JSON.pretty_generate(json_response)
568
+ print "\n"
569
+ elsif !options[:quiet]
570
+ if json_response['success']
571
+ print_green_success "Removed the OsType"
572
+ else
573
+ print_red_alert "Error removing osType: #{json_response['msg'] || json_response['errors']}"
574
+ end
575
+ end
576
+ return 0
577
+ rescue RestClient::Exception => e
578
+ print_rest_exception(e, options)
579
+ exit 1
580
+ end
581
+ end
582
+
583
+
584
+ def remove_image(args)
585
+ options = {}
586
+ optparse = Morpheus::Cli::OptionParser.new do|opts|
587
+ opts.banner = subcommand_usage("[osTypeImage]")
588
+ build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :remote])
589
+ opts.footer = "Delete an Os Type Image." + "\n" +
590
+ "[osTypeImage] is required. This is the id of an osTypeImage."
591
+ end
592
+ optparse.parse!(args)
593
+
594
+ if args.count != 1
595
+ print_error Morpheus::Terminal.angry_prompt
596
+ puts_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.inspect}\n#{optparse}"
597
+ return 1
598
+ end
599
+
600
+ connect(options)
601
+
602
+ begin
603
+ os_type_image = find_os_type_image_by_id(args[0])
604
+ if os_type_image.nil?
605
+ return 1
606
+ end
607
+
608
+ unless Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the OsTypeImage?", options)
609
+ exit
610
+ end
611
+
612
+ @library_operating_systems_interface.setopts(options)
613
+ if options[:dry_run]
614
+ print_dry_run @library_operating_systems_interface.dry.destroy_image(os_type_image['id'])
615
+ return
616
+ end
617
+ json_response = @library_operating_systems_interface.destroy_image(os_type_image['id'])
618
+
619
+ if options[:json]
620
+ print JSON.pretty_generate(json_response)
621
+ print "\n"
622
+ elsif !options[:quiet]
623
+ if json_response['success']
624
+ print_green_success "Removed the OsTypeImage"
625
+ else
626
+ print_red_alert "Error removing osTypeImage: #{json_response['msg'] || json_response['errors']}"
627
+ end
628
+ end
629
+ return 0
630
+ rescue RestClient::Exception => e
631
+ print_rest_exception(e, options)
632
+ exit 1
633
+ end
634
+ end
635
+
636
+
637
+ private
638
+
639
+ def find_os_type_by_id(id)
640
+ begin
641
+ json_response = @library_operating_systems_interface.get(id.to_i)
642
+ return json_response['osType']
643
+ rescue RestClient::Exception => e
644
+ if e.response && e.response.code == 404
645
+ print_red_alert "OsType not found by id #{id}"
646
+ else
647
+ raise e
648
+ end
649
+ end
650
+ end
651
+
652
+ def find_os_type_image_by_id(id)
653
+ begin
654
+ json_response = @library_operating_systems_interface.get_image(id.to_i)
655
+ return json_response['osTypeImage']
656
+ rescue RestClient::Exception => e
657
+ if e.response && e.response.code == 404
658
+ print_red_alert "OsTypeImage not found by id #{id}"
659
+ else
660
+ raise e
661
+ end
662
+ end
663
+ end
664
+
665
+ def prompt_if_nil(params, options, param_key, label, required = false)
666
+ params[param_key] ||= Morpheus::Cli::OptionTypes.prompt(
667
+ [{ 'fieldName' => param_key, 'fieldLabel' => label, 'type' => 'text', 'required' => required }],
668
+ options[:options], @api_client, {}
669
+ )[param_key]
670
+ end
671
+ end