AnsiblePilot — Master Ansible Automation

AnsiblePilot is the leading resource for learning Ansible automation, DevOps, and infrastructure as code. Browse over 1,400 tutorials covering Ansible modules, playbooks, roles, collections, and real-world examples. Whether you are a beginner or an experienced engineer, our step-by-step guides help you automate Linux, Windows, cloud, containers, and network infrastructure.

Popular Topics

About Luca Berton

Luca Berton is an Ansible automation expert, author of 8 Ansible books published by Apress and Leanpub including "Ansible for VMware by Examples" and "Ansible for Kubernetes by Example", and creator of the Ansible Pilot YouTube channel. He shares practical automation knowledge through tutorials, books, and video courses to help IT professionals and DevOps engineers master infrastructure automation.

Event-Driven Ansible Migration Guide: From ansible.eda to eda.builtin and community.eda (AAP 2.7)

By Luca Berton · Published 2026-06-29 · Category: installation

Migration guide for Event-Driven Ansible AAP 2.7: move from ansible.eda to eda.builtin and community.eda, with AWS and Azure namespace updates.

Ansible Automation Platform 2.7 reorganizes Event-Driven Ansible (EDA) event sources and filters. Several plugins previously shipped in the ansible.eda collection are moving to new namespaces: core plugins become built-ins (eda.builtin), cloud sources move to their respective cloud collections, and some community-maintained sources move to community.eda.

This guide explains each migration path and how to update your rulebooks.

Why the Reorganization?

The EDA plugin landscape grew organically and the ansible.eda collection became a catch-all for sources of varying maintenance levels. In AAP 2.7, Red Hat is separating content into three clear tiers:

  1. eda.builtin — Core sources and filters baked into ansible-rulebook. Red Hat maintained, no collection install required.
  2. Cloud collections (amazon.aws, azure.azcollection) — Cloud-specific event sources maintained by the respective cloud teams alongside their automation content.
  3. community.eda — Community-maintained sources with no Red Hat engineering support.
The original ansible.eda namespace keeps backward-compatible mappings for now, but those aliases are no longer actively maintained. Update your rulebooks before the aliases are removed in a future release.

See also: What's New in Event-Driven Ansible: AAP 2.6 and 2.7 Features

Migration Path 1: ansible.eda → eda.builtin

These plugins are now built-in modules in ansible-rulebook. No collection install needed — they're available in every EDA environment.

Old namespaceNew namespaceType
ansible.eda.dashes_to_underscoreseda.builtin.dashes_to_underscoresfilter
ansible.eda.genericeda.builtin.genericsource
ansible.eda.insert_hosts_to_metaeda.builtin.insert_hosts_to_metafilter
ansible.eda.json_filtereda.builtin.json_filterfilter
ansible.eda.normalize_keyseda.builtin.normalize_keysfilter
ansible.eda.pg_listenereda.builtin.pg_listenersource
ansible.eda.rangeeda.builtin.rangesource
ansible.eda.webhookeda.builtin.webhooksource

Before (ansible.eda namespace)

# Old rulebook — uses ansible.eda namespace
- name: Handle webhook events
  hosts: all
  sources:
    - ansible.eda.webhook:
        host: 0.0.0.0
        port: 5000
  filters:
    - ansible.eda.json_filter:
        include_keys:
          - event_type
          - payload
    - ansible.eda.normalize_keys:
  rules:
    - name: React to deployment events
      condition: event.payload.event_type == "deployment"
      action:
        run_job_template:
          name: "Deploy Application"
          organization: "Default"

After (eda.builtin namespace)

# Updated rulebook — uses eda.builtin namespace
- name: Handle webhook events
  hosts: all
  sources:
    - eda.builtin.webhook:
        host: 0.0.0.0
        port: 5000
  filters:
    - eda.builtin.json_filter:
        include_keys:
          - event_type
          - payload
    - eda.builtin.normalize_keys:
  rules:
    - name: React to deployment events
      condition: event.payload.event_type == "deployment"
      action:
        run_job_template:
          name: "Deploy Application"
          organization: "Default"

The tick source is a special case — there is no eda.builtin.tick. Replace it with eda.builtin.generic (for a persistent single-event source) or eda.builtin.range (for a count-based loop):

