class Bandshell::StaticAddressing

Static IPv4 addressing. We use the IPAddress gem to validate that the address information is vaguely correct (weeding out errors like the gateway being on another subnet)

Attributes

address[RW]
gateway[RW]
nameservers[RW]
netmask[RW]

Public Class Methods

description() click to toggle source
# File lib/bandshell/netconfig.rb, line 351
def self.description
  "Static Addressing"
end
new(args={}) click to toggle source
# File lib/bandshell/netconfig.rb, line 314
def initialize(args={})
  @nameservers = args['nameservers']
  @address = args['address']
  @netmask = args['netmask']
  @gateway = args['gateway']
end

Public Instance Methods

addressing_type() click to toggle source
# File lib/bandshell/netconfig.rb, line 321
def addressing_type
  'static'
end
args() click to toggle source
# File lib/bandshell/netconfig.rb, line 325
def args
  {
    'address' => @address,
    'netmask' => @netmask,
    'gateway' => @gateway,
    'nameservers' => @nameservers
  }
end
interfaces_lines() click to toggle source
# File lib/bandshell/netconfig.rb, line 334
def interfaces_lines
  [
    "address #{@address}",
    "netmask #{@netmask}",
    "gateway #{@gateway}"
  ]
end
nameservers_flat() click to toggle source
# File lib/bandshell/netconfig.rb, line 398
def nameservers_flat
  @nameservers.join(',')
end
nameservers_flat=(separated_list) click to toggle source

These next two methods are for the web interface, where it’s more convenient to enter a bunch of nameservers on one line than to have to deal with an array of fields.

# File lib/bandshell/netconfig.rb, line 386
def nameservers_flat=(separated_list)
  servers = separated_list.strip.split(/\s*[,|:;\s]\s*/)
  servers.each do |server|
    server.strip!
    p server
    if not IPAddress.valid? server
      fail "One or more invalid IP addresses in nameserver list"
    end
  end
  @nameservers = servers
end
safe_assign() click to toggle source
# File lib/bandshell/netconfig.rb, line 357
def safe_assign
  [ :address, :netmask, :gateway, :nameservers_flat ]
end
validate() click to toggle source
# File lib/bandshell/netconfig.rb, line 361
def validate
  @address.strip!
  @netmask.strip!
  @gateway.strip!

  if not IPAddress.valid_ipv4?(@address)
    fail "Static address is invalid"
  end

  p @netmask
  if not IPAddress.valid_ipv4_netmask?(@netmask)
    fail "Static netmask is invalid"
  end

  p @netmask
  subnet = IPAddress::IPv4.new(@address)
  subnet.netmask = @netmask
  if not subnet.include? IPAddress::IPv4.new(gateway)
    fail "Gateway provided is unreachable"
  end
end
write_configs() click to toggle source
# File lib/bandshell/netconfig.rb, line 343
def write_configs
  File.open('/etc/resolv.conf','w') do |resolvconf|
    @nameservers.each do |nameserver|
      resolvconf.puts("nameserver #{nameserver}");
    end
  end
end