事件和事实

事件和事实之间的区别

在内部,事件和事实的处理方式没有区别。两者都代表相同的数据,但它们的使用方式有一些不同。事件用于表示某事的发生,而事实用于表示世界的状态。因此,事实是长寿命的事件。

事件会在满足规则中的条件后立即自动丢弃。事实不会被丢弃,它会保存在工作内存中,直到被显式删除。

事实可能是操作的结果,例如来自剧本的缓存事实,或者可以通过 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 操作来管理规则手册生命周期中的全局状态。

上面的文字描述了如何在规则手册中使用 eventsfacts。单个匹配的 event 或多个匹配的 events 也会在执行 run_playbook 或 run_job_template 操作时,通过 extra_vars 以 ansible_eda 命名空间发送到剧本。因此,在剧本中,您应该将它们引用为 ansible_eda.eventansible_eda.events。事实不会发送到剧本。