Add support for MultiStrOpt

This replaces the provider implementation of octavia_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: Ic8da2858b4c512d31ebbf78a128367d152cf7616
This commit is contained in:
Takashi Kajinami 2021-07-13 18:05:48 +09:00
parent f62f0b0e15
commit 54eea2b3e8
4 changed files with 18 additions and 10 deletions

View File

@ -1,6 +1,6 @@
Puppet::Type.type(:octavia_config).provide( Puppet::Type.type(:octavia_config).provide(
:ini_setting, :openstackconfig,
:parent => Puppet::Type.type(:openstack_config).provider(:ini_setting) :parent => Puppet::Type.type(:openstack_config).provider(:ruby)
) do ) do
def self.file_path def self.file_path

View File

@ -7,14 +7,22 @@ Puppet::Type.newtype(:octavia_config) do
newvalues(/\S+\/\S+/) newvalues(/\S+\/\S+/)
end end
newproperty(:value) do newproperty(:value, :array_matching => :all) do
desc 'The value of the setting to be defined.' 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| munge do |value|
value = value.to_s.strip value = value.to_s.strip
value.capitalize! if value =~ /^(true|false)$/i value.capitalize! if value =~ /^(true|false)$/i
value value
end end
newvalues(/^[\S ]*$/)
def is_to_s( currentvalue ) def is_to_s( currentvalue )
if resource.secret? if resource.secret?

View File

@ -2,7 +2,7 @@
# these tests are a little concerning b/c they are hacking around the # 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 # modulepath, so these tests will not catch issues that may eventually arise
# related to loading these plugins. # 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( $LOAD_PATH.push(
File.join( File.join(
File.dirname(__FILE__), File.dirname(__FILE__),
@ -26,7 +26,7 @@ $LOAD_PATH.push(
'lib') 'lib')
) )
require 'spec_helper' require 'spec_helper'
provider_class = Puppet::Type.type(:octavia_config).provider(:ini_setting) provider_class = Puppet::Type.type(:octavia_config).provider(:openstackconfig)
describe provider_class do describe provider_class do
it 'should default to the default setting when no other one is specified' do it 'should default to the default setting when no other one is specified' do

View File

@ -1,5 +1,6 @@
require 'puppet' require 'puppet'
require 'puppet/type/octavia_config' require 'puppet/type/octavia_config'
describe 'Puppet::Type.type(:octavia_config)' do describe 'Puppet::Type.type(:octavia_config)' do
before :each do before :each do
@octavia_config = Puppet::Type.type(:octavia_config).new(:name => 'DEFAULT/foo', :value => 'bar') @octavia_config = Puppet::Type.type(:octavia_config).new(:name => 'DEFAULT/foo', :value => 'bar')
@ -29,12 +30,12 @@ describe 'Puppet::Type.type(:octavia_config)' do
it 'should accept a valid value' do it 'should accept a valid value' do
@octavia_config[:value] = 'bar' @octavia_config[:value] = 'bar'
expect(@octavia_config[:value]).to eq('bar') expect(@octavia_config[:value]).to eq(['bar'])
end end
it 'should not accept a value with whitespace' do it 'should not accept a value with whitespace' do
@octavia_config[:value] = 'b ar' @octavia_config[:value] = 'b ar'
expect(@octavia_config[:value]).to eq('b ar') expect(@octavia_config[:value]).to eq(['b ar'])
end end
it 'should accept valid ensure values' do it 'should accept valid ensure values' do
@ -50,7 +51,7 @@ describe 'Puppet::Type.type(:octavia_config)' do
}.to raise_error(Puppet::Error, /Invalid value/) }.to raise_error(Puppet::Error, /Invalid value/)
end end
it 'should autorequire the anchor that install the file' do it 'should autorequire the package that install the file' do
catalog = Puppet::Resource::Catalog.new catalog = Puppet::Resource::Catalog.new
anchor = Puppet::Type.type(:anchor).new(:name => 'octavia::install::end') anchor = Puppet::Type.type(:anchor).new(:name => 'octavia::install::end')
catalog.add_resource anchor, @octavia_config catalog.add_resource anchor, @octavia_config
@ -60,5 +61,4 @@ describe 'Puppet::Type.type(:octavia_config)' do
expect(dependency[0].source).to eq(anchor) expect(dependency[0].source).to eq(anchor)
end end
end end