Fixes vs_config options parsing

Fix the parsing logic which wrongly detects '=' in hash values.

Closes-Bug: #2080944
Change-Id: I8cd8c8f4640941966ac838580dd45ab56cadb6de
(cherry picked from commit 4e4105cf48)
This commit is contained in:
Mikhail Stolyarov 2024-09-17 14:01:46 +03:00 committed by Takashi Kajinami
parent cfeea1a051
commit f765702967
3 changed files with 18 additions and 5 deletions

View File

@ -15,7 +15,7 @@ Puppet::Type.type(:vs_config).provide(:ovs) do
type = 'hash' type = 'hash'
res = {} res = {}
value[1..-2].gsub('"','').split(', ').map(&:strip).each do |v| value[1..-2].gsub('"','').split(', ').map(&:strip).each do |v|
k,val = v.split("=") k,val = v.split('=', 2)
res[k] = val res[k] = val
end end
elsif value[0] == '[' elsif value[0] == '['

View File

@ -53,6 +53,11 @@ describe 'basic vswitch' do
value => 'tcp:127.0.0.1:2300', value => 'tcp:127.0.0.1:2300',
} }
vs_config { 'external_ids:ovn-cms-options':
ensure => present,
value => 'enable-chassis-as-gw,availability-zones=nova',
}
vs_config { 'other_config:thisshouldexist': vs_config { 'other_config:thisshouldexist':
ensure => present, ensure => present,
value => 'customvalue', value => 'customvalue',
@ -131,12 +136,18 @@ describe 'basic vswitch' do
end end
end end
it 'should get remote addr' do it 'should get ovn remote addr' do
command('ovs-vsctl get Open_vSwitch . external_ids:ovn-remote') do |r| command('ovs-vsctl get Open_vSwitch . external_ids:ovn-remote') do |r|
expect(r.stdout).to match(/\"tcp:127.0.0.1:2300\"/) expect(r.stdout).to match(/\"tcp:127.0.0.1:2300\"/)
end end
end end
it 'should get ovn cms options' do
command('ovs-vsctl get Open_vSwitch . external_ids:ovn-cms-options') do |r|
expect(r.stdout).to match(/\"enable-chassis-as-gw,availability-zones=nova\"/)
end
end
it 'should get other config' do it 'should get other config' do
command('sudo ovs-vsctl get Open_Vswitch . other_config') do |r| command('sudo ovs-vsctl get Open_Vswitch . other_config') do |r|
expect(r.stdout).to match(/\"{thishshouldexist=customvalue}"/) expect(r.stdout).to match(/\"{thishshouldexist=customvalue}"/)

View File

@ -73,11 +73,12 @@ key3 : [1001, 399, 240, 1200]')
expect(described_class).to receive(:vsctl).with( expect(described_class).to receive(:vsctl).with(
"list", "Open_vSwitch", ".").and_return('key1 : {} "list", "Open_vSwitch", ".").and_return('key1 : {}
key2 : {"hash21"="value21"} key2 : {"hash21"="value21"}
key3 : {"hash31"="value31", "hash32"="value32", "hash33"=33}') key3 : {"hash31"="value31", "hash32"="value32", "hash33"=33}
key4 : {"hash41"="value41,key42=value42"}')
end end
it "should return three resources" do it "should return three resources" do
expect(described_class.instances.size).to eq(4) expect(described_class.instances.size).to eq(5)
end end
it "should contain valid names and values" do it "should contain valid names and values" do
@ -85,7 +86,8 @@ key3 : {"hash31"="value31", "hash32"="value32", "hash33"=33}')
"key2:hash21" => "value21", "key2:hash21" => "value21",
"key3:hash31" => "value31", "key3:hash31" => "value31",
"key3:hash32" => "value32", "key3:hash32" => "value32",
"key3:hash33" => "33"} "key3:hash33" => "33",
"key4:hash41" => "value41,key42=value42"}
described_class.instances.each do |inst| described_class.instances.each do |inst|
_inst = inst.instance_variable_get("@property_hash") _inst = inst.instance_variable_get("@property_hash")
expect(expected_values.key?(_inst[:name])).to eq true expect(expected_values.key?(_inst[:name])).to eq true