summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2020-02-03 13:50:30 -0800
committerLamont Granquist <lamont@scriptkiddie.org>2020-02-03 13:50:30 -0800
commitb36caa9ad5c0d5d05dd00ec54f808603d6e8138c (patch)
treed9819842edee51ec116f9201203ad3457d0a1f43
parent569b7910b4ddf37063dd88483500cebbfcd4c18d (diff)
downloadchef-b36caa9ad5c0d5d05dd00ec54f808603d6e8138c.tar.gz
add _host versions
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
-rw-r--r--chef-utils/lib/chef-utils/dsl/virtualization.rb84
-rw-r--r--chef-utils/spec/unit/dsl/virtualization_spec.rb12
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: {} )