module Chef::DSL::IncludeAttribute

Public Instance Methods

include_attribute(*attr_file_specs) click to toggle source

Loads the attribute file specified by the short name of the file, e.g., loads specified cookbook's

"attributes/mailservers.rb"

if passed

"mailservers"
# 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) click to toggle source

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

# 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