merge back the dependency resolver into pseudo master
Signed-off-by: Nico Schottelius <nico@brief.schottelius.org>
This commit is contained in:
		
					parent
					
						
							
								06fb7491fa
							
						
					
				
			
			
				commit
				
					
						d1e06504a2
					
				
			
		
					 1 changed files with 8 additions and 44 deletions
				
			
		| 
						 | 
					@ -134,49 +134,13 @@ class ConfigInstall(object):
 | 
				
			||||||
        """The final (and real) step of deployment"""
 | 
					        """The final (and real) step of deployment"""
 | 
				
			||||||
        self.log.info("Generating and executing code")
 | 
					        self.log.info("Generating and executing code")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # FIXME: think about parallel execution (same for stage_prepare)
 | 
					        objects = core.CdistObject.list_objects(
 | 
				
			||||||
        self.all_resolved = False
 | 
					            self.local.object_path,
 | 
				
			||||||
        while not self.all_resolved:
 | 
					            self.local.type_path)
 | 
				
			||||||
            self.stage_run_iterate()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def stage_run_iterate(self):
 | 
					        dependency_resolver = resolver.DependencyResolver(objects)
 | 
				
			||||||
        """
 | 
					        self.log.debug(pprint.pformat(dependency_resolver.dependencies))
 | 
				
			||||||
        Run one iteration of the run
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        To be repeated until all objects are done
 | 
					        for cdist_object in dependency_resolver:
 | 
				
			||||||
        """
 | 
					            self.log.debug("Run object: %s", cdist_object)
 | 
				
			||||||
        objects = list(core.CdistObject.list_objects(self.context.local.object_path, self.context.local.type_path))
 | 
					            self.object_run(cdist_object)
 | 
				
			||||||
        object_state_list=' '.join('%s:%s:%s:%s' % (o, o.state, o.all_requirements, o.satisfied_requirements) for o in objects)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.log.debug("Object state (name:state:requirements:satisfied): %s" % object_state_list)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        objects_changed = False
 | 
					 | 
				
			||||||
        self.all_resolved = True
 | 
					 | 
				
			||||||
        for cdist_object in objects:
 | 
					 | 
				
			||||||
            if not cdist_object.state == cdist_object.STATE_DONE:
 | 
					 | 
				
			||||||
                self.all_resolved = False
 | 
					 | 
				
			||||||
                self.log.debug("Object %s not done" % cdist_object.name)
 | 
					 | 
				
			||||||
                if cdist_object.satisfied_requirements:
 | 
					 | 
				
			||||||
                    self.log.debug("Running object %s with satisfied requirements" % cdist_object.name)
 | 
					 | 
				
			||||||
                    self.object_run(cdist_object, self.dry_run)
 | 
					 | 
				
			||||||
                    objects_changed = True
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.log.debug("All resolved: %s Objects changed: %s" % (self.all_resolved, objects_changed))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Not all are resolved, but nothing has been changed => bad dependencies!
 | 
					 | 
				
			||||||
        if not objects_changed and not self.all_resolved:
 | 
					 | 
				
			||||||
            # Create list of unfinished objects + their requirements for print
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            evil_objects = []
 | 
					 | 
				
			||||||
            good_objects = []
 | 
					 | 
				
			||||||
            for cdist_object in objects:
 | 
					 | 
				
			||||||
                if not cdist_object.state == cdist_object.STATE_DONE:
 | 
					 | 
				
			||||||
                    evil_objects.append("%s: required: %s, autorequired: %s" %
 | 
					 | 
				
			||||||
                        (cdist_object.name, cdist_object.requirements, cdist_object.autorequire))
 | 
					 | 
				
			||||||
                else:
 | 
					 | 
				
			||||||
                    evil_objects.append("%s (%s): required: %s, autorequired: %s" %
 | 
					 | 
				
			||||||
                        (cdist_object.state, cdist_object.name, 
 | 
					 | 
				
			||||||
                        cdist_object.requirements, cdist_object.autorequire))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            errormessage = "Cannot solve requirements for the following objects: %s - solved: %s" % (",".join(evil_objects), ",".join(good_objects))
 | 
					 | 
				
			||||||
            raise cdist.Error(errormessage)
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue