Class: RSpec::Puppet::Adapters::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec-puppet/adapters.rb

Direct Known Subclasses

Adapter27, Adapter30, Adapter40

Instance Method Summary collapse

Instance Method Details

#catalog(node, exported) ⇒ Object



86
87
88
89
90
91
92
93
# File 'lib/rspec-puppet/adapters.rb', line 86

def catalog(node, exported)
  if exported
    # Use the compiler directly to skip the filtering done by the indirector
    Puppet::Parser::Compiler.compile(node).filter { |r| !r.exported? }
  else
    Puppet::Resource::Catalog.indirection.find(node.name, use_node: node)
  end
end

#current_environmentObject



95
96
97
# File 'lib/rspec-puppet/adapters.rb', line 95

def current_environment
  Puppet::Node::Environment.new(@environment_name)
end

#get_setting(example_group, rspec_setting) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/rspec-puppet/adapters.rb', line 78

def get_setting(example_group, rspec_setting)
  if example_group.respond_to?(rspec_setting)
    example_group.send(rspec_setting)
  else
    RSpec.configuration.send(rspec_setting)
  end
end

#manifestString?

Returns The path to the Puppet manifest if it is present and set, nil otherwise.

Returns:

  • (String, nil)

    The path to the Puppet manifest if it is present and set, nil otherwise.



112
113
114
# File 'lib/rspec-puppet/adapters.rb', line 112

def manifest
  Puppet[:manifest]
end

#modulepathObject



107
108
109
# File 'lib/rspec-puppet/adapters.rb', line 107

def modulepath
  Puppet[:modulepath].split(File::PATH_SEPARATOR)
end

#settings_mapObject



99
100
101
102
103
104
105
# File 'lib/rspec-puppet/adapters.rb', line 99

def settings_map
  [
    %i[modulepath module_path],
    %i[config config],
    %i[confdir confdir]
  ]
end

#setup_puppet(example_group) ⇒ void

This method returns an undefined value.

Set up all Puppet settings applicable for this Puppet version as application defaults.

Puppet setting values can be taken from the global RSpec configuration, or from the currently executing RSpec context. When a setting is specified both in the global configuration and in the example group, the setting in the example group is preferred.

Examples:

Configuring a Puppet setting from a global RSpec configuration value

RSpec.configure do |config|
  config.parser = "future"
end
# => Puppet[:parser] will be future

Configuring a Puppet setting from within an RSpec example group

RSpec.describe 'my_module::my_class', :type => :class do
  let(:module_path) { "/Users/luke/modules" }
  #=> Puppet[:modulepath] will be "/Users/luke/modules"
end

Configuring a Puppet setting with both a global RSpec configuration and local context

RSpec.configure do |config|
  config.confdir = "/etc/puppet"
end
RSpec.describe 'my_module', :type => :class do
  # Puppet[:confdir] will be "/etc/puppet"
end
RSpec.describe 'my_module::my_class', :type => :class do
  let(:confdir) { "/etc/puppetlabs/puppet" }
  # => Puppet[:confdir] will be "/etc/puppetlabs/puppet" in this example group
end
RSpec.describe 'my_module::my_define', :type => :define do
  # Puppet[:confdir] will be "/etc/puppet" again
end

Parameters:

  • example_group (RSpec::Core::ExampleGroup)

    The RSpec context to use for local settings



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/rspec-puppet/adapters.rb', line 44

def setup_puppet(example_group)
  settings = settings_map.map do |puppet_setting, rspec_setting|
    [puppet_setting, get_setting(example_group, rspec_setting)]
  end.flatten
  default_hash = { confdir: '/dev/null', vardir: '/dev/null' }
  if defined?(Puppet::Test::TestHelper) && Puppet::Test::TestHelper.respond_to?(:app_defaults_for_tests, true)
    default_hash.merge!(Puppet::Test::TestHelper.send(:app_defaults_for_tests))
  end
  settings_hash = default_hash.merge(Hash[*settings])
  if Gem.win_platform?
    settings_hash.each_with_object(settings_hash) do |(k, v), h|
      h[k] = v == '/dev/null' ? 'c:/nul/' : v
    end
  end

  if Puppet.settings.respond_to?(:initialize_app_defaults)
    Puppet.settings.initialize_app_defaults(settings_hash)

    # Forcefully apply the environmentpath setting instead of relying on
    # the application defaults as Puppet::Test::TestHelper automatically
    # sets this value as well, overriding our application default
    Puppet.settings[:environmentpath] = settings_hash[:environmentpath] if settings_hash.key?(:environmentpath)
  else
    # Set settings the old way for Puppet 2.x, because that's how
    # they're defaulted in that version of Puppet::Test::TestHelper and
    # we won't be able to override them otherwise.
    settings_hash.each do |setting, value|
      Puppet.settings[setting] = value
    end
  end

  @environment_name = example_group.environment
end