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

Inherits:
Branch show all
Defined in:
lib/vendor/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.

Constant Summary

Constants inherited from Puppet::Parser::AST

AST

Constants included from Util::Docs

Util::Docs::HEADER_LEVELS

Instance Attribute Summary collapse

Attributes inherited from Branch

#children, #pin

Attributes inherited from Puppet::Parser::AST

#file, #line, #parent, #scope

Attributes included from Util::Docs

#doc, #nodoc

Instance Method Summary collapse

Methods inherited from Puppet::Parser::AST

associates_doc, #evaluate_match, #inspect, #parsefail, #parsewrap, #safeevaluate, settor?, #use_docs

Methods included from Util::Docs

#desc, #dochook, #doctable, #markdown_definitionlist, #markdown_header, #nodoc?, #pad, scrub

Methods included from Util::MethodHelper

#requiredopts, #set_options, #symbolize_options

Methods included from Util::Errors

#adderrorcontext, #devfail, #error_context, #exceptwrap, #fail

Constructor Details

#initialize(hash) ⇒ ResourceOverride

Create our ResourceDef. Handles type checking for us.



60
61
62
63
64
65
# File 'lib/vendor/puppet/parser/ast/resource_override.rb', line 60

def initialize(hash)
  @checked = false
  super

  #self.typecheck(@type.value)
end

Instance Attribute Details

#objectObject

Returns the value of attribute object.



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

def object
  @object
end

#parametersObject

Returns the value of attribute parameters.



10
11
12
# File 'lib/vendor/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/vendor/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
55
56
57
# File 'lib/vendor/puppet/parser/ast/resource_override.rb', line 22

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

  hash = {}

  # 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