morpheus-cli 8.0.2 → 8.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06ea65156f0a57e7af971494347aae4844608a6cb877087dc9394a127841a75e
4
- data.tar.gz: a93ddec1dc9e647e23a111a168126dbfc3b683d04844731f5bc53a461305b140
3
+ metadata.gz: b071ad7a069db88e11023de144dad8ad640f49b6a18becdfa60cd1e04312397f
4
+ data.tar.gz: b1deba83d4decb51b824fabfca0d8a615dbd17e6df7e07296de3a8dc3606f945
5
5
  SHA512:
6
- metadata.gz: 9ca9b136bd006211eed46cd89103c2e7af9157d8111595f4e90b09a7a1e014570405256d64401c78311503e3d4b0aaecf5690526b2014985d79c515e0093eba3
7
- data.tar.gz: f1355c6ec99b7a05e068e215ba4581a75a712bef545b661a04e7a31ad0b1711071d7f65c316e938171da60d66d0a297898068f5efb70e750a7dc987b2f12014e
6
+ metadata.gz: '04509b5731b2f5713189498b3a166b62735911c7c178d6480c5d54d4fd68827ef16f21431d5b7c49ce2209dca14dc402c65dc59e90268979b310855a08705598'
7
+ data.tar.gz: 179f4442f70f2f634746a11211f435ae119abd9dc0839e06c16142018afa3809bcdc995cc96ca3967734d06e578b80f7a6a680dbe3ba7c4bf643cc6318cb03d2
data/Dockerfile CHANGED
@@ -1,5 +1,5 @@
1
1
  FROM ruby:2.7.5
2
2
 
3
- RUN gem install morpheus-cli -v 8.0.2
3
+ RUN gem install morpheus-cli -v 8.0.3
4
4
 
5
5
  ENTRYPOINT ["morpheus"]
@@ -3784,7 +3784,7 @@ class Morpheus::Cli::Clusters
3784
3784
  subtitles << " Process ID: #{process_id}"
3785
3785
  subtitles += parse_list_subtitles(options)
3786
3786
  print_h1 title, subtitles, options
3787
- print_process_details(process)
3787
+ print_process_details(process, options)
3788
3788
 
3789
3789
  print_h2 "Process Events", options
3790
3790
  process_events = process['events'] || process['processEvents'] || []
@@ -4003,7 +4003,7 @@ class Morpheus::Cli::Clusters
4003
4003
  subtitles = []
4004
4004
  subtitles += parse_list_subtitles(options)
4005
4005
  print_h1 title, subtitles, options
4006
- print_process_event_details(process_event)
4006
+ print_process_event_details(process_event, options)
4007
4007
  print reset, "\n"
4008
4008
  return 0
4009
4009
  end
@@ -4015,37 +4015,6 @@ class Morpheus::Cli::Clusters
4015
4015
 
4016
4016
  private
4017
4017
 
4018
- def print_process_event_details(process_event, options={})
4019
- # process_event =~ process
4020
- description_cols = {
4021
- "Process ID" => lambda {|it| it['processId'] },
4022
- "Event ID" => lambda {|it| it['id'] },
4023
- "Name" => lambda {|it| it['displayName'] },
4024
- "Description" => lambda {|it| it['description'] },
4025
- "Process Type" => lambda {|it| it['processType'] ? (it['processType']['name'] || it['processType']['code']) : it['processTypeName'] },
4026
- "Created By" => lambda {|it| it['createdBy'] ? (it['createdBy']['displayName'] || it['createdBy']['username']) : '' },
4027
- "Start Date" => lambda {|it| format_local_dt(it['startDate']) },
4028
- "End Date" => lambda {|it| format_local_dt(it['endDate']) },
4029
- "Duration" => lambda {|it| format_process_duration(it) },
4030
- "Status" => lambda {|it| format_process_status(it) },
4031
- }
4032
- print_description_list(description_cols, process_event)
4033
-
4034
- if process_event['error']
4035
- print_h2 "Error", options
4036
- print reset
4037
- #puts format_process_error(process_event)
4038
- puts process_event['error'].to_s.strip
4039
- end
4040
-
4041
- if process_event['output']
4042
- print_h2 "Output", options
4043
- print reset
4044
- #puts format_process_error(process_event)
4045
- puts process_event['output'].to_s.strip
4046
- end
4047
- end
4048
-
4049
4018
  def print_clusters_table(clusters, opts={})
