StackStorm / StackStorm/st2

how to get dynamic varible in action chain

Open
#5,645 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
6.5k
Forks
787
PR merge metrics
No merged PRs in 30d

Description

I've integrated stackstorm with alertmanager and opsgenie. I want to fetch the host name dynamically in the action chain for slack and opsgenie action. How can I achieve this, so that it fetch the hostanames dynamically and send it to slack/opsgenie ?

Rules:

---
    name: "kafka_diskspace_remediation"
    pack: "demo"
    description: "kafka disk  event handler."
    enabled: true

    trigger:
        parameters:
            url: "sample"
        type: "core.st2.webhook"

    criteria:
        trigger.body.alerts[0].labels.alertname:
            type: "startswith"
            pattern : "Disk_usage_kafka"

    action:
        ref: "demo.demo_kafka_chain_meta"
        parameters:
            triggers: "{{ trigger }}"

Action-chain:

---
  chain:
    -
      name: "kafka_demo_disk_action"
      ref: "demo.kafka_demo_disk_action"
      parameters:
        triggers: "{{ triggers }}"
      on-success: "post_success_to_slack"
      on-failure: "opsgenie_escalation"
    -
      name: "post_success_to_slack"
      ref: "slack.post_message"
      parameters:
        channel: "#slo-sli"
        message: Current disk usage in / partition is less than 50% on  {{host}}

    -
      name: "opsgenie_escalation"
      ref: "opsgenie.create_alert"
      parameters:
        message: Current disk usage in / partition is more than 50% on  {{host}}

Achin-chain meta:

---
name: "demo_kafka_chain_meta"
description: "Simple Action Chain workflow for kafka disk alert"
pack: "demo"
runner_type: "action-chain"
entry_point: "chains/demo_kafka_chain.yaml"
enabled: true
parameters:
    triggers:
        type: "string"
        description: "Trigger received"
        required: true

Action:

---
name: "kafka_demo_disk_action"
pack: "demo"
runner_type: "python-script"
description: "On receiving a trigger, ssh into the problematic hosts and perform some action."
enabled: true
entry_point: "kafka_demo_disk_action.py"
parameters:
    triggers:
        type: "string"
        description: "Trigger received"
        required: true
output_schema:
    result:
        type: "string"

when triggering the above action chain, I'm getting below error.

Error:

"error": "Failed to run task \"post_success_to_slack\". Parameter rendering failed.. Failed rendering value for action parameter \"message\" in task \"post_success_to_slack\" (template string=Current disk usage in / partition is less than 50% on {{host}}): 'host' is undefined",
 "traceback": "Traceback (most recent call last):\n  File \"/opt/stackstorm/st2/lib/python3.8/site-packages/action_chain_runner/action_chain_runner.py\", line 813, in _resolve_params\n    rendered_params = jinja_utils.render_values(\n  File \"/opt/stackstorm/st2/lib/python3.8/site-packages/st2common/util/jinja.py\", line 149, in render_values\n    raise e\n  File \"/opt/stackstorm/st2/lib/python3.8/site-packages/st2common/util/jinja.py\", line 144, in render_values\n    rendered_v = env.from_string(v).render(super_context)\n  File \"/opt/stackstorm/st2/lib/python3.8/site-packages/jinja2/environment.py\", line 1090, in render\n    self.environment.handle_exception()\n  File \"/opt/stackstorm/st2/lib/python3.8/site-packages/jinja2/environment.py\", line 832, in handle_exception\n    reraise(*rewrite_traceback_stack(source=source))\n  File \"/opt/stackstorm/st2/lib/python3.8/site-packages/jinja2/_compat.py\", line 28, in reraise\n    raise value.with_traceback(tb)\n  File \"<template>\", line 1, in top-level template code\njinja2.exceptions.UndefinedError: 'host' is undefined\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/opt/stackstorm/st2/lib/python3.8/site-packages/action_chain_runner/action_chain_runner.py\", line 534, in _run_chain\n    liveaction = self._get_next_action(\n  File \"/opt/stackstorm/st2/lib/python3.8/site-packages/action_chain_runner/action_chain_runner.py\", line 847, in _get_next_action\n    resolved_params = ActionChainRunner._resolve_params(\n  File \"/opt/stackstorm/st2/lib/python3.8/site-packages/action_chain_runner/action_chain_runner.py\", line 825, in _resolve_params\n    raise action_exc.ParameterRenderingFailedException(msg)\nst2common.exceptions.action.ParameterRenderingFailedException: Failed rendering value for action parameter \"message\" in task \"post_success_to_slack\" (template string=Current disk usage in / partition is less than 50% on {{host}}): 'host' is undefined\n"
}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with action_chain_runner.py and st2common/util/jinja.py, which appear in the rendering traceback, then compare them with the supplied rule, action-chain, meta-action, and action definitions. Document how trigger data is exposed between chain tasks and what configuration is required for the Slack and Opsgenie messages to render successfully.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
devops
Issue type
Documentation
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.