From a7b1d301490c317ff3ab9faf3ab84495dbd79f62 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Mon, 7 Feb 2022 00:58:13 +0900 Subject: [PATCH] Add support for MultiStrOpt This replaces the provider implementation of aodh_config type so that MultiStrOpt, which is used by several options like - oslo_messaging_notifications/driver - oslo_policy/policy_dirs are handled correctly. Change-Id: I3cae6998ec9a2157f507650859e030c576a3cd8c --- .../{ini_setting.rb => openstackconfig.rb} | 4 ++-- .../type/{{cookiecutter.project_name}}_config.rb | 13 +++++++++++-- .../ini_setting_spec.rb | 4 ++-- .../{{cookiecutter.project_name}}_config_spec.rb | 4 ++-- 4 files changed, 17 insertions(+), 8 deletions(-) rename puppet-{{cookiecutter.project_name}}/lib/puppet/provider/{{cookiecutter.project_name}}_config/{ini_setting.rb => openstackconfig.rb} (66%) diff --git a/puppet-{{cookiecutter.project_name}}/lib/puppet/provider/{{cookiecutter.project_name}}_config/ini_setting.rb b/puppet-{{cookiecutter.project_name}}/lib/puppet/provider/{{cookiecutter.project_name}}_config/openstackconfig.rb similarity index 66% rename from puppet-{{cookiecutter.project_name}}/lib/puppet/provider/{{cookiecutter.project_name}}_config/ini_setting.rb rename to puppet-{{cookiecutter.project_name}}/lib/puppet/provider/{{cookiecutter.project_name}}_config/openstackconfig.rb index e7208a4..14f1834 100644 --- a/puppet-{{cookiecutter.project_name}}/lib/puppet/provider/{{cookiecutter.project_name}}_config/ini_setting.rb +++ b/puppet-{{cookiecutter.project_name}}/lib/puppet/provider/{{cookiecutter.project_name}}_config/openstackconfig.rb @@ -1,6 +1,6 @@ Puppet::Type.type(:{{cookiecutter.project_name}}_config).provide( - :ini_setting, - :parent => Puppet::Type.type(:openstack_config).provider(:ini_setting) + :openstackconfig, + :parent => Puppet::Type.type(:openstack_config).provider(:ruby) ) do def self.file_path diff --git a/puppet-{{cookiecutter.project_name}}/lib/puppet/type/{{cookiecutter.project_name}}_config.rb b/puppet-{{cookiecutter.project_name}}/lib/puppet/type/{{cookiecutter.project_name}}_config.rb index 7299c27..7320db6 100644 --- a/puppet-{{cookiecutter.project_name}}/lib/puppet/type/{{cookiecutter.project_name}}_config.rb +++ b/puppet-{{cookiecutter.project_name}}/lib/puppet/type/{{cookiecutter.project_name}}_config.rb @@ -7,14 +7,23 @@ Puppet::Type.newtype(:{{cookiecutter.project_name}}_config) do newvalues(/\S+\/\S+/) end - newproperty(:value) do + newproperty(:value, :array_matching => :all) do + desc 'The value of the setting to be defined.' + def insync?(is) + return true if @should.empty? + return false unless is.is_a? Array + return false unless is.length == @should.length + return ( + is & @should == is or + is & @should.map(&:to_s) == is + ) + end desc 'The value of the setting to be defined.' munge do |value| value = value.to_s.strip value.capitalize! if value =~ /^(true|false)$/i value end - newvalues(/^[\S ]*$/) def is_to_s( currentvalue ) if resource.secret? diff --git a/puppet-{{cookiecutter.project_name}}/spec/unit/provider/{{cookiecutter.project_name}}_config/ini_setting_spec.rb b/puppet-{{cookiecutter.project_name}}/spec/unit/provider/{{cookiecutter.project_name}}_config/ini_setting_spec.rb index 8ddea48..5f35251 100644 --- a/puppet-{{cookiecutter.project_name}}/spec/unit/provider/{{cookiecutter.project_name}}_config/ini_setting_spec.rb +++ b/puppet-{{cookiecutter.project_name}}/spec/unit/provider/{{cookiecutter.project_name}}_config/ini_setting_spec.rb @@ -2,7 +2,7 @@ # these tests are a little concerning b/c they are hacking around the # modulepath, so these tests will not catch issues that may eventually arise # related to loading these plugins. -# I could not, for the life of me, figure out how to programatcally set the modulepath +# I could not, for the life of me, figure out how to programmatically set the modulepath $LOAD_PATH.push( File.join( File.dirname(__FILE__), @@ -26,7 +26,7 @@ $LOAD_PATH.push( 'lib') ) require 'spec_helper' -provider_class = Puppet::Type.type(:{{cookiecutter.project_name}}_config).provider(:ini_setting) +provider_class = Puppet::Type.type(:{{cookiecutter.project_name}}_config).provider(:openstackconfig) describe provider_class do it 'should default to the default setting when no other one is specified' do diff --git a/puppet-{{cookiecutter.project_name}}/spec/unit/type/{{cookiecutter.project_name}}_config_spec.rb b/puppet-{{cookiecutter.project_name}}/spec/unit/type/{{cookiecutter.project_name}}_config_spec.rb index dee24a5..b4b63d5 100644 --- a/puppet-{{cookiecutter.project_name}}/spec/unit/type/{{cookiecutter.project_name}}_config_spec.rb +++ b/puppet-{{cookiecutter.project_name}}/spec/unit/type/{{cookiecutter.project_name}}_config_spec.rb @@ -29,12 +29,12 @@ describe 'Puppet::Type.type(:{{cookiecutter.project_name}}_config)' do it 'should accept a valid value' do @{{cookiecutter.project_name}}_config[:value] = 'bar' - expect(@{{cookiecutter.project_name}}_config[:value]).to eq('bar') + expect(@{{cookiecutter.project_name}}_config[:value]).to eq(['bar']) end it 'should not accept a value with whitespace' do @{{cookiecutter.project_name}}_config[:value] = 'b ar' - expect(@{{cookiecutter.project_name}}_config[:value]).to eq('b ar') + expect(@{{cookiecutter.project_name}}_config[:value]).to eq(['b ar']) end it 'should accept valid ensure values' do