Skip to content

Commit f2a014c

Browse files
committed
Merge branch 'development' of git://github.com/nberezin/f5-common-python into nberezin-development
2 parents 3f39b43 + 8ad04cc commit f2a014c

4 files changed

Lines changed: 89 additions & 7 deletions

File tree

f5/bigip/cm/system.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,33 @@ def __init__(self, authn):
4949
class Tmos_s(Collection):
5050
def __init__(self, providers):
5151
super(Tmos_s, self).__init__(providers)
52-
self._meta_data['required_json_kind'] = 'cm:system:authn:providers:tmos:mcpremoteprovidercollectionstate'
52+
if (self._meta_data['bigip']._meta_data['tmos_version'] < '13.1.0'):
53+
# Starting from bigip v13.1.0 tmos resources 'kind' was changed
54+
# from 'mcpremoteproviderstate' to 'authproviderstate'
55+
# and tmos collection 'kind'
56+
# from 'mcpremoteprovidercollectionstate' to 'mcpremoteproviderstate"
57+
self._meta_data['required_json_kind'] = 'cm:system:authn:providers:tmos:mcpremoteprovidercollectionstate'
58+
self._meta_data['attribute_registry'] = {
59+
'cm:system:authn:providers:tmos:mcpremoteproviderstate': Tmos
60+
}
61+
else:
62+
self._meta_data['required_json_kind'] = 'cm:system:authn:providers:tmos:authprovidercollectionstate'
63+
self._meta_data['attribute_registry'] = {
64+
'cm:system:authn:providers:tmos:authproviderstate': Tmos
65+
}
5366
self._meta_data['allowed_lazy_attributes'] = [Tmos]
54-
self._meta_data['attribute_registry'] = {
55-
'cm:system:authn:providers:tmos:mcpremoteproviderstate': Tmos
56-
}
5767

5868

5969
class Tmos(Resource):
6070
def __init__(self, tokens):
6171
super(Tmos, self).__init__(tokens)
62-
self._meta_data['required_json_kind'] = 'cm:system:authn:providers:tmos:mcpremoteproviderstate'
63-
self._meta_data['required_load_parameters'] = set(('id',))
72+
if (self._meta_data['bigip']._meta_data['tmos_version'] < '13.1.0'):
73+
# Starting from bigip v13.1.0 tmos resource 'kind' was changed
74+
# from 'mcpremoteproviderstate' to 'authproviderstate'
75+
self._meta_data['required_json_kind'] = 'cm:system:authn:providers:tmos:mcpremoteproviderstate'
76+
else:
77+
self._meta_data['required_json_kind'] = 'ccm:system:authn:providers:tmos:authproviderstate'
78+
self._meta_data['required_load_parameters'] = set(('id',))
6479

6580
def create(self, **kwargs):
6681
raise UnsupportedMethod(

f5/bigip/shared/authz.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ class Authz(OrganizingCollection):
2727
def __init__(self, shared):
2828
super(Authz, self).__init__(shared)
2929
self._meta_data['allowed_lazy_attributes'] = [
30-
Tokens_s
30+
Tokens_s,
31+
Users_s
3132
]
3233

3334

@@ -41,6 +42,16 @@ def __init__(self, authz):
4142
}
4243

4344

45+
class Users_s(Collection):
46+
def __init__(self, authz):
47+
super(Users_s, self).__init__(authz)
48+
self._meta_data['required_json_kind'] = 'shared:authz:users:userscollectionstate'
49+
self._meta_data['allowed_lazy_attributes'] = [User]
50+
self._meta_data['attribute_registry'] = {
51+
'shared:authz:tokens:usersworkerstate': User
52+
}
53+
54+
4455
class Token(Resource):
4556
def __init__(self, tokens):
4657
super(Token, self).__init__(tokens)
@@ -82,3 +93,10 @@ def _validate_timeout(self, **kwargs):
8293
raise ConstraintError(
8394
"The provided timeout must be a number between 1 and 36000."
8495
)
96+
97+
98+
class User(Resource):
99+
def __init__(self, users):
100+
super(User, self).__init__(users)
101+
self._meta_data['required_json_kind'] = 'shared:authz:users:usersworkerstate'
102+
self._meta_data['required_creation_parameters'] = {'name', 'password'}

