Ejemplo n.º 1
0
 def _reboot_for_hybridvm(self, context, instance, network_info, reboot_type,
            block_device_info=None, bad_volumes_callback=None):
     provider_server_id = self._get_cascaded_server_id(instance)
     if provider_server_id:
         provider_server = self.hws_client.ecs.get_detail(self.project, provider_server_id)
         if self._is_hws_server_exist(provider_server):
             port = CONF.hws.hybrid_service_port
             wormhole_business_hws = WormHoleBusinessHWS(provider_server, self.hws_client, port)
             if self._is_hws_server_active(provider_server):
                 # if hws server is active, only need to restart container, no need to restart base vm.
                 docker_version = wormhole_business_hws.get_version()
                 wormhole_business_hws.restart_container(network_info, block_device_info)
             elif self._is_hws_server_shutoff(provider_server):
                 # if hws server is SHUTOFF, we need to start base vm, and start container.
                 LOG.debug('start to start server')
                 start_result = self.hws_client.ecs.start_server(self.project, provider_server_id)
                 self._deal_java_error(start_result)
                 self._wait_for_hws_server_in_ACTIVE(provider_server_id)
                 LOG.debug('start to start container')
                 start_result = wormhole_business_hws.start_container(network_info, block_device_info)
             else:
                 LOG.debug('hws server status is: %s, not support to reboot.' % provider_server['body']['server']['status'])
         else:
             LOG.debug('provider server is not exist for server id: %s' % provider_server_id)
     else:
         LOG.debug('No provider server mapped with instance: %s' % instance.uuid)
Ejemplo n.º 2
0
    def _power_off_for_hybrid_vm(self, instance, timeout=0, retry_interval=0):
        project_id = CONF.hws.project_id
        provider_server_id = self._get_cascaded_server_id(instance)
        provider_server = self.hws_client.ecs.get_detail(self.project, provider_server_id)

        if provider_server_id and self._is_hws_server_exist(provider_server):
            port = CONF.hws.hybrid_service_port
            wormhole_business_hws = WormHoleBusinessHWS(provider_server, self.hws_client, port)

            try:
                wormhole_business_hws.get_version()
            except Exception, e:
                LOG.debug('hyper service is not online, stop base vm directlly.')
                LOG.debug('start to stop server')
                stop_result = self.hws_client.ecs.stop_server(project_id, provider_server_id)
                self._deal_java_error(stop_result)
                self._wait_for_hws_server_in_SHUTOFF(provider_server_id)

            LOG.debug('start to stop container')
            stop_result = wormhole_business_hws.stop_container()
            time.sleep(0.5)
            LOG.debug('start to stop server')
            stop_result = self.hws_client.ecs.stop_server(project_id, provider_server_id)
            self._deal_java_error(stop_result)
            self._wait_for_hws_server_in_SHUTOFF(provider_server_id)

            LOG.info('Stop Server: %s' % instance.display_name)
Ejemplo n.º 3
0
    def _create_hyper_service_container(self, context, instance, provider_server,
                                        network_info, block_device_info,
                                        image_name, injected_files, image_meta, admin_password):
        LOG.debug('instance: %s' % instance)
        LOG.debug('provider_server: %s' % provider_server)
        LOG.debug('network_info: %s' % network_info)
        LOG.debug('block_device_info: %s' % block_device_info)
        LOG.debug('image_name: %s' % image_name)
        LOG.debug('injected_files: %s' % injected_files)

        instance.metadata['is_hybrid_vm'] = True
        instance.save()
        # update port bind host
        LOG.debug('Start to binding host')
        self._binding_host(context, network_info, instance.uuid)

        port = CONF.hws.hybrid_service_port
        wormhole_business_hws = WormHoleBusinessHWS(provider_server, self.hws_client, port)

        LOG.debug('start to get version')
        try:
            docker_version = wormhole_business_hws.get_version()
        except Exception, e:
            error_info = 'docker server is not up, create docker app failed, exception: %s' %\
                         traceback.format_exc(e)
            raise Exception(error_info)
Ejemplo n.º 4
0
    def _power_on_for_bybrid_vm(self, context, instance, network_info, block_device_info):
        LOG.debug('start to _power_on_for_bybrid_vm')
        provider_server_id = self._get_cascaded_server_id(instance)
        provider_server = self.hws_client.ecs.get_detail(self.project, provider_server_id)

        if provider_server_id and self._is_hws_server_exist(provider_server):
            port = CONF.hws.hybrid_service_port
            wormhole_business_hws = WormHoleBusinessHWS(provider_server, self.hws_client, port)
            LOG.debug('start to start server')
            start_result = self.hws_client.ecs.start_server(self.project, provider_server_id)
            self._deal_java_error(start_result)
            self._wait_for_hws_server_in_ACTIVE(provider_server_id)

            LOG.debug('start to start container')
            try:
                docker_version = wormhole_business_hws.get_version()
            except Exception, e:
                LOG.error('hyper service is not online, no need to start container')
                docker_version = None

            if docker_version:
                start_result = wormhole_business_hws.start_container(network_info, block_device_info)

            LOG.info('Start Server: %s, result is: %s' % (instance.display_name, start_result))