Skip to content

Commit

Permalink
Fix broken backwards compat in regards to tmos_version
Browse files Browse the repository at this point in the history
Issues:
Fixes #638

Problem:
The tmos_version attribute was changed from being a property to being a
key in the _meta_data dictionary on the bigip container. This change
broken backwards compat without use realizing immediately, and we need
to support both methods until we're ready to bump the release to 2.0.0.

Analysis:
Added the @Property back to the f5/bigip/__init__.py for tmos_version.
Both ways of accessing tmos_version are now supported

Tests:
Added a test to ensure we can access the tmos_version both ways
  • Loading branch information
Paul Breaux committed Aug 18, 2016
1 parent e2a4c1d commit 139d0d0
Show file tree
Hide file tree
Showing 8 changed files with 19 additions and 5 deletions.
4 changes: 4 additions & 0 deletions f5/bigip/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ def hostname(self):
def icontrol_version(self):
return self._meta_data['icontrol_version']

@property
def tmos_version(self):
return self._meta_data['tmos_version']

def _get_tmos_version(self):
connect = self._meta_data['bigip']._meta_data['icr_session']
base_uri = self._meta_data['uri'] + 'tm/sys/'
Expand Down
2 changes: 1 addition & 1 deletion f5/bigip/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def __getattr__(container, name):
return attribute

def _check_supported_versions(self, container, attribute):
tmos_v = container._meta_data['bigip']._meta_data['tmos_version']
tmos_v = container._meta_data['bigip'].tmos_version
minimum = attribute._meta_data['minimum_version']
if LooseVersion(tmos_v) < LooseVersion(minimum):
error = "There was an attempt to access resource: \n{}\n which " \
Expand Down
2 changes: 2 additions & 0 deletions f5/bigip/test/test_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -797,6 +797,8 @@ def test_load(self):
})
]}
mock_session = mock.MagicMock(**attrs)
ver_mock = mock.PropertyMock(return_value='11.5.0')
type(r._meta_data['bigip']).tmos_version = ver_mock
r._meta_data['bigip']._meta_data =\
{'icr_session': mock_session,
'hostname': 'TESTDOMAINNAME',
Expand Down
2 changes: 1 addition & 1 deletion f5/bigip/tm/sys/test/test_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
def fake_dbs():
fake_sys = mock.MagicMock()
dbs = Dbs(fake_sys)
dbs._meta_data['bigip']._meta_data = {'tmos_version': '11.6.0'}
dbs._meta_data['bigip'].tmos_version = '11.6.0'
return dbs


Expand Down
2 changes: 1 addition & 1 deletion f5/bigip/tm/sys/test/test_folder.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
def FakeFolders():
fake_sys = mock.MagicMock()
folders = Folders(fake_sys)
folders._meta_data['bigip']._meta_data = {'tmos_version': '11.6.0'}
folders._meta_data['bigip'].tmos_version = '11.6.0'
return folders


Expand Down
2 changes: 1 addition & 1 deletion f5/bigip/tm/sys/test/test_performance.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
def FakePerformance():
fake_sys = mock.MagicMock()
performances = Performances(fake_sys)
performances._meta_data['bigip']._meta_data = {'tmos_version': '11.6.0'}
performances._meta_data['bigip'].tmos_version = '11.6.0'
return performances


Expand Down
3 changes: 2 additions & 1 deletion requirements.test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ mock==1.3.0
pytest==2.9.1
pytest-cov>=2.2.1
git+https://github.com/F5Networks/pytest-symbols.git
python-coveralls
python-coveralls
pyopenssl
7 changes: 7 additions & 0 deletions test/functional/test/test__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,10 @@ def test_invalid_args(opt_bigip, opt_username, opt_password, opt_port):
def test_icontrol_version(opt_bigip, opt_username, opt_password, opt_port):
m = ManagementRoot(opt_bigip, opt_username, opt_password, port=opt_port)
assert hasattr(m, 'icontrol_version')


def test_tmos_version(mgmt_root):
assert mgmt_root.tmos_version == \
mgmt_root._meta_data['bigip']._meta_data['tmos_version']
assert mgmt_root.tmos_version is not None
assert mgmt_root._meta_data['bigip']._meta_data['tmos_version'] != ''

0 comments on commit 139d0d0

Please sign in to comment.