Merge "CentOS/RHEL: Fix missing external_ids"
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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\"/)
|
||||
|
||||
Reference in New Issue
Block a user