示例#1
0
    def start(self, ctx, action, block=False):
        """ do something...  spawn thread?
            :param action Action Object
            shared_storage?
        """
        if not self.can_execute(action):
            self.register_action(action, discard=True)
            raise exceptions.ActionInProgress()

        self.register_action(action)
        try:
            config = action.action_meta_obj.get('data') or {}
            self.client = utils.get_nova_client(ctx)
            if not block:
                block = config.get('block', False)
            output = self.client.servers.migrate(server=action.target_id)
            output = str(output)
        except Exception as e:
            LOG.exception(e)
            self.error(action, message=str(e))
            return None

        if block:
            self.block_until_finish(action, ctx)
        else:
            self.finish(action, message=output)

        return action.id
示例#2
0
    def start(self, ctx, action, block=False):
        """ do something...  spawn thread?
            :param action ActionData Object
        """
        if not self.can_execute(action):
            self.register_action(action, discard=True)
            raise exceptions.ActionInProgress()

        self.register_action(action)
        try:
            client = utils.get_nova_client(ctx)
            config = action.action_meta_obj.get('data') or {}
            nova_action = config.get('action', 'suspend')
            if nova_action == 'resume':
                output = client.servers.resume(action.target_id)
            else:
                output = client.servers.suspend(action.target_id)

        except Exception as e:
            LOG.exception(e)
            self.error(action, message=e.message)
            return None

        self.finish(action, "")
        return self.current_action.id
示例#3
0
    def start(self, ctx, action, block=False):
        try:
            import mistralclient.api.client as client
            import mistralclient.api.executions as executions
        except:
            LOG.error("Mistral not installed")
            return

        if not self.can_execute(action):
            self.register_action(action, discard=True)
            raise exceptions.ActionInProgress()

        self.register_action(action)

        options = action.action_meta_obj.get('data') or {}
        workflow = options.get('workflow', None)
        task = options.get('task', None)
        params = options.get('params', {})
        if params.get('output'):
            params['output'] = '%s [%s]' % (params['output'],
                                            action.target_id)
        else:
            params['output'] = '[%s]' % action.target_id
            
        params['request_id'] = action.request_id
        
        if not params.get('instance_id'):
            params['instance_id'] = action.target_id
        if not params.get('project'):
            params['project'] = action.project_id
            
        params.update(self._common_endpoints(ctx))
        
        if not workflow or not task:
            LOG.warning('required parameters missing for mistral')
            self.stop(action, error=True)
            return
        try:
            client = client.Client(auth_token=ctx.token)
            execute = executions.ExecutionManager(client)
            output = execute.create(workflow, task, params)
        except Exception as e:
            LOG.exception(e)
            self.error(action, message=str(e))
            return None

        self.finish(action, str(output))
        return self.current_action.id
示例#4
0
    def start(self, ctx, action, block=False):
        """ do something...  spawn thread?
            :param action ActionData Object
        """
        if not self.can_execute(action):
            self.register_action(action, discard=True)
            raise exceptions.ActionInProgress()

        self.register_action(action)
        try:
            client = utils.get_nova_client(ctx)
            output = client.servers.get(action.target_id)
        except Exception as e:
            LOG.exception(e)
            self.error(action, message=e.message)
            return None
        self.finish(action, str(output))
示例#5
0
    def start(self, ctx, action, block=False):
        """ do something...  spawn thread?
            :param action ActionData Object
        """
        if not self.can_execute(action):
            self.register_action(action, discard=True)
            raise exceptions.ActionInProgress()

        self.register_action(action)
        try:
            options = action.action_meta_obj.get('data') or {}
            flavor = options.get('flavor_id', '42')
            client = utils.get_nova_client(ctx)
            output = client.servers.resize(action.target_id, flavor=flavor)
        except Exception as e:
            LOG.exception(e)
            self.error(action, e.message)
            return None

        self.finish(action, str(output))
        return self.current_action.id