Describe the bug
In the definition of a step in a workflow, if you create a parameter with the key "key", for example a POST in a WebHook:
steps:
- name: webhook
provider:
type: webhook
config: "{{ config }}"
with:
url: https://test/test
method: POST
body:
key: ALERT
host: "{{alert.service}}"
time: "{{alert.lastReceived}}"
source: "{{alert.source}}"
message: "{{alert.description}}"
The data of the POST body will be: "ALERT" and not a JSON with the keys: key, host, time, source and message.
This is because in parse_provider_parameters:
|
def parse_provider_parameters(provider_parameters: dict) -> dict: |
|
parsed_provider_parameters = {} |
|
for parameter in provider_parameters: |
|
if keyword.iskeyword(parameter): |
|
# add suffix _ to provider parameters if it's a reserved keyword in python |
|
parameter_name = parameter + "_" |
|
else: |
|
parameter_name = parameter |
|
if isinstance(provider_parameters[parameter], (str, list, int, bool)): |
|
parsed_provider_parameters[parameter_name] = provider_parameters[ |
|
parameter |
|
] |
|
elif isinstance(provider_parameters[parameter], dict): |
|
try: |
|
parsed_provider_parameters[parameter_name] = StepProviderParameter( |
|
**provider_parameters[parameter] |
|
) |
|
except Exception: |
|
# It could be a dict/list but not of ProviderParameter type |
|
parsed_provider_parameters[parameter_name] = provider_parameters[ |
|
parameter |
|
] |
|
return parsed_provider_parameters |
if the parameter is a dictionary it attempt to converted it to a StepProviderParameter and this works if the dict has a key with the name "key" because in the definition of de pydantic model "key" is the only required parameter
|
from pydantic import BaseModel |
|
|
|
|
|
class StepProviderParameter(BaseModel): |
|
key: str # the key to render |
|
safe: bool = False # whether to validate this key or fail silently ("safe") |
|
default: str | int | bool = None # default value if this key doesn't exist |
Describe the bug
In the definition of a step in a workflow, if you create a parameter with the key "key", for example a POST in a WebHook:
The data of the POST body will be: "ALERT" and not a JSON with the keys: key, host, time, source and message.
This is because in parse_provider_parameters:
keep/keep/parser/parser.py
Lines 464 to 486 in cfcf490
if the parameter is a dictionary it attempt to converted it to a StepProviderParameter and this works if the dict has a key with the name "key" because in the definition of de pydantic model "key" is the only required parameter
keep/keep/step/step_provider_parameter.py
Lines 1 to 7 in cfcf490