Exemplo n.º 1
0
 def _stop_service(self, container_id):
     docker_api = docker_client.api()
     last_exception = None
     try:
         exec_id = docker_api.exec_create(
             container_id,
             'supervisorctl stop register_in_service_discovery')
         docker_api.exec_start(exec_id['Id'])
     except:
         traceback.print_exc()
     try:
         deregister_services(container_id)
     except:
         traceback.print_exc()
     for i in range(3):
         try:
             docker_api.stop(container_id)
         except Exception as e:
             last_exception = e
             traceback.print_exc()
         if not is_container_running(container_id):
             break
     if is_container_running(container_id):
         get_logger().error(
             'Could not stop container: {}'.format(container_id))
         raise last_exception
Exemplo n.º 2
0
    def _stop_service(self, container_id):
        ship = get_ship_name()
        service_dict = None
        service_list = kv_list('ships/{}/service/'.format(ship))
        if service_list:
            key = fnmatch.filter(service_list, '*/{}'.format(container_id))
            service_dict = kv_get(key[0]) if key else None
        if service_dict and service_dict['Status'] in ['crashed', 'not-recovered']:
            kv_remove(key[0])
        else:
            run_command_in_container('supervisorctl stop armada_agent', container_id)

            # TODO: Compatibility with old microservice images. Should be removed in future armada version.
            run_command_in_container('supervisorctl stop register_in_service_discovery', container_id)

            docker_api = docker_client.api()
            last_exception = None
            try:
                deregister_services(container_id)
            except:
                traceback.print_exc()
            for i in range(3):
                try:
                    docker_api.stop(container_id)
                    kv_remove(key[0])
                except Exception as e:
                    last_exception = e
                    traceback.print_exc()
                if not is_container_running(container_id):
                    break
            if is_container_running(container_id):
                get_logger().error('Could not stop container: {}'.format(container_id))
                raise last_exception
Exemplo n.º 3
0
 def _stop_service(self, container_id):
     docker_api = docker_client.api()
     docker_api.stop(container_id)
     try:
         deregister_services(container_id)
     except Exception as e:
         traceback.print_exc()
Exemplo n.º 4
0
    def POST(self):
        container_id, error = self.get_post_parameter('container_id')
        if error:
            return self.status_error(error)

        docker_api = docker_client.api()

        docker_inspect = docker_api.inspect_container(container_id)

        restart_parameters = {}
        for env_var in docker_inspect['Config']['Env']:
            env_key, env_value = (env_var.strip('"').split('=', 1) + [''])[:2]
            if env_key == 'RESTART_CONTAINER_PARAMETERS':
                restart_parameters = json.loads(base64.b64decode(env_value))

        image_path = restart_parameters.get('image_path')
        dockyard_user = restart_parameters.get('dockyard_user')
        dockyard_password = restart_parameters.get('dockyard_password')
        dict_ports = restart_parameters.get('ports')
        dict_environment = restart_parameters.get('environment')
        dict_volumes = restart_parameters.get('volumes')
        run_command = restart_parameters.get('run_command')
        microservice_name = dict_environment.get('MICROSERVICE_NAME')
        dockyard_address, _, _ = self._split_image_path(image_path)
        docker_api = self._get_docker_api(dockyard_address, dockyard_user, dockyard_password)

        try:
            self._pull_latest_image(docker_api, image_path, microservice_name)
        except Exception as e:
            return self.status_error("Failed to pull image's newest version. {exception_class} - {exception}".format(
                exception_class=type(e).__name__, exception=str(e)))
        try:
            docker_api.stop(container_id)
        except Exception as e:
            return self.status_error("Cannot stop requested container. {exception_class} - {exception}".format(
                exception_class=type(e).__name__, exception=str(e)))

        try:
            deregister_services(container_id)
        except:
            traceback.print_exc()

        return self.run_container(image_path, dockyard_user, dockyard_password, dict_ports, dict_environment,
                                  dict_volumes, run_command)
Exemplo n.º 5
0
    def POST(self):
        container_id, error = self.get_post_parameter('container_id')
        if error:
            return self.status_error(error)

        try:
            docker_api = docker_client.api()

            docker_api.stop(container_id)
        except Exception as e:
            return self.status_error("Cannot stop requested container. {exception_class} - {exception}".format(
                exception_class=type(e).__name__, exception=str(e)))

        try:
            deregister_services(container_id)
        except Exception as e:
            traceback.print_exc()

        return self.status_ok()
Exemplo n.º 6
0
    def _stop_service(self, container_id):
        ship = get_ship_name()
        service_dict = None
        service_list = kv_list('ships/{}/service/'.format(ship))
        if service_list:
            key = fnmatch.filter(service_list, '*/{}'.format(container_id))
            service_dict = kv_get(key[0]) if key else None
        if service_dict and service_dict['Status'] in [
                'crashed', 'not-recovered'
        ]:
            kv_remove(key[0])
        else:
            run_command_in_container('supervisorctl stop armada_agent',
                                     container_id)

            # TODO: Compatibility with old microservice images. Should be removed in future armada version.
            run_command_in_container(
                'supervisorctl stop register_in_service_discovery',
                container_id)

            docker_api = docker_client.api()
            last_exception = None
            try:
                deregister_services(container_id)
            except:
                traceback.print_exc()
            for i in range(3):
                try:
                    docker_api.stop(container_id)
                    kv_remove(key[0])
                except Exception as e:
                    last_exception = e
                    traceback.print_exc()
                if not is_container_running(container_id):
                    break
            if is_container_running(container_id):
                get_logger().error(
                    'Could not stop container: {}'.format(container_id))
                raise last_exception
Exemplo n.º 7
0
 def _stop_service(self, container_id):
     docker_api = docker_client.api()
     last_exception = None
     try:
         exec_id = docker_api.exec_create(container_id, 'supervisorctl stop register_in_service_discovery')
         docker_api.exec_start(exec_id['Id'])
     except:
         traceback.print_exc()
     try:
         deregister_services(container_id)
     except:
         traceback.print_exc()
     for i in range(3):
         try:
             docker_api.stop(container_id)
         except Exception as e:
             last_exception = e
             traceback.print_exc()
         if not is_container_running(container_id):
             break
     if is_container_running(container_id):
         get_logger().error('Could not stop container: {}'.format(container_id))
         raise last_exception