Events and Facts
Differences between Events and Facts
Internally, there are no differences on how Events and Facts are processed. Both represent the same data, but there are some differences in the way they are used. Events are used to represent the occurrence of something, while Facts are used to represent the state of the world. So, a fact is long live event.
An event is automatically discarded as soon it meets the condition within a rule. A fact is not discarded, it is kept in the working memory until it is explicitly removed.
Facts can come as a result of an action, for example, cached facts from the playbook, or can be defined explicitly through the set_fact
action.
You can not combine facts and events in the same condition, because there are different events for the rule engine. This will never match:
name: An automatic remediation rule
condition: event.outage == true and facts.beta_enabled != true
action:
run_playbook:
name: remediate_outage.yml
Instead, the all
operator must be used:
name: An automatic remediation rule
condition:
all:
- event.outage == true
- facts.beta_enabled != true
action:
run_playbook:
name: remediate_outage.yml
Note
To use facts you may use either events
or facts
keys interchangeably.
You can combine set_fact and retract_fact actions to manage the global state during the lifecycle of your rulebook.
The text above describes how to use events
or facts
in a rulebook. A single matched event
or multiple matched events
are also
sent to a playbook through extra_vars under namespace ansible_eda
when a run_playbook or run_job_template action is executed. So in a playbook
you should reference them as ansible_eda.event
or ansible_eda.events
. Facts are not sent to playbooks.