匹配多个事件

在一条规则中,你可以匹配来自同一来源的一个或多个事件。一旦所有事件都匹配成功,它将执行相应的动作。此时有两个额外的变量会被传递到 playbook 中

  • events

  • 事实

示例

condition:
  all:
   - event.i == 1
   - event.i == 2

传递到 playbook 中的变量将具有以下值

{
    "variables": {
        "events": {
            "m_0": {
                "i": 1
            },
            "m_1": {
                "i": 2
            }
        },
        "facts": {
            "m_0": {
                "i": 1
            },
            "m_1": {
                "i": 2
            }
        }
    }
}

带有赋值的示例

condition:
  all:
   - events.first << event.i == 1
   - events.second << event.i == 2

传递到 playbook 中的变量将具有以下值

{
    "variables": {
        "events": {
            "first": {
                "i": 1
            },
            "second": {
                "i": 2
            }
        },
        "facts": {
            "first": {
                "i": 1
            },
            "second": {
                "i": 2
            }
        }
    }
}

注意事项

同一个事件表达式不能被使用多次。在下面的情况中,event.i == 1 被使用了两次,因此它将无法匹配任何内容

condition:
  all:
   - events.first << event.i == 1
   - event.i == 1

在下面的情况中,event.i == 2 被使用了两次,因此它将无法匹配任何内容

condition:
     all:
       - events.saveme << event.i == 2 and event.i > 0
       - event.i == 2

一旦某个事件被匹配,它将被移除,且不会匹配任何后续条件。这种情况是可以工作的,因为事件表达式不同

condition:
     all:
       - events.saveme << event.i == 2 and event.i > 0
       - event.i == 0