def test_topological_sorting(self):
        graph = {
            'D': ['C', 'G'],
            'E': ['A', 'D'],
            'A': [],
            'B': ['A'],
            'C': ['A'],
            'G': []
        }

        order = topological_sorting(graph)
        self.assertEqual(order, ['A', 'B', 'C', 'G', 'D', 'E'])
Пример #2
0
    def test_topological_sorting(self):
        graph = {
            'D': ['C', 'G'],
            'E': ['A', 'D'],
            'A': [],
            'B': ['A'],
            'C': ['A'],
            'G': []
        }

        order = topological_sorting(graph)
        self.assertEqual(order, ['A', 'B', 'C', 'G', 'D', 'E'])
Пример #3
0
    def create_and_start_new_containers(self):
        """Create containers in the right order
        """
        logger.info(u'Started containers creation')
        graph = self.build_dependencies_graph(self.new_release_containers)
        logger.debug(u'Built dependencies graph %s', graph)
        containers_to_creation = utils.topological_sorting(graph)
        logger.debug(u'Resolved creation order %s', containers_to_creation)

        for container_id in containers_to_creation:
            container = self.container_by_id(container_id)
            logger.debug(u'Start container %s', container)

            links = self.get_container_links(container)

            created_container = self.create_container(
                container['image_name'],
                name=container.get('container_name'),
                volumes=container.get('volumes'),
                ports=container.get('ports'),
                detach=False)

            volumes_from = []
            for container_id in container.get('volumes_from', []):
                volume_container = self.container_by_id(container_id)
                volumes_from.append(volume_container['container_name'])

            # NOTE(ikalnitsky):
            #   Conflicting options: --net=host can't be used with links.
            #   Still, we need links at least for resolving containers
            #   start order.
            if container.get('network_mode') == 'host':
                links = None

            self.start_container(
                created_container,
                port_bindings=container.get('port_bindings'),
                links=links,
                volumes_from=volumes_from,
                binds=container.get('binds'),
                network_mode=container.get('network_mode'),
                privileged=container.get('privileged', False))

            if container.get('after_container_creation_command'):
                self.run_after_container_creation_command(container)

            if container.get('supervisor_config'):
                self.start_service_under_supervisor(
                    self.make_service_name(container['id']))
Пример #4
0
    def create_and_start_new_containers(self):
        """Create containers in the right order
        """
        logger.info(u'Started containers creation')
        graph = self.build_dependencies_graph(self.new_release_containers)
        logger.debug(u'Built dependencies graph %s', graph)
        containers_to_creation = utils.topological_sorting(graph)
        logger.debug(u'Resolved creation order %s', containers_to_creation)

        for container_id in containers_to_creation:
            container = self.container_by_id(container_id)
            logger.debug(u'Start container %s', container)

            links = self.get_container_links(container)

            created_container = self.create_container(
                container['image_name'],
                name=container.get('container_name'),
                volumes=container.get('volumes'),
                ports=container.get('ports'),
                detach=False)

            volumes_from = []
            for container_id in container.get('volumes_from', []):
                volume_container = self.container_by_id(container_id)
                volumes_from.append(volume_container['container_name'])

            # NOTE(ikalnitsky):
            #   Conflicting options: --net=host can't be used with links.
            #   Still, we need links at least for resolving containers
            #   start order.
            if container.get('network_mode') == 'host':
                links = None

            self.start_container(created_container,
                                 port_bindings=container.get('port_bindings'),
                                 links=links,
                                 volumes_from=volumes_from,
                                 binds=container.get('binds'),
                                 network_mode=container.get('network_mode'),
                                 privileged=container.get('privileged', False))

            if container.get('after_container_creation_command'):
                self.run_after_container_creation_command(container)
Пример #5
0
    def create_and_start_new_containers(self):
        """Create containers in the right order
        """
        logger.info(u'Started containers creation')
        graph = self.build_dependencies_graph(self.new_release_containers)
        logger.debug(u'Built dependencies graph {0}'.format(graph))
        containers_to_creation = utils.topological_sorting(graph)
        logger.debug(u'Resolved creation order {0}'.format(
            containers_to_creation))

        for container_id in containers_to_creation:
            container = self.container_by_id(container_id)
            logger.debug(u'Start container {0}'.format(container))

            links = self.get_container_links(container)

            created_container = self.create_container(
                container['image_name'],
                name=container.get('container_name'),
                volumes=container.get('volumes'),
                ports=container.get('ports'),
                detach=False)

            volumes_from = []
            for container_id in container.get('volumes_from', []):
                volume_container = self.container_by_id(container_id)
                volumes_from.append(volume_container['container_name'])

            self.start_container(
                created_container,
                port_bindings=container.get('port_bindings'),
                links=links,
                volumes_from=volumes_from,
                binds=container.get('binds'),
                privileged=container.get('privileged', False))

            if container.get('after_container_creation_command'):
                self.run_after_container_creation_command(container)

            if container.get('supervisor_config'):
                self.start_service_under_supervisor(
                    self.make_service_name(container['id']))
                self.clean_iptables_rules(container)