Merge "CentOS/RHEL: Fix missing external_ids"

This commit is contained in:
Zuul
2022-08-01 08:43:54 +00:00
committed by Gerrit Code Review
2 changed files with 58 additions and 5 deletions

View File

@@ -44,10 +44,10 @@ Puppet::Type.type(:vs_port).provide(
if interface_physical?
template = DEFAULT
extras = { 'OVS_EXTRA' => "\"set bridge #{@resource[:bridge]} fail_mode=#{@resource[:fail_mode]}\"" }
ovs_extra = get_ovs_extra(["set bridge #{@resource[:bridge]} fail_mode=#{@resource[:fail_mode]}"])
if link?
extras = dynamic_default if dynamic?
ovs_extra = dynamic_default if dynamic?
if File.exist?(BASE + @resource[:port])
template = cleared(from_str(File.read(BASE + @resource[:port])))
end
@@ -67,7 +67,7 @@ Puppet::Type.type(:vs_port).provide(
port.save(BASE + @resource[:port])
bridge = IFCFG::Bridge.new(@resource[:bridge], template)
bridge.set(extras) if extras
bridge.set(ovs_extra) if ovs_extra
bridge.save(BASE + @resource[:bridge])
ifdown(@resource[:bridge])
@@ -99,6 +99,30 @@ Puppet::Type.type(:vs_port).provide(
private
def get_bridge_external_ids(br)
external_ids_raw = vsctl('br-get-external-id', br).split("\n")
external_ids_raw.delete('')
if external_ids_raw
return Hash[external_ids_raw.map{|i| i.split('=')}]
else
return {}
end
end
def get_ovs_extra(opts=[])
external_ids = get_bridge_external_ids(@resource[:bridge])
# Add commands to set external-id
external_ids.each do |k, v|
opts += ["br-set-external-id #{resource[:bridge]} #{k} #{v}"]
end
if opts.empty?
return {}
else
return { 'OVS_EXTRA' => "\"#{opts.join(' -- ')}\"" }
end
end
def bonding?
# To do: replace with iproute2 commands
if File.exists?("/proc/net/bonding/#{@resource[:port]}")
@@ -131,8 +155,9 @@ Puppet::Type.type(:vs_port).provide(
# Persistent MAC address taken from interface
bridge_mac_address = File.read("/sys/class/net/#{@resource[:port]}/address").chomp
if bridge_mac_address != ''
list.merge!({ 'OVS_EXTRA' =>
"\"set bridge #{@resource[:bridge]} other-config:hwaddr=#{bridge_mac_address} fail_mode=#{@resource[:fail_mode]}\"" })
list.merge!(get_ovs_extra(["set bridge #{@resource[:bridge]} other-config:hwaddr=#{bridge_mac_address} fail_mode=#{@resource[:fail_mode]}"]))
else
list.merge!(get_ovs_extra())
end
list
end

View File

@@ -20,6 +20,22 @@ describe 'basic vswitch' do
external_ids => 'bridge-id=br-ci2'
}
vs_bridge { 'br-ci3':
ensure => present,
external_ids => 'bridge-id=br-ci3'
}
~> exec { 'create_loop1_port':
path => '/usr/bin:/bin:/usr/sbin:/sbin',
provider => shell,
command => 'ip link add name loop1 type dummy && ip addr add 127.2.0.1/24 dev loop1',
before => Vs_port['loop1'],
refreshonly => true,
}
-> vs_port { 'loop1':
ensure => present,
bridge => 'br-ci3',
}
vs_config { 'external_ids:ovn-remote':
ensure => present,
value => 'tcp:127.0.0.1:2300',
@@ -50,6 +66,18 @@ describe 'basic vswitch' do
end
end
it 'should have br-ci3 bridge' do
command('ovs-vsctl show') do |r|
expect(r.stdout).to match(/br-ci3/)
end
end
it 'should have external_ids on br-ci3 bridge' do
command('ovs-vsctl br-get-external-id br-ci3') do |r|
expect(r.stdout).to match(/bridge-id=br-ci3/)
end
end
it 'should get remote addr' do
command('ovs-vsctl get Open_vSwitch . external_ids:ovn-remote') do |r|
expect(r.stdout).to match(/\"tcp:127.0.0.1:2300\"/)