12장. 이벤트 필터 플러그인
이벤트에는 불필요한 추가 데이터가 있고 규칙 엔진을 덮어쓸 수 있는 경우가 있습니다. 규칙에 중요한 사항에 집중할 수 있도록 이벤트 필터를 사용하여 추가 데이터를 제거합니다. 이벤트 필터에서는 규칙 조건이 데이터와 더 적합할 수 있도록 데이터의 형식을 변경할 수도 있습니다.
이벤트는 Python 코드로 정의되고 컬렉션으로 배포됩니다. 기본 eda 컬렉션에 는 다음과 같은 필터가 있습니다.
이름 | 설명 |
---|---|
json_filter | 이 필터는 이벤트 오브젝트에서 키를 포함 및 제외 |
dashes_to_underscores | 이 필터는 페이로드의 모든 키의 대시를 밑줄로 변경합니다. |
ansible.eda.insert_hosts_to_meta | 이 필터는 ansible-rulebook에서 해당 정보를 찾아 사용할 수 있도록 이벤트에 호스트 정보를 추가하는 데 사용됩니다. |
ansible.eda.normalize_keys | 이 필터는 알파 숫자 이외의 키를 밑줄로 변경하려는 경우에 사용됩니다. |
이벤트 필터를 연결한 후 이벤트 필터를 연결할 수 있으며 업데이트된 데이터는 하나의 필터에서 다음으로 전송됩니다. 이벤트 필터는 소스를 정의한 후 룰북에 정의됩니다. 룰북이 소스 플러그인을 시작할 때 올바른 필터를 연결하고 데이터를 큐에 배치하기 전에 변환합니다.
예
sources: - name: azure_service_bus ansible.eda.azure_service_bus: conn_str: "{{connection_str}}" queue_name: "{{queue_name}}" filters: - json_filter: include_keys: ['clone_url'] exclude_keys: ['*_url', '_links', 'base', 'sender', 'owner', 'user'] - dashes_to_underscores:
이 예에서 데이터는 먼저 json_filter
를 통과한 다음 dashes_to_underscores
필터를 통해 전달됩니다. 이벤트 페이로드에서 키는 문자, 숫자, 밑줄만 포함할 수 있습니다. 마침표(.)는 중첩된 키에 액세스하는 데 사용됩니다.
모든 이벤트는 이벤트의 출처를 기록해야 하므로 eda.builtin.insert_meta_info
는 소스 이름
,유형
, received_at
을 추가하기 위해 ansible-rulebook에 의해 자동으로 추가됩니다. received_at
는 UTC ISO8601 형식으로 날짜 시간을 저장하고 microseconds를 포함합니다. uuid
는 이벤트의 고유 ID를 저장합니다. 메타 키는
이벤트 및 이벤트에 대한 메타데이터를 저장하는 데 사용됩니다. aap-server에서 이벤트를 올바르게 보고하는 데 필요합니다.
12.1. 이벤트 필터 작성
이벤트 필터는 이벤트 데이터에서 변환을 수행하는 python 모듈의 함수입니다. 이벤트 데이터 구조에서 데이터를 제거, 추가, 변경 또는 이동할 수 있습니다. 이벤트 필터는 이벤트를 첫 번째 인수로 사용하고 추가 키워드 인수는 룰북의 구성에서 제공합니다.
기본 구조는 다음과 같습니다.
# my_namespace.my_collection/extensions/eda/plugins/event_filter/my_filter.py def main(event: dict, arg1, arg2): # Process event data here return event
이 필터를 이벤트 소스의 필터 목록에 추가하여 룰북에서 사용할 수 있습니다.
sources: - name: azure_service_bus ansible.eda.azure_service_bus: conn_str: "{{connection_str}}" queue_name: "{{queue_name}}" filters: - my_namespace.my_collection.my_filter: arg1: hello arg2: world
추가 리소스
권한을 부여하는 방법에 대한 자세한 예제는 ansible.eda 컬렉션의 이벤트 필터 플러그인을 참조하십시오.