summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cobbler/action_litesync.py2
-rw-r--r--cobbler/collection.py22
-rw-r--r--cobbler/item.py29
-rw-r--r--cobbler/item_distro.py4
-rw-r--r--cobbler/item_profile.py2
-rw-r--r--cobbler/item_system.py2
6 files changed, 50 insertions, 11 deletions
diff --git a/cobbler/action_litesync.py b/cobbler/action_litesync.py
index 8828daa..ded0543 100644
--- a/cobbler/action_litesync.py
+++ b/cobbler/action_litesync.py
@@ -95,7 +95,7 @@ class BootLiteSync:
# get the system object:
system = self.systems.find(name)
if system is None:
- raise CX(_("error in system lookup"))
+ raise CX(_("error in system lookup for %s") % name)
# rebuild system_list file in webdir
self.sync.regen_ethers() # /etc/ethers, for dnsmasq & rarpd
self.sync.regen_hosts() # /var/lib/cobbler/cobbler_hosts, pretty much for dnsmasq
diff --git a/cobbler/collection.py b/cobbler/collection.py
index 6a8c787..a6a3991 100644
--- a/cobbler/collection.py
+++ b/cobbler/collection.py
@@ -60,10 +60,11 @@ class Collection(serializable.Serializable):
no objects can be found.
"""
n1 = name.lower()
- for key in self.listing.keys():
- if key.lower() == n1:
- return self.listing[key]
- return None
+ listing = self.listing
+ if listing.has_key(n1):
+ return self.listing[n1]
+ else:
+ return None
def to_datastruct(self):
"""
@@ -99,13 +100,15 @@ class Collection(serializable.Serializable):
raise CX(_("invalid parameter"))
if not with_copy:
# don't need to run triggers, so add it already ...
- self.listing[ref.name] = ref
+ self.listing[ref.name.lower()] = ref
+
# perform filesystem operations
if with_copy:
# failure of a pre trigger will prevent the object from being added
self._run_triggers(ref,"/var/lib/cobbler/triggers/add/%s/pre/*" % self.collection_type())
- self.listing[ref.name] = ref
+ self.listing[ref.name.lower()] = ref
+ self.config.api.serialize()
lite_sync = action_litesync.BootLiteSync(self.config)
if isinstance(ref, item_system.System):
lite_sync.add_single_system(ref.name)
@@ -117,9 +120,12 @@ class Collection(serializable.Serializable):
print _("Internal error. Object type not recognized: %s") % type(ref)
# save the tree, so if neccessary, scripts can examine it.
- self.config.api.serialize()
self._run_triggers(ref,"/var/lib/cobbler/triggers/add/%s/post/*" % self.collection_type())
-
+
+ # update children cache in parent object
+ parent = ref.get_parent()
+ if parent != None:
+ parent.children[ref.name] = ref
return True
diff --git a/cobbler/item.py b/cobbler/item.py
index 8ce2994..f746491 100644
--- a/cobbler/item.py
+++ b/cobbler/item.py
@@ -27,10 +27,39 @@ class Item(serializable.Serializable):
self.config = config
self.settings = self.config._settings
self.clear()
+ self.children = {}
def clear(self):
raise exceptions.NotImplementedError
+ def get_children(self):
+ """
+ Get direct children of this object.
+
+ FIXME: testing
+ """
+ keys = self.children.keys()
+ keys.sort()
+ results = []
+ for k in keys:
+ results.append(self.children[k])
+ return results
+
+ def get_descendants(self):
+ """
+ Get objects that depend on this object, i.e. those that
+ would be affected by a cascading delete, etc.
+
+ FIXME: testing
+ """
+ results = []
+ kids = self.get_children()
+ results.extend(kids)
+ for kid in kids:
+ grandkids = kid.get_descendants()
+ results.extend(grandkids)
+ return results
+
def get_parent(self):
"""
For objects with a tree relationship, what's the parent object?
diff --git a/cobbler/item_distro.py b/cobbler/item_distro.py
index b36b9d5..a6de931 100644
--- a/cobbler/item_distro.py
+++ b/cobbler/item_distro.py
@@ -49,7 +49,6 @@ class Distro(item.Item):
"""
return None
-
def from_datastruct(self,seed_data):
"""
Modify this object to take on values in seed_data
@@ -175,5 +174,8 @@ class Distro(item.Item):
buf = buf + _("architecture : %s\n") % self.arch
buf = buf + _("ks metadata : %s\n") % self.ks_meta
buf = buf + _("breed : %s\n") % self.breed
+ # FIXME: temporary
+ buf = buf + _("children : %s\n") % self.get_children()
+ buf = buf + _("descendants : %s\n") % self.get_descendants()
return buf
diff --git a/cobbler/item_profile.py b/cobbler/item_profile.py
index c107865..491e346 100644
--- a/cobbler/item_profile.py
+++ b/cobbler/item_profile.py
@@ -190,5 +190,7 @@ class Profile(item.Item):
buf = buf + _("virt file size : %s\n") % self.virt_file_size
buf = buf + _("virt ram : %s\n") % self.virt_ram
buf = buf + _("repos : %s\n") % self.repos
+ # FIXME: testing only
+ buf = buf + _("children: : %s\n") % self.get_children()
return buf
diff --git a/cobbler/item_system.py b/cobbler/item_system.py
index 8c6021f..fef76ea 100644
--- a/cobbler/item_system.py
+++ b/cobbler/item_system.py
@@ -80,7 +80,7 @@ class System(item.Item):
"""
Return object next highest up the tree.
"""
- return self.config.distros().find(self.distro_name)
+ return self.config.profiles().find(self.profile)
def set_name(self,name):
"""