mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Fix: Add user-agent header to allow request through WAF with bot protection (#5024)
* Fix: Add user agent header to allow request through CDN/WAF with bot protection * upate doc-fragment * move http_agent variable assignment * set http_agent param for all Keycloak API Requests * Update plugins/doc_fragments/keycloak.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update changelogs/fragments/5023-http-agent-param-keycloak.yml Co-authored-by: Felix Fontein <felix@fontein.de> * fix formatting * Update plugins/doc_fragments/keycloak.py Co-authored-by: Felix Fontein <felix@fontein.de> Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
parent
3fe9592cf1
commit
88a3daf2ec
3 changed files with 105 additions and 76 deletions
2
changelogs/fragments/5023-http-agent-param-keycloak.yml
Normal file
2
changelogs/fragments/5023-http-agent-param-keycloak.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- keycloak_* modules - add ``http_agent`` parameter with default value ``Ansible`` (https://github.com/ansible-collections/community.general/issues/5023).
|
|
@ -68,4 +68,10 @@ options:
|
||||||
type: int
|
type: int
|
||||||
default: 10
|
default: 10
|
||||||
version_added: 4.5.0
|
version_added: 4.5.0
|
||||||
|
http_agent:
|
||||||
|
description:
|
||||||
|
- Configures the HTTP User-Agent header.
|
||||||
|
type: str
|
||||||
|
default: Ansible
|
||||||
|
version_added: 5.4.0
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -104,6 +104,7 @@ def keycloak_argument_spec():
|
||||||
validate_certs=dict(type='bool', default=True),
|
validate_certs=dict(type='bool', default=True),
|
||||||
connection_timeout=dict(type='int', default=10),
|
connection_timeout=dict(type='int', default=10),
|
||||||
token=dict(type='str', no_log=True),
|
token=dict(type='str', no_log=True),
|
||||||
|
http_agent=dict(type='str', default='Ansible'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,6 +124,7 @@ def get_token(module_params):
|
||||||
"""
|
"""
|
||||||
token = module_params.get('token')
|
token = module_params.get('token')
|
||||||
base_url = module_params.get('auth_keycloak_url')
|
base_url = module_params.get('auth_keycloak_url')
|
||||||
|
http_agent = module_params.get('http_agent')
|
||||||
|
|
||||||
if not base_url.lower().startswith(('http', 'https')):
|
if not base_url.lower().startswith(('http', 'https')):
|
||||||
raise KeycloakError("auth_url '%s' should either start with 'http' or 'https'." % base_url)
|
raise KeycloakError("auth_url '%s' should either start with 'http' or 'https'." % base_url)
|
||||||
|
@ -149,7 +151,7 @@ def get_token(module_params):
|
||||||
(k, v) for k, v in temp_payload.items() if v is not None)
|
(k, v) for k, v in temp_payload.items() if v is not None)
|
||||||
try:
|
try:
|
||||||
r = json.loads(to_native(open_url(auth_url, method='POST',
|
r = json.loads(to_native(open_url(auth_url, method='POST',
|
||||||
validate_certs=validate_certs, timeout=connection_timeout,
|
validate_certs=validate_certs, http_agent=http_agent, timeout=connection_timeout,
|
||||||
data=urlencode(payload)).read()))
|
data=urlencode(payload)).read()))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
raise KeycloakError(
|
raise KeycloakError(
|
||||||
|
@ -233,6 +235,7 @@ class KeycloakAPI(object):
|
||||||
self.validate_certs = self.module.params.get('validate_certs')
|
self.validate_certs = self.module.params.get('validate_certs')
|
||||||
self.connection_timeout = self.module.params.get('connection_timeout')
|
self.connection_timeout = self.module.params.get('connection_timeout')
|
||||||
self.restheaders = connection_header
|
self.restheaders = connection_header
|
||||||
|
self.http_agent = self.module.params.get('http_agent')
|
||||||
|
|
||||||
def get_realm_info_by_id(self, realm='master'):
|
def get_realm_info_by_id(self, realm='master'):
|
||||||
""" Obtain realm public info by id
|
""" Obtain realm public info by id
|
||||||
|
@ -243,7 +246,8 @@ class KeycloakAPI(object):
|
||||||
realm_info_url = URL_REALM_INFO.format(url=self.baseurl, realm=realm)
|
realm_info_url = URL_REALM_INFO.format(url=self.baseurl, realm=realm)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(realm_info_url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(realm_info_url, method='GET', http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
|
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
|
@ -268,7 +272,7 @@ class KeycloakAPI(object):
|
||||||
realm_url = URL_REALM.format(url=self.baseurl, realm=realm)
|
realm_url = URL_REALM.format(url=self.baseurl, realm=realm)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(realm_url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(realm_url, method='GET', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
|
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
|
@ -293,7 +297,7 @@ class KeycloakAPI(object):
|
||||||
realm_url = URL_REALM.format(url=self.baseurl, realm=realm)
|
realm_url = URL_REALM.format(url=self.baseurl, realm=realm)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(realm_url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(realm_url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(realmrep), validate_certs=self.validate_certs)
|
data=json.dumps(realmrep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not update realm %s: %s' % (realm, str(e)),
|
self.module.fail_json(msg='Could not update realm %s: %s' % (realm, str(e)),
|
||||||
|
@ -307,7 +311,7 @@ class KeycloakAPI(object):
|
||||||
realm_url = URL_REALMS.format(url=self.baseurl)
|
realm_url = URL_REALMS.format(url=self.baseurl)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(realm_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(realm_url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(realmrep), validate_certs=self.validate_certs)
|
data=json.dumps(realmrep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not create realm %s: %s' % (realmrep['id'], str(e)),
|
self.module.fail_json(msg='Could not create realm %s: %s' % (realmrep['id'], str(e)),
|
||||||
|
@ -322,7 +326,7 @@ class KeycloakAPI(object):
|
||||||
realm_url = URL_REALM.format(url=self.baseurl, realm=realm)
|
realm_url = URL_REALM.format(url=self.baseurl, realm=realm)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(realm_url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(realm_url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not delete realm %s: %s' % (realm, str(e)),
|
self.module.fail_json(msg='Could not delete realm %s: %s' % (realm, str(e)),
|
||||||
|
@ -340,7 +344,8 @@ class KeycloakAPI(object):
|
||||||
clientlist_url += '?clientId=%s' % filter
|
clientlist_url += '?clientId=%s' % filter
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(clientlist_url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(clientlist_url, http_agent=self.http_agent, method='GET', headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of clients for realm %s: %s'
|
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of clients for realm %s: %s'
|
||||||
|
@ -371,7 +376,8 @@ class KeycloakAPI(object):
|
||||||
client_url = URL_CLIENT.format(url=self.baseurl, realm=realm, id=id)
|
client_url = URL_CLIENT.format(url=self.baseurl, realm=realm, id=id)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(client_url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(client_url, method='GET', http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
|
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
|
@ -410,7 +416,7 @@ class KeycloakAPI(object):
|
||||||
client_url = URL_CLIENT.format(url=self.baseurl, realm=realm, id=id)
|
client_url = URL_CLIENT.format(url=self.baseurl, realm=realm, id=id)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(client_url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(client_url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(clientrep), validate_certs=self.validate_certs)
|
data=json.dumps(clientrep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not update client %s in realm %s: %s'
|
self.module.fail_json(msg='Could not update client %s in realm %s: %s'
|
||||||
|
@ -425,7 +431,7 @@ class KeycloakAPI(object):
|
||||||
client_url = URL_CLIENTS.format(url=self.baseurl, realm=realm)
|
client_url = URL_CLIENTS.format(url=self.baseurl, realm=realm)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(client_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(client_url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(clientrep), validate_certs=self.validate_certs)
|
data=json.dumps(clientrep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not create client %s in realm %s: %s'
|
self.module.fail_json(msg='Could not create client %s in realm %s: %s'
|
||||||
|
@ -441,7 +447,7 @@ class KeycloakAPI(object):
|
||||||
client_url = URL_CLIENT.format(url=self.baseurl, realm=realm, id=id)
|
client_url = URL_CLIENT.format(url=self.baseurl, realm=realm, id=id)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(client_url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(client_url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not delete client %s in realm %s: %s'
|
self.module.fail_json(msg='Could not delete client %s in realm %s: %s'
|
||||||
|
@ -456,7 +462,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
client_roles_url = URL_CLIENT_ROLES.format(url=self.baseurl, realm=realm, id=cid)
|
client_roles_url = URL_CLIENT_ROLES.format(url=self.baseurl, realm=realm, id=cid)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(client_roles_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(client_roles_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not fetch rolemappings for client %s in realm %s: %s"
|
self.module.fail_json(msg="Could not fetch rolemappings for client %s in realm %s: %s"
|
||||||
|
@ -488,7 +495,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
rolemappings_url = URL_CLIENT_ROLEMAPPINGS.format(url=self.baseurl, realm=realm, id=gid, client=cid)
|
rolemappings_url = URL_CLIENT_ROLEMAPPINGS.format(url=self.baseurl, realm=realm, id=gid, client=cid)
|
||||||
try:
|
try:
|
||||||
rolemappings = json.loads(to_native(open_url(rolemappings_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
rolemappings = json.loads(to_native(open_url(rolemappings_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
for role in rolemappings:
|
for role in rolemappings:
|
||||||
if rid == role['id']:
|
if rid == role['id']:
|
||||||
|
@ -508,7 +516,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
available_rolemappings_url = URL_CLIENT_ROLEMAPPINGS_AVAILABLE.format(url=self.baseurl, realm=realm, id=gid, client=cid)
|
available_rolemappings_url = URL_CLIENT_ROLEMAPPINGS_AVAILABLE.format(url=self.baseurl, realm=realm, id=gid, client=cid)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(available_rolemappings_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(available_rolemappings_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not fetch available rolemappings for client %s in group %s, realm %s: %s"
|
self.module.fail_json(msg="Could not fetch available rolemappings for client %s in group %s, realm %s: %s"
|
||||||
|
@ -524,7 +533,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
available_rolemappings_url = URL_CLIENT_ROLEMAPPINGS_COMPOSITE.format(url=self.baseurl, realm=realm, id=gid, client=cid)
|
available_rolemappings_url = URL_CLIENT_ROLEMAPPINGS_COMPOSITE.format(url=self.baseurl, realm=realm, id=gid, client=cid)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(available_rolemappings_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(available_rolemappings_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not fetch available rolemappings for client %s in group %s, realm %s: %s"
|
self.module.fail_json(msg="Could not fetch available rolemappings for client %s in group %s, realm %s: %s"
|
||||||
|
@ -541,7 +551,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
available_rolemappings_url = URL_CLIENT_ROLEMAPPINGS.format(url=self.baseurl, realm=realm, id=gid, client=cid)
|
available_rolemappings_url = URL_CLIENT_ROLEMAPPINGS.format(url=self.baseurl, realm=realm, id=gid, client=cid)
|
||||||
try:
|
try:
|
||||||
open_url(available_rolemappings_url, method="POST", headers=self.restheaders, data=json.dumps(role_rep),
|
open_url(available_rolemappings_url, method="POST", http_agent=self.http_agent, headers=self.restheaders, data=json.dumps(role_rep),
|
||||||
validate_certs=self.validate_certs, timeout=self.connection_timeout)
|
validate_certs=self.validate_certs, timeout=self.connection_timeout)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not fetch available rolemappings for client %s in group %s, realm %s: %s"
|
self.module.fail_json(msg="Could not fetch available rolemappings for client %s in group %s, realm %s: %s"
|
||||||
|
@ -558,7 +568,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
available_rolemappings_url = URL_CLIENT_ROLEMAPPINGS.format(url=self.baseurl, realm=realm, id=gid, client=cid)
|
available_rolemappings_url = URL_CLIENT_ROLEMAPPINGS.format(url=self.baseurl, realm=realm, id=gid, client=cid)
|
||||||
try:
|
try:
|
||||||
open_url(available_rolemappings_url, method="DELETE", headers=self.restheaders,
|
open_url(available_rolemappings_url, method="DELETE", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
validate_certs=self.validate_certs, timeout=self.connection_timeout)
|
validate_certs=self.validate_certs, timeout=self.connection_timeout)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not delete available rolemappings for client %s in group %s, realm %s: %s"
|
self.module.fail_json(msg="Could not delete available rolemappings for client %s in group %s, realm %s: %s"
|
||||||
|
@ -573,7 +583,7 @@ class KeycloakAPI(object):
|
||||||
url = URL_CLIENTTEMPLATES.format(url=self.baseurl, realm=realm)
|
url = URL_CLIENTTEMPLATES.format(url=self.baseurl, realm=realm)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(url, method='GET', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of client templates for realm %s: %s'
|
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of client templates for realm %s: %s'
|
||||||
|
@ -592,7 +602,7 @@ class KeycloakAPI(object):
|
||||||
url = URL_CLIENTTEMPLATE.format(url=self.baseurl, id=id, realm=realm)
|
url = URL_CLIENTTEMPLATE.format(url=self.baseurl, id=id, realm=realm)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(url, method='GET', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain client templates %s for realm %s: %s'
|
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain client templates %s for realm %s: %s'
|
||||||
|
@ -638,7 +648,7 @@ class KeycloakAPI(object):
|
||||||
url = URL_CLIENTTEMPLATE.format(url=self.baseurl, realm=realm, id=id)
|
url = URL_CLIENTTEMPLATE.format(url=self.baseurl, realm=realm, id=id)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(clienttrep), validate_certs=self.validate_certs)
|
data=json.dumps(clienttrep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not update client template %s in realm %s: %s'
|
self.module.fail_json(msg='Could not update client template %s in realm %s: %s'
|
||||||
|
@ -653,7 +663,7 @@ class KeycloakAPI(object):
|
||||||
url = URL_CLIENTTEMPLATES.format(url=self.baseurl, realm=realm)
|
url = URL_CLIENTTEMPLATES.format(url=self.baseurl, realm=realm)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(clienttrep), validate_certs=self.validate_certs)
|
data=json.dumps(clienttrep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not create client template %s in realm %s: %s'
|
self.module.fail_json(msg='Could not create client template %s in realm %s: %s'
|
||||||
|
@ -669,7 +679,7 @@ class KeycloakAPI(object):
|
||||||
url = URL_CLIENTTEMPLATE.format(url=self.baseurl, realm=realm, id=id)
|
url = URL_CLIENTTEMPLATE.format(url=self.baseurl, realm=realm, id=id)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not delete client template %s in realm %s: %s'
|
self.module.fail_json(msg='Could not delete client template %s in realm %s: %s'
|
||||||
|
@ -686,7 +696,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
clientscopes_url = URL_CLIENTSCOPES.format(url=self.baseurl, realm=realm)
|
clientscopes_url = URL_CLIENTSCOPES.format(url=self.baseurl, realm=realm)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(clientscopes_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(clientscopes_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not fetch list of clientscopes in realm %s: %s"
|
self.module.fail_json(msg="Could not fetch list of clientscopes in realm %s: %s"
|
||||||
|
@ -703,7 +714,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
clientscope_url = URL_CLIENTSCOPE.format(url=self.baseurl, realm=realm, id=cid)
|
clientscope_url = URL_CLIENTSCOPE.format(url=self.baseurl, realm=realm, id=cid)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(clientscope_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(clientscope_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
|
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
|
@ -748,7 +760,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
clientscopes_url = URL_CLIENTSCOPES.format(url=self.baseurl, realm=realm)
|
clientscopes_url = URL_CLIENTSCOPES.format(url=self.baseurl, realm=realm)
|
||||||
try:
|
try:
|
||||||
return open_url(clientscopes_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(clientscopes_url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(clientscoperep), validate_certs=self.validate_certs)
|
data=json.dumps(clientscoperep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not create clientscope %s in realm %s: %s"
|
self.module.fail_json(msg="Could not create clientscope %s in realm %s: %s"
|
||||||
|
@ -763,7 +775,7 @@ class KeycloakAPI(object):
|
||||||
clientscope_url = URL_CLIENTSCOPE.format(url=self.baseurl, realm=realm, id=clientscoperep['id'])
|
clientscope_url = URL_CLIENTSCOPE.format(url=self.baseurl, realm=realm, id=clientscoperep['id'])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(clientscope_url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(clientscope_url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(clientscoperep), validate_certs=self.validate_certs)
|
data=json.dumps(clientscoperep), validate_certs=self.validate_certs)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -801,7 +813,7 @@ class KeycloakAPI(object):
|
||||||
# should have a good cid by here.
|
# should have a good cid by here.
|
||||||
clientscope_url = URL_CLIENTSCOPE.format(realm=realm, id=cid, url=self.baseurl)
|
clientscope_url = URL_CLIENTSCOPE.format(realm=realm, id=cid, url=self.baseurl)
|
||||||
try:
|
try:
|
||||||
return open_url(clientscope_url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(clientscope_url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -819,7 +831,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
protocolmappers_url = URL_CLIENTSCOPE_PROTOCOLMAPPERS.format(id=cid, url=self.baseurl, realm=realm)
|
protocolmappers_url = URL_CLIENTSCOPE_PROTOCOLMAPPERS.format(id=cid, url=self.baseurl, realm=realm)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(protocolmappers_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(protocolmappers_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not fetch list of protocolmappers in realm %s: %s"
|
self.module.fail_json(msg="Could not fetch list of protocolmappers in realm %s: %s"
|
||||||
|
@ -838,7 +851,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
protocolmapper_url = URL_CLIENTSCOPE_PROTOCOLMAPPER.format(url=self.baseurl, realm=realm, id=cid, mapper_id=pid)
|
protocolmapper_url = URL_CLIENTSCOPE_PROTOCOLMAPPER.format(url=self.baseurl, realm=realm, id=cid, mapper_id=pid)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(protocolmapper_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(protocolmapper_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
|
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
|
@ -885,7 +899,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
protocolmappers_url = URL_CLIENTSCOPE_PROTOCOLMAPPERS.format(url=self.baseurl, id=cid, realm=realm)
|
protocolmappers_url = URL_CLIENTSCOPE_PROTOCOLMAPPERS.format(url=self.baseurl, id=cid, realm=realm)
|
||||||
try:
|
try:
|
||||||
return open_url(protocolmappers_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(protocolmappers_url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(mapper_rep), validate_certs=self.validate_certs)
|
data=json.dumps(mapper_rep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not create protocolmapper %s in realm %s: %s"
|
self.module.fail_json(msg="Could not create protocolmapper %s in realm %s: %s"
|
||||||
|
@ -901,7 +915,7 @@ class KeycloakAPI(object):
|
||||||
protocolmapper_url = URL_CLIENTSCOPE_PROTOCOLMAPPER.format(url=self.baseurl, realm=realm, id=cid, mapper_id=mapper_rep['id'])
|
protocolmapper_url = URL_CLIENTSCOPE_PROTOCOLMAPPER.format(url=self.baseurl, realm=realm, id=cid, mapper_id=mapper_rep['id'])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(protocolmapper_url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(protocolmapper_url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(mapper_rep), validate_certs=self.validate_certs)
|
data=json.dumps(mapper_rep), validate_certs=self.validate_certs)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -918,7 +932,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
groups_url = URL_GROUPS.format(url=self.baseurl, realm=realm)
|
groups_url = URL_GROUPS.format(url=self.baseurl, realm=realm)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(groups_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(groups_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not fetch list of groups in realm %s: %s"
|
self.module.fail_json(msg="Could not fetch list of groups in realm %s: %s"
|
||||||
|
@ -935,7 +950,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
groups_url = URL_GROUP.format(url=self.baseurl, realm=realm, groupid=gid)
|
groups_url = URL_GROUP.format(url=self.baseurl, realm=realm, groupid=gid)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(groups_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(groups_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
|
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
|
@ -981,7 +997,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
groups_url = URL_GROUPS.format(url=self.baseurl, realm=realm)
|
groups_url = URL_GROUPS.format(url=self.baseurl, realm=realm)
|
||||||
try:
|
try:
|
||||||
return open_url(groups_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(groups_url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(grouprep), validate_certs=self.validate_certs)
|
data=json.dumps(grouprep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Could not create group %s in realm %s: %s"
|
self.module.fail_json(msg="Could not create group %s in realm %s: %s"
|
||||||
|
@ -996,7 +1012,7 @@ class KeycloakAPI(object):
|
||||||
group_url = URL_GROUP.format(url=self.baseurl, realm=realm, groupid=grouprep['id'])
|
group_url = URL_GROUP.format(url=self.baseurl, realm=realm, groupid=grouprep['id'])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(group_url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(group_url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(grouprep), validate_certs=self.validate_certs)
|
data=json.dumps(grouprep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not update group %s in realm %s: %s'
|
self.module.fail_json(msg='Could not update group %s in realm %s: %s'
|
||||||
|
@ -1033,7 +1049,7 @@ class KeycloakAPI(object):
|
||||||
# should have a good groupid by here.
|
# should have a good groupid by here.
|
||||||
group_url = URL_GROUP.format(realm=realm, groupid=groupid, url=self.baseurl)
|
group_url = URL_GROUP.format(realm=realm, groupid=groupid, url=self.baseurl)
|
||||||
try:
|
try:
|
||||||
return open_url(group_url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(group_url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg="Unable to delete group %s: %s" % (groupid, str(e)))
|
self.module.fail_json(msg="Unable to delete group %s: %s" % (groupid, str(e)))
|
||||||
|
@ -1046,7 +1062,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
rolelist_url = URL_REALM_ROLES.format(url=self.baseurl, realm=realm)
|
rolelist_url = URL_REALM_ROLES.format(url=self.baseurl, realm=realm)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(rolelist_url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(rolelist_url, method='GET', http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of roles for realm %s: %s'
|
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of roles for realm %s: %s'
|
||||||
|
@ -1064,7 +1081,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
role_url = URL_REALM_ROLE.format(url=self.baseurl, realm=realm, name=quote(name))
|
role_url = URL_REALM_ROLE.format(url=self.baseurl, realm=realm, name=quote(name))
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(role_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(role_url, method="GET", http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
if e.code == 404:
|
if e.code == 404:
|
||||||
|
@ -1084,7 +1101,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
roles_url = URL_REALM_ROLES.format(url=self.baseurl, realm=realm)
|
roles_url = URL_REALM_ROLES.format(url=self.baseurl, realm=realm)
|
||||||
try:
|
try:
|
||||||
return open_url(roles_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(roles_url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(rolerep), validate_certs=self.validate_certs)
|
data=json.dumps(rolerep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not create role %s in realm %s: %s'
|
self.module.fail_json(msg='Could not create role %s in realm %s: %s'
|
||||||
|
@ -1098,7 +1115,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
role_url = URL_REALM_ROLE.format(url=self.baseurl, realm=realm, name=quote(rolerep['name']))
|
role_url = URL_REALM_ROLE.format(url=self.baseurl, realm=realm, name=quote(rolerep['name']))
|
||||||
try:
|
try:
|
||||||
return open_url(role_url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(role_url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(rolerep), validate_certs=self.validate_certs)
|
data=json.dumps(rolerep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not update role %s in realm %s: %s'
|
self.module.fail_json(msg='Could not update role %s in realm %s: %s'
|
||||||
|
@ -1112,7 +1129,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
role_url = URL_REALM_ROLE.format(url=self.baseurl, realm=realm, name=quote(name))
|
role_url = URL_REALM_ROLE.format(url=self.baseurl, realm=realm, name=quote(name))
|
||||||
try:
|
try:
|
||||||
return open_url(role_url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(role_url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Unable to delete role %s in realm %s: %s'
|
self.module.fail_json(msg='Unable to delete role %s in realm %s: %s'
|
||||||
|
@ -1131,7 +1148,8 @@ class KeycloakAPI(object):
|
||||||
% (clientid, realm))
|
% (clientid, realm))
|
||||||
rolelist_url = URL_CLIENT_ROLES.format(url=self.baseurl, realm=realm, id=cid)
|
rolelist_url = URL_CLIENT_ROLES.format(url=self.baseurl, realm=realm, id=cid)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(rolelist_url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(rolelist_url, method='GET', http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of roles for client %s in realm %s: %s'
|
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of roles for client %s in realm %s: %s'
|
||||||
|
@ -1155,7 +1173,7 @@ class KeycloakAPI(object):
|
||||||
% (clientid, realm))
|
% (clientid, realm))
|
||||||
role_url = URL_CLIENT_ROLE.format(url=self.baseurl, realm=realm, id=cid, name=quote(name))
|
role_url = URL_CLIENT_ROLE.format(url=self.baseurl, realm=realm, id=cid, name=quote(name))
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(role_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(role_url, method="GET", http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
if e.code == 404:
|
if e.code == 404:
|
||||||
|
@ -1181,7 +1199,7 @@ class KeycloakAPI(object):
|
||||||
% (clientid, realm))
|
% (clientid, realm))
|
||||||
roles_url = URL_CLIENT_ROLES.format(url=self.baseurl, realm=realm, id=cid)
|
roles_url = URL_CLIENT_ROLES.format(url=self.baseurl, realm=realm, id=cid)
|
||||||
try:
|
try:
|
||||||
return open_url(roles_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(roles_url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(rolerep), validate_certs=self.validate_certs)
|
data=json.dumps(rolerep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not create role %s for client %s in realm %s: %s'
|
self.module.fail_json(msg='Could not create role %s for client %s in realm %s: %s'
|
||||||
|
@ -1201,7 +1219,7 @@ class KeycloakAPI(object):
|
||||||
% (clientid, realm))
|
% (clientid, realm))
|
||||||
role_url = URL_CLIENT_ROLE.format(url=self.baseurl, realm=realm, id=cid, name=quote(rolerep['name']))
|
role_url = URL_CLIENT_ROLE.format(url=self.baseurl, realm=realm, id=cid, name=quote(rolerep['name']))
|
||||||
try:
|
try:
|
||||||
return open_url(role_url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(role_url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(rolerep), validate_certs=self.validate_certs)
|
data=json.dumps(rolerep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not update role %s for client %s in realm %s: %s'
|
self.module.fail_json(msg='Could not update role %s for client %s in realm %s: %s'
|
||||||
|
@ -1220,7 +1238,7 @@ class KeycloakAPI(object):
|
||||||
% (clientid, realm))
|
% (clientid, realm))
|
||||||
role_url = URL_CLIENT_ROLE.format(url=self.baseurl, realm=realm, id=cid, name=quote(name))
|
role_url = URL_CLIENT_ROLE.format(url=self.baseurl, realm=realm, id=cid, name=quote(name))
|
||||||
try:
|
try:
|
||||||
return open_url(role_url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(role_url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Unable to delete role %s for client %s in realm %s: %s'
|
self.module.fail_json(msg='Unable to delete role %s for client %s in realm %s: %s'
|
||||||
|
@ -1237,7 +1255,8 @@ class KeycloakAPI(object):
|
||||||
authentication_flow = {}
|
authentication_flow = {}
|
||||||
# Check if the authentication flow exists on the Keycloak serveraders
|
# Check if the authentication flow exists on the Keycloak serveraders
|
||||||
authentications = json.load(open_url(URL_AUTHENTICATION_FLOWS.format(url=self.baseurl, realm=realm), method='GET',
|
authentications = json.load(open_url(URL_AUTHENTICATION_FLOWS.format(url=self.baseurl, realm=realm), method='GET',
|
||||||
headers=self.restheaders, timeout=self.connection_timeout, validate_certs=self.validate_certs))
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout, validate_certs=self.validate_certs))
|
||||||
for authentication in authentications:
|
for authentication in authentications:
|
||||||
if authentication["alias"] == alias:
|
if authentication["alias"] == alias:
|
||||||
authentication_flow = authentication
|
authentication_flow = authentication
|
||||||
|
@ -1256,7 +1275,7 @@ class KeycloakAPI(object):
|
||||||
flow_url = URL_AUTHENTICATION_FLOW.format(url=self.baseurl, realm=realm, id=id)
|
flow_url = URL_AUTHENTICATION_FLOW.format(url=self.baseurl, realm=realm, id=id)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return open_url(flow_url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(flow_url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not delete authentication flow %s in realm %s: %s'
|
self.module.fail_json(msg='Could not delete authentication flow %s in realm %s: %s'
|
||||||
|
@ -1279,7 +1298,7 @@ class KeycloakAPI(object):
|
||||||
realm=realm,
|
realm=realm,
|
||||||
copyfrom=quote(config["copyFrom"])),
|
copyfrom=quote(config["copyFrom"])),
|
||||||
method='POST',
|
method='POST',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
data=json.dumps(new_name),
|
data=json.dumps(new_name),
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
|
@ -1288,7 +1307,7 @@ class KeycloakAPI(object):
|
||||||
URL_AUTHENTICATION_FLOWS.format(url=self.baseurl,
|
URL_AUTHENTICATION_FLOWS.format(url=self.baseurl,
|
||||||
realm=realm),
|
realm=realm),
|
||||||
method='GET',
|
method='GET',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs))
|
validate_certs=self.validate_certs))
|
||||||
for flow in flow_list:
|
for flow in flow_list:
|
||||||
|
@ -1318,7 +1337,7 @@ class KeycloakAPI(object):
|
||||||
url=self.baseurl,
|
url=self.baseurl,
|
||||||
realm=realm),
|
realm=realm),
|
||||||
method='POST',
|
method='POST',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
data=json.dumps(new_flow),
|
data=json.dumps(new_flow),
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
|
@ -1328,7 +1347,7 @@ class KeycloakAPI(object):
|
||||||
url=self.baseurl,
|
url=self.baseurl,
|
||||||
realm=realm),
|
realm=realm),
|
||||||
method='GET',
|
method='GET',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs))
|
validate_certs=self.validate_certs))
|
||||||
for flow in flow_list:
|
for flow in flow_list:
|
||||||
|
@ -1353,7 +1372,7 @@ class KeycloakAPI(object):
|
||||||
realm=realm,
|
realm=realm,
|
||||||
flowalias=quote(flowAlias)),
|
flowalias=quote(flowAlias)),
|
||||||
method='PUT',
|
method='PUT',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
data=json.dumps(updatedExec),
|
data=json.dumps(updatedExec),
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
|
@ -1374,7 +1393,7 @@ class KeycloakAPI(object):
|
||||||
realm=realm,
|
realm=realm,
|
||||||
id=executionId),
|
id=executionId),
|
||||||
method='POST',
|
method='POST',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
data=json.dumps(authenticationConfig),
|
data=json.dumps(authenticationConfig),
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
|
@ -1399,7 +1418,7 @@ class KeycloakAPI(object):
|
||||||
realm=realm,
|
realm=realm,
|
||||||
flowalias=quote(flowAlias)),
|
flowalias=quote(flowAlias)),
|
||||||
method='POST',
|
method='POST',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
data=json.dumps(newSubFlow),
|
data=json.dumps(newSubFlow),
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
|
@ -1423,7 +1442,7 @@ class KeycloakAPI(object):
|
||||||
realm=realm,
|
realm=realm,
|
||||||
flowalias=quote(flowAlias)),
|
flowalias=quote(flowAlias)),
|
||||||
method='POST',
|
method='POST',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
data=json.dumps(newExec),
|
data=json.dumps(newExec),
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
|
@ -1447,7 +1466,7 @@ class KeycloakAPI(object):
|
||||||
realm=realm,
|
realm=realm,
|
||||||
id=executionId),
|
id=executionId),
|
||||||
method='POST',
|
method='POST',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
elif diff < 0:
|
elif diff < 0:
|
||||||
|
@ -1458,7 +1477,7 @@ class KeycloakAPI(object):
|
||||||
realm=realm,
|
realm=realm,
|
||||||
id=executionId),
|
id=executionId),
|
||||||
method='POST',
|
method='POST',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -1480,7 +1499,7 @@ class KeycloakAPI(object):
|
||||||
realm=realm,
|
realm=realm,
|
||||||
flowalias=quote(config["alias"])),
|
flowalias=quote(config["alias"])),
|
||||||
method='GET',
|
method='GET',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs))
|
validate_certs=self.validate_certs))
|
||||||
for execution in executions:
|
for execution in executions:
|
||||||
|
@ -1493,7 +1512,7 @@ class KeycloakAPI(object):
|
||||||
realm=realm,
|
realm=realm,
|
||||||
id=execConfigId),
|
id=execConfigId),
|
||||||
method='GET',
|
method='GET',
|
||||||
headers=self.restheaders,
|
http_agent=self.http_agent, headers=self.restheaders,
|
||||||
timeout=self.connection_timeout,
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs))
|
validate_certs=self.validate_certs))
|
||||||
execution["authenticationConfig"] = execConfig
|
execution["authenticationConfig"] = execConfig
|
||||||
|
@ -1509,7 +1528,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
idps_url = URL_IDENTITY_PROVIDERS.format(url=self.baseurl, realm=realm)
|
idps_url = URL_IDENTITY_PROVIDERS.format(url=self.baseurl, realm=realm)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(idps_url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(idps_url, method='GET', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of identity providers for realm %s: %s'
|
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of identity providers for realm %s: %s'
|
||||||
|
@ -1526,7 +1545,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
idp_url = URL_IDENTITY_PROVIDER.format(url=self.baseurl, realm=realm, alias=alias)
|
idp_url = URL_IDENTITY_PROVIDER.format(url=self.baseurl, realm=realm, alias=alias)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(idp_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(idp_url, method="GET", http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
if e.code == 404:
|
if e.code == 404:
|
||||||
|
@ -1546,7 +1565,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
idps_url = URL_IDENTITY_PROVIDERS.format(url=self.baseurl, realm=realm)
|
idps_url = URL_IDENTITY_PROVIDERS.format(url=self.baseurl, realm=realm)
|
||||||
try:
|
try:
|
||||||
return open_url(idps_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(idps_url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(idprep), validate_certs=self.validate_certs)
|
data=json.dumps(idprep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not create identity provider %s in realm %s: %s'
|
self.module.fail_json(msg='Could not create identity provider %s in realm %s: %s'
|
||||||
|
@ -1560,7 +1579,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
idp_url = URL_IDENTITY_PROVIDER.format(url=self.baseurl, realm=realm, alias=idprep['alias'])
|
idp_url = URL_IDENTITY_PROVIDER.format(url=self.baseurl, realm=realm, alias=idprep['alias'])
|
||||||
try:
|
try:
|
||||||
return open_url(idp_url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(idp_url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(idprep), validate_certs=self.validate_certs)
|
data=json.dumps(idprep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not update identity provider %s in realm %s: %s'
|
self.module.fail_json(msg='Could not update identity provider %s in realm %s: %s'
|
||||||
|
@ -1573,7 +1592,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
idp_url = URL_IDENTITY_PROVIDER.format(url=self.baseurl, realm=realm, alias=alias)
|
idp_url = URL_IDENTITY_PROVIDER.format(url=self.baseurl, realm=realm, alias=alias)
|
||||||
try:
|
try:
|
||||||
return open_url(idp_url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(idp_url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Unable to delete identity provider %s in realm %s: %s'
|
self.module.fail_json(msg='Unable to delete identity provider %s in realm %s: %s'
|
||||||
|
@ -1587,7 +1606,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
mappers_url = URL_IDENTITY_PROVIDER_MAPPERS.format(url=self.baseurl, realm=realm, alias=alias)
|
mappers_url = URL_IDENTITY_PROVIDER_MAPPERS.format(url=self.baseurl, realm=realm, alias=alias)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(mappers_url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(mappers_url, method='GET', http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of identity provider mappers for idp %s in realm %s: %s'
|
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of identity provider mappers for idp %s in realm %s: %s'
|
||||||
|
@ -1605,7 +1625,8 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
mapper_url = URL_IDENTITY_PROVIDER_MAPPER.format(url=self.baseurl, realm=realm, alias=alias, id=mid)
|
mapper_url = URL_IDENTITY_PROVIDER_MAPPER.format(url=self.baseurl, realm=realm, alias=alias, id=mid)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(mapper_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(mapper_url, method="GET", http_agent=self.http_agent, headers=self.restheaders,
|
||||||
|
timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
if e.code == 404:
|
if e.code == 404:
|
||||||
|
@ -1626,7 +1647,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
mappers_url = URL_IDENTITY_PROVIDER_MAPPERS.format(url=self.baseurl, realm=realm, alias=alias)
|
mappers_url = URL_IDENTITY_PROVIDER_MAPPERS.format(url=self.baseurl, realm=realm, alias=alias)
|
||||||
try:
|
try:
|
||||||
return open_url(mappers_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(mappers_url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(mapper), validate_certs=self.validate_certs)
|
data=json.dumps(mapper), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not create identity provider mapper %s for idp %s in realm %s: %s'
|
self.module.fail_json(msg='Could not create identity provider mapper %s for idp %s in realm %s: %s'
|
||||||
|
@ -1641,7 +1662,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
mapper_url = URL_IDENTITY_PROVIDER_MAPPER.format(url=self.baseurl, realm=realm, alias=alias, id=mapper['id'])
|
mapper_url = URL_IDENTITY_PROVIDER_MAPPER.format(url=self.baseurl, realm=realm, alias=alias, id=mapper['id'])
|
||||||
try:
|
try:
|
||||||
return open_url(mapper_url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(mapper_url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(mapper), validate_certs=self.validate_certs)
|
data=json.dumps(mapper), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not update mapper %s for identity provider %s in realm %s: %s'
|
self.module.fail_json(msg='Could not update mapper %s for identity provider %s in realm %s: %s'
|
||||||
|
@ -1655,7 +1676,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
mapper_url = URL_IDENTITY_PROVIDER_MAPPER.format(url=self.baseurl, realm=realm, alias=alias, id=mid)
|
mapper_url = URL_IDENTITY_PROVIDER_MAPPER.format(url=self.baseurl, realm=realm, alias=alias, id=mid)
|
||||||
try:
|
try:
|
||||||
return open_url(mapper_url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(mapper_url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Unable to delete mapper %s for identity provider %s in realm %s: %s'
|
self.module.fail_json(msg='Unable to delete mapper %s for identity provider %s in realm %s: %s'
|
||||||
|
@ -1672,7 +1693,7 @@ class KeycloakAPI(object):
|
||||||
comps_url += '?%s' % filter
|
comps_url += '?%s' % filter
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(comps_url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(comps_url, method='GET', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of components for realm %s: %s'
|
self.module.fail_json(msg='API returned incorrect JSON when trying to obtain list of components for realm %s: %s'
|
||||||
|
@ -1689,7 +1710,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
comp_url = URL_COMPONENT.format(url=self.baseurl, realm=realm, id=cid)
|
comp_url = URL_COMPONENT.format(url=self.baseurl, realm=realm, id=cid)
|
||||||
try:
|
try:
|
||||||
return json.loads(to_native(open_url(comp_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(comp_url, method="GET", http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
if e.code == 404:
|
if e.code == 404:
|
||||||
|
@ -1709,13 +1730,13 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
comps_url = URL_COMPONENTS.format(url=self.baseurl, realm=realm)
|
comps_url = URL_COMPONENTS.format(url=self.baseurl, realm=realm)
|
||||||
try:
|
try:
|
||||||
resp = open_url(comps_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
|
resp = open_url(comps_url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(comprep), validate_certs=self.validate_certs)
|
data=json.dumps(comprep), validate_certs=self.validate_certs)
|
||||||
comp_url = resp.getheader('Location')
|
comp_url = resp.getheader('Location')
|
||||||
if comp_url is None:
|
if comp_url is None:
|
||||||
self.module.fail_json(msg='Could not create component in realm %s: %s'
|
self.module.fail_json(msg='Could not create component in realm %s: %s'
|
||||||
% (realm, 'unexpected response'))
|
% (realm, 'unexpected response'))
|
||||||
return json.loads(to_native(open_url(comp_url, method="GET", headers=self.restheaders, timeout=self.connection_timeout,
|
return json.loads(to_native(open_url(comp_url, method="GET", http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs).read()))
|
validate_certs=self.validate_certs).read()))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not create component in realm %s: %s'
|
self.module.fail_json(msg='Could not create component in realm %s: %s'
|
||||||
|
@ -1732,7 +1753,7 @@ class KeycloakAPI(object):
|
||||||
self.module.fail_json(msg='Cannot update component without id')
|
self.module.fail_json(msg='Cannot update component without id')
|
||||||
comp_url = URL_COMPONENT.format(url=self.baseurl, realm=realm, id=cid)
|
comp_url = URL_COMPONENT.format(url=self.baseurl, realm=realm, id=cid)
|
||||||
try:
|
try:
|
||||||
return open_url(comp_url, method='PUT', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(comp_url, method='PUT', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
data=json.dumps(comprep), validate_certs=self.validate_certs)
|
data=json.dumps(comprep), validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Could not update component %s in realm %s: %s'
|
self.module.fail_json(msg='Could not update component %s in realm %s: %s'
|
||||||
|
@ -1745,7 +1766,7 @@ class KeycloakAPI(object):
|
||||||
"""
|
"""
|
||||||
comp_url = URL_COMPONENT.format(url=self.baseurl, realm=realm, id=cid)
|
comp_url = URL_COMPONENT.format(url=self.baseurl, realm=realm, id=cid)
|
||||||
try:
|
try:
|
||||||
return open_url(comp_url, method='DELETE', headers=self.restheaders, timeout=self.connection_timeout,
|
return open_url(comp_url, method='DELETE', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
|
||||||
validate_certs=self.validate_certs)
|
validate_certs=self.validate_certs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.module.fail_json(msg='Unable to delete component %s in realm %s: %s'
|
self.module.fail_json(msg='Unable to delete component %s in realm %s: %s'
|
||||||
|
|
Loading…
Reference in a new issue