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