Class: Puppet::Parser::AST::ResourceOverride

Inherits:
Branch show all
Defined in:
lib/puppet/parser/ast/resource_override.rb

Overview

Set a parameter on a resource specification created somewhere else in the configuration. The object is responsible for verifying that this is allowed.

Instance Attribute Summary collapse

Attributes inherited from Branch

#children, #pin

Instance Method Summary collapse

Constructor Details

#initialize(hash) ⇒ ResourceOverride

Create our ResourceDef. Handles type checking for us.



57
58
59
60
# File 'lib/puppet/parser/ast/resource_override.rb', line 57

def initialize(hash)
  @checked = false
  super
end

Instance Attribute Details

#objectObject



10
11
12
# File 'lib/puppet/parser/ast/resource_override.rb', line 10

def object
  @object
end

#parametersObject



10
11
12
# File 'lib/puppet/parser/ast/resource_override.rb', line 10

def parameters
  @parameters
end

Instance Method Details

#eachObject

Iterate across all of our children.



13
14
15
16
17
18
# File 'lib/puppet/parser/ast/resource_override.rb', line 13

def each
  [@object,@parameters].flatten.each { |param|
    #Puppet.debug("yielding param #{param}")
    yield param
  }
end

#evaluate(scope) ⇒ Object

Does not actually return an object; instead sets an object in the current scope.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/puppet/parser/ast/resource_override.rb', line 22

def evaluate(scope)
  # Get our object reference.
  resource = @object.safeevaluate(scope)

  # Evaluate all of the specified params.
  params = @parameters.collect { |param|
    param.safeevaluate(scope)
  }

  # Now we just create a normal resource, but we call a very different
  # method on the scope.
  resource = [resource] unless resource.is_a?(Array)

  resource = resource.collect do |r|

    res = Puppet::Parser::Resource.new(
    r.type, r.title,
      :parameters => params,
      :file => file,
      :line => line,
      :source => scope.source,
      :scope => scope
    )

    # Now we tell the scope that it's an override, and it behaves as
    # necessary.
    scope.compiler.add_override(res)

    res
  end
  # decapsulate array in case of only one item
  return(resource.length == 1 ? resource.pop : resource)
end