fix execution order - seems to be fine now
Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
This commit is contained in:
		
					parent
					
						
							
								8a7c64f86a
							
						
					
				
			
			
				commit
				
					
						85d24ce259
					
				
			
		
					 3 changed files with 34 additions and 28 deletions
				
			
		| 
						 | 
					@ -106,7 +106,7 @@ class ConfigInstall(object):
 | 
				
			||||||
            objects_changed  = False
 | 
					            objects_changed  = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for cdist_object in self.object_list():
 | 
					            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"""
 | 
					                    """We cannot do anything for this poor object"""
 | 
				
			||||||
                    continue
 | 
					                    continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,22 +116,40 @@ class ConfigInstall(object):
 | 
				
			||||||
                    self.object_prepare(cdist_object)
 | 
					                    self.object_prepare(cdist_object)
 | 
				
			||||||
                    objects_changed = True
 | 
					                    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"""
 | 
					                    """The previous step created objects we depend on - wait for them"""
 | 
				
			||||||
                    continue
 | 
					                    continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if cdist_object.state == core.CdistObject.STATE_PREPARED:
 | 
					                if cdist_object.state == core.CdistObject.STATE_PREPARED:
 | 
				
			||||||
                    self.object_run(cdist_object)
 | 
					                    self.object_run(cdist_object)
 | 
				
			||||||
 | 
					                    objects_changed = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Check whether all objects have been finished
 | 
					        # Check whether all objects have been finished
 | 
				
			||||||
        unfinished_object_names = []
 | 
					        unfinished_objects = []
 | 
				
			||||||
        for cdist_object in self.object_list():
 | 
					        for cdist_object in self.object_list():
 | 
				
			||||||
            if not cdist_object.state == cdist_object.STATE_DONE:
 | 
					            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" %
 | 
					            raise cdist.Error("The following objects could not be resolved: %s" %
 | 
				
			||||||
                (" ".join(unfinished_object_names)))
 | 
					                ("; ".join(info_string)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ###################################################################### 
 | 
					    ###################################################################### 
 | 
				
			||||||
    # Stages based code
 | 
					    # Stages based code
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -224,35 +224,18 @@ class CdistObject(object):
 | 
				
			||||||
        except EnvironmentError as error:
 | 
					        except EnvironmentError as error:
 | 
				
			||||||
            raise cdist.Error('Error creating directories for cdist object: %s: %s' % (self, 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"""
 | 
					        """Return state whether normal depedencies are satisfied"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        satisfied = True
 | 
					        object_list = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for requirement in requirements:
 | 
					        for requirement in requirements:
 | 
				
			||||||
            cdist_object = self.object_from_name(requirement)
 | 
					            cdist_object = self.object_from_name(requirement)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if not cdist_object.state == self.STATE_DONE:
 | 
					            if not cdist_object.state == self.STATE_DONE:
 | 
				
			||||||
                satisfied = False
 | 
					                object_list.append(cdist_object)
 | 
				
			||||||
                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)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return object_list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class RequirementNotFoundError(cdist.Error):
 | 
					class RequirementNotFoundError(cdist.Error):
 | 
				
			||||||
    def __init__(self, requirement):
 | 
					    def __init__(self, requirement):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,4 +36,9 @@ Requirements / Test cases for requirments / resolver:
 | 
				
			||||||
    - omnipotence
 | 
					    - omnipotence
 | 
				
			||||||
    - 
 | 
					    - 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Test
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					ERROR: localhost: The following objects could not be resolved: __cdistmarker/singleton requires  autorequires ; __directory/etc/sudoers.d requires  autorequires ; __file/etc/sudoers.d/nico requires __directory/etc/sudoers.d autorequires ; __file/etc/motd requires  autorequires ; __package_pacman/atop requires  autorequires ; __package_pacman/screen requires  autorequires ; __package_pacman/strace requires  autorequires ; __package_pacman/vim requires  autorequires ; __package_pacman/zsh requires  autorequires ; __package_pacman/lftp requires  autorequires ; __package_pacman/nmap requires  autorequires ; __package_pacman/ntp requires  autorequires ; __package_pacman/rsync requires  autorequires ; __package_pacman/rtorrent requires  autorequires ; __package_pacman/wget requires  autorequires ; __package_pacman/nload requires  autorequires ; __package_pacman/iftop requires  autorequires ; __package_pacman/mosh requires  autorequires ; __package_pacman/git requires  autorequires ; __package_pacman/mercurial requires  autorequires ; __package_pacman/netcat requires  autorequires ; __package_pacman/python-virtualenv requires  autorequires ; __package_pacman/wireshark-cli requires  autorequires ; __package_pacman/sudo requires  autorequires 
 | 
				
			||||||
 | 
					INFO: Total processing time for 1 host(s): 32.30426597595215
 | 
				
			||||||
 | 
					ERROR: Failed to deploy to the following hosts: localhost
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue