diff options
author | Tim Smith <tsmith@chef.io> | 2018-01-29 16:48:48 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-29 16:48:48 -0800 |
commit | b3e9304979d4e5a5db921dd8e5743828d6734307 (patch) | |
tree | cba63169bc712a552699eb3c7d82be51fc12e5db | |
parent | b5f510c6338f2bc0ced874a126741113fd94fb96 (diff) | |
parent | edc31b5005220f8624a51cf3f72e5e14b1dfdfdc (diff) | |
download | ohai-b3e9304979d4e5a5db921dd8e5743828d6734307.tar.gz |
Merge pull request #931 from chef/libvirt
Move the “Virtualization” plugin into libvirt namespace
-rw-r--r-- | lib/ohai/plugins/libvirt.rb | 115 | ||||
-rw-r--r-- | lib/ohai/plugins/virtualization.rb | 83 |
2 files changed, 115 insertions, 83 deletions
diff --git a/lib/ohai/plugins/libvirt.rb b/lib/ohai/plugins/libvirt.rb new file mode 100644 index 00000000..95b2f1e1 --- /dev/null +++ b/lib/ohai/plugins/libvirt.rb @@ -0,0 +1,115 @@ +# +# Author:: Benjamin Black (<bb@chef.io>) +# Copyright:: Copyright (c) 2009-2016 Chef Software, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# 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 + + def emu + @emu ||= (virtualization[:system].eql?("kvm") ? "qemu" : virtualization[:system]) + end + + 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 + + def virtconn + @virt_connect ||= Libvirt.open_read_only("#{emu}:///system") + end + + 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 + + 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 + + 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 + + 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) } + + 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 + libvirt libvirt_data + rescue NameError + Ohai::Log.debug("Plugin Libvirt: Cannot load ruby-libvirt gem. 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 diff --git a/lib/ohai/plugins/virtualization.rb b/lib/ohai/plugins/virtualization.rb deleted file mode 100644 index 7e199b93..00000000 --- a/lib/ohai/plugins/virtualization.rb +++ /dev/null @@ -1,83 +0,0 @@ -# -# Author:: Benjamin Black (<bb@chef.io>) -# Copyright:: Copyright (c) 2009-2016 Chef Software, Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# Note: despite the name this is really a libvirt plugin. -# perhaps we'd be better off renaming it? -tsmith - -Ohai.plugin(:VirtualizationInfo) do - %w{ uri capabilities nodeinfo domains networks storage }.each do |info| - provides "virtualization/#{info}" - end - - collect_data do - unless virtualization.nil? || !(virtualization[:role].eql?("host")) - begin - require "libvirt" # this is the ruby-libvirt gem not the libvirt gem - - emu = (virtualization[:system].eql?("kvm") ? "qemu" : virtualization[:system]) - virtualization[:libvirt_version] = Libvirt.version(emu)[0].to_s - - virtconn = Libvirt.open_read_only("#{emu}:///system") - - virtualization[:uri] = virtconn.uri - virtualization[:capabilities] = Mash.new - - virtualization[:nodeinfo] = Mash.new - ni = virtconn.node_get_info - %w{cores cpus memory mhz model nodes sockets threads}.each { |a| virtualization[:nodeinfo][a] = ni.send(a) } - - virtualization[:domains] = Mash.new - virtconn.list_domains.each do |d| - dv = virtconn.lookup_domain_by_id d - virtualization[:domains][dv.name] = Mash.new - virtualization[:domains][dv.name][:id] = d - %w{os_type uuid}.each { |a| virtualization[:domains][dv.name][a] = dv.send(a) } - %w{cpu_time max_mem memory nr_virt_cpu state}.each { |a| virtualization[:domains][dv.name][a] = dv.info.send(a) } - - end - - virtualization[:networks] = Mash.new - virtconn.list_networks.each do |n| - nv = virtconn.lookup_network_by_name n - virtualization[:networks][n] = Mash.new - %w{bridge_name uuid}.each { |a| virtualization[:networks][n][a] = nv.send(a) } - end - - virtualization[:storage] = Mash.new - virtconn.list_storage_pools.each do |pool| - sp = virtconn.lookup_storage_pool_by_name pool - virtualization[:storage][pool] = Mash.new - %w{autostart uuid}.each { |a| virtualization[:storage][pool][a] = sp.send(a) } - %w{allocation available capacity state}.each { |a| virtualization[:storage][pool][a] = sp.info.send(a) } - - virtualization[:storage][pool][:volumes] = Mash.new - sp.list_volumes.each do |v| - virtualization[:storage][pool][:volumes][v] = Mash.new - sv = sp.lookup_volume_by_name v - %w{key name path}.each { |a| virtualization[:storage][pool][:volumes][v][a] = sv.send(a) } - %w{allocation capacity type}.each { |a| virtualization[:storage][pool][:volumes][v][a] = sv.info.send(a) } - end - end - - virtconn.close - rescue LoadError => e - Ohai::Log.debug("Plugin Virtualization: Can't load gem: #{e}. Cannot continue.") - end - end - end -end |