1 2 3 4 5 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 38 39 40 41 42 43 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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
require 'spec_helper'
require 'puppet_spec/compiler'
describe "Data binding" do
include PuppetSpec::Files
include PuppetSpec::Compiler
let(:dir) { tmpdir("puppetdir") }
before do
Puppet[:data_binding_terminus] = "hiera"
Puppet[:modulepath] = dir
end
it "looks up data from hiera" do
configure_hiera_for({
"testing::binding::value" => "the value",
"testing::binding::calling_class" => "%{calling_class}",
"testing::binding::calling_module" => "%{calling_module}"
})
create_manifest_in_module("testing", "binding.pp",
<<-MANIFEST)
class testing::binding($value,
$calling_class,
$calling_module) {}
MANIFEST
catalog = compile_to_catalog("include testing::binding")
resource = catalog.resource('Class[testing::binding]')
expect(resource[:value]).to eq("the value")
expect(resource[:calling_class]).to eq("testing::binding")
expect(resource[:calling_module]).to eq("testing")
end
it "works with the puppet backend configured, although it can't use it for lookup" do
configure_hiera_for_puppet
create_manifest_in_module("testing", "binding.pp",
<<-MANIFEST)
# lookup via the puppet backend to ensure it works
class testing::binding($value = hiera('variable')) {}
MANIFEST
create_manifest_in_module("testing", "data.pp",
<<-MANIFEST)
class testing::data {
$variable = "the value"
}
MANIFEST
catalog = compile_to_catalog("include testing::binding")
resource = catalog.resource('Class[testing::binding]')
expect(resource[:value]).to eq("the value")
end
def configure_hiera_for(data)
hiera_config_file = tmpfile("hiera.yaml")
File.open(hiera_config_file, 'w') do |f|
f.write("---
:yaml:
:datadir: #{dir}
:hierarchy: ['global']
:logger: 'noop'
:backends: ['yaml']
")
end
File.open(File.join(dir, 'global.yaml'), 'w') do |f|
f.write(YAML.dump(data))
end
Puppet[:hiera_config] = hiera_config_file
end
def configure_hiera_for_puppet
hiera_config_file = tmpfile("hiera.yaml")
File.open(hiera_config_file, 'w') do |f|
f.write("---
:logger: 'noop'
:backends: ['puppet']
")
end
Puppet[:hiera_config] = hiera_config_file
end
def create_manifest_in_module(module_name, name, manifest)
module_dir = File.join(dir, module_name, 'manifests')
FileUtils.mkdir_p(module_dir)
File.open(File.join(module_dir, name), 'w') do |f|
f.write(manifest)
end
end
end
|