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'])
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']))
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)
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)