I am trying to install a software on a set of hosts based on a condition. After executing the play I want to count on how many hosts the installation happened and how many were skipped.
I have tried declaring a variable inside the play before calling the task like below but the variable is overwritten for every host so I am not able to get the actual count: its always 1 or 0
Play:
- name: Install Junos OS
hosts: reachable_a_hosts
connection: local
gather_facts: no
roles:
- Juniper.junos
vars:
credentials:
host: "{{ loopback_v4 }}"
username: "username"
port: "{{ port }}"
timeout: 60
tasks:
- name: Extra variable test
debug:
msg: "upgrade count {{ upgrade_count }}"
- name: OS Install
import_role:
name: os_install
tasks_from: change__os
- name: debug
debug:
msg: "upgrade count {{ upgrade_count }}"
Task:
---
- name: Increment installation count
set_fact:
upgrade_count : ( {{ upgrade_count|int + 1|int }} )
when: switch_os_version != OS_version
output:
TASK [debug] *************************************
ok: [site1] => {
"msg": "upgrade count (1)"
}
ok: [site2] => {
"msg": "upgrade count (1)"
}
So I passed the variable as command line using -e
. Now the output is always 0, no matter whether condition satisfy or not
updated output
TASK [os_install : Increment installation count] *********************
ok: [site1]
ok: [site2]
TASK [debug] *************************************
ok: [site1] => {
"msg": "upgrade count 0"
}
ok: [site2] => {
"msg": "upgrade count 0"
}
Can someone help me to make the variable behave like global so that I can get the actual count?