# frozen_string_literal: true## Copyright:: Copyright (c) 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.#require_relative"../internal"moduleChefUtilsmoduleDSLmoduleVirtualizationincludeInternal# Determine if the current node is a KVM guest.## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defkvm?(node=__getnode)node.dig("virtualization","system")=="kvm"&&node.dig("virtualization","role")=="guest"end# Determine if the current node is a KVM host.## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defkvm_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.## @param [Chef::Node] node# @since 15.8## @return [Boolean]#deflxc?(node=__getnode)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# @since 15.8## @return [Boolean]#deflxc_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# @since 15.8## @return [Boolean]# true if the machine is currently running under Parallels Desktop, false# otherwise#defparallels?(node=__getnode)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# @since 15.8## @return [Boolean]# true if the machine is currently running under Parallels Desktop, false# otherwise#defparallels_host?(node=__getnode)node.dig("virtualization","system")=="parallels"&&node.dig("virtualization","role")=="host"end# Determine if the current node is a VirtualBox guest.## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defvbox?(node=__getnode)node.dig("virtualization","system")=="vbox"&&node.dig("virtualization","role")=="guest"end# Determine if the current node is a VirtualBox host.## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defvbox_host?(node=__getnode)node.dig("virtualization","system")=="vbox"&&node.dig("virtualization","role")=="host"end# chef-sugar backcompat methodalias_method:virtualbox?,:vbox?# Determine if the current node is a VMWare guest.## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defvmware?(node=__getnode)node.dig("virtualization","system")=="vmware"&&node.dig("virtualization","role")=="guest"end# Determine if the current node is VMware host.## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defvmware_host?(node=__getnode)node.dig("virtualization","system")=="vmware"&&node.dig("virtualization","role")=="host"end# Determine if the current node is virtualized on VMware Desktop (Fusion/Player/Workstation).## @param [Chef::Node] node# @since 17.9## @return [Boolean]#defvmware_desktop?(node=__getnode)node.dig("virtualization","system")=="vmware"&&node.dig("vmware","host","type")=="vmware_desktop"end# Determine if the current node is virtualized on VMware vSphere (ESX).## @param [Chef::Node] node# @since 17.9## @return [Boolean]#defvmware_vsphere?(node=__getnode)node.dig("virtualization","system")=="vmware"&&node.dig("vmware","host","type")=="vmware_vsphere"end# Determine if the current node is an openvz guest.## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defopenvz?(node=__getnode)node.dig("virtualization","system")=="openvz"&&node.dig("virtualization","role")=="guest"end# Determine if the current node is an openvz host.## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defopenvz_host?(node=__getnode)node.dig("virtualization","system")=="openvz"&&node.dig("virtualization","role")=="host"end# Determine if the current node is running under any virtualization environment## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defguest?(node=__getnode)node.dig("virtualization","role")=="guest"end# chef-sugar backcompat methodalias_method:virtual?,:guest?# Determine if the current node supports running guests under any virtualization environment## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defhypervisor?(node=__getnode)node.dig("virtualization","role")=="host"end# Determine if the current node is NOT running under any virtualization environment (bare-metal or hypervisor on metal)## @param [Chef::Node] node# @since 15.8## @return [Boolean]#defphysical?(node=__getnode)!virtual?(node)end# 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.## @param [Chef::Node] node# @since 15.8## @return [Boolean]# true if the machine is currently running vagrant, false# otherwise#defvagrant?(node=__getnode)vagrant_key?(node)||vagrant_domain?(node)||vagrant_user?(node)endprivate# Check if the +vagrant+ key exists on the +node+ object. This key is no# longer populated by vagrant, but it is kept around for legacy purposes.## @param (see vagrant?)# @return (see vagrant?)#defvagrant_key?(node=__getnode)node.key?("vagrant")end# Check if "vagrantup.com" is included in the node's domain.## @param (see vagrant?)# @return (see vagrant?)#defvagrant_domain?(node=__getnode)node.key?("domain")&&!node["domain"].nil?&&node["domain"].include?("vagrantup.com")end# Check if the system contains a +vagrant+ user.## @param (see vagrant?)# @return (see vagrant?)#defvagrant_user?(node=__getnode)!!(Etc.getpwnam("vagrant")rescuenil)endextendselfendendend