diff options
author | John Eckersberg <jeckersb@redhat.com> | 2009-01-11 16:40:35 -0500 |
---|---|---|
committer | John Eckersberg <jeckersb@redhat.com> | 2009-03-13 13:52:33 -0400 |
commit | 8b6eb8547c6c9f680dc1657759668d33a990e399 (patch) | |
tree | f890d23c863c6f53c2a09ddff6a8c35b00cad86f | |
parent | 2cfbb55145b68cc9c91f2511d4f766a1cb96b1fd (diff) | |
download | cobbler-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.py | 62 | ||||
-rw-r--r-- | cobbler/modules/cli_network.py | 2 |
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) |