コード例 #1
0
    def iterate_until_finished(self):
        """
            Go through all objects and solve them
            one after another
        """

        objects_changed = True

        while objects_changed:
            # Check for cycles as early as possible.
            has_cycle, path = self._validate_dependencies()
            if has_cycle:
                raise cdist.UnresolvableRequirementsError(
                    "Cycle detected in object dependencies:\n{}!".format(
                        " -> ".join(path)))
            objects_changed = self.iterate_once()

        # Check whether all objects have been finished
        unfinished_objects = []
        for cdist_object in self.object_list():
            if not cdist_object.state == cdist_object.STATE_DONE:
                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 = "\n        ".join(requirement_names)
                autorequire = "\n        ".join(autorequire_names)
                info_string.append(
                    ("%s requires:\n"
                     "        %s\n"
                     "%s "
                     "autorequires:\n"
                     "        %s" % (cdist_object.name, requirements,
                                     cdist_object.name, autorequire)))

            raise cdist.UnresolvableRequirementsError(
                ("The requirements of the following objects could not be "
                 "resolved:\n%s") % ("\n".join(info_string)))
コード例 #2
0
ファイル: config.py プロジェクト: ponyville/cdist
    def iterate_until_finished(self):
        """
            Go through all objects and solve them
            one after another
        """

        objects_changed = True

        while objects_changed:
            objects_changed = self.iterate_once()

        # Check whether all objects have been finished
        unfinished_objects = []
        for cdist_object in self.object_list():
            if not cdist_object.state == cdist_object.STATE_DONE:
                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 = "\n        ".join(requirement_names)
                autorequire = "\n        ".join(autorequire_names)
                info_string.append(
                    ("%s requires:\n"
                     "        %s\n"
                     "%s "
                     "autorequires:\n"
                     "        %s" % (cdist_object.name, requirements,
                                     cdist_object.name, autorequire)))

            raise cdist.UnresolvableRequirementsError(
                ("The requirements of the following objects could not be "
                 "resolved:\n%s") % ("\n".join(info_string)))