From bc4ad1338d9ebf1071494fbe8fd6ee7599cbba4d Mon Sep 17 00:00:00 2001 From: svetterIO <2234705+svetterIO@users.noreply.github.com> Date: Thu, 15 Aug 2019 16:11:02 +0200 Subject: [PATCH] +1 function: set_all, _check for scim configuration Configure entire scim with idempotency checking --- ibmsecurity/isam/aac/scim.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/ibmsecurity/isam/aac/scim.py b/ibmsecurity/isam/aac/scim.py index ed3b510e..be1b68ea 100755 --- a/ibmsecurity/isam/aac/scim.py +++ b/ibmsecurity/isam/aac/scim.py @@ -1,4 +1,5 @@ import logging +from ibmsecurity.utilities import tools logger = logging.getLogger(__name__) @@ -63,3 +64,36 @@ def update_isam_user(isamAppliance, isam_domain, update_native_users, ldap_conne "Update SCIM ISAM user settings", "/mga/scim/configuration/urn:ietf:params:scim:schemas:extension:isam:1.0:User", ret_obj) + +def set_all(isamAppliance, scim_configuration, check_mode=False, force=False): + """ + Update entire SCIM settings + """ + if scim_configuration is None or scim_configuration == '': + return isamAppliance.create_return_object( + warnings="Need to pass content for scim configuration") + else: + if force is True or _check(isamAppliance, scim_configuration) is False : + if check_mode is True: + return isamAppliance.create_return_object(changed=True) + else: + return isamAppliance.invoke_put( + "Update SCIM settings", + "/mga/scim/configuration", + scim_configuration ) + + return isamAppliance.create_return_object() + +def _check(isamAppliance, scim_configuration): + """ + Check if scim configuration is identical with server + """ + ret_obj = get_all(isamAppliance) + logger.debug("Comparing server scim configuration with desired configuration.") + logger.debug("Server JSON: {0}".format(tools.json_sort(ret_obj['data']))) + logger.debug("Desired JSON: {0}".format(tools.json_sort(scim_configuration))) + if tools.json_sort(scim_configuration) != tools.json_sort(ret_obj['data']): + return False + + logger.debug("Server configuration is identical with desired configuration. No change necessary.") + return True \ No newline at end of file