diff --git a/mikrotikbackup_clean.yml b/mikrotikbackup_clean.yml index a9fe0ad..9cdd015 100644 --- a/mikrotikbackup_clean.yml +++ b/mikrotikbackup_clean.yml @@ -69,21 +69,27 @@ tags: backup # ---------------------------- - # Upgrade (correct MikroTik flow) + # Upgrade (robust MikroTik flow) # ---------------------------- - name: Trigger update check community.routeros.command: commands: /system package update check-for-updates once - register: update_trigger tags: upgrade - - name: Get update info (structured) + - name: Poll update status until ready community.routeros.command: commands: /system package update print as-value register: update_info + retries: 10 + delay: 3 + until: > + update_info.stdout is defined and + update_info.stdout[0] is defined and + update_info.stdout[0]['status'] is defined and + update_info.stdout[0]['status'] != 'finding out latest version...' tags: upgrade - # Optional debug (remove later) + # Optional debug (can remove later) - name: DEBUG update info debug: var: update_info.stdout[0] @@ -96,6 +102,21 @@ set_fact: installed_version: "{{ update_info.stdout[0]['installed-version'] | default('unknown') }}" latest_version: "{{ update_info.stdout[0]['latest-version'] | default('unknown') }}" + update_status: "{{ update_info.stdout[0]['status'] | default('unknown') }}" + tags: upgrade + + # ---------------------------- + # Detect issues + # ---------------------------- + - name: Detect update failure + set_fact: + update_failed: "{{ 'error' in update_status or 'failed' in update_status }}" + tags: upgrade + + - name: Warn if update check failed + debug: + msg: "WARNING: Update check failed on {{ router_name }} (status={{ update_status }})" + when: update_failed tags: upgrade # ---------------------------- @@ -105,21 +126,16 @@ set_fact: upgrade_needed: >- {{ - installed_version != 'unknown' - and latest_version != 'unknown' - and installed_version != latest_version + not update_failed and + installed_version != 'unknown' and + latest_version != 'unknown' and + installed_version != latest_version }} tags: upgrade - name: Show decision debug: - msg: "Router={{ router_name }} installed={{ installed_version }} latest={{ latest_version }} upgrade_needed={{ upgrade_needed }}" - tags: upgrade - - - name: Handle unknown version case - debug: - msg: "WARNING: Could not determine versions on {{ router_name }} (likely no internet)" - when: installed_version == 'unknown' or latest_version == 'unknown' + msg: "Router={{ router_name }} installed={{ installed_version }} latest={{ latest_version }} status={{ update_status }} upgrade_needed={{ upgrade_needed }}" tags: upgrade - name: Skip upgrade if already latest @@ -172,12 +188,14 @@ # ---------------------------- - name: Result when no upgrade set_fact: - cmk_state: 0 + cmk_state: "{{ 2 if update_failed else 0 }}" cmk_output: >- - OK - router={{ router_name }} + {{ 'CRIT' if update_failed else 'OK' }} - + router={{ router_name }} backup=ok installed={{ installed_version }} latest={{ latest_version }} + status={{ update_status }} upgrade_needed=no backup_file={{ backup_file | default('n/a') }} backup_ts={{ ts }} @@ -193,6 +211,7 @@ backup=ok installed_before={{ installed_version }} latest={{ latest_version }} + status={{ update_status }} upgrade_needed=yes upgraded_to={{ post_upgrade_version }} backup_file={{ backup_file | default('n/a') }}