diff options
author | Tim Smith <tsmith@chef.io> | 2016-12-20 17:19:22 -0800 |
---|---|---|
committer | Tim Smith <tsmith@chef.io> | 2017-04-06 10:02:19 -0700 |
commit | 52420f094ccffe3d227f54307285f33671d5a697 (patch) | |
tree | 1909b0d2665310a2734bbcd334dcb0d9818c4adb | |
parent | b693539a55cd8bc4494f0f76ac9b08c8a15b48b8 (diff) | |
download | ohai-52420f094ccffe3d227f54307285f33671d5a697.tar.gz |
Refactor the libvirt code a bit
Everyone likes methods
Signed-off-by: Tim Smith <tsmith@chef.io>
-rw-r--r-- | lib/ohai/plugins/libvirt.rb | 124 |
1 files changed, 79 insertions, 45 deletions
diff --git a/lib/ohai/plugins/libvirt.rb b/lib/ohai/plugins/libvirt.rb index 46587b01..0ccd8ba6 100644 --- a/lib/ohai/plugins/libvirt.rb +++ b/lib/ohai/plugins/libvirt.rb @@ -16,66 +16,100 @@ # limitations under the License. # +# Note: This plugin requires libvirt-bin/libvirt-dev as well as the ruby-libvirt +# gem to be installed before it will properly parse data + Ohai.plugin(:LibVirt) do %w{ uri capabilities nodeinfo domains networks storage }.each do |info| provides "libvirt/#{info}" + depends "virtualization" end - collect_data do - if virtualization[:role].eql?("host") - begin - require "libvirt" # this is the ruby-libvirt gem not the libvirt gem - - libvirt Mash.new - emu = (virtualization[:system].eql?("kvm") ? "qemu" : libvirt[:system]) - libvirt[:libvirt_version] = Libvirt.version(emu)[0].to_s - - virtconn = Libvirt.open_read_only("#{emu}:///system") + def emu + @emu ||= (virtualization[:system].eql?("kvm") ? "qemu" : virtualization[:system]) + end - libvirt[:uri] = virtconn.uri - libvirt[:capabilities] = Mash.new + def load_libvirt + begin + require "libvirt" # this is the ruby-libvirt gem not the libvirt gem + Ohai::Log.debug("Plugin LibVirt: Successfully loaded ruby-libvirt gem") + rescue LoadError + Ohai::Log.debug("Plugin LibVirt: Can't load gem ruby-libvirt.") + end + end - libvirt[:nodeinfo] = Mash.new - ni = virtconn.node_get_info - %w{cores cpus memory mhz model nodes sockets threads}.each { |a| libvirt[:nodeinfo][a] = ni.send(a) } + def virtconn + @virt_connect ||= Libvirt.open_read_only("#{emu}:///system") + end - libvirt[:domains] = Mash.new - virtconn.list_domains.each do |d| - dv = virtconn.lookup_domain_by_id d - libvirt[:domains][dv.name] = Mash.new - libvirt[:domains][dv.name][:id] = d - %w{os_type uuid}.each { |a| libvirt[:domains][dv.name][a] = dv.send(a) } - %w{cpu_time max_mem memory nr_virt_cpu state}.each { |a| libvirt[:domains][dv.name][a] = dv.info.send(a) } + def get_node_data + node_data = Mash.new + ni = virtconn.node_get_info + %w{cores cpus memory mhz model nodes sockets threads}.each { |a| node_data[a] = ni.send(a) } + node_data + end - end + def get_domain_data + domain_data = Mash.new + virtconn.list_domains.each do |d| + dv = virtconn.lookup_domain_by_id d + domain_data[dv.name] = Mash.new + domain_data[dv.name][:id] = d + %w{os_type uuid}.each { |a| domain_data[dv.name][a] = dv.send(a) } + %w{cpu_time max_mem memory nr_virt_cpu state}.each { |a| domain_data[dv.name][a] = dv.info.send(a) } + end + domain_data + end - libvirt[:networks] = Mash.new - virtconn.list_networks.each do |n| - nv = virtconn.lookup_network_by_name n - libvirt[:networks][n] = Mash.new - %w{bridge_name uuid}.each { |a| libvirt[:networks][n][a] = nv.send(a) } - end + def get_network_data + network_data = Mash.new + virtconn.list_networks.each do |n| + nv = virtconn.lookup_network_by_name n + network_data[n] = Mash.new + %w{bridge_name uuid}.each { |a| network_data[n][a] = nv.send(a) } + end + network_data + end - libvirt[:storage] = Mash.new - virtconn.list_storage_pools.each do |pool| - sp = virtconn.lookup_storage_pool_by_name pool - libvirt[:storage][pool] = Mash.new - %w{autostart uuid}.each { |a| libvirt[:storage][pool][a] = sp.send(a) } - %w{allocation available capacity state}.each { |a| libvirt[:storage][pool][a] = sp.info.send(a) } + def get_storage_data + storage_data = Mash.new + virtconn.list_storage_pools.each do |pool| + sp = virtconn.lookup_storage_pool_by_name pool + storage_data[pool] = Mash.new + %w{autostart uuid}.each { |a| storage_data[pool][a] = sp.send(a) } + %w{allocation available capacity state}.each { |a| storage_data[pool][a] = sp.info.send(a) } - libvirt[:storage][pool][:volumes] = Mash.new - sp.list_volumes.each do |v| - libvirt[:storage][pool][:volumes][v] = Mash.new - sv = sp.lookup_volume_by_name v - %w{key name path}.each { |a| libvirt[:storage][pool][:volumes][v][a] = sv.send(a) } - %w{allocation capacity type}.each { |a| libvirt[:storage][pool][:volumes][v][a] = sv.info.send(a) } - end - end + storage_data[pool][:volumes] = Mash.new + sp.list_volumes.each do |v| + storage_data[pool][:volumes][v] = Mash.new + sv = sp.lookup_volume_by_name v + %w{key name path}.each { |a| storage_data[pool][:volumes][v][a] = sv.send(a) } + %w{allocation capacity type}.each { |a| storage_data[pool][:volumes][v][a] = sv.info.send(a) } + end + end + storage_data + end + collect_data do + if virtualization[:role].eql?("host") + load_libvirt + begin + libvirt_data = Mash.new + libvirt_data[:uri] = virtconn.uri + libvirt_data[:libvirt_version] = Libvirt.version(emu)[0].to_s + libvirt_data[:nodeinfo] = get_node_data + libvirt_data[:domains] = get_domain_data + libvirt_data[:networks] = get_network_data + libvirt_data[:storage] = get_storage_data virtconn.close - rescue LoadError => e - Ohai::Log.debug("Plugin LibVirt: Can't load gem ruby-libvirt. Cannot continue.") + libvirt libvirt_data + rescue NameError + Ohai::Log.debug("Plugin LibVirt: Cannot load Libvirt. Skipping...") + rescue Libvirt::ConnectionError + Ohai::Log.debug("Plugin LibVirt: Failed to connect to #{emu}:///system. Skipping...") end + else + Ohai::Log.debug("Plugin LibVirt: Node is not a virtualization host. Skipping...") end end end |