From 48bdf4505b4af7d8f836a3f741cbf24bd6628e85 Mon Sep 17 00:00:00 2001 From: Dimitri Tischenko Date: Tue, 19 Sep 2023 12:22:34 +0100 Subject: [PATCH 1/3] Add provider method get_provisioning_trace --- lib/vmpooler/providers/vsphere.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/vmpooler/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index efd3c9f..5d12470 100644 --- a/lib/vmpooler/providers/vsphere.rb +++ b/lib/vmpooler/providers/vsphere.rb @@ -1225,6 +1225,25 @@ module Vmpooler return true if pool['create_linked_clone'] return true if @config[:config]['create_linked_clones'] end + + def get_provisioning_trace(vm_name, pool_name) + vm_object = nil + events = nil + @connection_pool.with_metrics do |pool_object| + connection = ensured_vsphere_connection(pool_object) + vm_object = find_vm(pool_name, vm_name, connection) + event_manager = connection.serviceContent.eventManager + event_filter_spec = RbVmomi::VIM::EventFilterSpec.new( + entity: RbVmomi::VIM::EventFilterSpecByEntity.new(entity: vm_object, recursion: RbVmomi::VIM::EventFilterSpecRecursionOption(:all)), + maxCount: 100 # Limit the number of events returned + ) + # find events for vm + events = event_manager.QueryEvents(filter: event_filter_spec) + end + # convert events to json, include only the fullFormattedMessage + messages = events.map { |e| e.fullFormattedMessage } + JSON.generate(messages) + end end end end From 96131e10cf914af2a5c579fb81e268fc78fb9c8e Mon Sep 17 00:00:00 2001 From: Dimitri Tischenko Date: Tue, 19 Sep 2023 13:08:26 +0100 Subject: [PATCH 2/3] fix rubocop complaint --- lib/vmpooler/providers/vsphere.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vmpooler/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index 5d12470..be66e52 100644 --- a/lib/vmpooler/providers/vsphere.rb +++ b/lib/vmpooler/providers/vsphere.rb @@ -1241,7 +1241,7 @@ module Vmpooler events = event_manager.QueryEvents(filter: event_filter_spec) end # convert events to json, include only the fullFormattedMessage - messages = events.map { |e| e.fullFormattedMessage } + messages = events.map(&:fullFormattedMessage) JSON.generate(messages) end end From d6dd025d6fc5c1b28316317c3aae9209dc511c67 Mon Sep 17 00:00:00 2001 From: Dimitri Tischenko Date: Tue, 19 Sep 2023 14:42:05 +0100 Subject: [PATCH 3/3] add checking for empty events --- lib/vmpooler/providers/vsphere.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/vmpooler/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index be66e52..9a67984 100644 --- a/lib/vmpooler/providers/vsphere.rb +++ b/lib/vmpooler/providers/vsphere.rb @@ -1240,6 +1240,8 @@ module Vmpooler # find events for vm events = event_manager.QueryEvents(filter: event_filter_spec) end + return nil if !events || events.empty? + # convert events to json, include only the fullFormattedMessage messages = events.map(&:fullFormattedMessage) JSON.generate(messages)