From 69fa70013893a323a7cf62bc57963bd7a86bab04 Mon Sep 17 00:00:00 2001 From: Yanis Guenane Date: Wed, 12 Aug 2015 10:36:13 +0200 Subject: [PATCH] Rely on autorequire for config resource ordering Currently we specify the ordering of config resources wherever it is necessary based on the presence of the file it will write to, or the presence of the package in charge of providing the file it will write to. Those kind of ordering can be specified directly at the resource level using the autorequire mechanism. With this patch, any config resource will make sure the package in charge of providing the file will be installed first. Change-Id: I121f3cf146d9909cd549bd2e252f8cc645e5a030 --- lib/puppet/type/ironic_config.rb | 5 +++ manifests/api.pp | 1 - manifests/conductor.pp | 1 - manifests/init.pp | 2 - spec/classes/ironic_api_spec.rb | 1 - spec/classes/ironic_conductor_spec.rb | 1 - .../ironic_config/ini_setting_spec.rb | 42 +++++++++++++++++++ spec/unit/type/ironic_config_spec.rb | 19 +++++++++ 8 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 spec/unit/provider/ironic_config/ini_setting_spec.rb create mode 100644 spec/unit/type/ironic_config_spec.rb diff --git a/lib/puppet/type/ironic_config.rb b/lib/puppet/type/ironic_config.rb index c5ea8eb0..a7873a2f 100644 --- a/lib/puppet/type/ironic_config.rb +++ b/lib/puppet/type/ironic_config.rb @@ -39,4 +39,9 @@ Puppet::Type.newtype(:ironic_config) do defaultto false end + + autorequire(:package) do + 'ironic-common' + end + end diff --git a/manifests/api.pp b/manifests/api.pp index 75c2e374..b648a155 100644 --- a/manifests/api.pp +++ b/manifests/api.pp @@ -119,7 +119,6 @@ class ironic::api ( if $::ironic::params::api_package { Package['ironic-api'] -> Class['ironic::policy'] Package['ironic-api'] -> Service['ironic-api'] - Package['ironic-api'] -> Ironic_config<||> package { 'ironic-api': ensure => $package_ensure, name => $::ironic::params::api_package, diff --git a/manifests/conductor.pp b/manifests/conductor.pp index 032d9163..31344640 100644 --- a/manifests/conductor.pp +++ b/manifests/conductor.pp @@ -58,7 +58,6 @@ class ironic::conductor ( # Install package if $::ironic::params::conductor_package { Package['ironic-conductor'] -> Service['ironic-conductor'] - Package['ironic-conductor'] -> Ironic_config<||> package { 'ironic-conductor': ensure => $package_ensure, name => $::ironic::params::conductor_package, diff --git a/manifests/init.pp b/manifests/init.pp index fb4f8dc3..e7a4daeb 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -239,8 +239,6 @@ class ironic ( $rabbit_user_real = $rabbit_userid } - Package['ironic-common'] -> Ironic_config<||> - file { '/etc/ironic': ensure => directory, require => Package['ironic-common'], diff --git a/spec/classes/ironic_api_spec.rb b/spec/classes/ironic_api_spec.rb index a8765d80..0c256f02 100644 --- a/spec/classes/ironic_api_spec.rb +++ b/spec/classes/ironic_api_spec.rb @@ -51,7 +51,6 @@ describe 'ironic::api' do :ensure => p[:package_ensure], :tag => ['openstack', 'ironic-package'], ) - is_expected.to contain_package('ironic-api').with_before(/Ironic_config\[.+\]/) is_expected.to contain_package('ironic-api').with_before(/Service\[ironic-api\]/) end end diff --git a/spec/classes/ironic_conductor_spec.rb b/spec/classes/ironic_conductor_spec.rb index a3098ae1..f93bf487 100644 --- a/spec/classes/ironic_conductor_spec.rb +++ b/spec/classes/ironic_conductor_spec.rb @@ -47,7 +47,6 @@ describe 'ironic::conductor' do :ensure => p[:package_ensure], :tag => ['openstack', 'ironic-package'], ) - is_expected.to contain_package('ironic-conductor').with_before(/Ironic_config\[.+\]/) is_expected.to contain_package('ironic-conductor').with_before(/Service\[ironic-conductor\]/) end end diff --git a/spec/unit/provider/ironic_config/ini_setting_spec.rb b/spec/unit/provider/ironic_config/ini_setting_spec.rb new file mode 100644 index 00000000..6a288beb --- /dev/null +++ b/spec/unit/provider/ironic_config/ini_setting_spec.rb @@ -0,0 +1,42 @@ +$LOAD_PATH.push( + File.join( + File.dirname(__FILE__), + '..', + '..', + '..', + 'fixtures', + 'modules', + 'inifile', + 'lib') +) + +require 'spec_helper' + +provider_class = Puppet::Type.type(:ironic_config).provider(:ini_setting) + +describe provider_class do + + it 'should default to the default setting when no other one is specified' do + resource = Puppet::Type::Ironic_config.new( + { + :name => 'DEFAULT/foo', + :value => 'bar' + } + ) + provider = provider_class.new(resource) + expect(provider.section).to eq('DEFAULT') + expect(provider.setting).to eq('foo') + end + + it 'should allow setting to be set explicitly' do + resource = Puppet::Type::Ironic_config.new( + { + :name => 'dude/foo', + :value => 'bar' + } + ) + provider = provider_class.new(resource) + expect(provider.section).to eq('dude') + expect(provider.setting).to eq('foo') + end +end diff --git a/spec/unit/type/ironic_config_spec.rb b/spec/unit/type/ironic_config_spec.rb new file mode 100644 index 00000000..7b7a3737 --- /dev/null +++ b/spec/unit/type/ironic_config_spec.rb @@ -0,0 +1,19 @@ +require 'puppet' +require 'puppet/type/ironic_config' + +describe 'Puppet::Type.type(:ironic_config)' do + before :each do + @ironic_config = Puppet::Type.type(:ironic_config).new(:name => 'DEFAULT/foo', :value => 'bar') + end + + it 'should autorequire the package that install the file' do + catalog = Puppet::Resource::Catalog.new + package = Puppet::Type.type(:package).new(:name => 'ironic-common') + catalog.add_resource package, @ironic_config + dependency = @ironic_config.autorequire + expect(dependency.size).to eq(1) + expect(dependency[0].target).to eq(@ironic_config) + expect(dependency[0].source).to eq(package) + end + +end