Class: Dcmgr::Models::Network

Inherits:
AccountResource show all
Defined in:
lib/dcmgr/models/network.rb

Overview

IP network definitions.

Defined Under Namespace

Modules: IpLeaseMethods

Constant Summary

Constants inherited from BaseNew

BaseNew::LOCK_TABLES_KEY

Instance Method Summary collapse

Methods inherited from AccountResource

#account

Methods inherited from BaseNew

Proxy, dataset, default_row_lock_mode=, install_data, install_data_hooks, lock!, unlock!, #with_timestamps?

Instance Method Details

#add_reserved(ipaddr) ⇒ Object

register reserved IP address in this network



100
101
102
# File 'lib/dcmgr/models/network.rb', line 100

def add_reserved(ipaddr)
  add_ip_lease(:ipv4=>ipaddr, :type=>IpLease::TYPE_RESERVED)
end

#available_ip_numsObject



104
105
106
# File 'lib/dcmgr/models/network.rb', line 104

def available_ip_nums
  self.ipaddress.hosts.size - self.ip_lease_dataset.count
end

#before_destroyObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/dcmgr/models/network.rb', line 65

def before_destroy
  #Make sure no other networks are natted to this one
  Network.filter(:nat_network_id => self[:id]).each { |n|
    n.nat_network_id = nil
    n.save
  }
  
  #Delete all reserved ipleases in this network
  self.ip_lease_dataset.filter(:alloc_type => IpLease::TYPE_RESERVED).each { |i|
    i.destroy
  }
  
  super
end

#include?(ipaddr) ⇒ Boolean

check if the given IP addess is in the range of this network.

Parameters:

  • ipaddr (String)

    IP address

Returns:

  • (Boolean)


94
95
96
97
# File 'lib/dcmgr/models/network.rb', line 94

def include?(ipaddr)
  ipaddr = ipaddr.is_a?(IPAddress::IPv4) ? ipaddr : IPAddress::IPv4.new(ipaddr)
  self.ipaddress.network.include?(ipaddr)
end

#ipaddressObject



88
89
90
# File 'lib/dcmgr/models/network.rb', line 88

def ipaddress
  IPAddress::IPv4.new("#{self.ipv4_gw}/#{self.prefix}")
end

#nat_networkObject



84
85
86
# File 'lib/dcmgr/models/network.rb', line 84

def nat_network
  Network.find(:id => self.nat_network_id)
end

#to_api_documentObject



80
81
82
# File 'lib/dcmgr/models/network.rb', line 80

def to_api_document
  to_hash
end

#to_hashObject



55
56
57
58
59
60
61
62
63
# File 'lib/dcmgr/models/network.rb', line 55

def to_hash
  h = super
  h.delete(:vlan_lease_id)
  h.merge({
            :bandwidth_mark=>self[:id],
            :description=>description.to_s,
            :vlan_id => vlan_lease.nil? ? 0 : vlan_lease.tag_id,
          })
end

#validateObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/dcmgr/models/network.rb', line 40

def validate
  super
  
  # validate ipv4 syntax
  begin
    IPAddress::IPv4.new("#{self.ipv4_gw}")
  rescue => e
    errors.add(:ipv4_gw, "Invalid IP address syntax: #{self.ipv4_gw}")
  end

  unless (1..31).include?(self.prefix.to_i)
    errors.add(:prefix, "prefix must be 1-31: #{self.prefix}")
  end
end