# Old: ansible.eda.tick (fires one event repeatedly)
sources:
  - ansible.eda.tick:
      delay: 30

# New option 1: eda.builtin.range (fires N events)
sources:
  - eda.builtin.range:
      limit: 100
      delay: 30

# New option 2: eda.builtin.generic (fires one event, then exits)
sources:
  - eda.builtin.generic:
      payload:
        - message: "scheduled check"

Migration Path 2: Cloud Sources → Cloud Collections

AWS and Azure event sources are moving to their respective certified cloud collections.

AWS Event Sources

The DE-supported decision environment now includes amazon.aws. After upgrading to the new DE-supported image, update these namespaces:

Old namespaceNew namespace
ansible.eda.aws_cloudtrailamazon.aws.aws_cloudtrail
ansible.eda.aws_sqs_queueamazon.aws.aws_sqs_queue
# Before: AWS CloudTrail rulebook
- name: Monitor CloudTrail events
  hosts: all
  sources:
    - ansible.eda.aws_cloudtrail:
        region: us-east-1
  rules:
    - name: Detect IAM changes
      condition: event.detail.eventSource == "iam.amazonaws.com"
      action:
        run_job_template:
          name: "Security Alert - IAM Change"
          organization: "Security Operations"
# After: Updated to amazon.aws namespace
- name: Monitor CloudTrail events
  hosts: all
  sources:
    - amazon.aws.aws_cloudtrail:
        region: us-east-1
  rules:
    - name: Detect IAM changes
      condition: event.detail.eventSource == "iam.amazonaws.com"
      action:
        run_job_template:
          name: "Security Alert - IAM Change"
          organization: "Security Operations"

Azure Event Sources

# Before: Azure Service Bus rulebook
- name: Process Azure Service Bus messages
  hosts: all
  sources:
    - ansible.eda.azure_service_bus:
        conn_str: "{{ azure_servicebus_connection_string }}"
        queue: "automation-events"
  rules:
    - name: Handle VM scale events
      condition: event.message_type == "vm_scale_request"
      action:
        run_job_template:
          name: "Azure VM Scale Workflow"
          organization: "Cloud Operations"
# After: Updated to azure.azcollection namespace
- name: Process Azure Service Bus messages
  hosts: all
  sources:
    - azure.azcollection.azure_service_bus:
        conn_str: "{{ azure_servicebus_connection_string }}"
        queue: "automation-events"
  rules:
    - name: Handle VM scale events
      condition: event.message_type == "vm_scale_request"
      action:
        run_job_template:
          name: "Azure VM Scale Workflow"
          organization: "Cloud Operations"

See also: Pluralsight The IT Ops Sessions: Event-Driven Ansible

Migration Path 3: ansible.eda → community.eda

These sources are being removed from the Red Hat certified ansible.eda collection and moving to community.eda. Red Hat engineering no longer maintains them, but community contributions continue.

Old namespaceNew namespaceNotes
ansible.eda.filecommunity.eda.fileReads events from a file
ansible.eda.file_watchcommunity.eda.file_watchWatches filesystem changes
ansible.eda.journaldcommunity.eda.journaldReads from systemd journal
ansible.eda.url_checkcommunity.eda.url_checkHTTP polling source
ansible.eda.tickeda.builtin.generic or eda.builtin.rangeNo community equivalent
To use these after migration, you need a custom decision environment that includes the community.eda collection. The DE-supported and DE-minimal images provided by Red Hat do not include community.eda.

Building a Custom DE with community.eda

# execution-environment.yml for custom DE
version: 3
base_image:
  name: registry.redhat.io/ansible-automation-platform/de-minimal-rhel9:latest

dependencies:
  galaxy:
    collections:
      - name: community.eda
        version: ">=1.0.0"
# Build the custom DE
ansible-builder build \
  --file execution-environment.yml \
  --tag custom-de-with-community-eda:1.0 \
  --container-runtime podman

Example: Migrating a journald Rulebook

# Before: ansible.eda.journald
- name: Monitor system journal
  hosts: all
  sources:
    - ansible.eda.journald:
        unit: sshd.service
  rules:
    - name: Detect SSH failures
      condition: "'Failed password' in event.MESSAGE"
      action:
        run_job_template:
          name: "Security Alert - SSH Brute Force"
          organization: "Security Operations"
