Using set_stats

Hi all,

Before using set_stats in Ansible Tower, I’m doing some test to understand it.
I’m taking the hostname in playbook via set_stats but I cannot check if my variable are correct.
Here’s my script portion:

I'm taking the hostname in playbook via set_stats but I cannot check if my
variable are correct.
---
- hosts: all
  gather_facts: yes

  pre_tasks:
    - name: get the hostname
      set_stats:
        data:
          inv_host: "{{ inventory_hostname }}"
   
    - name: get result
      debug:
        msg: "{{ inv_host}}"
[...]
And here's the result:
fatal: [xx.xx.xx.xx]: FAILED! => ... The error was: 'inv_host' is undefined

The variable "inv_host" is valid in the context of custom status
only. The module set_stats works as expected. For example

cat pb.yml

- hosts: localhost
  tasks:
    - set_stats:
        data:
          inv_host: "{{ inventory_hostname }}"

ANSIBLE_SHOW_CUSTOM_STATS=True ansible-playbook pb.yml

   ...
PLAY RECAP **************************************************
localhost: ok=2 changed=0 unreachable=0 failed=0 skipped=0
           rescued=0 ignored=0

CUSTOM STATS: ***********************************************

  RUN: inv_host: localhost

Hi Vladimir,

Ok, It’s running in this context by me too, thank you for your help…
Does this means, that we cannot parse this variable in this role?

Best regards,
H

The set_stats module does not make the “stats” available to the current playbook.

The workflow from tower is effectively to use set_stats to accumulate some data for a subsequent playbook in a workflow, then tower collects these stats, and passes them back in as extra-vars. So effectively, they are only useful to the subsequent playbooks in a workflow.

I have an example callback and instructions that showcase this flow outside of tower:

https://gist.github.com/sivel/eaa83e2b1c36719359e0671afa8cd039

If you want the vars available from within the current playbook, and the subsequent playbook, you will need both a set_facts and a set_stats task.