Module: Chef::DSL::PlatformIntrospection

Included in:
RebootPending, Universal, Mixin::DeprecatedLanguageModule
Defined in:
lib/chef/dsl/platform_introspection.rb

Overview

== Chef::DSL::PlatformIntrospection Provides the DSL for platform-dependent switch logic, such as

value_for_platform.

Defined Under Namespace

Classes: PlatformDependentValue, PlatformFamilyDependentValue

Instance Method Summary collapse

Instance Method Details

#docker?(node = run_context.nil? ? nil : run_context.node) ⇒ Boolean

Shamelessly stolen from https://github.com/sethvargo/chef-sugar/blob/master/lib/chef/sugar/docker.rb Given a node object, returns whether the node is a docker container.

=== Parameters node:: [Chef::Node] The node to check.

=== Returns true:: if the current node is a docker container false:: if the current node is not a docker container

Returns:

  • (Boolean)

255
256
257
258
259
260
# File 'lib/chef/dsl/platform_introspection.rb', line 255

def docker?(node = run_context.nil? ? nil : run_context.node)
  # Using "File.exist?('/.dockerinit') || File.exist?('/.dockerenv')" makes Travis sad,
  # and that makes us sad too.
  !!(node && node[:virtualization] && node[:virtualization][:systems] &&
     node[:virtualization][:systems][:docker] && node[:virtualization][:systems][:docker] == "guest")
end

#platform?(*args) ⇒ Boolean

Given a list of platforms, returns true if the current recipe is being run on a node with that platform, false otherwise.

=== Parameters args:: A list of platforms. Each platform can be in string or symbol format.

=== Returns true:: If the current platform is in the list false:: If the current platform is not in the list

Returns:

  • (Boolean)

157
158
159
160
161
162
163
164
165
# File 'lib/chef/dsl/platform_introspection.rb', line 157

def platform?(*args)
  has_platform = false

  args.flatten.each do |platform|
    has_platform = true if platform.to_s == node[:platform]
  end

  has_platform
end

#platform_family?(*args) ⇒ Boolean

Given a list of platform families, returns true if the current recipe is being run on a node within that platform family, false otherwise.

=== Parameters args:: A list of platform families. Each platform family can be in string or symbol format.

=== Returns true:: if the current node platform family is in the list. false:: if the current node platform family is not in the list.

Returns:

  • (Boolean)

240
241
242
243
244
# File 'lib/chef/dsl/platform_introspection.rb', line 240

def platform_family?(*args)
  args.flatten.any? do |platform_family|
    platform_family.to_s == node[:platform_family]
  end
end

#value_for_platform(platform_hash) ⇒ Object

Given a hash similar to the one we use for Platforms, select a value from the hash. Supports per platform defaults, along with a single base default. Arrays may be passed as hash keys and will be expanded.

=== Parameters platform_hash:: A platform-style hash.

=== Returns value:: Whatever the most specific value of the hash is.


144
145
146
# File 'lib/chef/dsl/platform_introspection.rb', line 144

def value_for_platform(platform_hash)
  PlatformDependentValue.new(platform_hash).value_for_node(node)
end

#value_for_platform_family(platform_family_hash) ⇒ Object

Given a hash mapping platform families to values, select a value from the hash. Supports a single base default if platform family is not in the map. Arrays may be passed as hash keys and will be expanded

=== Parameters platform_family_hash:: A hash in the form { platform_family_name => value }

=== Returns value:: Whatever the most specific value of the hash is.


227
228
229
# File 'lib/chef/dsl/platform_introspection.rb', line 227

def value_for_platform_family(platform_family_hash)
  PlatformFamilyDependentValue.new(platform_family_hash).value_for_node(node)
end