--- # roles/pfsense_upgrade/tasks/version_detect.yml # Reads version info from the running pfSense host and sets facts. - name: Read current pfSense version string ansible.builtin.raw: cat {{ pfsense_version_file }} register: _raw_version changed_when: false - name: Read patch level (if present) ansible.builtin.raw: > test -f {{ pfsense_version_patch_file }} && cat {{ pfsense_version_patch_file }} || echo "0" register: _raw_patch changed_when: false - name: Read build timestamp (if present) ansible.builtin.raw: > test -f {{ pfsense_version_buildtime }} && cat {{ pfsense_version_buildtime }} || echo "unknown" register: _raw_buildtime changed_when: false - name: Read pfSense edition (CE vs Plus) ansible.builtin.raw: > sh -c 'pkg info pfSense 2>/dev/null | grep -i "^Name" | awk "{print \$3}"' || echo "pfSense" register: _raw_edition changed_when: false - name: Detect CPU architecture ansible.builtin.raw: uname -m register: _raw_arch changed_when: false - name: Set version facts ansible.builtin.set_fact: pfsense_current_version: "{{ _raw_version.stdout | trim }}" pfsense_current_patch: "{{ _raw_patch.stdout | trim }}" pfsense_build_time: "{{ _raw_buildtime.stdout | trim }}" pfsense_edition: "{{ _raw_edition.stdout | trim }}" pfsense_arch: "{{ _raw_arch.stdout | trim }}" # Parse major.minor from version string (e.g. "2.7.2-RELEASE" → "2.7") pfsense_major_minor: >- {{ (_raw_version.stdout | trim) | regex_replace('^(\d+\.\d+).*$', '\1') }} # Parse patch version integer (e.g. "2.7.2-RELEASE" → 2) pfsense_patch_int: >- {{ (_raw_version.stdout | trim) | regex_replace('^(\d+)\.(\d+)\.(\d+).*$', '\3') | default('0') }} # Determine if this is a RELEASE, RC, BETA, or ALPHA pfsense_release_type: >- {{ (_raw_version.stdout | trim) | regex_replace('^.*-(RELEASE|RC\d*|BETA\d*|ALPHA\d*|DEVELOPMENT).*$', '\1') | default('UNKNOWN') }} - name: Display detected version info ansible.builtin.debug: msg: - "Host : {{ inventory_hostname }}" - "Edition : {{ pfsense_edition }}" - "Version : {{ pfsense_current_version }}" - "Branch : {{ pfsense_major_minor }}" - "Release type : {{ pfsense_release_type }}" - "Build time : {{ pfsense_build_time }}" - "Architecture : {{ pfsense_arch }}"