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?