Ansible: gather facts in a task

ansible

Right now in order to pull in ELK servers I have. Something like this for my main web app playbook

---

- hosts: elk
  gather_facts: true
  tags: ['apps']

- hosts: apps
  become: true
  roles:
    - common
    - app
  tags:
    - apps

That works fine but if I do something like

ansible-playbook ./runs/app.yml --limit app-01.domain.com

It skips over the elk servers.

So filebeat is setup in the common role. Is there anyway in like common/roles/filebeat.yml to gather_facts for the elk servers so I can clean it up and not skip them over if I want to limit ansible run to a single app server also?

Best Answer

delegate_facts

Delegated facts learn facts from some other host, even if that other host wasn't part of the play. Slightly modified from the documentation example play:

- hosts: apps
  tasks:
    - name: gather facts from apps
      tags: ['apps']
      setup:
      delegate_to: "{{item}}"
      delegate_facts: True
      with_items: "{{groups['elk']}}"