Class: Chef::Platform

Inherits:
Object
  • Object
show all
Defined in:
lib/chef/platform.rb,
lib/chef/platform/rebooter.rb,
lib/chef/platform/priority_map.rb,
lib/chef/platform/query_helpers.rb,
lib/chef/platform/service_helpers.rb,
lib/chef/platform/provider_mapping.rb,
lib/chef/platform/provider_handler_map.rb,
lib/chef/platform/resource_handler_map.rb,
lib/chef/platform/provider_priority_map.rb,
lib/chef/platform/resource_priority_map.rb

Defined Under Namespace

Modules: Rebooter Classes: PriorityMap, ProviderHandlerMap, ProviderPriorityMap, ResourceHandlerMap, ResourcePriorityMap, ServiceHelpers

Class Method Summary collapse

Class Method Details

.dsc_refresh_mode_disabled?(node) ⇒ Boolean

Returns:

  • (Boolean)

96
97
98
99
100
101
# File 'lib/chef/platform/query_helpers.rb', line 96

def dsc_refresh_mode_disabled?(node)
  require "chef/util/powershell/cmdlet"
  cmdlet = Chef::Util::Powershell::Cmdlet.new(node, "Get-DscLocalConfigurationManager", :object)
   = cmdlet.run!.return_value
  ["RefreshMode"] == "Disabled"
end

.find_platform_and_version(node) ⇒ Object

Raises:

  • (ArgumentError)

29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/chef/platform/provider_mapping.rb', line 29

def find_platform_and_version(node)
  platform = nil
  version = nil

  if node[:platform]
    platform = node[:platform]
  elsif node.attribute?("os")
    platform = node[:os]
  end

  raise ArgumentError, "Cannot find a platform for #{node}" unless platform

  if node[:platform_version]
    version = node[:platform_version]
  elsif node[:os_version]
    version = node[:os_version]
  elsif node[:os_release]
    version = node[:os_release]
  end

  raise ArgumentError, "Cannot find a version for #{node}" unless version

  [platform, version]
end

.supported_powershell_version?(node, version_string) ⇒ Boolean

Returns:

  • (Boolean)

103
104
105
106
107
108
# File 'lib/chef/platform/query_helpers.rb', line 103

def supported_powershell_version?(node, version_string)
  return false unless node[:languages] && node[:languages][:powershell]
  require "rubygems"
  Gem::Version.new(node[:languages][:powershell][:version]) >=
    Gem::Version.new(version_string)
end

.supports_dsc?(node) ⇒ Boolean

Returns:

  • (Boolean)

82
83
84
85
# File 'lib/chef/platform/query_helpers.rb', line 82

def supports_dsc?(node)
  node[:languages] && node[:languages][:powershell] &&
    node[:languages][:powershell][:version].to_i >= 4
end

.supports_dsc_invoke_resource?(node) ⇒ Boolean

Returns:

  • (Boolean)

87
88
89
90
# File 'lib/chef/platform/query_helpers.rb', line 87

def supports_dsc_invoke_resource?(node)
  supports_dsc?(node) &&
    supported_powershell_version?(node, "5.0.10018.0")
end

.supports_msi?Boolean

Returns:

  • (Boolean)

61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/chef/platform/query_helpers.rb', line 61

def supports_msi?
  return false unless windows?
  require "win32/registry"

  key = "System\\CurrentControlSet\\Services\\msiserver"
  access = ::Win32::Registry::KEY_QUERY_VALUE

  begin
    ::Win32::Registry::HKEY_LOCAL_MACHINE.open(key, access) do |reg|
      true
    end
  rescue ::Win32::Registry::Error
    false
  end
end

.supports_powershell_execution_bypass?(node) ⇒ Boolean

Returns:

  • (Boolean)

77
78
79
80
# File 'lib/chef/platform/query_helpers.rb', line 77

def supports_powershell_execution_bypass?(node)
  node[:languages] && node[:languages][:powershell] &&
    node[:languages][:powershell][:version].to_i >= 3
end

.supports_refresh_mode_enabled?(node) ⇒ Boolean

Returns:

  • (Boolean)

92
93
94
# File 'lib/chef/platform/query_helpers.rb', line 92

def supports_refresh_mode_enabled?(node)
  supported_powershell_version?(node, "5.0.10586.0")
end

.windows?Boolean

Returns:

  • (Boolean)

23
24
25
# File 'lib/chef/platform/query_helpers.rb', line 23

def windows?
  ChefConfig.windows?
end

.windows_nano_server?Boolean

Returns:

  • (Boolean)

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/chef/platform/query_helpers.rb', line 39

def windows_nano_server?
  return false unless windows?
  require "win32/registry"

  # This method may be called before ohai runs (e.g., it may be used to
  # determine settings in config.rb). Chef::Win32::Registry.new uses
  # node attributes to verify the machine architecture which aren't
  # accessible before ohai runs.
  nano = nil
  key = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Server\\ServerLevels"
  access = ::Win32::Registry::KEY_QUERY_VALUE | 0x0100 # nano is 64-bit only
  begin
    ::Win32::Registry::HKEY_LOCAL_MACHINE.open(key, access) do |reg|
      nano = reg["NanoServer"]
    end
  rescue ::Win32::Registry::Error
    # If accessing the registry key failed, then we're probably not on
    # nano. Fail through.
  end
  nano == 1
end

.windows_server_2003?Boolean

Returns:

  • (Boolean)

27
28
29
30
31
32
33
34
35
36
37
# File 'lib/chef/platform/query_helpers.rb', line 27

def windows_server_2003?
  # WMI startup shouldn't be performed unless we're on Windows.
  return false unless windows?
  require "wmi-lite/wmi"

  wmi = WmiLite::Wmi.new
  host = wmi.first_of("Win32_OperatingSystem")
  is_server_2003 = (host["version"] && host["version"].start_with?("5.2"))

  is_server_2003
end