Exemplo n.º 1
0
    def run(self, args, **kwargs):
        existing_execution = self.manager.get_by_id(args.id, **kwargs)

        if not existing_execution:
            raise resource.ResourceNotFoundError(
                'Action execution with id "%s" cannot be found.' % (args.id))

        action_mgr = self.app.client.managers['Action']
        runner_mgr = self.app.client.managers['RunnerType']
        action_exec_mgr = self.app.client.managers['LiveAction']

        # TODO use action.ref when this attribute is added
        action_ref = existing_execution.action[
            'pack'] + '.' + existing_execution.action['name']
        action = action_mgr.get_by_ref_or_id(action_ref)
        runner = runner_mgr.get_by_name(action.runner_type)

        action_parameters = self._get_action_parameters_from_args(
            action=action, runner=runner, args=args)

        # Create new execution object
        new_execution = models.LiveAction()
        new_execution.action = action_ref
        new_execution.parameters = existing_execution.parameters or {}

        # If user provides parameters merge and override with the ones from the
        # existing execution
        new_execution.parameters.update(action_parameters)

        execution = action_exec_mgr.create(new_execution, **kwargs)
        execution = self._get_execution_result(execution=execution,
                                               action_exec_mgr=action_exec_mgr,
                                               args=args,
                                               **kwargs)
        return execution
Exemplo n.º 2
0
 def _execute_workflow(self, action, parameters):
     execution = models.LiveAction(action=action, parameters=parameters)
     execution = self.st2client.liveactions.create(execution)
     self.assertIsNotNone(execution.id)
     self.assertEqual(execution.action['ref'], action)
     self.assertIn(execution.status, ['scheduled', 'running'])
     return execution
Exemplo n.º 3
0
    def run(self, args, **kwargs):
        if not args.ref_or_id:
            self.parser.error('too few arguments')

        action = self.get_resource(args.ref_or_id, **kwargs)
        if not action:
            raise resource.ResourceNotFoundError(
                'Action "%s" cannot be found.' % args.ref_or_id)

        runner_mgr = self.app.client.managers['RunnerType']
        runner = runner_mgr.get_by_name(action.runner_type, **kwargs)
        if not runner:
            raise resource.ResourceNotFoundError(
                'Runner type "%s" for action "%s" cannot be found.' %
                (action.runner_type, action.name))

        action_ref = '.'.join([action.pack, action.name])
        action_parameters = self._get_action_parameters_from_args(
            action=action, runner=runner, args=args)

        execution = models.LiveAction()
        execution.action = action_ref
        execution.parameters = action_parameters

        action_exec_mgr = self.app.client.managers['LiveAction']

        execution = action_exec_mgr.create(execution, **kwargs)
        execution = self._get_execution_result(execution=execution,
                                               action_exec_mgr=action_exec_mgr,
                                               args=args,
                                               **kwargs)
        return execution
Exemplo n.º 4
0
    def _execute_workflow(self,
                          action,
                          parameters=None,
                          execute_async=True,
                          expected_status=None,
                          expected_result=None):

        ex = models.LiveAction(action=action, parameters=(parameters or {}))
        ex = self.st2client.liveactions.create(ex)
        self.assertIsNotNone(ex.id)
        self.assertEqual(ex.action['ref'], action)
        self.assertIn(ex.status, LIVEACTION_LAUNCHED_STATUSES)

        if execute_async:
            return ex

        if expected_status is None:
            expected_status = action_constants.LIVEACTION_STATUS_SUCCEEDED

        self.assertIn(expected_status, action_constants.LIVEACTION_STATUSES)

        ex = self._wait_for_completion(ex)

        self.assertEqual(ex.status, expected_status)
        self.assertDictEqual(ex.result, expected_result)

        return ex
Exemplo n.º 5
0
    def _execute_workflow(self, action, parameters=None):
        ex = models.LiveAction(action=action, parameters=(parameters or {}))
        ex = self.st2client.executions.create(ex)
        self.assertIsNotNone(ex.id)
        self.assertEqual(ex.action['ref'], action)
        self.assertIn(ex.status, LIVEACTION_LAUNCHED_STATUSES)

        return ex
    def _run_action(self, action, params):

        action_exec_mgr = self.client.managers['LiveAction']

        execution = models.LiveAction()
        execution.action = action
        execution.parameters = params
        actionexec = action_exec_mgr.create(execution)

        while actionexec.status not in END_STATES:
            time.sleep(0.01)
            actionexec = action_exec_mgr.get_by_id(actionexec.id)

        return actionexec
Exemplo n.º 7
0
def runAction(action_ref, params):

    client = Client()
    action_exec_mgr = client.managers['LiveAction']

    execution = models.LiveAction()
    execution.action = action_ref
    execution.parameters = param_parser(params)
    actionexec = action_exec_mgr.create(execution)

    while actionexec.status not in END_STATES:
        time.sleep(2)
        actionexec = action_exec_mgr.get_by_id(actionexec.id)

    return actionexec
