fix execution order - seems to be fine now

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
This commit is contained in:
Nico Schottelius 2013-04-30 15:07:27 +02:00
commit 85d24ce259
3 changed files with 34 additions and 28 deletions

View file

@ -106,7 +106,7 @@ class ConfigInstall(object):
objects_changed = False
for cdist_object in self.object_list():
if not cdist_object.requirements_satisfied(cdist_object.requirements):
if cdist_object.requirements_unfinished(cdist_object.requirements):
"""We cannot do anything for this poor object"""
continue
@ -116,22 +116,40 @@ class ConfigInstall(object):
self.object_prepare(cdist_object)
objects_changed = True
if not cdist_object.requirements_satisfied(cdist_object.autorequire):
if cdist_object.requirements_unfinished(cdist_object.autorequire):
"""The previous step created objects we depend on - wait for them"""
continue
if cdist_object.state == core.CdistObject.STATE_PREPARED:
self.object_run(cdist_object)
objects_changed = True
# Check whether all objects have been finished
unfinished_object_names = []
unfinished_objects = []
for cdist_object in self.object_list():
if not cdist_object.state == cdist_object.STATE_DONE:
unfinished_object_names.append(cdist_object.name)
unfinished_objects.append(cdist_object)
if unfinished_objects:
info_string = []
for cdist_object in unfinished_objects:
requirement_names = []
autorequire_names = []
for requirement in cdist_object.requirements_unfinished(cdist_object.requirements):
requirement_names.append(requirement.name)
for requirement in cdist_object.requirements_unfinished(cdist_object.autorequire):
autorequire_names.append(requirement.name)
requirements = ", ".join(requirement_names)
autorequire = ", ".join(autorequire_names)
info_string.append("%s requires: %s autorequires: %s" % (cdist_object.name, requirements, autorequire))
if unfinished_object_names:
raise cdist.Error("The following objects could not be resolved: %s" %
(" ".join(unfinished_object_names)))
("; ".join(info_string)))
######################################################################
# Stages based code

View file

@ -224,35 +224,18 @@ class CdistObject(object):
except EnvironmentError as error:
raise cdist.Error('Error creating directories for cdist object: %s: %s' % (self, error))
def requirements_satisfied(self, requirements):
def requirements_unfinished(self, requirements):
"""Return state whether normal depedencies are satisfied"""
satisfied = True
object_list = []
for requirement in requirements:
cdist_object = self.object_from_name(requirement)
if not cdist_object.state == self.STATE_DONE:
satisfied = False
break
log.debug("%s is satisfied: %s" % (self.name, satisfied))
return satisfied
@property
def all_requirements(self):
"""
Return resolved autorequirements and requirements so that
a complete list of requirements is returned
"""
all_reqs= []
all_reqs.extend(self.find_requirements_by_name(self.requirements))
all_reqs.extend(self.find_requirements_by_name(self.autorequire))
return set(all_reqs)
object_list.append(cdist_object)
return object_list
class RequirementNotFoundError(cdist.Error):
def __init__(self, requirement):