Allow metadata hash for nova_aggregate resources
Allow the metadata parameter to the nova_aggregate provider to take a hash of key/value pairs, in addition to a comma- delimited list as a string. Also better handle existing metadata values which contain commas. Change-Id: I148def3be059d87fa9aa8f748cd3a5ec7770473a Closes-bug: 1534853
This commit is contained in:
@@ -121,12 +121,23 @@ class Puppet::Provider::Nova < Puppet::Provider
|
||||
else
|
||||
new = []
|
||||
end
|
||||
s.split(",").each do |el|
|
||||
ret = str2hash(el.strip())
|
||||
if s.include? "="
|
||||
new.update(ret)
|
||||
else
|
||||
new.push(ret)
|
||||
if s =~ /^'.+'$/
|
||||
s.split("', '").each do |el|
|
||||
ret = str2hash(el.strip())
|
||||
if s.include? "="
|
||||
new.update(ret)
|
||||
else
|
||||
new.push(ret)
|
||||
end
|
||||
end
|
||||
else
|
||||
s.split(",").each do |el|
|
||||
ret = str2hash(el.strip())
|
||||
if s.include? "="
|
||||
new.update(ret)
|
||||
else
|
||||
new.push(ret)
|
||||
end
|
||||
end
|
||||
end
|
||||
return new
|
||||
|
@@ -80,6 +80,9 @@ Puppet::Type.newtype(:nova_aggregate) 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)
|
||||
@@ -89,6 +92,9 @@ Puppet::Type.newtype(:nova_aggregate) do
|
||||
end
|
||||
|
||||
validate do |value|
|
||||
if value.is_a?(Hash)
|
||||
return true
|
||||
end
|
||||
value.split(",").each do |kv|
|
||||
raise ArgumentError, "Key/value pairs must be separated by an =" unless value.include?("=")
|
||||
end
|
||||
|
@@ -33,6 +33,20 @@ describe Puppet::Type.type(:nova_aggregate) do
|
||||
:hosts => "host1, host2")).to_not be_nil
|
||||
end
|
||||
|
||||
it "should be able to create an more complex instance with hash for metadata" do
|
||||
expect(described_class.new(:name => 'agg0',
|
||||
:availability_zone => 'myzone',
|
||||
:metadata => { 'a' => 'b', 'c' => 'd' },
|
||||
:hosts => "host1, host2")).to_not be_nil
|
||||
end
|
||||
|
||||
it "should be able to create an more complex instance with hash for metadata and values containing commas" do
|
||||
expect(described_class.new(:name => 'agg0',
|
||||
:availability_zone => 'myzone',
|
||||
:metadata => { 'a' => 'b,e,f,g', 'c' => 'd,h,i,j' },
|
||||
:hosts => "host1, host2")).to_not be_nil
|
||||
end
|
||||
|
||||
it "should be able to create a instance and have the default values" do
|
||||
c = described_class.new(:name => 'agg0')
|
||||
expect(c[:name]).to eq("agg0")
|
||||
@@ -52,6 +66,28 @@ describe Puppet::Type.type(:nova_aggregate) do
|
||||
expect(c[:hosts]).to eq(["host1" , "host2"])
|
||||
end
|
||||
|
||||
it "should return the given values with hash for metadata" do
|
||||
c = described_class.new(:name => 'agg0',
|
||||
:availability_zone => 'myzone',
|
||||
:metadata => { 'a' => 'b', 'c' => 'd' },,
|
||||
:hosts => " host1, host2 ")
|
||||
expect(c[:name]).to eq("agg0")
|
||||
expect(c[:availability_zone]).to eq("myzone")
|
||||
expect(c[:metadata]).to eq({"a" => "b", "c" => "d"})
|
||||
expect(c[:hosts]).to eq(["host1" , "host2"])
|
||||
end
|
||||
|
||||
it "should return the given values with hash for metadata and values containing commas" do
|
||||
c = described_class.new(:name => 'agg0',
|
||||
:availability_zone => 'myzone',
|
||||
:metadata => { 'a' => 'b,e,f,g', 'c' => 'd,h,i,j' },
|
||||
:hosts => " host1, host2 ")
|
||||
expect(c[:name]).to eq("agg0")
|
||||
expect(c[:availability_zone]).to eq("myzone")
|
||||
expect(c[:metadata]).to eq({"a" => "b", "c" => "d"})
|
||||
expect(c[:hosts]).to eq(["host1" , "host2"])
|
||||
end
|
||||
|
||||
it "should return the given values" do
|
||||
c = described_class.new(:name => 'agg0',
|
||||
:availability_zone => "",
|
||||
|
Reference in New Issue
Block a user