Hi folks,
I created a small wrapper-cookbook for the ntp-cookbook. This wrapper
searches for non-virtual machines in the current environment that have
the wrapper-cookbook applied. Then it uses these machines as peers for
ntp if itself is a non-virtual machine or as servers for ntp if itself
is a virtual machine. Works great except for some slight problem: The
list of peers/servers is in the order the search returned the machines,
which changes with each call. I tried to sort my resulting list, but
still the lists in the ntp.conf are not ordered. And the ordering in
the ntp.conf changes with almost every chef-client run, resulting in
fcheck finding lots of changes.
So I took a quick hack and added ordering in the ntp.conf-template in
the ntp-cookbook. Works nicely in reality but is untested.
So I tried to prepare a real patch for the ntp-cookbook with
corresponding rspec-test. But when I try to check
"create_file_with_content" I get an error:
Failure/Error: expect(chef_run).to
create_file_with_content(’/etc/ntp.conf’, /.Chef./)
Chef::Mixin::Template::TemplateError: undefined method `[]’ for
nil:NilClass
And I don’t know why that error is happening. It looks as if the rspec
tests don’t set all the attributes the template needs. But its only the
default tests, so if that fails, either there is an error in
chef/chefspec/tests or the cookbook wouldn’t be able to run on any
machine (without setting attributes). The later I doubt…
Anyway, what I did is patch spec/unit/recipes/default_spec.rb in the
ntp-cookbook with:
diff --git a/spec/unit/recipes/default_spec.rb
b/spec/unit/recipes/default_spec.rb index fa9b4f7…4e2ce71 100644
— a/spec/unit/recipes/default_spec.rb
+++ b/spec/unit/recipes/default_spec.rb
@@ -1,4 +1,5 @@
require ‘spec_helper’
+require ‘chefspec’
describe ‘ntp::default’ do
let(:chef_run) { ChefSpec::ChefRunner.new.converge(‘ntp::default’) }
@@ -69,6 +70,10 @@ describe ‘ntp::default’ do
expect(chef_run).to create_file(’/etc/ntp.conf’)
end
- it ‘creates the template with peer content’ do
-
expect(chef_run).to
create_file_with_content(’/etc/ntp.conf’, /.Chef./)
- end
- it ‘is owned by ntp:ntp’ do
expect(template.owner).to eq(‘root’)
expect(template.group).to eq(‘root’)
Anybody got an idea? Anybody can reproduce my findings?
I use ruby-2.0.0-p247 and everything else according to the Gemfile of
the ntp-cookbook.
Thanks in advance,
- Arnold