Skip to content

Commit 061c7c1

Browse files
authored
Removes partition requirement from device groups (#1366)
Issues: Fixes #1365 Problem: DGs required partition arg Analysis: Removes partition arg and defaults everything to Common Tests: functional
1 parent 3e24daf commit 061c7c1

2 files changed

Lines changed: 49 additions & 12 deletions

File tree

f5/bigip/tm/cm/device_group.py

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,17 @@
2727
``tm:cm:device-group:*``
2828
"""
2929

30+
from distutils.version import LooseVersion
3031
from f5.bigip.resource import Collection
3132
from f5.bigip.resource import Resource
3233

3334

35+
def fqdn_name(partition, value):
36+
if value is not None and not value.startswith('/'):
37+
return '/{0}/{1}'.format(partition, value)
38+
return value
39+
40+
3441
class Device_Groups(Collection):
3542
"""BIG-IP® cluster device-groups collection."""
3643
def __init__(self, cm):
@@ -45,7 +52,6 @@ class Device_Group(Resource):
4552
def __init__(self, device_groups):
4653
super(Device_Group, self).__init__(device_groups)
4754
self._meta_data['read_only_attributes'].append('type')
48-
self._meta_data['required_creation_parameters'].update(('partition',))
4955
self._meta_data['required_json_kind'] =\
5056
'tm:cm:device-group:device-groupstate'
5157
self._meta_data['attribute_registry'] = {
@@ -104,4 +110,36 @@ def __init__(self, devices_s):
104110
super(Devices, self).__init__(devices_s)
105111
self._meta_data['required_json_kind'] =\
106112
'tm:cm:device-group:devices:devicesstate'
107-
self._meta_data['required_creation_parameters'].update(('partition',))
113+
114+
def create(self, **kwargs):
115+
# Name munging is required < 11.6.0 and on versions (and sub versions)
116+
# of 11.6.1.
117+
# TODO(Remove this when 11.6.1 is no longer supported)
118+
tmos_v = self._meta_data['bigip']._meta_data['tmos_version']
119+
tmos_v = LooseVersion(tmos_v)
120+
if tmos_v < LooseVersion('11.6.0'):
121+
self._fixup_name(kwargs)
122+
elif tmos_v > LooseVersion('11.6.0') and tmos_v < LooseVersion('12.0.0'):
123+
self._fixup_name(kwargs)
124+
return self._create(**kwargs)
125+
126+
def _fixup_name(self, kwargs):
127+
# Name munging is required < 11.6.0 and on versions (and sub versions)
128+
# of 11.6.1.
129+
# TODO(Remove this when 11.6.1 is no longer supported)
130+
if 'name' in kwargs:
131+
kwargs['name'] = fqdn_name('Common', kwargs['name'])
132+
else:
133+
self.__dict__['name'] = fqdn_name('Common', self.__dict__['name'])
134+
135+
def delete(self, **kwargs):
136+
# Name munging is required < 11.6.0 and on versions (and sub versions)
137+
# of 11.6.1.
138+
# TODO(Remove this when 11.6.1 is no longer supported)
139+
tmos_v = self._meta_data['bigip']._meta_data['tmos_version']
140+
tmos_v = LooseVersion(tmos_v)
141+
if tmos_v < LooseVersion('11.6.0'):
142+
self._fixup_name(kwargs)
143+
elif tmos_v > LooseVersion('11.6.0') and tmos_v < LooseVersion('12.0.0'):
144+
self._fixup_name(kwargs)
145+
return self._delete(**kwargs)

f5/bigip/tm/cm/test/functional/test_device_group.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
TEST_DESCR = "TEST DESCRIPTION"
2323

2424

25-
def setup_device_group_test(request, mgmt_root, name, partition):
25+
def setup_device_group_test(request, mgmt_root, name):
2626
def teardown():
2727
try:
2828
for d in dg.devices_s.get_collection():
@@ -34,21 +34,20 @@ def teardown():
3434
request.addfinalizer(teardown)
3535

3636
dgs = mgmt_root.tm.cm.device_groups
37-
dg = dgs.device_group.create(name=name, partition=partition)
37+
dg = dgs.device_group.create(name=name)
3838
return dg, dgs
3939

4040

4141
class TestDeviceGroup(object):
4242
def test_device_group_CURDL(self, request, mgmt_root):
4343
# Create and delete are taken care of by setup
4444
dg1, dgs = setup_device_group_test(
45-
request, mgmt_root, name='test-device-group', partition='Common')
45+
request, mgmt_root, name='test-device-group')
4646
assert dg1.generation > 0
4747
assert dg1.name == 'test-device-group'
4848

4949
# Load
50-
dg2 = mgmt_root.tm.cm.device_groups.device_group.load(
51-
name=dg1.name, partition=dg1.partition)
50+
dg2 = mgmt_root.tm.cm.device_groups.device_group.load(name=dg1.name)
5251
assert dg1.generation == dg2.generation
5352

5453
# Update
@@ -63,20 +62,20 @@ def test_device_group_CURDL(self, request, mgmt_root):
6362

6463
def test_add_device(self, request, mgmt_root):
6564
dg1, dgs = setup_device_group_test(
66-
request, mgmt_root, name='test-device-group', partition='Common')
65+
request, mgmt_root, name='test-device-group')
6766
devices = mgmt_root.tm.cm.devices.get_collection()
6867
this_device = devices[0]
6968
assert this_device.selfDevice == 'true'
7069
d1 = dg1.devices_s.devices.create(
71-
name=this_device.name, partition=this_device.partition)
70+
name=this_device.name)
7271
assert len(dg1.devices_s.get_collection()) == 1
7372
# This needs to be in this format due to the change between
7473
# 11.6.0 Final and other versions.
7574
assert this_device.name in d1.name
7675

7776
def test_cm_sync_to_group(self, request, mgmt_root):
7877
dg1, dgs = setup_device_group_test(
79-
request, mgmt_root, name='test-device-group', partition='Common')
78+
request, mgmt_root, name='test-device-group')
8079
sync_cmd = 'config-sync to-group %s' % dg1.name
8180
cm_obj = mgmt_root.tm.cm.exec_cmd('run', utilCmdArgs=sync_cmd)
8281
assert cm_obj.utilCmdArgs == sync_cmd
@@ -88,7 +87,7 @@ def test_cm_sync_to_group(self, request, mgmt_root):
8887
reason='Skip test if on a version greater than or equal to 11.6.1')
8988
def test_cm_sync_from_group_pre_12_0(self, request, mgmt_root):
9089
dg1, dgs = setup_device_group_test(
91-
request, mgmt_root, name='test-device-group', partition='Common')
90+
request, mgmt_root, name='test-device-group')
9291
sync_cmd = 'config-sync from-group %s' % dg1.name
9392
cm_obj = mgmt_root.tm.cm.exec_cmd('run', utilCmdArgs=sync_cmd)
9493
assert cm_obj.utilCmdArgs == sync_cmd
@@ -100,7 +99,7 @@ def test_cm_sync_from_group_pre_12_0(self, request, mgmt_root):
10099
reason='Skip test if on a version earlier than 12.0.0')
101100
def test_cm_sync_from_group_post_11_6(self, request, mgmt_root):
102101
dg1, dgs = setup_device_group_test(
103-
request, mgmt_root, name='test-device-group', partition='Common')
102+
request, mgmt_root, name='test-device-group')
104103
with pytest.raises(iControlUnexpectedHTTPError) as err:
105104
sync_cmd = 'config-sync from-group %s' % dg1.name
106105
mgmt_root.tm.cm.exec_cmd('run', utilCmdArgs=sync_cmd)

0 commit comments

Comments
 (0)