Ideally Payload Data should contain HOSTNAME of the Router. Recently we
have implemented many projects for different scenarios, here is my
understanding and experience.


If event source that triggers events does not contain any data related to
the hostname for the playbook to execute on, the playbook runs on all
inventory hosts, as it is written to run on all hosts, as shown below

---
hosts: all
.......

So, the EDA will look for path event.payload.hostname. however our event
look like below

2023-12-02 15:43:18,340 - ansible_rulebook.rule_set_runner - INFO -
substitute_variables
[{'name': 'recieved-event.yml'}]
[{
  'events': {
    'm_0': {
      'payload': {
        'message': 'LowDiskSpace',
        'hostname': 'vbrhelhyb01',
        'architecture': 'x86_64',
      },

So, we need to use this filter ansible.eda.insert_hosts_to_meta to convert
above hostname to required format and include in event.meta because the
webhook plugin is putting server name with key hostname in the payload in a
nested field in the event. ansible-rulebook expects to find meta at the
first level. In event.meta not in event.payload.meta

---
- name: Listen for Events on a Webhook
  hosts: all

  sources:

    - ansible.eda.webhook:
        host: 0.0.0.0
        port: 5000
      filters:
        - ansible.eda.insert_hosts_to_meta:
            host_path: payload.hostname
  rules:

    - name: Conditions amd Actions to Process Alerts from Manual Generated
Events

now event is modified and  is posted along with hosts under meta

Now you can see the change in the event, with hosts key added

2023-12-02 17:24:57,505 - ansible_rulebook.rule_set_runner - INFO -
substitute_variables
[{'name': 'recieved-event.yml'}]
[{
  'events': {
    'm_0': {
      'payload': {
        'message': 'LowDiskSpace',
        'hostname': 'vbrhelhyb01',
        'proessescount': '150'
      },
      'meta': {
        'endpoint': 'endpoint',
        'headers': {
          'Host': '10.10.4.217:5000',
          'Content-Length': '290'
        },
        'hosts': ['vbrhelhyb01'],
        'source': {
          'name': 'ansible.eda.webhook',
          'type': 'ansible.eda.webhook'
        },
        'received_at': '2023-12-02T09:24:57.307288Z',
        'uuid': '9e70cff0-22de-47af-a251-e93e57010831'
      }
    }
  }
}]

Just Assumption only, If the router is not sending any IP address/hostname
in the event, at least it should be in the HTTP header. Therefore, you need
to have a Python plugin that can extract that information for you.

Hope this is helpful


On Thu, Mar 7, 2024 at 12:23 AM Michael Schwartzkopff <
heinz6.mei...@gmail.com> wrote:

> Hi,
>
> I want to write a rulebook that triggers a playbook run on some specific
> event. Basically I want to configure an interface of a router. My event
> passes all the interface data in the event.payload.data.
>
> The core part of the runbook looks like:
>
>       action:
>         run_playbook:
>           name: set_interface.yml
>           extra_vars:
>             interface: "{{ event.payload.data }}"
>
> The rule is triggered and the playbook starts to run. BUT the playbook
> does not know which host to target. The output is:
>
> 2024-03-06 15:42:52,146 - ansible_rulebook.action.run_playbook - DEBUG -
> Calling Ansible runner
> [WARNING]: provided hosts list is empty, only localhost is available. Note
> that
> the implicit localhost does not match 'all'
>
> PLAY [Test playbook]
> ***********************************************************
> skipping: no hosts matched
>
> How can I tell the playbook from the action, which host to target?
>
> Michael.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to ansible-project+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/CAFFTi_%2BV4xykLD%3DfSSX6-S4LjHQXzmLKMnQCK2P_fz_P_KkcHw%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CAFFTi_%2BV4xykLD%3DfSSX6-S4LjHQXzmLKMnQCK2P_fz_P_KkcHw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAAypteKpGj0rb%2B79oeoMvpbaOtHATKqt%3DJf2%2BJvvGO1oX%2BPM1A%40mail.gmail.com.

Reply via email to