From a64ea5e4948b45dcfd4982bf59c066a6b34b5850 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Mon, 4 Jan 2016 10:16:50 -0500 Subject: [PATCH] Reflect provider change in puppet-openstacklib With the creation of the new openstack_config provider, some processing that was done in mistral_config has been centralized in openstack_config. Impacted methods are : * section * setting * separator Also, this commit adds the fact that, when passing a specific string (ensure_absent_val) the provider will behave as if ensure => absent was specified. '' is the default value for ensure_absent_val. The use case is the following : mistral_config { 'DEFAULT/foo' : value => 'bar' } # will work as usual mistral_config { 'DEFAULT/foo' : value => '' } # will mean absent That means that all the current : if $myvar { mistral_config { 'DEFAULT/foo' : value => $myvar } } else { mistral_config { 'DEFAULT/foo' : ensure => absent } } can be removed in favor of : mistral_config { 'DEFAULT/foo' : value => $myvar } If for any reason '' turns out to be a valid value for a specific parameter. One could by pass that doing the following : mistral_config { 'DEFAULT/foo' : value => '', ensure_absent_val => 'foo' } Closes-bug: #1530892 Change-Id: Iaaf2e5755080ef32d7d585465aaea6fd408d0ece --- README.md | 30 ++++++++++++++++++ .../provider/mistral_config/ini_setting.rb | 19 +----------- lib/puppet/type/mistral_config.rb | 6 ++++ metadata.json | 2 +- .../mistral_config/ini_setting_spec.rb | 31 +++++++++++++++++++ 5 files changed, 69 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index b11f8b8..a988e49 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,36 @@ Implementation puppet-mistral is a combination of Puppet manifests and ruby code to deliver configuration and extra functionality through types and providers. +### Types + +#### mistral_config + +The `mistral_config` provider is a children of the ini_setting provider. It allows one to write an entry in the `/etc/mistral/mistral.conf` file. + +```puppet +mistral_config { 'DEFAULT/verbose' : + value => true, +} +``` + +This will write `verbose=true` in the `[DEFAULT]` section. + +##### name + +Section/setting name to manage from `mistral.conf` + +##### value + +The value of the setting to be defined. + +##### secret + +Whether to hide the value from Puppet logs. Defaults to `false`. + +##### ensure_absent_val + +If value is equal to ensure_absent_val then the resource will behave as if `ensure => absent` was specified. Defaults to `` + Limitations ----------- diff --git a/lib/puppet/provider/mistral_config/ini_setting.rb b/lib/puppet/provider/mistral_config/ini_setting.rb index 560b2dd..2437633 100644 --- a/lib/puppet/provider/mistral_config/ini_setting.rb +++ b/lib/puppet/provider/mistral_config/ini_setting.rb @@ -1,27 +1,10 @@ Puppet::Type.type(:mistral_config).provide( :ini_setting, - :parent => Puppet::Type.type(:ini_setting).provider(:ruby) + :parent => Puppet::Type.type(:openstack_config).provider(:ini_setting) ) do - def section - resource[:name].split('/', 2).first - end - - def setting - resource[:name].split('/', 2).last - end - - def separator - '=' - end - def self.file_path '/etc/mistral/mistral.conf' end - # added for backwards compatibility with older versions of inifile - def file_path - self.class.file_path - end - end diff --git a/lib/puppet/type/mistral_config.rb b/lib/puppet/type/mistral_config.rb index 4089e3b..2447dc3 100644 --- a/lib/puppet/type/mistral_config.rb +++ b/lib/puppet/type/mistral_config.rb @@ -14,6 +14,7 @@ Puppet::Type.newtype(:mistral_config) do value.capitalize! if value =~ /^(true|false)$/i value end + newvalues(/^[\S ]*$/) def is_to_s( currentvalue ) if resource.secret? @@ -40,6 +41,11 @@ Puppet::Type.newtype(:mistral_config) do defaultto false end + newparam(:ensure_absent_val) do + desc 'A value that is specified as the value property will behave as if ensure => absent was specified' + defaultto('') + end + autorequire(:package) do 'mistral-common' end diff --git a/metadata.json b/metadata.json index 97e09d2..ba44d93 100644 --- a/metadata.json +++ b/metadata.json @@ -29,6 +29,6 @@ "dependencies": [ { "name": "puppetlabs/inifile", "version_requirement": ">=1.0.0 <2.0.0" }, { "name": "puppetlabs/stdlib", "version_requirement": ">= 4.0.0 <5.0.0" }, - { "name": "openstack/openstacklib", "version_requirement": ">=6.0.0 <7.0.0" } + { "name": "openstack/openstacklib", "version_requirement": ">=7.0.0 <8.0.0" } ] } diff --git a/spec/unit/provider/mistral_config/ini_setting_spec.rb b/spec/unit/provider/mistral_config/ini_setting_spec.rb index 2797578..1b60aa3 100644 --- a/spec/unit/provider/mistral_config/ini_setting_spec.rb +++ b/spec/unit/provider/mistral_config/ini_setting_spec.rb @@ -13,6 +13,18 @@ $LOAD_PATH.push( 'inifile', 'lib') ) +$LOAD_PATH.push( + File.join( + File.dirname(__FILE__), + '..', + '..', + '..', + 'fixtures', + 'modules', + 'openstacklib', + 'lib') +) + require 'spec_helper' provider_class = Puppet::Type.type(:mistral_config).provider(:ini_setting) describe provider_class do @@ -34,4 +46,23 @@ describe provider_class do expect(provider.section).to eq('dude') expect(provider.setting).to eq('foo') end + + it 'should ensure absent when is specified as a value' do + resource = Puppet::Type::Mistral_config.new( + {:name => 'dude/foo', :value => ''} + ) + provider = provider_class.new(resource) + provider.exists? + expect(resource[:ensure]).to eq :absent + end + + it 'should ensure absent when value matches ensure_absent_val' do + resource = Puppet::Type::Mistral_config.new( + {:name => 'dude/foo', :value => 'foo', :ensure_absent_val => 'foo' } + ) + provider = provider_class.new(resource) + provider.exists? + expect(resource[:ensure]).to eq :absent + end + end