Class: LinuxAdmin::NetworkInterfaceRH

Inherits:
NetworkInterface show all
Defined in:
lib/linux_admin/network_interface/network_interface_rh.rb

Constant Summary collapse

IFACE_DIR =
"/etc/sysconfig/network-scripts"

Instance Attribute Summary collapse

Attributes inherited from NetworkInterface

#interface

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from NetworkInterface

#address, #address6, dist_class, #gateway, #gateway6, #mac_address, #netmask, #netmask6, new, #prefix, #prefix6, #reload, #start, #stop

Constructor Details

#initialize(interface) ⇒ NetworkInterfaceRH



12
13
14
15
16
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 12

def initialize(interface)
  @interface_file = self.class.path_to_interface_config_file(interface)
  super
  parse_conf
end

Instance Attribute Details

#interface_configHash<String, String> (readonly)



9
10
11
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 9

def interface_config
  @interface_config
end

Class Method Details

.path_to_interface_config_file(interface) ⇒ Object



186
187
188
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 186

def self.path_to_interface_config_file(interface)
  Pathname.new(IFACE_DIR).join("ifcfg-#{interface}")
end

Instance Method Details

#address6=(address) ⇒ Object

Set the IPv6 address for this interface

Raises:

  • ArgumentError if the address is not formatted properly



48
49
50
51
52
53
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 48

def address6=(address)
  validate_ip(address)
  @interface_config['IPV6INIT']  = 'yes'
  @interface_config['DHCPV6C']   = 'no'
  @interface_config['IPV6ADDR']  = address
end

#address=(address) ⇒ Object

Set the IPv4 address for this interface

Raises:

  • ArgumentError if the address is not formatted properly



38
39
40
41
42
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 38

def address=(address)
  validate_ip(address)
  @interface_config["BOOTPROTO"] = "static"
  @interface_config["IPADDR"]    = address
end

#apply_static(ip, mask, gw, dns, search = nil) ⇒ Boolean

Applies the given static network configuration to the interface

Raises:

  • ArgumentError if an IP is not formatted properly



132
133
134
135
136
137
138
139
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 132

def apply_static(ip, mask, gw, dns, search = nil)
  self.address      = ip
  self.netmask      = mask
  self.gateway      = gw
  self.dns          = dns
  self.search_order = search if search
  save
end

#apply_static6(ip, prefix, gw, dns, search = nil) ⇒ Boolean

Applies the given static IPv6 network configuration to the interface

Raises:

  • ArgumentError if an IP is not formatted properly or interface does not start



150
151
152
153
154
155
156
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 150

def apply_static6(ip, prefix, gw, dns, search = nil)
  self.address6     = "#{ip}/#{prefix}"
  self.gateway6     = gw
  self.dns          = dns
  self.search_order = search if search
  save
end

#dns=(*servers) ⇒ Object

Sets one or both DNS servers for this network interface



85
86
87
88
89
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 85

def dns=(*servers)
  server1, server2 = servers.flatten
  @interface_config["DNS1"] = server1
  @interface_config["DNS2"] = server2 if server2
end

#enable_dhcpObject

Set up the interface to use DHCP Removes any previously set static IPv4 networking information



100
101
102
103
104
105
106
107
108
109
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 100

def enable_dhcp
  @interface_config["BOOTPROTO"] = "dhcp"
  @interface_config.delete("IPADDR")
  @interface_config.delete("NETMASK")
  @interface_config.delete("GATEWAY")
  @interface_config.delete("PREFIX")
  @interface_config.delete("DNS1")
  @interface_config.delete("DNS2")
  @interface_config.delete("DOMAIN")
end

#enable_dhcp6Object

Set up the interface to use DHCPv6 Removes any previously set static IPv6 networking information



113
114
115
116
117
118
119
120
121
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 113

def enable_dhcp6
  @interface_config['IPV6INIT'] = 'yes'
  @interface_config['DHCPV6C'] = 'yes'
  @interface_config.delete('IPV6ADDR')
  @interface_config.delete('IPV6_DEFAULTGW')
  @interface_config.delete("DNS1")
  @interface_config.delete("DNS2")
  @interface_config.delete("DOMAIN")
end

#gateway6=(address) ⇒ Object

Set the IPv6 gateway address for this interface

Raises:

  • ArgumentError if the address is not formatted properly



68
69
70
71
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 68

def gateway6=(address)
  validate_ip(address)
  @interface_config['IPV6_DEFAULTGW'] = address
end

#gateway=(address) ⇒ Object

Set the IPv4 gateway address for this interface

Raises:

  • ArgumentError if the address is not formatted properly



59
60
61
62
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 59

def gateway=(address)
  validate_ip(address)
  @interface_config["GATEWAY"] = address
end

#netmask=(mask) ⇒ Object

Set the IPv4 sub-net mask for this interface

Raises:

  • ArgumentError if the mask is not formatted properly



77
78
79
80
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 77

def netmask=(mask)
  validate_ip(mask)
  @interface_config["NETMASK"] = mask
end

#parse_confObject

Parses the interface configuration file into the @interface_config hash



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 19

def parse_conf
  @interface_config = {}

  if @interface_file.file?
    File.foreach(@interface_file) do |line|
      next if line =~ /^\s*#/

      key, value = line.split('=').collect(&:strip)
      @interface_config[key] = value
    end
  end

  @interface_config["NM_CONTROLLED"] = "no"
end

#saveBoolean

Writes the contents of @interface_config to @interface_file as ‘key`=`value` pairs and resets the interface



163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 163

def save
  old_contents = @interface_file.file? ? File.read(@interface_file) : ""

  stop_success = stop
  # Stop twice because when configure both ipv4 and ipv6 as dhcp, ipv6 dhcp client will
  # exit and leave a /var/run/dhclient6-eth0.pid file. Then stop (ifdown eth0) will try
  # to kill this exited process so it returns 1. In the second call, this `.pid' file
  # has been deleted and ifdown returns 0.
  # See: https://bugzilla.redhat.com/show_bug.cgi?id=1472396
  stop_success = stop unless stop_success
  return false unless stop_success

  File.write(@interface_file, @interface_config.delete_blanks.collect { |k, v| "#{k}=#{v}" }.join("\n"))

  unless start
    File.write(@interface_file, old_contents)
    start
    return false
  end

  reload
end

#search_order=(*domains) ⇒ Object

Sets the search domain list for this network interface



94
95
96
# File 'lib/linux_admin/network_interface/network_interface_rh.rb', line 94

def search_order=(*domains)
  @interface_config["DOMAIN"] = "\"#{domains.flatten.join(' ')}\""
end