From b13a35dd3af3e8bd07f2f42d3f126ae4ae70e54b Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Sun, 13 Feb 2022 00:12:05 +0900 Subject: [PATCH] Add support for MultiStrOpt This replaces the provider implementation of cloudkitty_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: Iefdfa5b83cb1f5ff691cc38e0f691babac9bdfb0 --- .../{ini_setting.rb => openstackconfig.rb} | 4 ++-- lib/puppet/type/cloudkitty_config.rb | 12 ++++++++++-- .../{ini_setting_spec.rb => openstackconfig_spec.rb} | 2 +- spec/unit/type/cloudkitty_config_spec.rb | 4 ++-- 4 files changed, 15 insertions(+), 7 deletions(-) rename lib/puppet/provider/cloudkitty_config/{ini_setting.rb => openstackconfig.rb} (58%) rename spec/unit/provider/cloudkitty_config/{ini_setting_spec.rb => openstackconfig_spec.rb} (98%) diff --git a/lib/puppet/provider/cloudkitty_config/ini_setting.rb b/lib/puppet/provider/cloudkitty_config/openstackconfig.rb similarity index 58% rename from lib/puppet/provider/cloudkitty_config/ini_setting.rb rename to lib/puppet/provider/cloudkitty_config/openstackconfig.rb index 5043205..6a5d404 100644 --- a/lib/puppet/provider/cloudkitty_config/ini_setting.rb +++ b/lib/puppet/provider/cloudkitty_config/openstackconfig.rb @@ -1,6 +1,6 @@ Puppet::Type.type(:cloudkitty_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/lib/puppet/type/cloudkitty_config.rb b/lib/puppet/type/cloudkitty_config.rb index 41c42e2..0f0a22e 100644 --- a/lib/puppet/type/cloudkitty_config.rb +++ b/lib/puppet/type/cloudkitty_config.rb @@ -7,14 +7,22 @@ Puppet::Type.newtype(:cloudkitty_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 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/spec/unit/provider/cloudkitty_config/ini_setting_spec.rb b/spec/unit/provider/cloudkitty_config/openstackconfig_spec.rb similarity index 98% rename from spec/unit/provider/cloudkitty_config/ini_setting_spec.rb rename to spec/unit/provider/cloudkitty_config/openstackconfig_spec.rb index ce9c5d8..508d488 100644 --- a/spec/unit/provider/cloudkitty_config/ini_setting_spec.rb +++ b/spec/unit/provider/cloudkitty_config/openstackconfig_spec.rb @@ -1,5 +1,5 @@ require 'spec_helper' -provider_class = Puppet::Type.type(:cloudkitty_config).provider(:ini_setting) +provider_class = Puppet::Type.type(:cloudkitty_config).provider(:openstackconfig) describe provider_class do it 'should default to the default setting when no other one is specified' do diff --git a/spec/unit/type/cloudkitty_config_spec.rb b/spec/unit/type/cloudkitty_config_spec.rb index ac44492..e1b227b 100644 --- a/spec/unit/type/cloudkitty_config_spec.rb +++ b/spec/unit/type/cloudkitty_config_spec.rb @@ -29,12 +29,12 @@ describe 'Puppet::Type.type(:cloudkitty_config)' do it 'should accept a valid value' do @cloudkitty_config[:value] = 'bar' - expect(@cloudkitty_config[:value]).to eq('bar') + expect(@cloudkitty_config[:value]).to eq(['bar']) end it 'should not accept a value with whitespace' do @cloudkitty_config[:value] = 'b ar' - expect(@cloudkitty_config[:value]).to eq('b ar') + expect(@cloudkitty_config[:value]).to eq(['b ar']) end it 'should accept valid ensure values' do