事件与事实
事件与事实的区别
在内部处理机制上,事件(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
注意
要使用事实,你可以互换使用 events 或 facts 键。
你可以结合使用 set_fact 和 retract_fact 动作,以便在 rulebook 的生命周期内管理全局状态。
上述文本描述了如何在 rulebook 中使用 events 或 facts。当执行 run_playbook 或 run_job_template 动作时,单个匹配的 event 或多个匹配的 events 也会通过 extra_vars 在 ansible_eda 命名空间下发送到 playbook。因此,在 playbook 中,你应该将它们引用为 ansible_eda.event 或 ansible_eda.events。事实不会被发送到 playbook。