4050
4019
  table_color = opts[:color] || cyan
4051
4020
  rows = clusters.collect do |cluster|
@@ -2921,6 +2921,12 @@ class Morpheus::Cli::Instances
2921
2921
  opts.on( '--description VALUE', String, "Snapshot Description." ) do |val|
2922
2922
  options[:options]['description'] = val
2923
2923
  end
2924
+ opts.on('--refresh [SECONDS]', String, "Refresh until execution is complete. Default interval is #{default_refresh_interval} seconds.") do |val|
2925
+ options[:refresh_interval] = val.to_s.empty? ? default_refresh_interval : val.to_f
2926
+ end
2927
+ opts.on(nil, '--no-refresh', "Do not refresh" ) do
2928
+ options[:no_refresh] = true
2929
+ end
2924
2930
  build_standard_add_options(opts, options, [:auto_confirm])
2925
2931
  opts.footer = <<-EOT
2926
2932
  Create a snapshot for an instance.
@@ -2949,6 +2955,18 @@ EOT
2949
2955
  json_response = @instances_interface.snapshot(instance['id'], payload)
2950
2956
  render_response(json_response, options, 'snapshots') do
2951
2957
  print_green_success "Snapshot initiated."
2958
+ process_id = json_response['processIds'][0] rescue nil
2959
+ if process_id
2960
+ unless options[:no_refresh]
2961
+ process = wait_for_process_execution(process_id, options)
2962
+ snapshot_id = process['resultId']
2963
+ if snapshot_id
2964
+ Morpheus::Cli::Snapshots.new.handle(["get", snapshot_id] + (options[:remote] ? ["-r",options[:remote]] : []))
2965
+ end
2966
+ end
2967
+ else
2968
+ # puts "No process returned"
2969
+ end
2952
2970
  end
2953
2971
  return 0, nil
2954
2972
  end
@@ -3707,7 +3725,7 @@ EOT
3707
3725
  if options[:json]
3708
3726
  puts as_json(json_response, options)
3709
3727
  else
3710
- print_green_success "Snapshots attaced to instance #{instance['name']} queued for deletion."
3728
+ print_green_success "Snapshots attached to instance #{instance['name']} queued for deletion."
3711
3729
  end
3712
3730
  return 0
3713
3731
 
@@ -4496,7 +4514,7 @@ EOT
4496
4514
  subtitles << " Process ID: #{process_id}"
4497
4515
  subtitles += parse_list_subtitles(options)
4498
4516
  print_h1 title, subtitles, options
4499
- print_process_details(process)
4517
+ print_process_details(process, options)
4500
4518
 
4501
4519
  print_h2 "Process Events", options
4502
4520
  process_events = process['events'] || process['processEvents'] || []
@@ -5502,67 +5520,6 @@ private
5502
5520
  {'fieldName' => 'maxDisk', 'fieldLabel' => 'Max Disk', 'type' => 'number', 'description' => 'Maximum storage percent (0-100)'},
5503
5521
  ]
5504
5522
  end
