vs_bridge: Fix missing external_ids after initial creation
It turned out the external_ids property is not reflected on the ovs bridge after initial creation. This change fixes it and ensures that the property is applied to the bridge. Closes-Bug: #1958905 Change-Id: I7c1c2384b8d70b568caffe8d3cc82002cf2502f6
This commit is contained in:
parent
4924354d51
commit
8fcd7596e4
@ -13,7 +13,9 @@ Puppet::Type.type(:vs_bridge).provide(:ovs) do
|
||||
def create
|
||||
vsctl('add-br', @resource[:name])
|
||||
ip('link', 'set', 'dev', @resource[:name], 'up')
|
||||
external_ids = @resource[:external_ids] if @resource[:external_ids]
|
||||
if @resource[:external_ids]
|
||||
self.class.set_external_ids(@resource[:name], @resource[:external_ids])
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@ -21,22 +23,30 @@ Puppet::Type.type(:vs_bridge).provide(:ovs) do
|
||||
vsctl('del-br', @resource[:name])
|
||||
end
|
||||
|
||||
def _split(string, splitter=',')
|
||||
def self._split(string, splitter=',')
|
||||
return Hash[string.split(splitter).map{|i| i.split('=')}]
|
||||
end
|
||||
|
||||
def external_ids
|
||||
result = vsctl('br-get-external-id', @resource[:name])
|
||||
return result.split("\n").join(',')
|
||||
self.class.get_external_ids(@resource[:name])
|
||||
end
|
||||
|
||||
def external_ids=(value)
|
||||
old_ids = _split(external_ids)
|
||||
self.class.set_external_ids(@resource[:name], value)
|
||||
end
|
||||
|
||||
def self.get_external_ids(br)
|
||||
result = vsctl('br-get-external-id', br)
|
||||
return result.split("\n").join(',')
|
||||
end
|
||||
|
||||
def self.set_external_ids(br, value)
|
||||
old_ids = _split(get_external_ids(br))
|
||||
new_ids = _split(value)
|
||||
|
||||
new_ids.each_pair do |k,v|
|
||||
unless old_ids.has_key?(k)
|
||||
vsctl('br-set-external-id', @resource[:name], k, v)
|
||||
vsctl('br-set-external-id', br, k, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -11,10 +11,15 @@ describe 'basic vswitch' do
|
||||
|
||||
include vswitch::ovs
|
||||
|
||||
vs_bridge { 'br-ci':
|
||||
vs_bridge { 'br-ci1':
|
||||
ensure => present,
|
||||
}
|
||||
|
||||
vs_bridge { 'br-ci2':
|
||||
ensure => present,
|
||||
external_ids => 'bridge-id=br-ci2'
|
||||
}
|
||||
|
||||
vs_config { 'external_ids:ovn-remote':
|
||||
ensure => present,
|
||||
value => 'tcp:127.0.0.1:2300',
|
||||
@ -27,9 +32,21 @@ describe 'basic vswitch' do
|
||||
apply_manifest(pp, :catch_changes => true)
|
||||
end
|
||||
|
||||
it 'should have br-ci bridge' do
|
||||
it 'should have br-ci1 bridge' do
|
||||
command('ovs-vsctl show') do |r|
|
||||
expect(r.stdout).to match(/br-ci/)
|
||||
expect(r.stdout).to match(/br-ci1/)
|
||||
end
|
||||
end
|
||||
|
||||
it 'should have br-ci2 bridge' do
|
||||
command('ovs-vsctl show') do |r|
|
||||
expect(r.stdout).to match(/br-ci2/)
|
||||
end
|
||||
end
|
||||
|
||||
it 'should have external_ids on br-ci2 bridge' do
|
||||
command('ovs-vsctl br-get-external-id br-ci2') do |r|
|
||||
expect(r.stdout).to match(/bridge-id=br-ci2/)
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user