diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2020-02-03 13:50:30 -0800 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2020-02-03 15:34:13 -0800 |
commit | 49864217cbbb7787deadb8548bbfe26f93c79a0d (patch) | |
tree | 736e5ca62545ebb50ccc700efe6eab18a8f0e9d4 | |
parent | 46461876fa2da0118b5c14b6da65019191d5fd04 (diff) | |
download | chef-49864217cbbb7787deadb8548bbfe26f93c79a0d.tar.gz |
add _host versions
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
-rw-r--r-- | chef-utils/lib/chef-utils/dsl/virtualization.rb | 84 | ||||
-rw-r--r-- | chef-utils/spec/unit/dsl/virtualization_spec.rb | 12 |
2 files changed, 78 insertions, 18 deletions
diff --git a/chef-utils/lib/chef-utils/dsl/virtualization.rb b/chef-utils/lib/chef-utils/dsl/virtualization.rb index e958c5f4ce..f84ee37044 100644 --- a/chef-utils/lib/chef-utils/dsl/virtualization.rb +++ b/chef-utils/lib/chef-utils/dsl/virtualization.rb @@ -22,14 +22,24 @@ module ChefUtils module Virtualization include Internal - # Determine if the current node is running under KVM. + # Determine if the current node is a KVM guest. # # @param [Chef::Node] node # # @return [Boolean] # def kvm?(node = __getnode) - node.dig("virtualization", "system") == "kvm" + node.dig("virtualization", "system") == "kvm" && node.dig("virtualization", "role") == "guest" + end + + # Determine if the current node is a KVM host. + # + # @param [Chef::Node] node + # + # @return [Boolean] + # + def kvm_host?(node = __getnode) + node.dig("virtualization", "system") == "kvm" && node.dig("virtualization", "role") == "host" end # Determine if the current node is running in a linux container. @@ -39,10 +49,19 @@ module ChefUtils # @return [Boolean] # def lxc?(node = __getnode) - node.dig("virtualization", "system") == "lxc" + node.dig("virtualization", "system") == "lxc" && node.dig("virtualization", "role") == "guest" end + # Determine if the current node is a linux container host. + # + # @param [Chef::Node] node + # + # @return [Boolean] # + def lxc_host?(node = __getnode) + node.dig("virtualization", "system") == "lxc" && node.dig("virtualization", "role") == "host" + end + # Determine if the current node is running under Parallels Desktop. # # @param [Chef::Node] node @@ -52,40 +71,81 @@ module ChefUtils # otherwise # def parallels?(node = __getnode) - node.dig("virtualization", "system") == "parallels" + node.dig("virtualization", "system") == "parallels" && node.dig("virtualization", "role") == "guest" + end + + # Determine if the current node is a Parallels Desktop host. + # + # @param [Chef::Node] node + # + # @return [Boolean] + # true if the machine is currently running under Parallels Desktop, false + # otherwise + # + def parallels_host?(node = __getnode) + node.dig("virtualization", "system") == "parallels" && node.dig("virtualization", "role") == "host" end - # Determine if the current node is running under VirtualBox. + # Determine if the current node is a VirtualBox guest. # # @param [Chef::Node] node # # @return [Boolean] # def vbox?(node = __getnode) - node.dig("virtualization", "system") == "vbox" + node.dig("virtualization", "system") == "vbox" && node.dig("virtualization", "role") == "guest" + end + + # Determine if the current node is a VirtualBox host. + # + # @param [Chef::Node] node + # + # @return [Boolean] + # + def vbox_host?(node = __getnode) + node.dig("virtualization", "system") == "vbox" && node.dig("virtualization", "role") == "host" end alias_method :virtualbox?, :vbox? - # - # Determine if the current node is running under VMware. + # Determine if the current node is a VMWare guest. # # @param [Chef::Node] node # # @return [Boolean] # def vmware?(node = __getnode) - node.dig("virtualization", "system") == "vmware" + node.dig("virtualization", "system") == "vmware" && node.dig("virtualization", "role") == "guest" + end + + # Determine if the current node is VMware host. + # + # @param [Chef::Node] node + # + # @return [Boolean] + # + def vmware_host?(node = __getnode) + node.dig("virtualization", "system") == "vmware" && node.dig("virtualization", "role") == "host" end - # Determine if the current node is running under openvz. + # Determine if the current node is an openvz guest. # # @param [Chef::Node] node # # @return [Boolean] # def openvz?(node = __getnode) - node.dig("virtualization", "system") == "openvz" + node.dig("virtualization", "system") == "openvz" && node.dig("virtualization", "role") == "guest" + end + + # Determine if the current node is an openvz host. + # + # @param [Chef::Node] node + # + # @return [Boolean] + # + def openvz_host?(node = __getnode) + node.dig("virtualization", "system") == "openvz" && node.dig("virtualization", "role") == "host" end # Determine if the current node is running under any virutalization environment @@ -120,7 +180,7 @@ module ChefUtils !virtual?(node) end - # Determine if the current node is running in vagrant mode. + # Determine if the current node is running as a vagrant guest. # # Note that this API is equivalent to just looking for the vagrant user or the # vagrantup.com domain in the hostname, which is the best API we have. diff --git a/chef-utils/spec/unit/dsl/virtualization_spec.rb b/chef-utils/spec/unit/dsl/virtualization_spec.rb index 437e1a0732..5b8f7d86ad 100644 --- a/chef-utils/spec/unit/dsl/virtualization_spec.rb +++ b/chef-utils/spec/unit/dsl/virtualization_spec.rb @@ -46,27 +46,27 @@ RSpec.describe ChefUtils::DSL::Virtualization do context "on kvm" do virtualization_reports_true_for(:guest?, :virtual?, :kvm?, node: { "virtualization" => { "system" => "kvm", "role" => "guest" } }) - virtualization_reports_true_for(:virtual_host?, :physical?, :kvm?, node: { "virtualization" => { "system" => "kvm", "role" => "host" } }) + virtualization_reports_true_for(:virtual_host?, :physical?, :kvm_host?, node: { "virtualization" => { "system" => "kvm", "role" => "host" } }) end context "on lxc" do virtualization_reports_true_for(:guest?, :virtual?, :lxc?, node: { "virtualization" => { "system" => "lxc", "role" => "guest" } }) - virtualization_reports_true_for(:virtual_host?, :physical?, :lxc?, node: { "virtualization" => { "system" => "lxc", "role" => "host" } }) + virtualization_reports_true_for(:virtual_host?, :physical?, :lxc_host?, node: { "virtualization" => { "system" => "lxc", "role" => "host" } }) end context "on parallels" do virtualization_reports_true_for(:guest?, :virtual?, :parallels?, node: { "virtualization" => { "system" => "parallels", "role" => "guest" } }) - virtualization_reports_true_for(:virtual_host?, :physical?, :parallels?, node: { "virtualization" => { "system" => "parallels", "role" => "host" } }) + virtualization_reports_true_for(:virtual_host?, :physical?, :parallels_host?, node: { "virtualization" => { "system" => "parallels", "role" => "host" } }) end context "on virtualbox" do virtualization_reports_true_for(:guest?, :virtual?, :virtualbox?, :vbox?, node: { "virtualization" => { "system" => "vbox", "role" => "guest" } }) - virtualization_reports_true_for(:virtual_host?, :physical?, :virtualbox?, :vbox?, node: { "virtualization" => { "system" => "vbox", "role" => "host" } }) + virtualization_reports_true_for(:virtual_host?, :physical?, :vbox_host?, node: { "virtualization" => { "system" => "vbox", "role" => "host" } }) end context "on vmware" do virtualization_reports_true_for(:guest?, :virtual?, :vmware?, node: { "virtualization" => { "system" => "vmware", "role" => "guest" } }) - virtualization_reports_true_for(:virtual_host?, :physical?, :vmware?, node: { "virtualization" => { "system" => "vmware", "role" => "host" } }) + virtualization_reports_true_for(:virtual_host?, :physical?, :vmware_host?, node: { "virtualization" => { "system" => "vmware", "role" => "host" } }) end context "on openvz" do virtualization_reports_true_for(:guest?, :virtual?, :openvz?, node: { "virtualization" => { "system" => "openvz", "role" => "guest" } }) - virtualization_reports_true_for(:virtual_host?, :physical?, :openvz?, node: { "virtualization" => { "system" => "openvz", "role" => "host" } }) + virtualization_reports_true_for(:virtual_host?, :physical?, :openvz_host?, node: { "virtualization" => { "system" => "openvz", "role" => "host" } }) end context "on metal which is not a virt host" do virtualization_reports_true_for(:physical?, node: {} ) |