puppet-vswitch/lib/puppetx/redhat/ifcfg.rb
Javier Pena 4d92141aa3 Set NAME as well as DEVICE in ifcfg-*
Previously, only DEVICE was set in ifcfg-* files. This works fine
for the traditional network service under CentOS/RHEL/Fedora, but
for NetworkManager we need to have NAME. Fixing the redhat provider
to add it as well.

Change-Id: Ic29ce07a461913a3b70067ce642b1a03109f164b
Resolves: rhbz#1167326
2015-11-03 21:02:49 +01:00

84 lines
1.6 KiB
Ruby

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('NAME', @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