mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
apk: Fix regex search patterns
Regex patterns were not being escaped properly so package names containing characters that could be interpreted as regex symbols were causing failures. Fixes: #19714
This commit is contained in:
parent
9f62ef7c0a
commit
5775bb2a4e
2 changed files with 34 additions and 3 deletions
|
@ -136,7 +136,7 @@ def query_package(module, name):
|
||||||
def query_latest(module, name):
|
def query_latest(module, name):
|
||||||
cmd = "%s version %s" % (APK_PATH, name)
|
cmd = "%s version %s" % (APK_PATH, name)
|
||||||
rc, stdout, stderr = module.run_command(cmd, check_rc=False)
|
rc, stdout, stderr = module.run_command(cmd, check_rc=False)
|
||||||
search_pattern = "(%s)-[\d\.\w]+-[\d\w]+\s+(.)\s+[\d\.\w]+-[\d\w]+\s+" % (name)
|
search_pattern = r"(%s)-[\d\.\w]+-[\d\w]+\s+(.)\s+[\d\.\w]+-[\d\w]+\s+" % (re.escape(name))
|
||||||
match = re.search(search_pattern, stdout)
|
match = re.search(search_pattern, stdout)
|
||||||
if match and match.group(2) == "<":
|
if match and match.group(2) == "<":
|
||||||
return False
|
return False
|
||||||
|
@ -145,7 +145,7 @@ def query_latest(module, name):
|
||||||
def query_virtual(module, name):
|
def query_virtual(module, name):
|
||||||
cmd = "%s -v info --description %s" % (APK_PATH, name)
|
cmd = "%s -v info --description %s" % (APK_PATH, name)
|
||||||
rc, stdout, stderr = module.run_command(cmd, check_rc=False)
|
rc, stdout, stderr = module.run_command(cmd, check_rc=False)
|
||||||
search_pattern = "^%s: virtual meta package" % (name)
|
search_pattern = r"^%s: virtual meta package" % (re.escape(name))
|
||||||
if re.search(search_pattern, stdout):
|
if re.search(search_pattern, stdout):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
@ -167,7 +167,7 @@ def upgrade_packages(module):
|
||||||
rc, stdout, stderr = module.run_command(cmd, check_rc=False)
|
rc, stdout, stderr = module.run_command(cmd, check_rc=False)
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
module.fail_json(msg="failed to upgrade packages")
|
module.fail_json(msg="failed to upgrade packages")
|
||||||
if re.search('^OK', stdout):
|
if re.search(r'^OK', stdout):
|
||||||
module.exit_json(changed=False, msg="packages already upgraded")
|
module.exit_json(changed=False, msg="packages already upgraded")
|
||||||
module.exit_json(changed=True, msg="upgraded packages")
|
module.exit_json(changed=True, msg="upgraded packages")
|
||||||
|
|
||||||
|
|
31
test/units/modules/packaging/os/test_apk.py
Normal file
31
test/units/modules/packaging/os/test_apk.py
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
from ansible.compat.tests import mock
|
||||||
|
from ansible.compat.tests import unittest
|
||||||
|
|
||||||
|
from ansible.modules.packaging.os import apk
|
||||||
|
|
||||||
|
|
||||||
|
class TestApkQueryLatest(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.module_names = [
|
||||||
|
'bash',
|
||||||
|
'g++',
|
||||||
|
]
|
||||||
|
|
||||||
|
@mock.patch('ansible.modules.packaging.os.apk.AnsibleModule')
|
||||||
|
def test_not_latest(self, mock_module):
|
||||||
|
apk.APK_PATH = ""
|
||||||
|
for module_name in self.module_names:
|
||||||
|
command_output = module_name + '-2.0.0-r1 < 3.0.0-r2 '
|
||||||
|
mock_module.run_command.return_value = (0, command_output, None)
|
||||||
|
command_result = apk.query_latest(mock_module, module_name)
|
||||||
|
self.assertFalse(command_result)
|
||||||
|
|
||||||
|
@mock.patch('ansible.modules.packaging.os.apk.AnsibleModule')
|
||||||
|
def test_latest(self, mock_module):
|
||||||
|
apk.APK_PATH = ""
|
||||||
|
for module_name in self.module_names:
|
||||||
|
command_output = module_name + '-2.0.0-r1 = 2.0.0-r1 '
|
||||||
|
mock_module.run_command.return_value = (0, command_output, None)
|
||||||
|
command_result = apk.query_latest(mock_module, module_name)
|
||||||
|
self.assertTrue(command_result)
|
Loading…
Reference in a new issue