事件与事实

事件与事实的区别

在内部处理机制上,事件(Events)和事实(Facts)没有区别。两者代表相同的数据,但在使用方式上有所不同。事件用于表示某个事情的发生,而事实用于表示世界的某种状态。因此,事实可以被视为一个长期存在的事件。

一个事件在满足规则中的条件后会被自动丢弃。而一个事实不会被丢弃,它会一直保留在工作内存中,直到被明确删除。

事实可以是某个动作的结果,例如来自 playbook 的缓存事实,也可以通过 set_fact 动作进行明确定义。

你不能在同一个条件中将事实和事件结合使用,因为对于规则引擎来说它们是不同的事件。这样做永远不会匹配成功。

name: An automatic remediation rule
condition: event.outage == true and facts.beta_enabled != true
action:
  run_playbook:
  name: remediate_outage.yml

相反,必须使用 all 运算符。

name: An automatic remediation rule
condition:
  all:
    - event.outage == true
    - facts.beta_enabled != true
action:
  run_playbook:
  name: remediate_outage.yml

注意

要使用事实,你可以互换使用 eventsfacts 键。

你可以结合使用 set_factretract_fact 动作,以便在 rulebook 的生命周期内管理全局状态。

上述文本描述了如何在 rulebook 中使用 eventsfacts。当执行 run_playbook 或 run_job_template 动作时,单个匹配的 event 或多个匹配的 events 也会通过 extra_vars 在 ansible_eda 命名空间下发送到 playbook。因此,在 playbook 中,你应该将它们引用为 ansible_eda.eventansible_eda.events。事实不会被发送到 playbook。