summaryrefslogtreecommitdiffstats
path: root/cobbler/item_network.py
diff options
context:
space:
mode:
authorJohn Eckersberg <jeckersb@redhat.com>2009-02-09 14:29:31 -0500
committerJohn Eckersberg <jeckersb@redhat.com>2009-03-13 13:52:34 -0400
commitbfdd7754c875ae8ff88471f58d5238b82760f33e (patch)
treec61c94e3d0f0748eb9ca4d421040719886266884 /cobbler/item_network.py
parent34cdbe58d22b842eab7b2284e1a0d9bbe9de240c (diff)
downloadcobbler-bfdd7754c875ae8ff88471f58d5238b82760f33e.tar.gz
cobbler-bfdd7754c875ae8ff88471f58d5238b82760f33e.tar.xz
cobbler-bfdd7754c875ae8ff88471f58d5238b82760f33e.zip
broken state!
Diffstat (limited to 'cobbler/item_network.py')
-rw-r--r--cobbler/item_network.py60
1 files changed, 53 insertions, 7 deletions
diff --git a/cobbler/item_network.py b/cobbler/item_network.py
index 0c784add..8acfa6d6 100644
--- a/cobbler/item_network.py
+++ b/cobbler/item_network.py
@@ -88,12 +88,6 @@ 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)):
@@ -103,6 +97,51 @@ class Network(item.Item):
break
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 add_interface(self, system, interface):
+ ip = interface['ip_address']
+ if ip == 'auto' or ip == '' or ip == None:
+ return self.add_auto_interface(system, interface)
+
+ ip = _IP(ip)
+ if ip not in self.cidr:
+ raise CX(_("Address (%s) not in %s (%s)" % (ip,
+ self.name,
+ self.cidr)))
+ available = False
+ for block in self.free_addresses:
+ if ip in block:
+ available = True
+ break
+ if not available:
+ raise CX(_("Address %s is not free in network %s" % (ip, self.name)))
+
+ self.used_addresses.append(ip)
+ print self.used_addresses
+ self.update_free()
+ print self.used_addresses
+
+ def sync(self, action):
+ if action == 'add':
+ self.add_existing_interfaces()
+ elif action == 'edit':
+ # horribly inefficient
+ self.remove_existing_interfaces()
+ self.add_existing_interfaces()
+ elif action == 'remove':
+ self.remove_existing_interfaces()
+
+ self.update_free()
+
def update_free(self):
free = [self.cidr]
@@ -125,12 +164,19 @@ class Network(item.Item):
def is_valid(self):
"""
- A network is valid if it has a name and a CIDR
+ A network is valid if:
+ * it has a name and a CIDR
+ * it does not overlap another network
"""
if self.name is None:
raise CX(_("name is required"))
if self.cidr is None:
raise CX(_("cidr is required"))
+ for other in self.config.networks():
+ if other.name == self.name:
+ continue
+ if self.cidr in other.cidr or other.cidr in self.cidr:
+ raise CX(_("cidr %s overlaps with network %s (%s)" % (self.cidr, other.name, other.cidr)))
return True
def to_datastruct(self):