summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Eckersberg <jeckersb@redhat.com>2009-03-04 19:58:50 -0500
committerJohn Eckersberg <jeckersb@redhat.com>2009-03-13 13:52:35 -0400
commitd00a649ee114aa12f7bf8f5304dd4db00fd12221 (patch)
treeb3e73a690a939dc7fb8b7b2fa38b72a6e0b25e4a
parente4923bec0d0ecf7f3f50b80491d4b990cf8cfe53 (diff)
downloadcobbler-d00a649ee114aa12f7bf8f5304dd4db00fd12221.tar.gz
cobbler-d00a649ee114aa12f7bf8f5304dd4db00fd12221.tar.xz
cobbler-d00a649ee114aa12f7bf8f5304dd4db00fd12221.zip
store used_addresses as a dict, makes things way more simple and efficient too
-rw-r--r--cobbler/item_network.py45
1 files changed, 21 insertions, 24 deletions
diff --git a/cobbler/item_network.py b/cobbler/item_network.py
index 1f300b5b..1c180891 100644
--- a/cobbler/item_network.py
+++ b/cobbler/item_network.py
@@ -44,7 +44,7 @@ class Network(item.Item):
self.broadcast = None
self.nameservers = []
self.reserved = []
- self.used_addresses = []
+ self.used_addresses = {}
self.free_addresses = []
self.comment = ""
@@ -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 = 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', '')
@@ -104,10 +104,10 @@ class Network(item.Item):
"""
Get the address in the network assigned to an interface of a system.
"""
- for item in self.used_addresses:
- if item['system'] == system and item['intf'] == intf:
- return str(item['ip'])
- return None
+ try:
+ return str(self.used_addresses[(system, intf)])
+ except KeyError:
+ return None
def subscribe_system(self, system, intf, ip=None):
"""
@@ -160,27 +160,25 @@ class Network(item.Item):
self.free_addresses = self._subtract_and_flatten(self.free_addresses, [addr])
self.free_addresses.sort()
- def _add_to_used(self, used_dict):
+ def _add_to_used(self, system, intf, addr):
"""
- Take used_dict and append it onto used_addresses. Make sure
- no duplicates make it in.
+ Add system,intf with address to used_addresses. Make sure no
+ entry already exists.
"""
- if self.used_addresses != []:
+ if (system, intf) in 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)
+ raise CX(_("Trying to add %s to used_addresses but is already there!" % i))
+
+ self.used_addresses[(system,intf)] = addr
def _remove_from_used(self, addr):
"""
Take addr off of the list of used addresses
"""
- for d in self.used_addresses:
- if d['ip'] == addr:
- index = self.used_addresses.index(d)
- del(self.used_addresses[index])
+ for k,v in self.used_addresses.iteritems():
+ if v == addr:
+ del(self.used_addresses[k])
def _allocate_address(self, system, intf, addr):
"""
@@ -189,7 +187,7 @@ class Network(item.Item):
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, 'system': system, 'intf': intf})
+ self._add_to_used(system, intf, addr)
def _subtract_and_flatten(self, cidr_list, remove_list):
"""
@@ -273,14 +271,13 @@ class Network(item.Item):
return True
def to_datastruct(self):
- def convert_used_addresses(l):
+ def convert_used_addresses(d):
"""
used_addresses is a bit more involved...
"""
- stringified = []
- for item in l:
- item['ip'] = str(item['ip'])
- stringified.append(item)
+ stringified = {}
+ for k,v in d.iteritems():
+ stringified[k] = str(v)
return stringified
return {