mirror of
https://github.com/ansible/awx.git
synced 2026-01-16 04:10:44 -03:30
Merge pull request #9551 from beeankha/loosen_collection_ver_check
Loosen Collections vs Tower Version Check SUMMARY Connecting issue #9532 This change will make it so that if the major version numbers of Collections + Tower matches, a warning will not get activated. ISSUE TYPE Bugfix Pull Request COMPONENT NAME Collections AWX VERSION awx: 17.0.1 Reviewed-by: Ryan Petrello <None> Reviewed-by: Jeff Bradberry <None> Reviewed-by: John Westcott IV <None>
This commit is contained in:
commit
b5c3857a63
@ -7,6 +7,7 @@ from ansible.module_utils.urls import Request, SSLValidationError, ConnectionErr
|
||||
from ansible.module_utils.six import PY2
|
||||
from ansible.module_utils.six.moves.urllib.error import HTTPError
|
||||
from ansible.module_utils.six.moves.http_cookiejar import CookieJar
|
||||
from distutils.version import LooseVersion as Version
|
||||
import time
|
||||
from json import loads, dumps
|
||||
|
||||
@ -259,10 +260,20 @@ class TowerAPIModule(TowerModule):
|
||||
tower_type = response.info().getheader('X-API-Product-Name', None)
|
||||
tower_version = response.info().getheader('X-API-Product-Version', None)
|
||||
|
||||
parsed_collection_version = Version(self._COLLECTION_VERSION).version
|
||||
parsed_tower_version = Version(tower_version).version
|
||||
if tower_type == 'AWX':
|
||||
collection_compare_ver = parsed_collection_version[0]
|
||||
tower_compare_ver = parsed_tower_version[0]
|
||||
else:
|
||||
collection_compare_ver = "{}.{}".format(parsed_collection_version[0], parsed_collection_version[1])
|
||||
tower_compare_ver = '{}.{}'.format(parsed_tower_version[0], parsed_tower_version[1])
|
||||
|
||||
if self._COLLECTION_TYPE not in self.collection_to_version or self.collection_to_version[self._COLLECTION_TYPE] != tower_type:
|
||||
self.warn("You are using the {0} version of this collection but connecting to {1}".format(self._COLLECTION_TYPE, tower_type))
|
||||
elif self._COLLECTION_VERSION != tower_version:
|
||||
elif collection_compare_ver != tower_compare_ver:
|
||||
self.warn("You are running collection version {0} but connecting to tower version {1}".format(self._COLLECTION_VERSION, tower_version))
|
||||
|
||||
self.version_checked = True
|
||||
|
||||
response_body = ''
|
||||
|
||||
@ -9,9 +9,18 @@ from awx.main.models import Organization, Team, Project, Inventory
|
||||
from requests.models import Response
|
||||
from unittest import mock
|
||||
|
||||
awx_name = 'AWX'
|
||||
tower_name = 'Red Hat Ansible Tower'
|
||||
ping_version = '1.2.3'
|
||||
|
||||
def getheader(self, header_name, default):
|
||||
mock_headers = {'X-API-Product-Name': 'not-junk', 'X-API-Product-Version': '1.2.3'}
|
||||
|
||||
def getTowerheader(self, header_name, default):
|
||||
mock_headers = {'X-API-Product-Name': tower_name, 'X-API-Product-Version': ping_version}
|
||||
return mock_headers.get(header_name, default)
|
||||
|
||||
|
||||
def getAWXheader(self, header_name, default):
|
||||
mock_headers = {'X-API-Product-Name': awx_name, 'X-API-Product-Version': ping_version}
|
||||
return mock_headers.get(header_name, default)
|
||||
|
||||
|
||||
@ -23,9 +32,17 @@ def status(self):
|
||||
return 200
|
||||
|
||||
|
||||
def mock_ping_response(self, method, url, **kwargs):
|
||||
def mock_tower_ping_response(self, method, url, **kwargs):
|
||||
r = Response()
|
||||
r.getheader = getheader.__get__(r)
|
||||
r.getheader = getTowerheader.__get__(r)
|
||||
r.read = read.__get__(r)
|
||||
r.status = status.__get__(r)
|
||||
return r
|
||||
|
||||
|
||||
def mock_awx_ping_response(self, method, url, **kwargs):
|
||||
r = Response()
|
||||
r.getheader = getAWXheader.__get__(r)
|
||||
r.read = read.__get__(r)
|
||||
r.status = status.__get__(r)
|
||||
return r
|
||||
@ -36,13 +53,62 @@ def test_version_warning(collection_import, silence_warning):
|
||||
cli_data = {'ANSIBLE_MODULE_ARGS': {}}
|
||||
testargs = ['module_file2.py', json.dumps(cli_data)]
|
||||
with mock.patch.object(sys, 'argv', testargs):
|
||||
with mock.patch('ansible.module_utils.urls.Request.open', new=mock_ping_response):
|
||||
with mock.patch('ansible.module_utils.urls.Request.open', new=mock_awx_ping_response):
|
||||
my_module = TowerAPIModule(argument_spec=dict())
|
||||
my_module._COLLECTION_VERSION = "2.0.0"
|
||||
my_module._COLLECTION_TYPE = "awx"
|
||||
my_module.get_endpoint('ping')
|
||||
silence_warning.assert_called_once_with(
|
||||
'You are running collection version {} but connecting to tower version {}'.format(my_module._COLLECTION_VERSION, ping_version)
|
||||
)
|
||||
|
||||
|
||||
def test_version_warning_strictness_awx(collection_import, silence_warning):
|
||||
TowerAPIModule = collection_import('plugins.module_utils.tower_api').TowerAPIModule
|
||||
cli_data = {'ANSIBLE_MODULE_ARGS': {}}
|
||||
testargs = ['module_file2.py', json.dumps(cli_data)]
|
||||
# Compare 1.0.0 to 1.2.3 (major matches)
|
||||
with mock.patch.object(sys, 'argv', testargs):
|
||||
with mock.patch('ansible.module_utils.urls.Request.open', new=mock_awx_ping_response):
|
||||
my_module = TowerAPIModule(argument_spec=dict())
|
||||
my_module._COLLECTION_VERSION = "1.0.0"
|
||||
my_module._COLLECTION_TYPE = "not-junk"
|
||||
my_module.collection_to_version['not-junk'] = 'not-junk'
|
||||
my_module._COLLECTION_TYPE = "awx"
|
||||
my_module.get_endpoint('ping')
|
||||
silence_warning.assert_called_once_with('You are running collection version 1.0.0 but connecting to tower version 1.2.3')
|
||||
silence_warning.assert_not_called()
|
||||
|
||||
# Compare 1.2.0 to 1.2.3 (major matches minor does not count)
|
||||
with mock.patch.object(sys, 'argv', testargs):
|
||||
with mock.patch('ansible.module_utils.urls.Request.open', new=mock_awx_ping_response):
|
||||
my_module = TowerAPIModule(argument_spec=dict())
|
||||
my_module._COLLECTION_VERSION = "1.2.0"
|
||||
my_module._COLLECTION_TYPE = "awx"
|
||||
my_module.get_endpoint('ping')
|
||||
silence_warning.assert_not_called()
|
||||
|
||||
|
||||
def test_version_warning_strictness_tower(collection_import, silence_warning):
|
||||
TowerAPIModule = collection_import('plugins.module_utils.tower_api').TowerAPIModule
|
||||
cli_data = {'ANSIBLE_MODULE_ARGS': {}}
|
||||
testargs = ['module_file2.py', json.dumps(cli_data)]
|
||||
# Compare 1.2.0 to 1.2.3 (major/minor matches)
|
||||
with mock.patch.object(sys, 'argv', testargs):
|
||||
with mock.patch('ansible.module_utils.urls.Request.open', new=mock_tower_ping_response):
|
||||
my_module = TowerAPIModule(argument_spec=dict())
|
||||
my_module._COLLECTION_VERSION = "1.2.0"
|
||||
my_module._COLLECTION_TYPE = "tower"
|
||||
my_module.get_endpoint('ping')
|
||||
silence_warning.assert_not_called()
|
||||
|
||||
# Compare 1.0.0 to 1.2.3 (major/minor fail to match)
|
||||
with mock.patch.object(sys, 'argv', testargs):
|
||||
with mock.patch('ansible.module_utils.urls.Request.open', new=mock_tower_ping_response):
|
||||
my_module = TowerAPIModule(argument_spec=dict())
|
||||
my_module._COLLECTION_VERSION = "1.0.0"
|
||||
my_module._COLLECTION_TYPE = "tower"
|
||||
my_module.get_endpoint('ping')
|
||||
silence_warning.assert_called_once_with(
|
||||
'You are running collection version {} but connecting to tower version {}'.format(my_module._COLLECTION_VERSION, ping_version)
|
||||
)
|
||||
|
||||
|
||||
def test_type_warning(collection_import, silence_warning):
|
||||
@ -50,13 +116,12 @@ def test_type_warning(collection_import, silence_warning):
|
||||
cli_data = {'ANSIBLE_MODULE_ARGS': {}}
|
||||
testargs = ['module_file2.py', json.dumps(cli_data)]
|
||||
with mock.patch.object(sys, 'argv', testargs):
|
||||
with mock.patch('ansible.module_utils.urls.Request.open', new=mock_ping_response):
|
||||
with mock.patch('ansible.module_utils.urls.Request.open', new=mock_awx_ping_response):
|
||||
my_module = TowerAPIModule(argument_spec={})
|
||||
my_module._COLLECTION_VERSION = "1.2.3"
|
||||
my_module._COLLECTION_TYPE = "junk"
|
||||
my_module.collection_to_version['junk'] = 'junk'
|
||||
my_module._COLLECTION_VERSION = ping_version
|
||||
my_module._COLLECTION_TYPE = "tower"
|
||||
my_module.get_endpoint('ping')
|
||||
silence_warning.assert_called_once_with('You are using the junk version of this collection but connecting to not-junk')
|
||||
silence_warning.assert_called_once_with('You are using the {} version of this collection but connecting to {}'.format(my_module._COLLECTION_TYPE, awx_name))
|
||||
|
||||
|
||||
def test_duplicate_config(collection_import, silence_warning):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user