summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Eckersberg <jeckersb@redhat.com>2009-01-11 16:40:35 -0500
committerJohn Eckersberg <jeckersb@redhat.com>2009-03-13 13:52:33 -0400
commit8b6eb8547c6c9f680dc1657759668d33a990e399 (patch)
treef890d23c863c6f53c2a09ddff6a8c35b00cad86f
parent2cfbb55145b68cc9c91f2511d4f766a1cb96b1fd (diff)
downloadcobbler-8b6eb8547c6c9f680dc1657759668d33a990e399.tar.gz
cobbler-8b6eb8547c6c9f680dc1657759668d33a990e399.tar.xz
cobbler-8b6eb8547c6c9f680dc1657759668d33a990e399.zip
committing and pushing cause paul told us to go home and stop hacking :)
-rw-r--r--cobbler/item_network.py62
-rw-r--r--cobbler/modules/cli_network.py2
2 files changed, 52 insertions, 12 deletions
diff --git a/cobbler/item_network.py b/cobbler/item_network.py
index a367abd5..9bca6acf 100644
--- a/cobbler/item_network.py
+++ b/cobbler/item_network.py
@@ -50,14 +50,14 @@ class Network(item.Item):
def from_datastruct(self,seed_data):
self.name = self.load_item(seed_data, 'name')
- self.cidr = self.load_item(seed_data, 'cidr')
- self.address = self.load_item(seed_data, 'address', self.cidr[0])
- self.gateway = self.load_item(seed_data, 'gateway', self.cidr[-2])
- self.broadcast = self.load_item(seed_data, 'broadcast', self.cidr[-1])
- self.nameservers = self.load_item(seed_data, 'nameservers', [])
- self.reserved = self.load_item(seed_data, 'reserved', [])
- self.used_addresses = self.load_item(seed_data, 'used_addresses', [])
- self.free_addresses = self.load_item(seed_data, 'free_addresses', [])
+ self.cidr = _CIDR(self.load_item(seed_data, 'cidr'))
+ self.address = _IP(self.load_item(seed_data, 'address', self.cidr[0]))
+ self.gateway = _IP(self.load_item(seed_data, 'gateway', self.cidr[-2]))
+ self.broadcast = _IP(self.load_item(seed_data, 'broadcast', self.cidr[-1]))
+ self.nameservers = [_IP(i) for i in self.load_item(seed_data, 'nameservers', [])]
+ self.reserved = [_CIDR(c) for c in self.load_item(seed_data, 'reserved', [])]
+ self.used_addresses = [_IP(i) for i in self.load_item(seed_data, 'used_addresses', [])]
+ self.free_addresses = [_CIDR(c) for c in self.load_item(seed_data, 'free_addresses', [])]
self.comment = self.load_item(seed_data, 'comment', '')
return self
@@ -88,6 +88,43 @@ class Network(item.Item):
# def set_free_addresses(self, free_addresses):
# pass
+ def take_new_address(self, address):
+ pass
+
+ def free_address(self, address):
+ pass
+
+ def subtract_and_flatten(self, cidr_list, remove_list):
+ for item in remove_list:
+ for i in range(len(cidr_list)):
+ if item in cidr_list[i]:
+ cidr_list += cidr_list[i] - item
+ del(cidr_list[i])
+ break
+ return cidr_list
+
+ def update_free(self):
+ free = [self.cidr]
+
+ #remove all the taken addresses
+ self.free_addresses = self.subtract_and_flatten(free,
+ self.reserved +
+ self.used_addresses +
+ [self.address] +
+ [self.gateway] +
+ [self.broadcast])
+
+ def used_address_count(self):
+ return len(self.used_addresses)
+
+ def free_address_count(self):
+ for a in self.free_addresses:
+ print type(a)
+ total = 0
+ for item in self.free_addresses:
+ total += len(item)
+ return total
+
def is_valid(self):
"""
A network is valid if it has a name and a CIDR
@@ -115,12 +152,13 @@ class Network(item.Item):
def printable(self):
buf = _("network : %s\n") % self.name
buf = buf + _("CIDR : %s\n") % self.cidr
+ buf = buf + _("gateway : %s\n") % self.gateway
buf = buf + _("network address : %s\n") % self.address
buf = buf + _("broadcast : %s\n") % self.broadcast
- buf = buf + _("nameservers : %s\n") % self.nameservers
- buf = buf + _("reserved : %s\n") % self.reserved
- buf = buf + _("free addresses : %s\n") % len(self.free_addresses)
- buf = buf + _("used addresses : %s\n") % len(self.used_addresses)
+ buf = buf + _("nameservers : %s\n") % [str(i) for i in self.nameservers]
+ buf = buf + _("reserved : %s\n") % [str(i) for i in self.reserved]
+ buf = buf + _("free addresses : %s\n") % self.free_address_count()
+ buf = buf + _("used addresses : %s\n") % self.used_address_count()
buf = buf + _("comment : %s\n") % self.comment
return buf
diff --git a/cobbler/modules/cli_network.py b/cobbler/modules/cli_network.py
index c20a77fc..16575052 100644
--- a/cobbler/modules/cli_network.py
+++ b/cobbler/modules/cli_network.py
@@ -107,6 +107,8 @@ class NetworkFunction(commands.CobblerFunction):
if self.options.comment is not None:
obj.set_comment(self.options.comment)
+ obj.update_free()
+
return self.object_manipulator_finish(obj, self.api.networks, self.options)