# 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.debug("I am not loading attribute file #{cookbook_name}::#{attr_file}, because I have already seen it.")
        else
          Chef::Log.debug("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