--- # httpd-2.4.6-18.el7_0 # item | regex_replace('(\\w+-\\d+)\\..*$', '\\1') - name: Debug item ansible.builtin.debug: var: item # - name: Regex test 1 # ansible.builtin.debug: # msg: "{{ item | regex_replace('(\\w+.?)-(\\d+\\..*)(\\.el.*$)', '\\1 + \\2 + \\3') }}" # - name: Regex test 2 # ansible.builtin.debug: # msg: "{{ item | regex_replace('^.*?-(\\d+.*$)', '\\1') }}" # - name: Regex test 3 # ansible.builtin.debug: # msg: "{{ item | regex_replace('^(\\w+.*?)-\\d+.*?$', '\\1') }}" # - name: Regex test # ansible.builtin.debug: # msg: "{{ item | regex_replace('(\\w+.?)-(\\d+\\..*$)', '\\1 + \\2') }}" # - name: Set package name and version facts # ansible.builtin.set_fact: # pkg_name: "{{ item | regex_replace('(\\w+.?)-\\d+\\..*$', '\\1') }}" # pkg_vers: "{{ item | regex_replace('\\w+.?-(\\d+\\..*$)', '\\1') }}" - name: Set package name and version facts ansible.builtin.set_fact: pkg_name: "{{ item | regex_replace('^(\\w+.*?)-\\d+.*?$', '\\1') }}" pkg_vers: "{{ item | regex_replace('^.*?-(\\d+.*$)', '\\1') }}" - name: Display package name and version ansible.builtin.debug: msg: "Package: {{ pkg_name }} || Version: {{ pkg_vers }}" # this is the right track... # conditions: # - versionlock doesnt exist for pkg # - add versionlock # - versionlock exists for pkg and version matches # - move on # - versionlock exists for pkg and version mismatch # - clear current lock # - add new lock for new version # - pkg doesnt exist # - fail with message stating to check pkg name/version # - name: End host # ansible.builtin.meta: end_host # - name: "Check if lock currently exists for {{ item }}" # ansible.builtin.command: # cmd: "grep -c {{ item | regex_replace('(\\w+-\\d+)\\..*$', '\\1') }} /etc/yum/pluginconf.d/versionlock.list" # failed_when: versionlock_check['rc'] not in [0, 1] # changed_when: false # register: versionlock_check # - name: Debug versionlock_check # ansible.builtin.debug: # var: versionlock_check # # verbosity: 1 # - name: "Clear old version lock if present for {{ item }}" # when: # - versionlock_check['rc'] == 0 # block: # - name: "Clear existing locks via wildcard match for {{ item }}" # noqa: command-instead-of-module # ansible.builtin.command: "yum versionlock delete '{{ item | regex_replace('(\\w+-\\d+)\\..*$', '\\1') }}*'" # register: versionlock_rm # - name: Debug versionlock_rm # ansible.builtin.debug: # var: versionlock_rm # - name: "Version lock package: {{ item }}" # # when: # # - versionlock_check['rc'] == 1 # block: # - name: "Version locking: {{ item }}" # noqa: command-instead-of-module # ansible.builtin.command: "yum versionlock {{ item }}" # # changed_when: "'Adding versionlock on:' in versionlock_pkg['stdout']" # # failed_when: "'Package already locked' in versionlock_pkg['stdout']" # changed_when: "'versionlock added: 1' in versionlock_pkg['stdout']" # failed_when: "'versionlock added: 0' in versionlock_pkg['stdout']" # register: versionlock_pkg # - name: Debug versionlock_pkg # ansible.builtin.debug: # var: versionlock_pkg # verbosity: 1 # rescue: # - name: Failed to add versionlock # ansible.builtin.fail: # msg: "Failed to add versionlock for item: {{ item }}. Please re-check package name/version."