--- /dev/null
+module IFCFG
+ class OVS
+ attr_reader :ifcfg
+
+ def self.exists?(name)
+ File.exist?(BASE + name)
+ end
+
+ def self.remove(name)
+ File.delete(BASE + name)
+ rescue Errno::ENOENT
+ end
+
+ def initialize(name, seed=nil)
+ @name = name
+ @ifcfg = {}
+ set(seed)
+ set_key('DEVICE', @name)
+ set_key('DEVICETYPE', 'ovs')
+ replace_key('BOOTPROTO', 'OVSBOOTPROTO') if self.class == IFCFG::Bridge
+ end
+
+ def del_key(key)
+ @ifcfg.delete(key)
+ end
+
+ def key?(key)
+ @ifcfg.has_key?(key)
+ end
+
+ def key(key)
+ @ifcfg.has_key?(key)
+ end
+
+ def replace_key(key, new_key)
+ value = @ifcfg[key]
+ @ifcfg.delete(key)
+ set_key(new_key, value)
+ end
+
+ def set(list)
+ if list != nil && list.class == Hash
+ list.each { |key, value| set_key(key, value) }
+ end
+ end
+
+ def set_key(key, value)
+ @ifcfg.delete_if { |k, v| k == key } if self.key?(key)
+ @ifcfg.merge!({key => value })
+ end
+
+ def to_s
+ str = ''
+ @ifcfg.each { |x, y|
+ str << "#{x}=#{y}\n"
+ }
+ str
+ end
+
+ def save(filename)
+ File.open(filename, 'w') { |file| file << self.to_s }
+ end
+ end
+
+ class Bridge < OVS
+ def initialize(name, template=nil)
+ super(name, template)
+ set_key('TYPE', 'OVSBridge')
+ del_key('HWADDR')
+ end
+ end
+
+ class Port < OVS
+ def initialize(name, bridge)
+ super(name)
+ set_key('TYPE', 'OVSPort')
+ set_key('OVS_BRIDGE', bridge)
+ set_key('ONBOOT', 'yes')
+ set_key('BOOTPROTO', 'none')
+ end
+ end
+end