From 3c2237e481fdb2241494bd285931803335ed44dd Mon Sep 17 00:00:00 2001 From: Oleg Kozlov Date: Fri, 29 Mar 2019 14:35:02 +0100 Subject: [PATCH] Show a notification that sssd needs restarting after idrange-mod If the `ipa idrange-mod` command has been used show a notification that sssd.service needs restarting. It's needed for applying changes. E.g. after setup AD trust with a domain with more than 200000 objects (the highest RID > idm's default value, 200000) users with RIDs > 200000 are not able to login, the size needs to be increased via idrange-mod, but it makes an effect only after sssd restarting. Implementation: Notification was implemented via passing `ipalib.messages.ServiceRestartRequired` to `add_message` method in `ipaserver.plugins.idrange.idrange_mod.post_callback`. Tests: Added `messages` with sssd restart required (`ipalib.messages.ServiceRestartRequired`) to cases with idrange_mod where output is expected in `ipatests.test_xmlrpc.test_range_plugin.test_range'. Fixes: https://pagure.io/freeipa/issue/7708 Reviewed-By: Alexander Bokovoy Reviewed-By: Christian Heimes --- ipaplatform/base/services.py | 3 ++- ipaserver/plugins/idrange.py | 11 ++++++++++- ipatests/test_xmlrpc/test_range_plugin.py | 17 ++++++++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/ipaplatform/base/services.py b/ipaplatform/base/services.py index 9fd2a8532837c631945fa837be03c80fa42128bf..b037718f22fc36c4a01b3b0962b3f9e7a69f4b7e 100644 --- a/ipaplatform/base/services.py +++ b/ipaplatform/base/services.py @@ -53,7 +53,8 @@ wellknownservices = ['certmonger', 'dirsrv', 'httpd', 'ipa', 'krb5kdc', 'messagebus', 'nslcd', 'nscd', 'ntpd', 'portmap', 'rpcbind', 'kadmin', 'sshd', 'autofs', 'rpcgssd', 'rpcidmapd', 'pki_tomcatd', 'chronyd', 'domainname', - 'named', 'ods_enforcerd', 'ods_signerd', 'gssproxy'] + 'named', 'ods_enforcerd', 'ods_signerd', 'gssproxy', + 'sssd'] # The common ports for these services. This is used to wait for the # service to become available. diff --git a/ipaserver/plugins/idrange.py b/ipaserver/plugins/idrange.py index ea3d1ff5662800957cde99934e9d2577e6b13ea6..364f128de4a04f484bde0def3c782e1a48be1daa 100644 --- a/ipaserver/plugins/idrange.py +++ b/ipaserver/plugins/idrange.py @@ -17,13 +17,16 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +from __future__ import absolute_import + import six from ipalib.plugable import Registry from .baseldap import (LDAPObject, LDAPCreate, LDAPDelete, LDAPRetrieve, LDAPSearch, LDAPUpdate) -from ipalib import api, Int, Str, StrEnum, _, ngettext +from ipalib import api, Int, Str, StrEnum, _, ngettext, messages from ipalib import errors +from ipaplatform import services from ipapython.dn import DN if six.PY3: @@ -768,4 +771,10 @@ class idrange_mod(LDAPUpdate): assert isinstance(dn, DN) self.obj.handle_ipabaserid(entry_attrs, options) self.obj.handle_iparangetype(entry_attrs, options) + self.add_message( + messages.ServiceRestartRequired( + service=services.knownservices['sssd'].systemd_name, + server=keys[0] + ) + ) return dn diff --git a/ipatests/test_xmlrpc/test_range_plugin.py b/ipatests/test_xmlrpc/test_range_plugin.py index 0a8f66b62dac9ea2e4692f0f64b1c8fbc9272fd2..2adc57ed5f5d23fe5f457ab3a5e23462f24a62fe 100644 --- a/ipatests/test_xmlrpc/test_range_plugin.py +++ b/ipatests/test_xmlrpc/test_range_plugin.py @@ -21,9 +21,12 @@ Test the `ipaserver/plugins/idrange.py` module, and XML-RPC in general. """ +from __future__ import absolute_import + import six -from ipalib import api, errors +from ipalib import api, errors, messages +from ipaplatform import services from ipatests.test_xmlrpc.xmlrpc_test import Declarative, fuzzy_uuid from ipatests.test_xmlrpc import objectclasses from ipatests.util import MockLDAP @@ -786,6 +789,12 @@ class test_range(Declarative): command=('idrange_mod', [domain3range2], dict(ipabaseid=domain3range1_base_id)), expected=dict( + messages=( + messages.ServiceRestartRequired( + service=services.knownservices['sssd'].systemd_name, + server=domain3range2 + ).to_dict(), + ), result=dict( cn=[domain3range2], ipabaseid=[unicode(domain3range1_base_id)], @@ -851,6 +860,12 @@ class test_range(Declarative): command=('idrange_mod', [domain2range1], dict(ipabaserid=domain5range1_base_rid)), expected=dict( + messages=( + messages.ServiceRestartRequired( + service=services.knownservices['sssd'].systemd_name, + server=domain2range1 + ).to_dict(), + ), result=dict( cn=[domain2range1], ipabaseid=[unicode(domain2range1_base_id)], -- 2.20.1