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.

API:

  • public

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.

API:

  • public



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

API:

  • public



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

def object
  @object
end

#parametersObject

API:

  • public



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.

API:

  • public



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.

API:

  • public



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