Class: PuppetCatalogTest::Puppet3xAdapter

Inherits:
BasePuppetAdapter show all
Defined in:
lib/puppet-catalog-test/puppet_adapter/puppet_3x_adapter.rb

Instance Method Summary collapse

Methods inherited from BasePuppetAdapter

#cleanup, #init_config, #parser, #prepare

Constructor Details

#initialize(config) ⇒ Puppet3xAdapter

Returns a new instance of Puppet3xAdapter.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/puppet-catalog-test/puppet_adapter/puppet_3x_adapter.rb', line 6

def initialize(config)
  super(config)

  require 'puppet/test/test_helper'
  parser = config[:parser]

  init_config
  
  # initialize was added in 3.1.0
  if Gem::Version.new(version) > Gem::Version.new('3.1.0')
    Puppet::Test::TestHelper.initialize
  end

  Puppet::Test::TestHelper.before_all_tests
  
  Puppet::Node::Environment.new.modules_by_path.each do |_, mod|
    mod.entries.each do |entry|
      ldir = entry.plugin_directory
      $LOAD_PATH << ldir unless $LOAD_PATH.include?(ldir)
    end
  end

  # future parser was added in 3.2.0
  if parser and Gem::Version.new(version) > Gem::Version.new('3.2.0')
    parser_regex = /^(current|future)$/
    raise ArgumentError, "[ERROR] parser (#{parser}) is not a valid parser, should be 'current' or 'future'" if !parser.match(parser_regex)
    puts "[INFO] Using #{parser} puppet parser"
    Puppet.settings[:parser] = parser
  end

  Puppet.parse_config
end

Instance Method Details

#compile(node) ⇒ Object



44
45
46
47
48
49
50
51
52
53
# File 'lib/puppet-catalog-test/puppet_adapter/puppet_3x_adapter.rb', line 44

def compile(node)
  begin
    catalog = Puppet::Parser::Compiler.compile(node)
    validate_relationships(catalog)
  rescue => e
    raise e
  ensure
    Puppet::Test::TestHelper.after_each_test
  end
end

#create_node(hostname, facts) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/puppet-catalog-test/puppet_adapter/puppet_3x_adapter.rb', line 55

def create_node(hostname, facts)
  Puppet::Test::TestHelper.before_each_test
  init_config
  node = Puppet::Node.new(hostname)
  node.merge(facts)
  node
end

#nodesObject



39
40
41
42
# File 'lib/puppet-catalog-test/puppet_adapter/puppet_3x_adapter.rb', line 39

def nodes
  parser = Puppet::Parser::Parser.new(Puppet::Node::Environment.new)
  parser.known_resource_types.nodes.keys
end

#validate_relationships(catalog) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/puppet-catalog-test/puppet_adapter/puppet_3x_adapter.rb', line 67

def validate_relationships(catalog)
  catalog.resources.each do |resource|
    next unless resource.is_a?(Puppet::Resource)

    resource.each do |param, value|
      pclass = Puppet::Type.metaparamclass(param)
      if !pclass.nil? && pclass < Puppet::Type::RelationshipMetaparam
        next if value.is_a?(String)
        check_if_resource_exists(catalog, resource, param, value)
      end
    end
  end
  nil
end

#versionObject



63
64
65
# File 'lib/puppet-catalog-test/puppet_adapter/puppet_3x_adapter.rb', line 63

def version
  Puppet::PUPPETVERSION
end