URL: https://github.com/freeipa/freeipa/pull/5313 Author: fcami Title: #5313: Gracefully handle Nsds5replicalastupdateend's absence Action: opened
PR body: """ https://pagure.io/freeipa/issue/8605 ipa-replica-manage: handle missing attributes If nsds5replicalastupdateend is not yet present, ipa-replica-manage will backtrace as it tries to retrieve that attribute unconditionally. Gracefully handle that situation. ipa-replica-manage: always display nsds5replicalastinitstatus If nsds5replicalastinitstatus is none, the status is not displayed. Always displaying the last init status is more useful to the end-user. ipalib/util.py: add print_replication_status ipa-csreplica-manage, ipa-replica-manage: refactor """ To pull the PR as Git branch: git remote add ghfreeipa https://github.com/freeipa/freeipa git fetch ghfreeipa pull/5313/head:pr5313 git checkout pr5313
From 97e013bd3febdf9b2b2e9a22564c0c7e86b58e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fc...@redhat.com> Date: Tue, 1 Dec 2020 14:50:17 +0200 Subject: [PATCH 1/4] ipa-replica-manage: always display nsds5replicalastinitstatus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If nsds5replicalastinitstatus is none, the status is not displayed. Always displaying the last init status is more useful to the end-user. Related: https://pagure.io/freeipa/issue/8605 Signed-off-by: François Cami <fc...@redhat.com> --- install/tools/ipa-replica-manage.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tools/ipa-replica-manage.in b/install/tools/ipa-replica-manage.in index a29c550d204..1486ada4265 100644 --- a/install/tools/ipa-replica-manage.in +++ b/install/tools/ipa-replica-manage.in @@ -238,8 +238,8 @@ def list_replicas(realm, host, replica, dirman_passwd, verbose, nolookup=False): if verbose: initstatus = entry.single_value.get('nsds5replicalastinitstatus') + print(" last init status: %s" % initstatus) if initstatus is not None: - print(" last init status: %s" % initstatus) print(" last init ended: %s" % str( ipautil.parse_generalized_time( entry.single_value['nsds5replicalastinitend']))) From 7c985d146f6d5b53e09f3aee9f1c072ac0af0617 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fc...@redhat.com> Date: Tue, 1 Dec 2020 15:00:24 +0200 Subject: [PATCH 2/4] ipa-replica-manage: handle missing attributes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If nsds5replicalastupdateend is not yet present, ipa-replica-manage will backtrace as it tries to retrieve that attribute unconditionally. Gracefully handle that situation. Fixes: https://pagure.io/freeipa/issue/8605 Signed-off-by: François Cami <fc...@redhat.com> --- install/tools/ipa-replica-manage.in | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/install/tools/ipa-replica-manage.in b/install/tools/ipa-replica-manage.in index 1486ada4265..2a77a404d83 100644 --- a/install/tools/ipa-replica-manage.in +++ b/install/tools/ipa-replica-manage.in @@ -242,12 +242,18 @@ def list_replicas(realm, host, replica, dirman_passwd, verbose, nolookup=False): if initstatus is not None: print(" last init ended: %s" % str( ipautil.parse_generalized_time( - entry.single_value['nsds5replicalastinitend']))) - print(" last update status: %s" % entry.single_value.get( - 'nsds5replicalastupdatestatus')) - print(" last update ended: %s" % str( - ipautil.parse_generalized_time( - entry.single_value['nsds5replicalastupdateend']))) + entry.single_value['nsds5replicalastinitend'])) + ) + updatestatus = entry.single_value.get( + 'nsds5replicalastupdatestatus' + ) + print(" last update status: %s" % updatestatus) + if updatestatus is not None: + print(" last update ended: %s" % str( + ipautil.parse_generalized_time( + entry.single_value['nsds5replicalastupdateend'] + )) + ) def del_link(realm, replica1, replica2, dirman_passwd, force=False): From bd9feafde9a335a715288728cac55d46a1d64ea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fc...@redhat.com> Date: Wed, 2 Dec 2020 12:12:11 +0100 Subject: [PATCH 3/4] ipalib/util.py: add print_replication_status MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: François Cami <fc...@redhat.com> --- ipalib/util.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/ipalib/util.py b/ipalib/util.py index e3a510fc7a3..3791c1f0365 100644 --- a/ipalib/util.py +++ b/ipalib/util.py @@ -65,6 +65,7 @@ from ipalib.text import _ from ipaplatform.constants import constants from ipaplatform.paths import paths +from ipapython import ipautil from ipapython.ssh import SSHPublicKey from ipapython.dn import DN, RDN from ipapython.dnsutil import ( @@ -1029,6 +1030,31 @@ def has_managed_topology(api): return domainlevel > DOMAIN_LEVEL_0 +def print_replication_status(entry, verbose, ent_type=None): + """Pretty print nsds5replicalastinitstatus, nsds5replicalastinitend, + nsds5replicalastupdatestatus, nsds5replicalastupdateend for a + replication agreement. + """ + + if verbose: + initstatus = entry.single_value.get('nsds5replicalastinitstatus') + print(" last init status: %s" % initstatus) + if initstatus is not None: + print(" last init ended: %s" % str( + ipautil.parse_generalized_time( + entry.single_value['nsds5replicalastinitend']))) + updatestatus = entry.single_value.get( + 'nsds5replicalastupdatestatus' + ) + print(" last update status: %s" % updatestatus) + if updatestatus is not None: + print(" last update ended: %s" % str( + ipautil.parse_generalized_time( + entry.single_value['nsds5replicalastupdateend'] + )) + ) + + class classproperty: __slots__ = ('__doc__', 'fget') From 2a34c4854e60d8c73c678daa6afb69d3413a7750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fc...@redhat.com> Date: Wed, 2 Dec 2020 12:21:30 +0100 Subject: [PATCH 4/4] ipa-csreplica-manage, ipa-replica-manage: refactor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Related: https://pagure.io/freeipa/issue/8605 Signed-off-by: François Cami <fc...@redhat.com> --- install/tools/ipa-csreplica-manage.in | 16 ++-------------- install/tools/ipa-replica-manage.in | 23 +++-------------------- 2 files changed, 5 insertions(+), 34 deletions(-) diff --git a/install/tools/ipa-csreplica-manage.in b/install/tools/ipa-csreplica-manage.in index 5faed5a8418..1d6178391fd 100644 --- a/install/tools/ipa-csreplica-manage.in +++ b/install/tools/ipa-csreplica-manage.in @@ -31,7 +31,7 @@ from ipaserver.install import (replication, installutils, bindinstance, cainstance) from ipalib import api, errors from ipalib.constants import FQDN -from ipalib.util import has_managed_topology +from ipalib.util import has_managed_topology, print_replication_status from ipapython import ipautil, ipaldap, version from ipapython.admintool import ScriptError from ipapython.dn import DN @@ -133,19 +133,7 @@ def list_replicas(realm, host, replica, dirman_passwd, verbose): for entry in entries: print('%s' % entry.single_value.get('nsds5replicahost')) - - if verbose: - initstatus = entry.single_value.get('nsds5replicalastinitstatus') - if initstatus is not None: - print(" last init status: %s" % initstatus) - print(" last init ended: %s" % str( - ipautil.parse_generalized_time( - entry.single_value['nsds5replicalastinitend']))) - print(" last update status: %s" % entry.single_value.get( - 'nsds5replicalastupdatestatus')) - print(" last update ended: %s" % str( - ipautil.parse_generalized_time( - entry.single_value['nsds5replicalastupdateend']))) + print_replication_status(entry, verbose) def del_link(realm, replica1, replica2, dirman_passwd, force=False): diff --git a/install/tools/ipa-replica-manage.in b/install/tools/ipa-replica-manage.in index 2a77a404d83..237927ee87c 100644 --- a/install/tools/ipa-replica-manage.in +++ b/install/tools/ipa-replica-manage.in @@ -39,7 +39,8 @@ from ipaserver.install import opendnssecinstance, dnskeysyncinstance from ipapython import version, ipaldap from ipalib import api, errors from ipalib.constants import FQDN -from ipalib.util import has_managed_topology, verify_host_resolvable +from ipalib.util import + has_managed_topology, print_replication_status, verify_host_resolvable from ipapython.ipa_log_manager import standard_logging_setup from ipapython.dn import DN from ipapython.config import IPAOptionParser @@ -235,25 +236,7 @@ def list_replicas(realm, host, replica, dirman_passwd, verbose, nolookup=False): for entry in entries: print('%s: %s' % (entry.single_value.get('nsds5replicahost'), ent_type)) - - if verbose: - initstatus = entry.single_value.get('nsds5replicalastinitstatus') - print(" last init status: %s" % initstatus) - if initstatus is not None: - print(" last init ended: %s" % str( - ipautil.parse_generalized_time( - entry.single_value['nsds5replicalastinitend'])) - ) - updatestatus = entry.single_value.get( - 'nsds5replicalastupdatestatus' - ) - print(" last update status: %s" % updatestatus) - if updatestatus is not None: - print(" last update ended: %s" % str( - ipautil.parse_generalized_time( - entry.single_value['nsds5replicalastupdateend'] - )) - ) + print_replication_status(entry, ent_type, verbose) def del_link(realm, replica1, replica2, dirman_passwd, force=False):
_______________________________________________ FreeIPA-devel mailing list -- freeipa-devel@lists.fedorahosted.org To unsubscribe send an email to freeipa-devel-le...@lists.fedorahosted.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedorahosted.org/archives/list/freeipa-devel@lists.fedorahosted.org