diff --git a/lib/puppet/type/nova_aggregate.rb b/lib/puppet/type/nova_aggregate.rb index f24a1ca52..0b3ac8685 100644 --- a/lib/puppet/type/nova_aggregate.rb +++ b/lib/puppet/type/nova_aggregate.rb @@ -33,7 +33,7 @@ # Optional # # [*metadata*] -# String with key/value pairs. ie "key=value,key=value" +# A key => value hash used to set the metadata for the aggregate. # Optional # # [*hosts*] @@ -89,28 +89,12 @@ Puppet::Type.newtype(:nova_aggregate) do newproperty(:metadata) do desc 'The metadata of the aggregate' - #convert DSL/string form to internal form which is a single hash - munge do |value| - if value.is_a?(Hash) - return value - end - internal = Hash.new - value.split(",").map{|el| el.strip()}.each do |pair| - key, value = pair.split("=", 2) - internal[key.strip()] = value.strip() - end - return internal - end validate do |value| if value.is_a?(Hash) return true - elsif value.is_a?(String) - value.split(",").each do |kv| - raise ArgumentError, "Key/value pairs must be separated by an =" unless value.include?("=") - end else - raise ArgumentError, "Invalid metadata #{value}. Requires a String or a Hash, not a #{value.class}" + raise ArgumentError, "Invalid metadata #{value}. Requires a Hash, not a #{value.class}" end end end diff --git a/lib/puppet/type/nova_flavor.rb b/lib/puppet/type/nova_flavor.rb index dd8419f95..5155d5bac 100644 --- a/lib/puppet/type/nova_flavor.rb +++ b/lib/puppet/type/nova_flavor.rb @@ -140,23 +140,11 @@ Puppet::Type.newtype(:nova_flavor) do newproperty(:properties) do desc "The set of flavor properties" - munge do |value| - return value if value.is_a? Hash - - # wrap property value in commas - value.gsub!(/=(\w+)/, '=\'\1\'') - Hash[value.scan(/(\S+)='([^']*)'/)] - end - validate do |value| if value.is_a?(Hash) return true - elsif value.is_a?(String) - value.split(',').each do |property| - raise ArgumentError, "Key/value pairs should be separated by an =" unless property.include?('=') - end else - raise ArgumentError, "Invalid properties #{value}. Requires a String or a Hash, not a #{value.class}" + raise ArgumentError, "Invalid properties #{value}. Requires a Hash, not a #{value.class}" end end end diff --git a/releasenotes/notes/properties-hash-1d78c19fa202742b.yaml b/releasenotes/notes/properties-hash-1d78c19fa202742b.yaml new file mode 100644 index 000000000..145b7d6cc --- /dev/null +++ b/releasenotes/notes/properties-hash-1d78c19fa202742b.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + The ``properties`` property of ``nova_flavor`` resource and + the ``metadata`` property of ``nova_aggregate`` resource now accept only + Hash values. diff --git a/spec/acceptance/10_nova_wsgi_apache_spec.rb b/spec/acceptance/10_nova_wsgi_apache_spec.rb index 7d45d0d0e..d86078bc6 100644 --- a/spec/acceptance/10_nova_wsgi_apache_spec.rb +++ b/spec/acceptance/10_nova_wsgi_apache_spec.rb @@ -20,7 +20,7 @@ describe 'basic nova' do nova_aggregate { 'test_aggregate': ensure => present, availability_zone => 'zone1', - metadata => 'test=property', + metadata => {'test' => 'property'}, require => Class['nova::api'], } diff --git a/spec/unit/provider/nova_aggregate/openstack_spec.rb b/spec/unit/provider/nova_aggregate/openstack_spec.rb index 1aa4e4680..d8e967259 100644 --- a/spec/unit/provider/nova_aggregate/openstack_spec.rb +++ b/spec/unit/provider/nova_aggregate/openstack_spec.rb @@ -19,7 +19,7 @@ describe Puppet::Type.type(:nova_aggregate).provider(:openstack) do :availability_zone => 'simple', :hosts => ['example'], :ensure => 'present', - :metadata => 'nice=cookie', + :metadata => {'nice' => 'cookie'}, } end @@ -105,7 +105,7 @@ hosts="[\'example\']" :availability_zone => 'simple', :hosts => ['known'], :ensure => 'present', - :metadata => 'nice=cookie', + :metadata => {'nice' => 'cookie'}, :filter_hosts => 'true' } end diff --git a/spec/unit/type/nova_aggregate_spec.rb b/spec/unit/type/nova_aggregate_spec.rb index 06ea6a992..758c5acdd 100644 --- a/spec/unit/type/nova_aggregate_spec.rb +++ b/spec/unit/type/nova_aggregate_spec.rb @@ -20,7 +20,7 @@ describe Puppet::Type.type(:nova_aggregate) do :name => 'new_aggr', :metadata => 'some_id,sd' } - expect { Puppet::Type.type(:nova_aggregate).new(incorrect_input) }.to raise_error(Puppet::ResourceError, /Key\/value pairs must be separated by an =/) + expect { Puppet::Type.type(:nova_aggregate).new(incorrect_input) }.to raise_error(Puppet::ResourceError, /Invalid metadata/) end it 'should raise error if wrong type for availability zone' do