diff --git a/lib/puppet/provider/tempest_flavor_id_setter/openstack.rb b/lib/puppet/provider/tempest_flavor_id_setter/openstack.rb index ab01e33f..b2714878 100644 --- a/lib/puppet/provider/tempest_flavor_id_setter/openstack.rb +++ b/lib/puppet/provider/tempest_flavor_id_setter/openstack.rb @@ -7,22 +7,29 @@ Puppet::Type.type(:tempest_flavor_id_setter).provide( @credentials = Puppet::Provider::Openstack::CredentialsV3.new - def exists? - lines.find do |line| - should_line.chomp == line.chomp - end - end - def file_path resource[:tempest_conf_path] end + def exists? + conf = Puppet::Type::Tempest_config + .new(:title => resource[:name], :path => file_path) + entry = Puppet::Type.type(:tempest_config).provider(:ini_setting).new(conf) + entry.exists? + end + def create - handle_create_with_match + conf = Puppet::Type::Tempest_config + .new(:title => resource[:name], :value => get_flavor_id, :path => file_path) + entry = Puppet::Type.type(:tempest_config).provider(:ini_setting).new(conf) + entry.create end def destroy - handle_create_with_match + conf = Puppet::Type::Tempest_config + .new(:title => resource[:name], :path => file_path) + entry = Puppet::Type.type(:tempest_config).provider(:ini_setting).new(conf) + entry.destroy end def get_flavor_id @@ -40,49 +47,4 @@ Puppet::Type.type(:tempest_flavor_id_setter).provide( end @flavor_id end - - def should_line - "#{resource[:name]} = #{get_flavor_id}" - end - - def match - /^\s*#{resource[:name]}\s*=\s*/ - end - - def handle_create_with_match() - regex = match - match_count = lines.select { |l| regex.match(l) }.count - - file = lines - case match_count - when 1 - File.open(file_path, 'w') do |fh| - lines.each do |l| - fh.puts(regex.match(l) ? "#{should_line}" : l) - end - end - when 0 - block_pos = lines.find_index { |l| /^\[compute\]/ =~ l } - if block_pos.nil? - file += ["[compute]\n", "#{should_line}\n"] - else - file.insert(block_pos+1, "#{should_line}\n") - end - File.write(file_path, file.join) - else # cannot be negative. - raise Puppet::Error, "More than one line in file \ -'#{file_path}' matches pattern '#{regex}'" - end - end - - private - def lines - # If this type is ever used with very large files, we should - # write this in a different way, using a temp - # file; for now assuming that this type is only used on - # small-ish config files that can fit into memory without - # too much trouble. - @lines ||= File.readlines(file_path) - end - end diff --git a/lib/puppet/provider/tempest_glance_id_setter/openstack.rb b/lib/puppet/provider/tempest_glance_id_setter/openstack.rb index 7c91223e..2069616e 100644 --- a/lib/puppet/provider/tempest_glance_id_setter/openstack.rb +++ b/lib/puppet/provider/tempest_glance_id_setter/openstack.rb @@ -7,22 +7,29 @@ Puppet::Type.type(:tempest_glance_id_setter).provide( @credentials = Puppet::Provider::Openstack::CredentialsV3.new - def exists? - lines.find do |line| - should_line.chomp == line.chomp - end - end - def file_path resource[:tempest_conf_path] end + def exists? + conf = Puppet::Type::Tempest_config + .new(:title => resource[:name], :path => file_path) + entry = Puppet::Type.type(:tempest_config).provider(:ini_setting).new(conf) + entry.exists? + end + def create - handle_create_with_match + conf = Puppet::Type::Tempest_config + .new(:title => resource[:name], :value => get_image_id, :path => file_path) + entry = Puppet::Type.type(:tempest_config).provider(:ini_setting).new(conf) + entry.create end def destroy - handle_create_with_match + conf = Puppet::Type::Tempest_config + .new(:title => resource[:name], :path => file_path) + entry = Puppet::Type.type(:tempest_config).provider(:ini_setting).new(conf) + entry.destroy end def get_image_id @@ -40,49 +47,4 @@ Puppet::Type.type(:tempest_glance_id_setter).provide( end @image_id end - - def should_line - "#{resource[:name]} = #{get_image_id}" - end - - def match - /^\s*#{resource[:name]}\s*=\s*/ - end - - def handle_create_with_match() - regex = match - match_count = lines.select { |l| regex.match(l) }.count - - file = lines - case match_count - when 1 - File.open(file_path, 'w') do |fh| - lines.each do |l| - fh.puts(regex.match(l) ? "#{should_line}" : l) - end - end - when 0 - block_pos = lines.find_index { |l| /^\[compute\]/ =~ l } - if block_pos.nil? - file += ["[compute]\n", "#{should_line}\n"] - else - file.insert(block_pos+1, "#{should_line}\n") - end - File.write(file_path, file.join) - else # cannot be negative. - raise Puppet::Error, "More than one line in file \ -'#{file_path}' matches pattern '#{regex}'" - end - end - - private - def lines - # If this type is ever used with very large files, we should - # write this in a different way, using a temp - # file; for now assuming that this type is only used on - # small-ish config files that can fit into memory without - # too much trouble. - @lines ||= File.readlines(file_path) - end - end diff --git a/lib/puppet/provider/tempest_neutron_net_id_setter/openstack.rb b/lib/puppet/provider/tempest_neutron_net_id_setter/openstack.rb index e9542d6b..cf7e3760 100644 --- a/lib/puppet/provider/tempest_neutron_net_id_setter/openstack.rb +++ b/lib/puppet/provider/tempest_neutron_net_id_setter/openstack.rb @@ -7,22 +7,29 @@ Puppet::Type.type(:tempest_neutron_net_id_setter).provide( @credentials = Puppet::Provider::Openstack::CredentialsV3.new - def exists? - lines.find do |line| - should_line.chomp == line.chomp - end - end - def file_path resource[:tempest_conf_path] end + def exists? + conf = Puppet::Type::Tempest_config + .new(:title => resource[:name], :path => file_path) + entry = Puppet::Type.type(:tempest_config).provider(:ini_setting).new(conf) + entry.exists? + end + def create - handle_create_with_match + conf = Puppet::Type::Tempest_config + .new(:title => resource[:name], :value => get_network_id, :path => file_path) + entry = Puppet::Type.type(:tempest_config).provider(:ini_setting).new(conf) + entry.create end def destroy - handle_create_with_match + conf = Puppet::Type::Tempest_config + .new(:title => resource[:name], :path => file_path) + entry = Puppet::Type.type(:tempest_config).provider(:ini_setting).new(conf) + entry.destroy end def get_network_id @@ -40,48 +47,4 @@ Puppet::Type.type(:tempest_neutron_net_id_setter).provide( end @network_id end - - def should_line - "#{resource[:name]} = #{get_network_id}" - end - - def match - /^\s*#{resource[:name]}\s*=\s*/ - end - - def handle_create_with_match() - regex = match - match_count = lines.select { |l| regex.match(l) }.count - file = lines - case match_count - when 1 - File.open(file_path, 'w') do |fh| - lines.each do |l| - fh.puts(regex.match(l) ? should_line : l) - end - end - when 0 - block_pos = lines.find_index { |l| /^\[network\]/ =~ l } - if block_pos.nil? - file += ["[network]\n", "#{should_line}\n"] - else - file.insert(block_pos+1, "#{should_line}\n") - end - File.write(file_path, file.join) - else # cannot be negative. - raise Puppet::Error, "More than one line in file \ -'#{file_path}' matches pattern '#{regex}'" - end - end - - private - def lines - # If this type is ever used with very large files, we should - # write this in a different way, using a temp - # file; for now assuming that this type is only used on - # small-ish config files that can fit into memory without - # too much trouble. - @lines ||= File.readlines(file_path) - end - end diff --git a/lib/puppet/type/tempest_flavor_id_setter.rb b/lib/puppet/type/tempest_flavor_id_setter.rb index 8ff00fe7..7b468412 100644 --- a/lib/puppet/type/tempest_flavor_id_setter.rb +++ b/lib/puppet/type/tempest_flavor_id_setter.rb @@ -1,6 +1,6 @@ Puppet::Type.newtype(:tempest_flavor_id_setter) do # -# tempest_flavor_id_setter { 'flavor_id': +# tempest_flavor_id_setter { 'compute/flavor_id': # tempest_conf_path => '/var/lib/tempest/etc/tempest.conf', # flavor_name => $name, # } @@ -10,6 +10,14 @@ Puppet::Type.newtype(:tempest_flavor_id_setter) do newparam(:name, :namevar => true) do desc 'name of the setting to update' + munge do |value| + if value.include? '/' + value + else + # This is to keep the backword compatibility + "compute/#{value}" + end + end end newparam(:tempest_conf_path) do diff --git a/lib/puppet/type/tempest_glance_id_setter.rb b/lib/puppet/type/tempest_glance_id_setter.rb index 260595b7..a973eae8 100644 --- a/lib/puppet/type/tempest_glance_id_setter.rb +++ b/lib/puppet/type/tempest_glance_id_setter.rb @@ -1,6 +1,6 @@ Puppet::Type.newtype(:tempest_glance_id_setter) do # -# tempest_glance_id_setter { 'image_id': +# tempest_glance_id_setter { 'compute/image_id': # tempest_conf_path => '/var/lib/tempest/etc/tempest.conf', # image_name => $name, # } @@ -10,6 +10,14 @@ Puppet::Type.newtype(:tempest_glance_id_setter) do newparam(:name, :namevar => true) do desc 'name of the setting to update' + munge do |value| + if value.include? '/' + value + else + # This is to keep the backword compatibility + "compute/#{value}" + end + end end newparam(:tempest_conf_path) do diff --git a/lib/puppet/type/tempest_neutron_net_id_setter.rb b/lib/puppet/type/tempest_neutron_net_id_setter.rb index 381ca176..b06bce0b 100644 --- a/lib/puppet/type/tempest_neutron_net_id_setter.rb +++ b/lib/puppet/type/tempest_neutron_net_id_setter.rb @@ -4,6 +4,14 @@ Puppet::Type.newtype(:tempest_neutron_net_id_setter) do newparam(:name, :namevar => true) do desc 'The name of the setting to update.' + munge do |value| + if value.include? '/' + value + else + # This is to keep the backword compatibility + "network/#{value}" + end + end end newparam(:tempest_conf_path) do diff --git a/manifests/init.pp b/manifests/init.pp index c37144d8..81bbf819 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -218,7 +218,7 @@ # Defaults to $::os_service_default # [*db_flavor_ref*] # Valid primary flavor to use in Trove tests. -# Defaults to $::os_service_default +# Defaults to undef # [*db_flavor_name*] # Defaults to undef # [*baremetal_driver*] @@ -334,7 +334,7 @@ class tempest( # Sahara config $sahara_plugins = undef, # Trove config - $db_flavor_ref = $::os_service_default, + $db_flavor_ref = undef, $db_flavor_name = undef, # Service configuration $cinder_available = true, @@ -770,38 +770,38 @@ class tempest( } if ! $flavor_ref and $flavor_name { - tempest_flavor_id_setter { 'flavor_ref': + tempest_flavor_id_setter { 'compute/flavor_ref': ensure => present, tempest_conf_path => $tempest_conf, flavor_name => $flavor_name, } - Tempest_config<||> -> Tempest_flavor_id_setter['flavor_ref'] - Keystone_user_role<||> -> Tempest_flavor_id_setter['flavor_ref'] + Tempest_config<||> -> Tempest_flavor_id_setter['compute/flavor_ref'] + Keystone_user_role<||> -> Tempest_flavor_id_setter['compute/flavor_ref'] } elsif ($flavor_name and $flavor_ref) { fail('flavor_ref and flavor_name are both set: please set only one of them') } if ! $flavor_ref_alt and $flavor_name_alt { - tempest_flavor_id_setter { 'flavor_ref_alt': + tempest_flavor_id_setter { 'compute/flavor_ref_alt': ensure => present, tempest_conf_path => $tempest_conf, flavor_name => $flavor_name_alt, } - Tempest_config<||> -> Tempest_flavor_id_setter['flavor_ref_alt'] - Keystone_user_role<||> -> Tempest_flavor_id_setter['flavor_ref_alt'] + Tempest_config<||> -> Tempest_flavor_id_setter['compute/flavor_ref_alt'] + Keystone_user_role<||> -> Tempest_flavor_id_setter['compute/flavor_ref_alt'] } elsif ($flavor_name_alt and $flavor_ref_alt) { fail('flavor_ref_alt and flavor_name_alt are both set: please set only one of them') } - if is_service_default($db_flavor_ref) and $db_flavor_name { - tempest_flavor_id_setter { 'db_flavor_ref': + if ! $db_flavor_ref and $db_flavor_name { + tempest_flavor_id_setter { 'database/db_flavor_ref': ensure => present, tempest_conf_path => $tempest_conf, flavor_name => $db_flavor_name, } - Tempest_config<||> -> Tempest_flavor_id_setter['db_flavor_ref'] - Keystone_user_role<||> -> Tempest_flavor_id_setter['db_flavor_ref'] - } elsif ($db_flavor_name and ! is_service_default($db_flavor_ref)) { + Tempest_config<||> -> Tempest_flavor_id_setter['database/db_flavor_ref'] + Keystone_user_role<||> -> Tempest_flavor_id_setter['database/db_flavor_ref'] + } elsif ($db_flavor_name and $db_flavor_ref) { fail('db_flavor_ref and db_flavor_name are both set: please set only one of them') } @@ -809,24 +809,24 @@ class tempest( if ! $image_ref and $image_name { # If the image id was not provided, look it up via the image name # and set the value in the conf file. - tempest_glance_id_setter { 'image_ref': + tempest_glance_id_setter { 'compute/image_ref': ensure => present, tempest_conf_path => $tempest_conf, image_name => $image_name, } - Tempest_config<||> -> Tempest_glance_id_setter['image_ref'] - Keystone_user_role<||> -> Tempest_glance_id_setter['image_ref'] + Tempest_config<||> -> Tempest_glance_id_setter['compute/image_ref'] + Keystone_user_role<||> -> Tempest_glance_id_setter['compute/image_ref'] } elsif ($image_name and $image_ref) or (! $image_name and ! $image_ref) { fail('A value for either image_name or image_ref must be provided.') } if ! $image_ref_alt and $image_name_alt { - tempest_glance_id_setter { 'image_ref_alt': + tempest_glance_id_setter { 'compute/image_ref_alt': ensure => present, tempest_conf_path => $tempest_conf, image_name => $image_name_alt, } - Tempest_config<||> -> Tempest_glance_id_setter['image_ref_alt'] - Keystone_user_role<||> -> Tempest_glance_id_setter['image_ref_alt'] + Tempest_config<||> -> Tempest_glance_id_setter['compute/image_ref_alt'] + Keystone_user_role<||> -> Tempest_glance_id_setter['compute/image_ref_alt'] } elsif ($image_name_alt and $image_ref_alt) or (! $image_name_alt and ! $image_ref_alt) { fail('A value for either image_name_alt or image_ref_alt must \ be provided.') @@ -835,13 +835,13 @@ be provided.') if $neutron_available and $configure_networks { if ! $public_network_id and $public_network_name { - tempest_neutron_net_id_setter { 'public_network_id': + tempest_neutron_net_id_setter { 'network/public_network_id': ensure => present, tempest_conf_path => $tempest_conf, network_name => $public_network_name, } - Tempest_config<||> -> Tempest_neutron_net_id_setter['public_network_id'] - Keystone_user_role<||> -> Tempest_neutron_net_id_setter['public_network_id'] + Tempest_config<||> -> Tempest_neutron_net_id_setter['network/public_network_id'] + Keystone_user_role<||> -> Tempest_neutron_net_id_setter['network/public_network_id'] } elsif ($public_network_name and $public_network_id) or (! $public_network_name and ! $public_network_id) { fail('A value for either public_network_id or public_network_name \ must be provided.') diff --git a/releasenotes/notes/bug-1978848-c1f78da88d406f98.yaml b/releasenotes/notes/bug-1978848-c1f78da88d406f98.yaml new file mode 100644 index 00000000..b43dd416 --- /dev/null +++ b/releasenotes/notes/bug-1978848-c1f78da88d406f98.yaml @@ -0,0 +1,11 @@ +--- +features: + - | + The id setter resources type now accepts a resource name in + ``
/`` format, to use arbitrary section name. + +fixes: + - | + Fixed the wrong section(``[DEFAULT]`` instead of ``[database]``) used by + automated resolution of image id value using the ``db_flavor_name`` + parameter. diff --git a/spec/classes/tempest_init_spec.rb b/spec/classes/tempest_init_spec.rb index 31a5314d..c01d7653 100644 --- a/spec/classes/tempest_init_spec.rb +++ b/spec/classes/tempest_init_spec.rb @@ -42,7 +42,7 @@ describe 'tempest' do end it 'uses a resource to configure image_ref from image_name' do - is_expected.to contain_tempest_glance_id_setter('image_ref').with_image_name('cirros') + is_expected.to contain_tempest_glance_id_setter('compute/image_ref').with_image_name('cirros') end end @@ -77,7 +77,7 @@ describe 'tempest' do end it 'uses a resource to configure public_network_id from public_network_name' do - is_expected.to contain_tempest_neutron_net_id_setter('public_network_id').with_network_name('public') + is_expected.to contain_tempest_neutron_net_id_setter('network/public_network_id').with_network_name('public') end end @@ -242,7 +242,7 @@ describe 'tempest' do is_expected.to contain_tempest_config('network/public_router_id').with(:value => '') is_expected.to contain_tempest_config('dashboard/login_url').with(:value => nil) is_expected.to contain_tempest_config('dashboard/dashboard_url').with(:value => nil) - is_expected.to contain_tempest_config('database/db_flavor_ref').with_value('') + is_expected.to contain_tempest_config('database/db_flavor_ref').with(:value => nil) is_expected.to contain_tempest_config('service_available/cinder').with(:value => true) is_expected.to contain_tempest_config('volume-feature-enabled/backup').with(:value => false) is_expected.to contain_tempest_config('service_available/glance').with(:value => true) @@ -299,13 +299,13 @@ describe 'tempest' do end it 'set glance id' do - is_expected.to contain_tempest_glance_id_setter('image_ref').with( + is_expected.to contain_tempest_glance_id_setter('compute/image_ref').with( :ensure => 'present', :tempest_conf_path => '/var/lib/tempest/etc/tempest.conf', :image_name => 'image name', ) - is_expected.to contain_tempest_glance_id_setter('image_ref_alt').with( + is_expected.to contain_tempest_glance_id_setter('compute/image_ref_alt').with( :ensure => 'present', :tempest_conf_path => '/var/lib/tempest/etc/tempest.conf', :image_name => 'image name alt', @@ -313,7 +313,7 @@ describe 'tempest' do end it 'neutron net id' do - is_expected.to contain_tempest_neutron_net_id_setter('public_network_id').with( + is_expected.to contain_tempest_neutron_net_id_setter('network/public_network_id').with( :ensure => 'present', :tempest_conf_path => '/var/lib/tempest/etc/tempest.conf', :network_name => 'network name', @@ -393,17 +393,17 @@ describe 'tempest' do end it "sets flavor id using setter" do - is_expected.to contain_tempest_flavor_id_setter('flavor_ref').with( + is_expected.to contain_tempest_flavor_id_setter('compute/flavor_ref').with( :ensure => 'present', :tempest_conf_path => '/var/lib/tempest/etc/tempest.conf', :flavor_name => 'm1.tiny', ) - is_expected.to contain_tempest_flavor_id_setter('flavor_ref_alt').with( + is_expected.to contain_tempest_flavor_id_setter('compute/flavor_ref_alt').with( :ensure => 'present', :tempest_conf_path => '/var/lib/tempest/etc/tempest.conf', :flavor_name => 'm1.nano', ) - is_expected.to contain_tempest_flavor_id_setter('db_flavor_ref').with( + is_expected.to contain_tempest_flavor_id_setter('database/db_flavor_ref').with( :ensure => 'present', :tempest_conf_path => '/var/lib/tempest/etc/tempest.conf', :flavor_name => 'm1.micro', diff --git a/spec/unit/puppet/provider/ruby_spec.rb b/spec/unit/puppet/provider/ruby_spec.rb index 9f07e4fd..785a295f 100644 --- a/spec/unit/puppet/provider/ruby_spec.rb +++ b/spec/unit/puppet/provider/ruby_spec.rb @@ -62,11 +62,11 @@ EOS validate_file(<<-EOS # This is a comment [compute] -image_ref = abcdef ; This is also a comment foo=foovalue bar = barvalue master = true +image_ref=abcdef [network] foo= foovalue2 [blah] @@ -90,8 +90,8 @@ foo=foovalue bar = barvalue master = true [network] -public_network_id = abcdef foo= foovalue2 +public_network_id=abcdef [blah] EOS @@ -115,8 +115,9 @@ EOS validate_file(<<-EOS # This is a comment + [compute] -image_ref = abcdef +image_ref=abcdef EOS ) end @@ -131,8 +132,9 @@ EOS validate_file(<<-EOS # This is a comment + [network] -public_network_id = abcdef +public_network_id=abcdef EOS ) end