Add support for MultiStrOpt

This replaces the provider implementation of glance_api_config type
so that MultiStrOpt, which is used by several options like
 - oslo_messaging_notifications/driver
 - oslo_policy/policy_dirs
is handled correctly.

Change-Id: I6c0ea1276d16722c9908a20333890a4a17404b61
This commit is contained in:
Takashi Kajinami 2021-05-06 21:11:14 +09:00
parent 43ebdd5a9a
commit 10872d13eb
4 changed files with 66 additions and 16 deletions

View File

@ -1,6 +1,6 @@
Puppet::Type.type(:glance_api_config).provide( Puppet::Type.type(:glance_api_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(:glance_api_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

@ -1,3 +1,8 @@
#
# 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 programmatically set the modulepath
$LOAD_PATH.push( $LOAD_PATH.push(
File.join( File.join(
File.dirname(__FILE__), File.dirname(__FILE__),
@ -20,19 +25,13 @@ $LOAD_PATH.push(
'openstacklib', 'openstacklib',
'lib') 'lib')
) )
require 'spec_helper' require 'spec_helper'
provider_class = Puppet::Type.type(:glance_api_config).provider(:openstackconfig)
provider_class = Puppet::Type.type(:glance_api_config).provider(:ini_setting)
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
resource = Puppet::Type::Glance_api_config.new( resource = Puppet::Type::Glance_api_config.new(
{ {:name => 'DEFAULT/foo', :value => 'bar'}
:name => 'DEFAULT/foo',
:value => 'bar'
}
) )
provider = provider_class.new(resource) provider = provider_class.new(resource)
expect(provider.section).to eq('DEFAULT') expect(provider.section).to eq('DEFAULT')
@ -41,10 +40,7 @@ describe provider_class do
it 'should allow setting to be set explicitly' do it 'should allow setting to be set explicitly' do
resource = Puppet::Type::Glance_api_config.new( resource = Puppet::Type::Glance_api_config.new(
{ {:name => 'dude/foo', :value => 'bar'}
:name => 'dude/foo',
:value => 'bar'
}
) )
provider = provider_class.new(resource) provider = provider_class.new(resource)
expect(provider.section).to eq('dude') expect(provider.section).to eq('dude')
@ -68,4 +64,5 @@ describe provider_class do
provider.exists? provider.exists?
expect(resource[:ensure]).to eq :absent expect(resource[:ensure]).to eq :absent
end end
end end

View File

@ -6,6 +6,51 @@ describe 'Puppet::Type.type(:glance_api_config)' do
@glance_api_config = Puppet::Type.type(:glance_api_config).new(:name => 'DEFAULT/foo', :value => 'bar') @glance_api_config = Puppet::Type.type(:glance_api_config).new(:name => 'DEFAULT/foo', :value => 'bar')
end end
it 'should require a name' do
expect {
Puppet::Type.type(:glance_api_config).new({})
}.to raise_error(Puppet::Error, 'Title or name must be provided')
end
it 'should not expect a name with whitespace' do
expect {
Puppet::Type.type(:glance_api_config).new(:name => 'f oo')
}.to raise_error(Puppet::Error, /Parameter name failed/)
end
it 'should fail when there is no section' do
expect {
Puppet::Type.type(:glance_api_config).new(:name => 'foo')
}.to raise_error(Puppet::Error, /Parameter name failed/)
end
it 'should not require a value when ensure is absent' do
Puppet::Type.type(:glance_api_config).new(:name => 'DEFAULT/foo', :ensure => :absent)
end
it 'should accept a valid value' do
@glance_api_config[:value] = 'bar'
expect(@glance_api_config[:value]).to eq(['bar'])
end
it 'should not accept a value with whitespace' do
@glance_api_config[:value] = 'b ar'
expect(@glance_api_config[:value]).to eq(['b ar'])
end
it 'should accept valid ensure values' do
@glance_api_config[:ensure] = :present
expect(@glance_api_config[:ensure]).to eq(:present)
@glance_api_config[:ensure] = :absent
expect(@glance_api_config[:ensure]).to eq(:absent)
end
it 'should not accept invalid ensure values' do
expect {
@glance_api_config[:ensure] = :latest
}.to raise_error(Puppet::Error, /Invalid value/)
end
it 'should autorequire the package 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 => 'glance::install::end') anchor = Puppet::Type.type(:anchor).new(:name => 'glance::install::end')