Files
Takashi Kajinami c9f2596789 Create the base ovs provider
The commands to query or update ovs db records are similar for
different resources (bridge, port and interface).

This creates the base implementation to avoid maintaining similar
logics for multiple resources.

Change-Id: Ibd75f464af984987c27548a08da26dea622c7e79
2023-11-28 11:06:39 +09:00

82 lines
1.9 KiB
Ruby

require File.join(File.dirname(__FILE__), '..','..','..', 'puppet/provider/ovs')
Puppet::Type.type(:vs_bridge).provide(
:ovs,
:parent => Puppet::Provider::Ovs
) do
commands :ip => 'ip'
commands :vsctl => 'ovs-vsctl'
def exists?
vsctl("br-exists", @resource[:name])
return true
rescue Puppet::ExecutionFailure
return false
end
def create
vsctl('add-br', @resource[:name])
ip('link', 'set', 'dev', @resource[:name], 'up')
if @resource[:external_ids]
self.class.set_external_ids(@resource[:name], @resource[:external_ids])
end
if @resource[:mac_table_size]
self.class.set_mac_table_size(@resource[:name], @resource[:mac_table_size])
end
end
def destroy
ip('link', 'set', 'dev', @resource[:name], 'down')
vsctl('del-br', @resource[:name])
end
def external_ids
self.class.get_external_ids(@resource[:name])
end
def external_ids=(value)
self.class.set_external_ids(@resource[:name], value)
end
def mac_table_size
self.class.get_mac_table_size(@resource[:name])
end
def mac_table_size=(value)
self.class.set_mac_table_size(@resource[:name], value)
end
private
def self.get_external_ids(br)
value = vsctl('br-get-external-id', br)
return parse_hash(value, "\n")
end
def self.set_external_ids(br, value)
old_ids = get_external_ids(br)
new_ids = value
new_ids.each do |k,v|
if !old_ids.has_key?(k) or old_ids[k] != v
vsctl('br-set-external-id', br, k, v)
end
end
old_ids.each do |k, v|
if ! new_ids.has_key?(k)
vsctl('br-set-external-id', br, k)
end
end
end
def self.get_mac_table_size(br)
value = get_other_config('Bridge', br, 'mac-table-size')
if value.nil? then nil else Integer(value.gsub(/^"|"$/, '')) end
end
def self.set_mac_table_size(br, value)
set_other_config('Bridge', br, 'mac-table-size', value)
end
end