I have a playbook in order to run a shell command to count the number of updates.
I would like to display this result in a file but this result is false.
My playbook :
- name: Listing packages
hosts: all
gather_facts: false
tasks:
- name: Count number of updates
shell: yum check-update | wc -l
register: nbupdates
- name: Display number of updates
debug:
var: nbupdates.stdout_lines
- name: output to html file
template:
src: ./jinja/src/tpl_dashboard_update.j2
dest: ./jinja/dst/dashboard_update.html
force: yes
delegate_to: localhost
My jinja template is this one:
{% for host in vars['play_hosts'] %}
{{ host | upper }} : we have {{ nbupdates.stdout_lines[0] }} updates
{% endfor %}
When I run the playbook, I always have the same number of updates for each server like if the loop is not working.
What I'm doing wrong?
There are a number of problems with your template.
vars
is an undocumented internal variable with undesirable behaviour and should not be used.vars
is completely unnecessary, so you can just remove it instead of replacing it with the vars
lookup.play_hosts
is deprecated and should not be used.run_once
so that it only runs once, instead of once for each server.hostvars
to access information about other hosts instead of always using the value for the current host. - name: output to html file
template:
src: ./jinja/src/tpl_dashboard_update.j2
dest: ./jinja/dst/dashboard_update.html
force: yes
delegate_to: localhost
run_once: true
{% for host in ansible_play_hosts %}
{{ host | upper }} : we have {{ hostvars[host].nbupdates.stdout_lines.0 }} updates
{% endfor %}