f5/bigip/shared/test/functional/test_authz.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
import pytest
1818

1919
from distutils.version import LooseVersion
20+
from f5.sdk_exception import MissingRequiredCreationParameter
2021
from requests.exceptions import HTTPError
2122

23+
2224
pytestmark = pytest.mark.skipif(
2325
LooseVersion(pytest.config.getoption('--release'))
2426
< LooseVersion('12.0.0'),
@@ -45,6 +47,14 @@ def token(mgmt_root, users_link):
4547
resource.delete()
4648

4749

50+
@pytest.fixture(scope='function')
51+
def user(mgmt_root):
52+
collection = mgmt_root.shared.authz.users_s
53+
resource = collection.user.create(name='user12345', password='f5pass12345')
54+
yield resource
55+
resource.delete()
56+
57+
4858
class TestAuthz(object):
4959
def test_create(self, token):
5060
assert token.kind == 'shared:authz:tokens:authtokenitemstate'
@@ -73,3 +83,28 @@ def test_package_mgmt_tasks_collection(self, mgmt_root, token):
7383
col = mgmt_root.shared.authz.tokens_s.get_collection()
7484
assert isinstance(col, list)
7585
assert len(col) > 0
86+
87+
def test_user_create(self, user):
88+
assert user.kind == 'shared:authz:users:usersworkerstate'
89+
90+
def test_user_modify_password(self, mgmt_root, user):
91+
collection = mgmt_root.shared.authz.users_s
92+
resource = collection.user.load(name='user12345')
93+
if LooseVersion(pytest.config.getoption('--release')) > LooseVersion('12.1.0'):
94+
# In 12.x.x there were no 'encryptedPassword' parameter
95+
# on the response to shared/authz/users/user
96+
oldPasswd = resource.encryptedPassword
97+
resource.modify(name='user12345', password='f5site02')
98+
newPasswd = resource.encryptedPassword
99+
assert oldPasswd != newPasswd
100+
else:
101+
# In case of 12.x.x versions just make sure modify is not raising
102+
# any exceptions and the user still exists after modification
103+
resource.modify(name='user12345', password='f5site02')
104+
exists = collection.user.exists(name='user12345')
105+
assert exists is True
106+
107+
def test_user_create_no_password(self, mgmt_root):
108+
with pytest.raises(MissingRequiredCreationParameter):
109+
collection = mgmt_root.shared.authz.users_s
110+
collection.user.create(name='user12345')

f5/bigip/shared/test/unit/test_authz.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#
1515

1616
from f5.bigip.shared.authz import Token
17+
from f5.bigip.shared.authz import User
1718
from f5.sdk_exception import ConstraintError
1819
from f5.sdk_exception import MissingRequiredCreationParameter
1920

@@ -28,6 +29,13 @@ def FakeToken():
2829
return resource
2930

3031

32+
@pytest.fixture
33+
def FakeUser():
34+
mo = mock.MagicMock()
35+
resource = User(mo)
36+
return resource
37+
38+
3139
class TestToken(object):
3240
def test_invalid_timeout_non_number_value(self, FakeToken):
3341
with pytest.raises(ConstraintError):
@@ -40,3 +48,9 @@ def test_invalid_timeout_number_value(self, FakeToken):
4048
def test_create_no_args(self, FakeToken):
4149
with pytest.raises(MissingRequiredCreationParameter):
4250
FakeToken.create()
51+
52+
53+
class TestUser(object):
54+
def test_create_user_no_args(self, FakeUser):
55+
with pytest.raises(MissingRequiredCreationParameter):
56+
FakeUser.create()

0 commit comments

Comments
 (0)