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.