事件和事实
事件和事实之间的区别
在内部,事件和事实的处理方式没有区别。两者都代表相同的数据,但它们的使用方式有一些不同。事件用于表示某事的发生,而事实用于表示世界的状态。因此,事实是长寿命的事件。
事件会在满足规则中的条件后立即自动丢弃。事实不会被丢弃,它会保存在工作内存中,直到被显式删除。
事实可能是操作的结果,例如来自剧本的缓存事实,或者可以通过 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
注意
要使用事实,您可以使用 events
或 facts
键互换使用。
您可以结合使用 set_fact 和 retract_fact 操作来管理规则手册生命周期中的全局状态。
上面的文字描述了如何在规则手册中使用 events
或 facts
。单个匹配的 event
或多个匹配的 events
也会在执行 run_playbook 或 run_job_template 操作时,通过 extra_vars 以 ansible_eda
命名空间发送到剧本。因此,在剧本中,您应该将它们引用为 ansible_eda.event
或 ansible_eda.events
。事实不会发送到剧本。