5505
-
5506
- def print_process_details(process)
5507
- description_cols = {
5508
- "Process ID" => lambda {|it| it['id'] },
5509
- "Name" => lambda {|it| it['displayName'] },
5510
- "Description" => lambda {|it| it['description'] },
5511
- "Process Type" => lambda {|it| it['processType'] ? (it['processType']['name'] || it['processType']['code']) : it['processTypeName'] },
5512
- "Created By" => lambda {|it| it['createdBy'] ? (it['createdBy']['displayName'] || it['createdBy']['username']) : '' },
5513
- "Start Date" => lambda {|it| format_local_dt(it['startDate']) },
5514
- "End Date" => lambda {|it| format_local_dt(it['endDate']) },
5515
- "Duration" => lambda {|it| format_process_duration(it) },
5516
- "Status" => lambda {|it| format_process_status(it) },
5517
- # "# Events" => lambda {|it| (it['events'] || []).size() },
5518
- }
5519
- print_description_list(description_cols, process)
5520
-
5521
- if process['error']
5522
- print_h2 "Error", options
5523
- print reset
5524
- #puts format_process_error(process_event)
5525
- puts process['error'].to_s.strip
5526
- end
5527
-
5528
- if process['output']
5529
- print_h2 "Output", options
5530
- print reset
5531
- #puts format_process_error(process_event)
5532
- puts process['output'].to_s.strip
5533
- end
5534
- end
5535
-
5536
- def print_process_event_details(process_event, options={})
5537
- # process_event =~ process
5538
- description_cols = {
5539
- "Process ID" => lambda {|it| it['processId'] },
5540
- "Event ID" => lambda {|it| it['id'] },
5541
- "Name" => lambda {|it| it['displayName'] },
5542
- "Description" => lambda {|it| it['description'] },
5543
- "Process Type" => lambda {|it| it['processType'] ? (it['processType']['name'] || it['processType']['code']) : it['processTypeName'] },
5544
- "Created By" => lambda {|it| it['createdBy'] ? (it['createdBy']['displayName'] || it['createdBy']['username']) : '' },
5545
- "Start Date" => lambda {|it| format_local_dt(it['startDate']) },
5546
- "End Date" => lambda {|it| format_local_dt(it['endDate']) },
5547
- "Duration" => lambda {|it| format_process_duration(it) },
5548
- "Status" => lambda {|it| format_process_status(it) },
5549
- }
5550
- print_description_list(description_cols, process_event)
5551
-
5552
- if process_event['error']
5553
- print_h2 "Error", options
5554
- print reset
5555
- #puts format_process_error(process_event)
5556
- puts process_event['error'].to_s.strip
5557
- end
5558
-
5559
- if process_event['output']
5560
- print_h2 "Output", options
5561
- print reset
5562
- #puts format_process_error(process_event)
5563
- puts process_event['output'].to_s.strip
5564
- end
5565
- end
5566
5523
 
5567
5524
  def update_wiki_page_option_types
5568
5525
  [
@@ -295,7 +295,7 @@ class Morpheus::Cli::Processes
295
295
  subtitles << " Process ID: #{process_id}"
296
296
  subtitles += parse_list_subtitles(options)
297
297
  print_h1 title, subtitles
298
- print_process_details(process)
298
+ print_process_details(process, options)
299
299
 
300
300
  print_h2 "Process Events"
301
301
  process_events = process['events'] || process['processEvents'] || []
@@ -456,7 +456,7 @@ EOT
456
456
  subtitles = []
457
457
  subtitles += parse_list_subtitles(options)
458
458
  print_h1 title, subtitles
459
- print_process_event_details(process_event)
459
+ print_process_event_details(process_event, options)
460
460
  print reset, "\n"
461
461
  return 0
462
462
  end
@@ -73,15 +73,15 @@ class Morpheus::Cli::Snapshots
73
73
  "Name" => 'name',
74
74
  "Description" => 'description',
75
75
  "External Id" => 'externalId',
76
- "Status" => 'status',
77
- "State" => 'state',
76
+ # "State" => 'state',
78
77
  "Snapshot Type" => 'snapshotType',
79
- "Snapshot Created" => 'snapshotCreated',
80
- "Cloud" => 'zone.name',
81
- "Datastore" => 'datastore',
82
- "Parent Snapshot" => 'parentSnapshot',
83
- "Active" => 'currentlyActive',
84
- "Date Created" => 'dateCreated'
78
+ "Date Created" => lambda {|it| format_local_dt(it['snapshotCreated']) },
79
+ "Cloud" => lambda {|it| format_name_and_id(it['zone']) },
80
+ "Datastore" => lambda {|it| format_name_and_id(it['datastore']) },
81
+ "Parent Snapshot" => lambda {|it| format_name_and_id(it['parentSnapshot']) },
82
+ "Active" => lambda {|it| format_boolean(it['currentlyActive']) },
83
+ "Date Created" => lambda {|it| format_local_dt(it['dateCreated']) },
84
+ "Status" => lambda {|it| format_snapshot_status(it) }
85
85
  }
86
86
  print_description_list(description_cols, snapshot)
87
87
 
@@ -134,4 +134,20 @@ class Morpheus::Cli::Snapshots
134
134
  exit 1
135
135
  end
136
136
  end
