|
|
2737e7 |
From 500be304c4b218b40acfa31cf987e541958b8985 Mon Sep 17 00:00:00 2001
|
|
|
2737e7 |
From: Christian Heimes <cheimes@redhat.com>
|
|
|
2737e7 |
Date: Thu, 5 Jul 2018 23:50:37 +0200
|
|
|
2737e7 |
Subject: [PATCH] Query for server role IPA master
|
|
|
2737e7 |
|
|
|
2737e7 |
server_find and server_role plugin were hiding IPA master role
|
|
|
2737e7 |
information. It's now possible to fetch IPA master role information and
|
|
|
2737e7 |
to filter by IPA master role, e.g. to ignore servers that have some
|
|
|
2737e7 |
services configured but not (yet) enabled.
|
|
|
2737e7 |
|
|
|
2737e7 |
See: https://pagure.io/freeipa/issue/7566
|
|
|
2737e7 |
Signed-off-by: Christian Heimes <cheimes@redhat.com>
|
|
|
2737e7 |
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
|
|
2737e7 |
Reviewed-By: Fraser Tweedale <ftweedal@redhat.com>
|
|
|
2737e7 |
---
|
|
|
2737e7 |
API.txt | 3 ++-
|
|
|
2737e7 |
ipaserver/plugins/server.py | 9 +++++++--
|
|
|
2737e7 |
ipaserver/plugins/serverrole.py | 18 +++++++++++++++---
|
|
|
2737e7 |
3 files changed, 24 insertions(+), 6 deletions(-)
|
|
|
2737e7 |
|
|
|
2737e7 |
diff --git a/API.txt b/API.txt
|
|
|
2737e7 |
index 5feed54947e044a0a2c908e70b44fe59a86972ff..7262a4122be06ab3ca2296897de84bea458fcf0a 100644
|
|
|
2737e7 |
--- a/API.txt
|
|
|
2737e7 |
+++ b/API.txt
|
|
|
2737e7 |
@@ -4421,9 +4421,10 @@ output: Entry('result')
|
|
|
2737e7 |
output: Output('summary', type=[<type 'unicode'>, <type 'NoneType'>])
|
|
|
2737e7 |
output: PrimaryKey('value')
|
|
|
2737e7 |
command: server_role_find/1
|
|
|
2737e7 |
-args: 1,8,4
|
|
|
2737e7 |
+args: 1,9,4
|
|
|
2737e7 |
arg: Str('criteria?')
|
|
|
2737e7 |
option: Flag('all', autofill=True, cli_name='all', default=False)
|
|
|
2737e7 |
+option: Flag('include_master', autofill=True, default=False)
|
|
|
2737e7 |
option: Flag('raw', autofill=True, cli_name='raw', default=False)
|
|
|
2737e7 |
option: Str('role_servrole?', autofill=False, cli_name='role')
|
|
|
2737e7 |
option: Str('server_server?', autofill=False, cli_name='server')
|
|
|
2737e7 |
diff --git a/ipaserver/plugins/server.py b/ipaserver/plugins/server.py
|
|
|
2737e7 |
index e0dc953a1ef870c95fdcdb629fb6ab3103e8f999..eb776aa8cf676c26d80c22ec87f8b5a310d0c6dc 100644
|
|
|
2737e7 |
--- a/ipaserver/plugins/server.py
|
|
|
2737e7 |
+++ b/ipaserver/plugins/server.py
|
|
|
2737e7 |
@@ -199,7 +199,10 @@ class server(LDAPObject):
|
|
|
2737e7 |
return
|
|
|
2737e7 |
|
|
|
2737e7 |
enabled_roles = self.api.Command.server_role_find(
|
|
|
2737e7 |
- server_server=entry_attrs['cn'][0], status=ENABLED)['result']
|
|
|
2737e7 |
+ server_server=entry_attrs['cn'][0],
|
|
|
2737e7 |
+ status=ENABLED,
|
|
|
2737e7 |
+ include_master=True,
|
|
|
2737e7 |
+ )['result']
|
|
|
2737e7 |
|
|
|
2737e7 |
enabled_role_names = [r[u'role_servrole'] for r in enabled_roles]
|
|
|
2737e7 |
|
|
|
2737e7 |
@@ -333,7 +336,9 @@ class server_find(LDAPSearch):
|
|
|
2737e7 |
role_status = self.api.Command.server_role_find(
|
|
|
2737e7 |
server_server=None,
|
|
|
2737e7 |
role_servrole=role,
|
|
|
2737e7 |
- status=ENABLED)['result']
|
|
|
2737e7 |
+ status=ENABLED,
|
|
|
2737e7 |
+ include_master=True,
|
|
|
2737e7 |
+ )['result']
|
|
|
2737e7 |
|
|
|
2737e7 |
return set(
|
|
|
2737e7 |
r[u'server_server'] for r in role_status)
|
|
|
2737e7 |
diff --git a/ipaserver/plugins/serverrole.py b/ipaserver/plugins/serverrole.py
|
|
|
2737e7 |
index b5781b0dff4c5d6f433e6a5531fc3e830ffcd972..db88b3885c538c2800f6e4a1d649083859d43641 100644
|
|
|
2737e7 |
--- a/ipaserver/plugins/serverrole.py
|
|
|
2737e7 |
+++ b/ipaserver/plugins/serverrole.py
|
|
|
2737e7 |
@@ -5,7 +5,7 @@
|
|
|
2737e7 |
from ipalib.crud import Retrieve, Search
|
|
|
2737e7 |
from ipalib.errors import NotFound
|
|
|
2737e7 |
from ipalib.frontend import Object
|
|
|
2737e7 |
-from ipalib.parameters import Int, Str, StrEnum
|
|
|
2737e7 |
+from ipalib.parameters import Flag, Int, Str, StrEnum
|
|
|
2737e7 |
from ipalib.plugable import Registry
|
|
|
2737e7 |
from ipalib import _, ngettext
|
|
|
2737e7 |
|
|
|
2737e7 |
@@ -129,6 +129,10 @@ class server_role_find(Search):
|
|
|
2737e7 |
minvalue=0,
|
|
|
2737e7 |
autofill=False,
|
|
|
2737e7 |
),
|
|
|
2737e7 |
+ Flag(
|
|
|
2737e7 |
+ 'include_master',
|
|
|
2737e7 |
+ doc=_('Include IPA master entries'),
|
|
|
2737e7 |
+ )
|
|
|
2737e7 |
)
|
|
|
2737e7 |
|
|
|
2737e7 |
def execute(self, *keys, **options):
|
|
|
2737e7 |
@@ -151,8 +155,16 @@ class server_role_find(Search):
|
|
|
2737e7 |
role_servrole=role_name,
|
|
|
2737e7 |
status=status)
|
|
|
2737e7 |
|
|
|
2737e7 |
- result = [
|
|
|
2737e7 |
- r for r in role_status if r[u'role_servrole'] != "IPA master"]
|
|
|
2737e7 |
+ # Don't display "IPA master" information unless the role is
|
|
|
2737e7 |
+ # requested explicitly. All servers are considered IPA masters,
|
|
|
2737e7 |
+ # except for replicas during installation.
|
|
|
2737e7 |
+ if options.get('include_master') or role_name == "IPA master":
|
|
|
2737e7 |
+ result = role_status
|
|
|
2737e7 |
+ else:
|
|
|
2737e7 |
+ result = [
|
|
|
2737e7 |
+ r for r in role_status
|
|
|
2737e7 |
+ if r[u'role_servrole'] != "IPA master"
|
|
|
2737e7 |
+ ]
|
|
|
2737e7 |
return dict(
|
|
|
2737e7 |
result=result,
|
|
|
2737e7 |
count=len(result),
|
|
|
2737e7 |
--
|
|
|
2737e7 |
2.17.1
|
|
|
2737e7 |
|