# After: community.eda.journald (requires custom DE)
- name: Monitor system journal
  hosts: all
  sources:
    - community.eda.journald:
        unit: sshd.service
  rules:
    - name: Detect SSH failures
      condition: "'Failed password' in event.MESSAGE"
      action:
        run_job_template:
          name: "Security Alert - SSH Brute Force"
          organization: "Security Operations"

Using Older DE Images as a Stopgap

Red Hat provides a transition option: keep using your existing ansible.eda namespace rulebooks with an older version of DE-supported or DE-minimal while you update your rulebooks. The older DEs still carry the ansible.eda collection with the deprecated plugins.

This is not a long-term solution — plan your migration within the AAP 2.7 lifecycle.

See also: Pluralsight The IT Ops Sessions: Ansible Sign, Verify, Event-Driven and Ansible Generative AI

Bulk Rulebook Migration Script

To find all affected rulebook files in your repository:

# Find rulebooks using deprecated ansible.eda sources/filters
grep -r "ansible\.eda\." /path/to/rulebooks/ --include="*.yml" -l

# Show specific deprecated plugin usage
grep -rn \
  -e "ansible\.eda\.webhook" \
  -e "ansible\.eda\.json_filter" \
  -e "ansible\.eda\.normalize_keys" \
  -e "ansible\.eda\.pg_listener" \
  -e "ansible\.eda\.range" \
  -e "ansible\.eda\.generic" \
  -e "ansible\.eda\.aws_" \
  -e "ansible\.eda\.azure_" \
  -e "ansible\.eda\.file" \
  -e "ansible\.eda\.journald" \
  -e "ansible\.eda\.tick" \
  -e "ansible\.eda\.url_check" \
  /path/to/rulebooks/

Bulk rename for eda.builtin targets (the safe subset with no behavior changes):

# Replace eda.builtin targets in-place
find /path/to/rulebooks -name "*.yml" -exec sed -i \
  -e 's/ansible\.eda\.webhook/eda.builtin.webhook/g' \
  -e 's/ansible\.eda\.json_filter/eda.builtin.json_filter/g' \
  -e 's/ansible\.eda\.normalize_keys/eda.builtin.normalize_keys/g' \
  -e 's/ansible\.eda\.pg_listener/eda.builtin.pg_listener/g' \
  -e 's/ansible\.eda\.range/eda.builtin.range/g' \
  -e 's/ansible\.eda\.generic/eda.builtin.generic/g' \
  -e 's/ansible\.eda\.dashes_to_underscores/eda.builtin.dashes_to_underscores/g' \
  -e 's/ansible\.eda\.insert_hosts_to_meta/eda.builtin.insert_hosts_to_meta/g' \
  {} \;

Test each rulebook in a non-production activation before deploying the migrated versions.

FAQ

Do I need to update if my rulebooks still work?

For now, ansible.eda backward-compatible mappings remain in AAP 2.7. However, those plugins are no longer actively maintained — bugs and new features will only land in the new namespaces. Plan migration before AAP 2.8.

Where does community.eda come from?

community.eda is available on Ansible Galaxy. Because it's community-supported (not Red Hat certified), it's not included in Red Hat's DE images. Build a custom DE to use it.

What happens to the tick source?

ansible.eda.tick has no maintained equivalent in community.eda. Use eda.builtin.range for a count-bounded periodic source or eda.builtin.generic for a one-shot event.

Do the decision environment images need to be updated?

Yes. To use amazon.aws and azure.azcollection event sources, pull the updated DE-supported decision environment which now includes both collections. For community.eda, build a custom DE as shown above.

Conclusion

The EDA plugin reorganization in AAP 2.7 aligns each source and filter with the team that maintains it, improving long-term quality and release cadence. The eda.builtin migration is a mechanical namespace swap. Cloud source migration requires the updated DE-supported image. Community sources require a custom DE. With the bulk migration script, most teams can update their rulebook repositories in an afternoon.

Category: installation

Browse all Ansible tutorials · AnsiblePilot Home