137
+
138
+ protected
139
+
140
+ def format_snapshot_status(snapshot, return_color=cyan)
141
+ out = ""
142
+ status_string = snapshot['status'].to_s
143
+ if status_string == 'complete'
144
+ out << "#{green}#{status_string.upcase}#{return_color}"
145
+ elsif status_string == 'failed'
146
+ out << "#{red}#{status_string.upcase}#{return_color}"
147
+ else
148
+ out << "#{cyan}#{status_string.upcase}#{return_color}"
149
+ end
150
+ out
151
+ end
152
+
137
153
  end
@@ -8,8 +8,17 @@ module Morpheus::Cli::ProcessesHelper
8
8
  klass.send :include, Morpheus::Cli::PrintHelper
9
9
  end
10
10
 
11
+ def api_client
12
+ raise "#{self.class} has not defined @api_client" if @api_client.nil?
13
+ @api_client
14
+ end
15
+
16
+ def processes_interface
17
+ # get_interface('processes')
18
+ api_client.processes
19
+ end
11
20
 
12
- def print_process_details(process)
21
+ def print_process_details(process, options={})
13
22
  description_cols = {
14
23
  "Process ID" => lambda {|it| it['id'] },
15
24
  "Name" => lambda {|it| it['displayName'] },
@@ -22,7 +31,7 @@ module Morpheus::Cli::ProcessesHelper
22
31
  "Status" => lambda {|it| format_process_status(it) },
23
32
  # "# Events" => lambda {|it| (it['events'] || []).size() },
24
33
  }
25
- print_description_list(description_cols, process)
34
+ print_description_list(description_cols, process, options)
26
35
 
27
36
  if process['error']
28
37
  print_h2 "Error"
@@ -39,7 +48,7 @@ module Morpheus::Cli::ProcessesHelper
39
48
  end
40
49
  end
41
50
 
42
- def print_process_event_details(process_event)
51
+ def print_process_event_details(process_event, options={})
43
52
  # process_event =~ process
44
53
  description_cols = {
45
54
  "Process ID" => lambda {|it| it['processId'] },
@@ -53,7 +62,7 @@ module Morpheus::Cli::ProcessesHelper
53
62
  "Duration" => lambda {|it| format_process_duration(it) },
54
63
  "Status" => lambda {|it| format_process_status(it) },
55
64
  }
56
- print_description_list(description_cols, process_event)
65
+ print_description_list(description_cols, process_event, options)
57
66
 
58
67
  if process_event['error']
59
68
  print_h2 "Error"
@@ -111,4 +120,25 @@ module Morpheus::Cli::ProcessesHelper
111
120
  out
112
121
  end
113
122
 
123
+ def wait_for_process_execution(process_id, options={}, print_output = true)
124
+ refresh_interval = 10
125
+ if options[:refresh_interval].to_i > 0
126
+ refresh_interval = options[:refresh_interval]
127
+ end
128
+ refresh_display_seconds = refresh_interval % 1.0 == 0 ? refresh_interval.to_i : refresh_interval
129
+ unless options[:quiet]
130
+ print cyan, "Refreshing every #{refresh_display_seconds} seconds until process is complete...", "\n", reset
131
+ end
132
+ process = processes_interface.get(process_id)['process']
133
+ while ['new','queued','pending','running'].include?(process['status']) do
134
+ sleep(refresh_interval)
135
+ process = processes_interface.get(process_id)['process']
136
+ end
137
+ if print_output && options[:quiet] != true
138
+ print_h1 "Process Details", [], options
139
+ print_process_details(process, options)
140
+ end
141
+ return process
142
+ end
143
+
114
144
  end
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Morpheus
3
3
  module Cli
4
- VERSION = "8.0.2"
4
+ VERSION = "8.0.3"
5
5
  end
6
6
  end
@@ -486,7 +486,7 @@ def format_name_and_id(obj)
486
486
  elsif(obj.is_a?(Hash))
487
487
  "#{obj['name']} [#{obj['id']}]" rescue ""
488
488
  else
489
- object.to_s
489
+ obj.to_s
490
490
  end
491
491
  end
492
492
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morpheus-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.2
4
+ version: 8.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Estes
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2025-01-16 00:00:00.000000000 Z
14
+ date: 2025-02-10 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: public_suffix