diff options
-rw-r--r-- | cobbler/action_litesync.py | 2 | ||||
-rw-r--r-- | cobbler/collection.py | 22 | ||||
-rw-r--r-- | cobbler/item.py | 29 | ||||
-rw-r--r-- | cobbler/item_distro.py | 4 | ||||
-rw-r--r-- | cobbler/item_profile.py | 2 | ||||
-rw-r--r-- | cobbler/item_system.py | 2 |
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): """ |