- name: Checkmk | Collect managed change summary ansible.builtin.set_fact: _aim_checkmk_changes: '{{ _aim_check_copies | default({}) | aim_report_checkmk_changes(_checkmk_selected_scripts, _checkmk_plugins_update | default({}), _aim_unifi_write | default({}), _aim_opposite_remove | default({}), _checkmk_unifi_effective, ansible_check_mode) }}' # No supported Windows package-inventory module exposes arbitrary installed MSI/registry products. # Keep this bounded read-only registry query until an official module covers that data. - name: Checkmk | Query Windows installed version ansible.windows.win_shell: | $ErrorActionPreference = 'Stop' $roots = @('HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*') $products = @(Get-ItemProperty -Path $roots -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -match '^(Check_MK|Checkmk|Check MK).*Agent' }) $versions = @($products | Select-Object -ExpandProperty DisplayVersion -Unique) $version = $null if ($versions.Count -eq 1) { $version = [string]$versions[0] } @{ installed=($products.Count -gt 0); version=$version; version_source='registry' } | ConvertTo-Json -Compress register: _aim_checkmk_version_raw changed_when: false check_mode: false when: ansible_facts.os_family == 'Windows' - name: Checkmk | Collect Linux package facts ansible.builtin.package_facts: manager: auto when: ansible_facts.os_family != 'Windows' - name: Checkmk | Record Linux installed package rows ansible.builtin.set_fact: _aim_checkmk_linux_package_rows: "{{ ansible_facts.packages.get('check-mk-agent', []) }}" when: ansible_facts.os_family != 'Windows' - name: Checkmk | Observe Windows service state ansible.windows.win_service_info: name: '{{ item }}' loop: '{{ _checkmk_windows_services | default([]) }}' register: _aim_checkmk_final_services when: ansible_facts.os_family == 'Windows' - name: Checkmk | Collect Linux service facts ansible.builtin.service_facts: when: ansible_facts.os_family != 'Windows' - name: Checkmk | Observe Linux unit state ansible.builtin.set_fact: _aim_checkmk_unit_state: >- {{ ansible_facts.services.get(_checkmk_linux_units | first, {'name': _checkmk_linux_units | first, 'state': 'unknown'}) }} when: ansible_facts.os_family != 'Windows' - name: Checkmk | Build installed state report ansible.builtin.set_fact: _aim_checkmk_state: >- {{ ( (_aim_checkmk_version_raw.stdout | from_json) if ansible_facts.os_family == 'Windows' else { 'installed': (_aim_checkmk_linux_package_rows | default([]) | length) > 0, 'version': ( (_aim_checkmk_linux_package_rows | first).version if (_aim_checkmk_linux_package_rows | default([]) | length) == 1 else none ), 'version_source': 'package_facts' } ) | aim_report_checkmk_state( ( _aim_checkmk_final_services.results | selectattr('services', 'defined') | map(attribute='services') | flatten ) if ansible_facts.os_family == 'Windows' else [_aim_checkmk_unit_state], _aim_checkmk_changes, _checkmk_package_install.changed | default(false), ansible_check_mode ) }}