summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Eckersberg <jeckersb@redhat.com>2009-03-01 11:43:44 -0500
committerJohn Eckersberg <jeckersb@redhat.com>2009-03-13 13:52:34 -0400
commit2b444e6b29033ec76c89e74dde890bef0c155a25 (patch)
tree99440fbf5faeed27364986ac223e9e231d59912d
parentf39d3c6de718a49c503f03269507f609cb1329ef (diff)
downloadcobbler-2b444e6b29033ec76c89e74dde890bef0c155a25.tar.gz
cobbler-2b444e6b29033ec76c89e74dde890bef0c155a25.tar.xz
cobbler-2b444e6b29033ec76c89e74dde890bef0c155a25.zip
Adding a system to a network actually kinda works at this point
-rw-r--r--cobbler/item_network.py51
-rw-r--r--cobbler/item_system.py2
2 files changed, 39 insertions, 14 deletions
diff --git a/cobbler/item_network.py b/cobbler/item_network.py
index 866643bb..3d83680a 100644
--- a/cobbler/item_network.py
+++ b/cobbler/item_network.py
@@ -56,7 +56,7 @@ class Network(item.Item):
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.used_addresses = 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', '')
@@ -100,14 +100,49 @@ class Network(item.Item):
def set_reserved(self, reserved):
pass
+ def subscribe_system(self, uid, intf, ip=None):
+ if not ip:
+ if self.free_address_count() == 0:
+ raise CX(_("Network %s has no free addresses" % self.cidr))
+ ip = self.free_addresses[0][0]
+
+ self._allocate_address(uid, intf, ip)
+
+ def _addr_available(self, addr):
+ for cidr in self.free_addresses:
+ if addr in cidr:
+ return True
+ return False
+
def _remove_from_free(self, addr):
self.free_addresses = self._subtract_and_flatten(self.free_addresses, [addr])
+ def _add_to_used(self, used_dict):
+ if self.used_addresses != []:
+ # should really throw an error if it's already there
+ # probably a sign something has gone wrong elsewhere
+ for i in [foo['ip'] for foo in self.used_addresses]:
+ if used_dict['ip'] == i:
+ raise CX(_("Trying to add %s to used_addresses but is already there!" % i))
+ self.used_addresses.append(used_dict)
+
+ def _remove_from_used(self, addr):
+ for d in self.used_addresses:
+ if d['ip'] == addr:
+ index = self.used_addresses.index(d)
+ del(self.used_addresses[index])
+
+ def _allocate_address(self, uid, intf, addr):
+ if not self._addr_available(addr):
+ raise CX(_("Address %s is not available for allocation" % addr))
+ self._remove_from_free(addr)
+ self._add_to_used({'ip': addr, 'uid': uid, 'intf': intf})
+
def _subtract_and_flatten(self, cidr_list, remove_list):
- print "cidr_list ", cidr_list, "remove_list", remove_list
+# print "cidr_list ", cidr_list, "remove_list", remove_list
for item in remove_list:
for i in range(len(cidr_list)):
- print 'i=%d, cidr_list[i]=%s' % (i, cidr_list[i])
+# print 'i=%d, cidr_list[i]=%s' % (i, cidr_list[i])
if item in cidr_list[i]:
cidr_list += cidr_list[i] - item
del(cidr_list[i])
@@ -153,16 +188,6 @@ class Network(item.Item):
return cidr_list
- def add_existing_interfaces(self):
- for s in self.config.systems():
- for i in s.interfaces:
- pass
-
- def remove_existing_interfaces(self):
- for s in self.config.systems():
- for i in s.interfaces:
- pass
-
def used_address_count(self):
return len(self.used_addresses)
diff --git a/cobbler/item_system.py b/cobbler/item_system.py
index dd10fc2d..d109c085 100644
--- a/cobbler/item_system.py
+++ b/cobbler/item_system.py
@@ -435,7 +435,7 @@ class System(item.Item):
net = self.config.networks().find(name=network)
if net == None:
raise CX(_("Network %s does not exist" % network))
- net.add_interface(self, intf)
+ net.subscribe_system(self.uid, interface, intf['ip_address'])
self.config.serialize() # explicitly save the modified net
def set_ip_address(self,address,interface):