Module: Chef::DSL::IncludeAttribute

Included in:
Node
Defined in:
lib/chef/dsl/include_attribute.rb

Instance Method Summary collapse

Instance Method Details

#include_attribute(*attr_file_specs) ⇒ Object

Loads the attribute file specified by the short name of the file, e.g., loads specified cookbook's "attributes/mailservers.rb" if passed "mailservers"



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/chef/dsl/include_attribute.rb', line 30

def include_attribute(*attr_file_specs)
  attr_file_specs.flatten.each do |attr_file_spec|
    cookbook_name, attr_file = parse_attribute_file_spec(attr_file_spec)
    if run_context.loaded_fully_qualified_attribute?(cookbook_name, attr_file)
      Chef::Log.trace("I am not loading attribute file #{cookbook_name}::#{attr_file}, because I have already seen it.")
    else
      Chef::Log.trace("Loading Attribute #{cookbook_name}::#{attr_file}")
      run_context.loaded_attribute(cookbook_name, attr_file)
      attr_file_path = run_context.resolve_attribute(cookbook_name, attr_file)
      node.from_file(attr_file_path)
    end
  end
  true
end

#parse_attribute_file_spec(file_spec) ⇒ Object

Takes a attribute file specification, like "apache2" or "mysql::server" and converts it to a 2 element array of [cookbook_name, attribute_file_name]



47
48
49
50
51
52
53
# File 'lib/chef/dsl/include_attribute.rb', line 47

def parse_attribute_file_spec(file_spec)
  if match = file_spec.match(/(.+?)::(.+)/)
    [match[1], match[2]]
  else
    [file_spec, "default"]
  end
end