forked from ungleich-public/cdist
		
	factor out iterate code to be able to test it for one, two, ... runs
Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
This commit is contained in:
		
					parent
					
						
							
								c5c5e7b89b
							
						
					
				
			
			
				commit
				
					
						b2686f3b13
					
				
			
		
					 1 changed files with 34 additions and 21 deletions
				
			
		| 
						 | 
					@ -75,32 +75,45 @@ class ConfigInstall(object):
 | 
				
			||||||
                                                         self.context.local.type_path):
 | 
					                                                         self.context.local.type_path):
 | 
				
			||||||
            yield cdist_object
 | 
					            yield cdist_object
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def iterate_once(self):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					            Iterate over the objects once - helper method for 
 | 
				
			||||||
 | 
					            iterate_until_finished
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        objects_changed  = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for cdist_object in self.object_list():
 | 
				
			||||||
 | 
					            if cdist_object.requirements_unfinished(cdist_object.requirements):
 | 
				
			||||||
 | 
					                """We cannot do anything for this poor object"""
 | 
				
			||||||
 | 
					                continue
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            if cdist_object.state == core.CdistObject.STATE_UNDEF:
 | 
				
			||||||
 | 
					                """Prepare the virgin object"""
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					                self.object_prepare(cdist_object)
 | 
				
			||||||
 | 
					                objects_changed = True
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return objects_changed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def iterate_until_finished(self):
 | 
					    def iterate_until_finished(self):
 | 
				
			||||||
        # Continue process until no new objects are created anymore
 | 
					        """
 | 
				
			||||||
 | 
					            Go through all objects and solve them
 | 
				
			||||||
 | 
					            one after another
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        objects_changed = True
 | 
					        objects_changed = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        while objects_changed:
 | 
					        while objects_changed:
 | 
				
			||||||
            objects_changed  = False
 | 
					            objects_changed = self.iterate_once()
 | 
				
			||||||
 | 
					 | 
				
			||||||
            for cdist_object in self.object_list():
 | 
					 | 
				
			||||||
                if cdist_object.requirements_unfinished(cdist_object.requirements):
 | 
					 | 
				
			||||||
                    """We cannot do anything for this poor object"""
 | 
					 | 
				
			||||||
                    continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if cdist_object.state == core.CdistObject.STATE_UNDEF:
 | 
					 | 
				
			||||||
                    """Prepare the virgin object"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    self.object_prepare(cdist_object)
 | 
					 | 
				
			||||||
                    objects_changed = True
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                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
 | 
					        # Check whether all objects have been finished
 | 
				
			||||||
        unfinished_objects = []
 | 
					        unfinished_objects = []
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue