Class: LinuxAdmin::NetworkInterface

Inherits:
Object
  • Object
show all
Defined in:
lib/linux_admin/network_interface.rb

Direct Known Subclasses

NetworkInterfaceGeneric, NetworkInterfaceRH

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(interface) ⇒ NetworkInterface

Returns a new instance of NetworkInterface.

Parameters:

  • interface (String)

    Name of the network interface to manage

Raises:



35
36
37
38
# File 'lib/linux_admin/network_interface.rb', line 35

def initialize(interface)
  @interface = interface
  reload
end

Instance Attribute Details

#interfaceString (readonly)

Returns the interface for networking operations.

Returns:

  • (String)

    the interface for networking operations



31
32
33
# File 'lib/linux_admin/network_interface.rb', line 31

def interface
  @interface
end

Class Method Details

.dist_class(clear_cache = false) ⇒ Class

Gets the subclass specific to the local Linux distro

Parameters:

  • clear_cache (Boolean) (defaults to: false)

    Determines if the cached value will be reevaluated

Returns:

  • (Class)

    The proper class to be used



12
13
14
15
16
17
18
19
20
21
# File 'lib/linux_admin/network_interface.rb', line 12

def self.dist_class(clear_cache = false)
  @dist_class = nil if clear_cache
  @dist_class ||= begin
    if [Distros.rhel, Distros.fedora].include?(Distros.local)
      NetworkInterfaceRH
    else
      NetworkInterfaceGeneric
    end
  end
end

.new(*args) ⇒ Object

Creates an instance of the correct NetworkInterface subclass for the local distro



24
25
26
27
28
# File 'lib/linux_admin/network_interface.rb', line 24

def self.new(*args)
  self == LinuxAdmin::NetworkInterface ? dist_class.new(*args) : super
rescue MissingConfigurationFileError
  NetworkInterfaceGeneric.new(*args)
end

Instance Method Details

#addressString

Retrieve the IPv4 address assigned to the interface

Returns:

  • (String)

    IPv4 address for the managed interface



64
65
66
# File 'lib/linux_admin/network_interface.rb', line 64

def address
  @network_conf[:address]
end

#address6(scope = :global) ⇒ String

Retrieve the IPv6 address assigned to the interface

Returns:

  • (String)

    IPv6 address for the managed interface

Raises:

  • (ArgumentError)

    if the given scope is not ‘:global` or `:link`



72
73
74
75
76
77
78
79
80
81
# File 'lib/linux_admin/network_interface.rb', line 72

def address6(scope = :global)
  case scope
  when :global
    @network_conf[:address6_global]
  when :link
    @network_conf[:address6_link]
  else
    raise ArgumentError, "Unrecognized address scope #{scope}"
  end
end

#gatewayString

Retrieve the IPv4 default gateway associated with the interface

Returns:

  • (String)

    IPv4 gateway address



114
115
116
# File 'lib/linux_admin/network_interface.rb', line 114

def gateway
  @network_conf[:gateway]
end

#mac_addressString

Retrieve the MAC address associated with the interface

Returns:

  • (String)

    the MAC address



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

def mac_address
  @network_conf[:mac]
end

#netmaskString

Retrieve the IPv4 sub-net mask assigned to the interface

Returns:

  • (String)

    IPv4 netmask



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

def netmask
  @network_conf[:mask]
end

#netmask6(scope = :global) ⇒ String

Retrieve the IPv6 sub-net mask assigned to the interface

Returns:

  • (String)

    IPv6 netmask

Raises:

  • (ArgumentError)

    if the given scope is not ‘:global` or `:link`



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

def netmask6(scope = :global)
  if scope == :global
    @network_conf[:mask6_global]
  elsif scope == :link
    @network_conf[:mask6_link]
  else
    raise ArgumentError, "Unrecognized address scope #{scope}"
  end
end

#reloadBoolean

Gathers current network information for this interface

Returns:

  • (Boolean)

    true if network information was gathered successfully

Raises:



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/linux_admin/network_interface.rb', line 44

def reload
  @network_conf = {}
  return false unless (ip_output = ip_show)

  parse_ip4(ip_output)
  parse_ip6(ip_output, :global)
  parse_ip6(ip_output, :link)

  @network_conf[:mac] = parse_ip_output(ip_output, %r{link/ether}, 1)

  ip_route_res = Common.run!(Common.cmd("ip"), :params => ["route"])
  @network_conf[:gateway] = parse_ip_output(ip_route_res.output, /^default/, 2) if ip_route_res.success?
  true
rescue AwesomeSpawn::CommandResultError => e
  raise NetworkInterfaceError.new(e.message, e.result)
end

#startBoolean

Brings up the network interface

Returns:

  • (Boolean)

    whether the command succeeded or not



121
122
123
# File 'lib/linux_admin/network_interface.rb', line 121

def start
  Common.run(Common.cmd("ifup"), :params => [@interface]).success?
end

#stopBoolean

Brings down the network interface

Returns:

  • (Boolean)

    whether the command succeeded or not



128
129
130
# File 'lib/linux_admin/network_interface.rb', line 128

def stop
  Common.run(Common.cmd("ifdown"), :params => [@interface]).success?
end