本文整理汇总了Python中st2common.persistence.execution.ActionExecution.get方法的典型用法代码示例。如果您正苦于以下问题:Python ActionExecution.get方法的具体用法?Python ActionExecution.get怎么用?Python ActionExecution.get使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类st2common.persistence.execution.ActionExecution
的用法示例。
在下文中一共展示了ActionExecution.get方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _has_active_tasks
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def _has_active_tasks(self, liveaction_db, mistral_wf_state, mistral_tasks):
# Identify if there are any active tasks in Mistral.
active_mistral_tasks = len([t for t in mistral_tasks if t['state'] in ACTIVE_STATES]) > 0
active_st2_tasks = False
execution = ActionExecution.get(liveaction__id=str(liveaction_db.id))
for child_exec_id in execution.children:
child_exec = ActionExecution.get(id=child_exec_id)
# Catch exception where a child is requested twice due to st2mistral retrying
# from a st2 API connection failure. The first child will be stuck in requested
# while the mistral workflow is already completed.
if (mistral_wf_state in DONE_STATES and
child_exec.status == action_constants.LIVEACTION_STATUS_REQUESTED):
continue
if (child_exec.status not in action_constants.LIVEACTION_COMPLETED_STATES and
child_exec.status != action_constants.LIVEACTION_STATUS_PAUSED):
active_st2_tasks = True
break
if active_mistral_tasks:
LOG.info('There are active mistral tasks for %s.', str(liveaction_db.id))
if active_st2_tasks:
LOG.info('There are active st2 tasks for %s.', str(liveaction_db.id))
return active_mistral_tasks or active_st2_tasks
示例2: _get_runner
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def _get_runner(self, runnertype_db, action_db, liveaction_db):
runner = get_runner(runnertype_db.runner_module)
resolved_entry_point = self._get_entry_point_abs_path(action_db.pack,
action_db.entry_point)
runner.runner_type_db = runnertype_db
runner.container_service = RunnerContainerService()
runner.action = action_db
runner.action_name = action_db.name
runner.liveaction = liveaction_db
runner.liveaction_id = str(liveaction_db.id)
runner.execution = ActionExecution.get(liveaction__id=runner.liveaction_id)
runner.execution_id = str(runner.execution.id)
runner.entry_point = resolved_entry_point
runner.context = getattr(liveaction_db, 'context', dict())
runner.callback = getattr(liveaction_db, 'callback', dict())
runner.libs_dir_path = self._get_action_libs_abs_path(action_db.pack,
action_db.entry_point)
# For re-run, get the ActionExecutionDB in which the re-run is based on.
rerun_ref_id = runner.context.get('re-run', {}).get('ref')
runner.rerun_ex_ref = ActionExecution.get(id=rerun_ref_id) if rerun_ref_id else None
return runner
示例3: run
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def run(self, action_parameters):
liveaction_db = action_utils.get_liveaction_by_id(self.liveaction_id)
exc = ActionExecution.get(liveaction__id=str(liveaction_db.id))
# Assemble and dispatch trigger
trigger_ref = ResourceReference.to_string_reference(
pack=INQUIRY_TRIGGER['pack'],
name=INQUIRY_TRIGGER['name']
)
trigger_payload = {
"id": str(exc.id),
"route": self.route
}
self.trigger_dispatcher.dispatch(trigger_ref, trigger_payload)
# We only want to request a pause if this has a parent
if liveaction_db.context.get("parent"):
# Get the root liveaction and request that it pauses
root_liveaction = action_service.get_root_liveaction(liveaction_db)
action_service.request_pause(
root_liveaction,
self.context.get('user', None)
)
result = {
"schema": self.schema,
"roles": self.roles_param,
"users": self.users_param,
"route": self.route,
"ttl": self.ttl
}
return (LIVEACTION_STATUS_PENDING, result, None)
示例4: _resume_action
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def _resume_action(self, liveaction_db):
action_execution_db = ActionExecution.get(liveaction__id=str(liveaction_db.id))
extra = {'action_execution_db': action_execution_db, 'liveaction_db': liveaction_db}
LOG.audit('Resuming action execution.', extra=extra)
# the extra field will not be shown in non-audit logs so temporarily log at info.
LOG.info('Dispatched {~}action_execution: %s / {~}live_action: %s with "%s" status.',
action_execution_db.id, liveaction_db.id, liveaction_db.status)
try:
result = self.container.dispatch(liveaction_db)
LOG.debug('Runner dispatch produced result: %s', result)
except:
_, ex, tb = sys.exc_info()
extra['error'] = str(ex)
LOG.info('Failed to resume action execution %s.' % (liveaction_db.id), extra=extra)
raise
# Cascade the resume upstream if action execution is child of an orquesta workflow.
# The action service request_resume function is not used here because we do not want
# other peer subworkflows to be resumed.
if 'orquesta' in action_execution_db.context and 'parent' in action_execution_db.context:
wf_svc.handle_action_execution_resume(action_execution_db)
return result
示例5: _format_action_exec_result
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def _format_action_exec_result(self, action_node, liveaction_db, created_at, updated_at,
error=None):
"""
Format ActionExecution result so it can be used in the final action result output.
:rtype: ``dict``
"""
assert(isinstance(created_at, datetime.datetime))
assert(isinstance(updated_at, datetime.datetime))
result = {}
execution_db = None
if liveaction_db:
execution_db = ActionExecution.get(liveaction__id=str(liveaction_db.id))
result['id'] = action_node.name
result['name'] = action_node.name
result['execution_id'] = str(execution_db.id) if execution_db else None
result['workflow'] = None
result['created_at'] = isotime.format(dt=created_at)
result['updated_at'] = isotime.format(dt=updated_at)
if error or not liveaction_db:
result['state'] = LIVEACTION_STATUS_FAILED
else:
result['state'] = liveaction_db.status
if error:
result['result'] = error
else:
result['result'] = liveaction_db.result
return result
示例6: update_execution
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def update_execution(liveaction_db, publish=True):
execution = ActionExecution.get(liveaction__id=str(liveaction_db.id))
decomposed = _decompose_liveaction(liveaction_db)
for k, v in six.iteritems(decomposed):
setattr(execution, k, v)
execution = ActionExecution.add_or_update(execution, publish=publish)
return execution
示例7: _get_execution_for_liveaction
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def _get_execution_for_liveaction(self, liveaction):
execution = ActionExecution.get(liveaction__id=str(liveaction.id))
if not execution:
return None
return execution
示例8: test_chained_executions
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def test_chained_executions(self):
liveaction = LiveActionDB(action='core.chain')
liveaction, _ = action_service.request(liveaction)
liveaction = LiveAction.get_by_id(str(liveaction.id))
self.assertEqual(liveaction.status, action_constants.LIVEACTION_STATUS_FAILED)
execution = self._get_action_execution(liveaction__id=str(liveaction.id),
raise_exception=True)
action = action_utils.get_action_by_ref('core.chain')
self.assertDictEqual(execution.action, vars(ActionAPI.from_model(action)))
runner = RunnerType.get_by_name(action.runner_type['name'])
self.assertDictEqual(execution.runner, vars(RunnerTypeAPI.from_model(runner)))
liveaction = LiveAction.get_by_id(str(liveaction.id))
self.assertEqual(execution.start_timestamp, liveaction.start_timestamp)
self.assertEqual(execution.end_timestamp, liveaction.end_timestamp)
self.assertEqual(execution.result, liveaction.result)
self.assertEqual(execution.status, liveaction.status)
self.assertEqual(execution.context, liveaction.context)
self.assertEqual(execution.liveaction['callback'], liveaction.callback)
self.assertEqual(execution.liveaction['action'], liveaction.action)
self.assertGreater(len(execution.children), 0)
for child in execution.children:
record = ActionExecution.get(id=child, raise_exception=True)
self.assertEqual(record.parent, str(execution.id))
self.assertEqual(record.action['name'], 'local')
self.assertEqual(record.runner['name'], 'run-local')
示例9: resume
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def resume(self):
mistral_ctx = self.context.get('mistral', dict())
if not mistral_ctx.get('execution_id'):
raise Exception('Unable to resume because mistral execution_id is missing.')
# If workflow is executed under another parent workflow, resume the corresponding
# action execution for the task in the parent workflow.
if 'parent' in getattr(self, 'context', {}) and mistral_ctx.get('action_execution_id'):
mistral_action_ex_id = mistral_ctx.get('action_execution_id')
self._client.action_executions.update(mistral_action_ex_id, 'RUNNING')
# Pause the main workflow execution. Any non-workflow tasks that are still
# running will be allowed to complete gracefully.
self._client.executions.update(mistral_ctx.get('execution_id'), 'RUNNING')
# Identify the list of action executions that are workflows and cascade resume.
for child_exec_id in self.execution.children:
child_exec = ActionExecution.get(id=child_exec_id, raise_exception=True)
if (child_exec.runner['name'] in action_constants.WORKFLOW_RUNNER_TYPES and
child_exec.status == action_constants.LIVEACTION_STATUS_PAUSED):
action_service.request_resume(
LiveAction.get(id=child_exec.liveaction['id']),
self.context.get('user', None)
)
return (
action_constants.LIVEACTION_STATUS_RUNNING,
self.execution.result,
self.execution.context
)
示例10: request_cancellation
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def request_cancellation(liveaction, requester):
"""
Request cancellation of an action execution.
:return: (liveaction, execution)
:rtype: tuple
"""
if liveaction.status == action_constants.LIVEACTION_STATUS_CANCELING:
return liveaction
if liveaction.status not in action_constants.LIVEACTION_CANCELABLE_STATES:
raise Exception(
'Unable to cancel liveaction "%s" because it is already in a '
'completed state.' % liveaction.id
)
result = {
'message': 'Action canceled by user.',
'user': requester
}
# Run cancelation sequence for liveaction that is in running state or
# if the liveaction is operating under a workflow.
if ('parent' in liveaction.context or
liveaction.status in action_constants.LIVEACTION_STATUS_RUNNING):
status = action_constants.LIVEACTION_STATUS_CANCELING
else:
status = action_constants.LIVEACTION_STATUS_CANCELED
liveaction = update_status(liveaction, status, result=result)
execution = ActionExecution.get(liveaction__id=str(liveaction.id))
return (liveaction, execution)
示例11: request_cancellation
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def request_cancellation(liveaction, requester):
"""
Request cancellation of an action execution.
:return: (liveaction, execution)
:rtype: tuple
"""
if liveaction.status == action_constants.LIVEACTION_STATUS_CANCELING:
return liveaction
if liveaction.status not in action_constants.LIVEACTION_CANCELABLE_STATES:
raise Exception('Unable to cancel execution because it is already in a completed state.')
result = {
'message': 'Action canceled by user.',
'user': requester
}
# There is real work only when liveaction is still running.
status = (action_constants.LIVEACTION_STATUS_CANCELING
if liveaction.status == action_constants.LIVEACTION_STATUS_RUNNING
else action_constants.LIVEACTION_STATUS_CANCELED)
update_status(liveaction, status, result=result)
execution = ActionExecution.get(liveaction__id=str(liveaction.id))
return (liveaction, execution)
示例12: test_chained_executions
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def test_chained_executions(self):
with mock.patch("st2common.runners.register_runner", mock.MagicMock(return_value=action_chain_runner)):
liveaction = LiveActionDB(action="executions.chain")
liveaction, _ = action_service.request(liveaction)
liveaction = LiveAction.get_by_id(str(liveaction.id))
self.assertEqual(liveaction.status, action_constants.LIVEACTION_STATUS_FAILED)
execution = self._get_action_execution(liveaction__id=str(liveaction.id), raise_exception=True)
action = action_utils.get_action_by_ref("executions.chain")
self.assertDictEqual(execution.action, vars(ActionAPI.from_model(action)))
runner = RunnerType.get_by_name(action.runner_type["name"])
self.assertDictEqual(execution.runner, vars(RunnerTypeAPI.from_model(runner)))
liveaction = LiveAction.get_by_id(str(liveaction.id))
self.assertEqual(execution.start_timestamp, liveaction.start_timestamp)
self.assertEqual(execution.end_timestamp, liveaction.end_timestamp)
self.assertEqual(execution.result, liveaction.result)
self.assertEqual(execution.status, liveaction.status)
self.assertEqual(execution.context, liveaction.context)
self.assertEqual(execution.liveaction["callback"], liveaction.callback)
self.assertEqual(execution.liveaction["action"], liveaction.action)
self.assertGreater(len(execution.children), 0)
for child in execution.children:
record = ActionExecution.get(id=child, raise_exception=True)
self.assertEqual(record.parent, str(execution.id))
self.assertEqual(record.action["name"], "local")
self.assertEqual(record.runner["name"], "run-local")
示例13: _get_execution_id
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def _get_execution_id(self, liveaction):
try:
execution = ActionExecution.get(liveaction__id=str(liveaction.id))
return str(execution.id)
except:
LOG.exception('Execution object corresponding to LiveAction %s not found.',
str(liveaction.id))
return None
示例14: request_resume
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def request_resume(liveaction, requester):
"""
Request resume for a paused action execution.
:return: (liveaction, execution)
:rtype: tuple
"""
# Validate that the runner type of the action supports pause.
action_db = action_utils.get_action_by_ref(liveaction.action)
if not action_db:
raise ValueError(
'Unable to resume liveaction "%s" because the action "%s" '
'is not found.' % (liveaction.id, liveaction.action)
)
if action_db.runner_type['name'] not in action_constants.WORKFLOW_RUNNER_TYPES:
raise runner_exc.InvalidActionRunnerOperationError(
'Unable to resume liveaction "%s" because it is not supported by the '
'"%s" runner.' % (liveaction.id, action_db.runner_type['name'])
)
running_states = [
action_constants.LIVEACTION_STATUS_RUNNING,
action_constants.LIVEACTION_STATUS_RESUMING
]
if liveaction.status in running_states:
execution = ActionExecution.get(liveaction__id=str(liveaction.id))
return (liveaction, execution)
if liveaction.status != action_constants.LIVEACTION_STATUS_PAUSED:
raise runner_exc.UnexpectedActionExecutionStatusError(
'Unable to resume liveaction "%s" because it is in "%s" state and '
'not in "paused" state.' % (liveaction.id, liveaction.status)
)
liveaction = update_status(liveaction, action_constants.LIVEACTION_STATUS_RESUMING)
execution = ActionExecution.get(liveaction__id=str(liveaction.id))
return (liveaction, execution)
示例15: get_trace_db_by_live_action
# 需要导入模块: from st2common.persistence.execution import ActionExecution [as 别名]
# 或者: from st2common.persistence.execution.ActionExecution import get [as 别名]
def get_trace_db_by_live_action(liveaction):
"""
Given a liveaction does the best attempt to return a TraceDB.
1. From trace_context in liveaction.context
2. From parent in liveaction.context
3. From action_execution associated with provided liveaction
4. Creates a new TraceDB (which calling method is on the hook to persist).
:param liveaction: liveaction from which to figure out a TraceDB.
:type liveaction: ``LiveActionDB``
:returns: (boolean, TraceDB) if the TraceDB was created(but not saved to DB) or
retrieved from the DB and the TraceDB itself.
:rtype: ``tuple``
"""
trace_db = None
created = False
# 1. Try to get trace_db from liveaction context.
# via trigger_instance + rule or via user specified trace_context
trace_context = liveaction.context.get(TRACE_CONTEXT, None)
if trace_context:
trace_context = _get_valid_trace_context(trace_context)
trace_db = get_trace(trace_context=trace_context, ignore_trace_tag=True)
# found a trace_context but no trace_db. This implies a user supplied
# trace_tag so create a new trace_db
if not trace_db:
trace_db = TraceDB(trace_tag=trace_context.trace_tag)
created = True
return (created, trace_db)
# 2. If not found then check if parent context contains an execution_id.
# This cover case for child execution of a workflow.
parent_context = executions.get_parent_context(liveaction_db=liveaction)
if not trace_context and parent_context:
parent_execution_id = parent_context.get('execution_id', None)
if parent_execution_id:
# go straight to a trace_db. If there is a parent execution then that must
# be associated with a Trace.
trace_db = get_trace_db_by_action_execution(action_execution_id=parent_execution_id)
if not trace_db:
raise StackStormDBObjectNotFoundError('No trace found for execution %s' %
parent_execution_id)
return (created, trace_db)
# 3. Check if the action_execution associated with liveaction leads to a trace_db
execution = ActionExecution.get(liveaction__id=str(liveaction.id))
if execution:
trace_db = get_trace_db_by_action_execution(action_execution=execution)
# 4. No trace_db found, therefore create one. This typically happens
# when execution is run by hand.
if not trace_db:
trace_db = TraceDB(trace_tag='execution-%s' % str(liveaction.id))
created = True
return (created, trace_db)