Exemplo n.º 8
0
    def run(self, args, **kwargs):
        if not args.ref_or_id:
            self.parser.error('Missing action reference or id')

        action = self.get_resource(args.ref_or_id, **kwargs)
        if not action:
            raise resource.ResourceNotFoundError(
                'Action "%s" cannot be found.' % (args.ref_or_id))

        runner_mgr = self.app.client.managers['RunnerType']
        runner = runner_mgr.get_by_name(action.runner_type, **kwargs)
        if not runner:
            raise resource.ResourceNotFoundError(
                'Runner type "%s" for action "%s" cannot be found.' %
                (action.runner_type, action.name))

        action_ref = '.'.join([action.pack, action.name])
        action_parameters = self._get_action_parameters_from_args(
            action=action, runner=runner, args=args)

        execution = models.LiveAction()
        execution.action = action_ref
        execution.parameters = action_parameters
        execution.user = args.user

        if not args.trace_id and args.trace_tag:
            execution.context = {
                'trace_context': {
                    'trace_tag': args.trace_tag
                }
            }

        if args.trace_id:
            execution.context = {'trace_context': {'id_': args.trace_id}}

        action_exec_mgr = self.app.client.managers['LiveAction']

        execution = action_exec_mgr.create(execution, **kwargs)
        execution = self._get_execution_result(execution=execution,
                                               action_exec_mgr=action_exec_mgr,
                                               args=args,
                                               **kwargs)
        return execution
Exemplo n.º 9
0
class TestLiveActionResourceManager(unittest2.TestCase):
    @classmethod
    def setUpClass(cls):
        super(TestLiveActionResourceManager, cls).setUpClass()
        cls.client = client.Client()

    @mock.patch.object(
        models.ResourceManager, 'get_by_id',
        mock.MagicMock(return_vaue=models.LiveAction(**LIVE_ACTION)))
    @mock.patch.object(models.ResourceManager, 'get_by_ref_or_id',
                       mock.MagicMock(return_value=models.Action(**ACTION)))
    @mock.patch.object(models.ResourceManager, 'get_by_name',
                       mock.MagicMock(return_value=models.RunnerType(**RUNNER))
                       )
    @mock.patch.object(
        httpclient.HTTPClient, 'post',
        mock.MagicMock(
            return_value=base.FakeResponse(json.dumps(LIVE_ACTION), 200, 'OK'))
    )
    def test_rerun_with_no_params(self):
        self.client.liveactions.re_run(LIVE_ACTION['id'], tasks=['foobar'])

        endpoint = '/executions/%s/re_run' % LIVE_ACTION['id']

        data = {'tasks': ['foobar'], 'reset': ['foobar'], 'parameters': {}}

        httpclient.HTTPClient.post.assert_called_with(endpoint, data)

    @mock.patch.object(
        models.ResourceManager, 'get_by_id',
        mock.MagicMock(return_vaue=models.LiveAction(**LIVE_ACTION)))
    @mock.patch.object(models.ResourceManager, 'get_by_ref_or_id',
                       mock.MagicMock(return_value=models.Action(**ACTION)))
    @mock.patch.object(models.ResourceManager, 'get_by_name',
                       mock.MagicMock(return_value=models.RunnerType(**RUNNER))
                       )
    @mock.patch.object(
        httpclient.HTTPClient, 'post',
        mock.MagicMock(
            return_value=base.FakeResponse(json.dumps(LIVE_ACTION), 200, 'OK'))
    )
    def test_rerun_with_params(self):
        params = {'var1': 'testing...'}

        self.client.liveactions.re_run(LIVE_ACTION['id'],
                                       tasks=['foobar'],
                                       parameters=params)

        endpoint = '/executions/%s/re_run' % LIVE_ACTION['id']

        data = {'tasks': ['foobar'], 'reset': ['foobar'], 'parameters': params}

        httpclient.HTTPClient.post.assert_called_with(endpoint, data)

    @mock.patch.object(
        models.ResourceManager, 'get_by_id',
        mock.MagicMock(return_vaue=models.LiveAction(**LIVE_ACTION)))
    @mock.patch.object(models.ResourceManager, 'get_by_ref_or_id',
                       mock.MagicMock(return_value=models.Action(**ACTION)))
    @mock.patch.object(models.ResourceManager, 'get_by_name',
                       mock.MagicMock(return_value=models.RunnerType(**RUNNER))
                       )
    @mock.patch.object(
        httpclient.HTTPClient, 'put',
        mock.MagicMock(
            return_value=base.FakeResponse(json.dumps(LIVE_ACTION), 200, 'OK'))
    )
    def test_pause(self):
        self.client.liveactions.pause(LIVE_ACTION['id'])

        endpoint = '/executions/%s' % LIVE_ACTION['id']

        data = {'status': 'pausing'}

        httpclient.HTTPClient.put.assert_called_with(endpoint, data)

    @mock.patch.object(
        models.ResourceManager, 'get_by_id',
        mock.MagicMock(return_vaue=models.LiveAction(**LIVE_ACTION)))
    @mock.patch.object(models.ResourceManager, 'get_by_ref_or_id',
                       mock.MagicMock(return_value=models.Action(**ACTION)))
    @mock.patch.object(models.ResourceManager, 'get_by_name',
                       mock.MagicMock(return_value=models.RunnerType(**RUNNER))
                       )
    @mock.patch.object(
        httpclient.HTTPClient, 'put',
        mock.MagicMock(
            return_value=base.FakeResponse(json.dumps(LIVE_ACTION), 200, 'OK'))
    )
    def test_resume(self):
        self.client.liveactions.resume(LIVE_ACTION['id'])

        endpoint = '/executions/%s' % LIVE_ACTION['id']

        data = {'status': 'resuming'}

        httpclient.HTTPClient.put.assert_called_with(endpoint, data)
Exemplo n.º 10
0
 def _execute(self, vm_name):
     execution = models.LiveAction()
     execution.action = 'examples.mistral-workbook-complex'
     execution.parameters = {'vm_name': vm_name}
     return self.st2client.liveactions.create(execution)