summaryrefslogtreecommitdiffstats
path: root/ipaserver/advise
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2015-02-16 16:34:01 +0000
committerTomas Babej <tbabej@redhat.com>2015-03-05 11:01:36 +0100
commit2625efa727822addbaa469dbf5c680b0f62c43da (patch)
tree4b2793e9ba7a03838c6aa12630dc1ce66a757ddc /ipaserver/advise
parentdae6a1881354e57b58c79ffea0a75f524286855e (diff)
downloadfreeipa-2625efa727822addbaa469dbf5c680b0f62c43da.tar.gz
freeipa-2625efa727822addbaa469dbf5c680b0f62c43da.tar.xz
freeipa-2625efa727822addbaa469dbf5c680b0f62c43da.zip
advise: Add separate API object for ipa-advise
Reviewed-By: Tomas Babej <tbabej@redhat.com>
Diffstat (limited to 'ipaserver/advise')
-rw-r--r--ipaserver/advise/base.py67
-rw-r--r--ipaserver/advise/plugins/fedora_authconfig.py9
-rw-r--r--ipaserver/advise/plugins/legacy_clients.py27
3 files changed, 77 insertions, 26 deletions
diff --git a/ipaserver/advise/base.py b/ipaserver/advise/base.py
index 3f57f357e..0c683588f 100644
--- a/ipaserver/advise/base.py
+++ b/ipaserver/advise/base.py
@@ -19,11 +19,14 @@
import os
from ipalib import api
+from ipalib.plugable import Plugin, Registry, API
from ipalib.errors import ValidationError
from ipapython import admintool
from textwrap import wrap
from ipapython.ipa_log_manager import log_mgr
+register = Registry()
+
"""
To add configuration instructions for a new use case, define a new class that
@@ -72,6 +75,58 @@ Important! Do not forget to register the class to the API.
"""
+class _AdviceOutput(object):
+
+ def __init__(self):
+ self.content = []
+ self.prefix = '# '
+ self.options = None
+
+ def comment(self, line, wrapped=True):
+ if wrapped:
+ for wrapped_line in wrap(line, 70):
+ self.content.append(self.prefix + wrapped_line)
+ else:
+ self.content.append(self.prefix + line)
+
+ def debug(self, line):
+ if self.options.verbose:
+ self.comment('DEBUG: ' + line)
+
+ def command(self, line):
+ self.content.append(line)
+
+
+@register.base()
+class Advice(Plugin):
+ """
+ Base class for advices, plugins for ipa-advise.
+ """
+
+ options = None
+ require_root = False
+ description = ''
+
+ def __init__(self):
+ super(Advice, self).__init__()
+ self.log = _AdviceOutput()
+
+ def set_options(self, options):
+ self.options = options
+ self.log.options = options
+
+ def get_info(self):
+ """
+ This method should be overriden by child Advices.
+
+ Returns a string with instructions.
+ """
+
+ raise NotImplementedError
+
+advise_api = API((Advice,), ('ipaserver/advise/plugins',))
+
+
class IpaAdvise(admintool.AdminTool):
"""
Admin tool that given systems's configuration provides instructions how to
@@ -104,10 +159,10 @@ class IpaAdvise(admintool.AdminTool):
def print_config_list(self):
self.print_header('List of available advices')
- max_keyword_len = max((len(keyword) for keyword in api.Advice))
+ max_keyword_len = max((len(keyword) for keyword in advise_api.Advice))
- for keyword in api.Advice:
- advice = getattr(api.Advice, keyword, '')
+ for keyword in advise_api.Advice:
+ advice = getattr(advise_api.Advice, keyword, '')
description = getattr(advice, 'description', '')
keyword = keyword.replace('_', '-')
@@ -139,7 +194,7 @@ class IpaAdvise(admintool.AdminTool):
print(prefix + '-' * 70)
def print_advice(self, keyword):
- advice = getattr(api.Advice, keyword, None)
+ advice = getattr(advise_api.Advice, keyword, None)
# Ensure that Configuration class for given --setup option value exists
if advice is None:
@@ -172,8 +227,10 @@ class IpaAdvise(admintool.AdminTool):
def run(self):
super(IpaAdvise, self).run()
- api.bootstrap(in_server=False, context='advise')
+ api.bootstrap(in_server=False, context='cli')
api.finalize()
+ advise_api.bootstrap(in_server=False, context='cli')
+ advise_api.finalize()
if not self.options.verbose:
# Do not print connection information by default
logger_name = r'ipa\.ipalib\.plugins\.rpcclient'
diff --git a/ipaserver/advise/plugins/fedora_authconfig.py b/ipaserver/advise/plugins/fedora_authconfig.py
index 915877db1..3a46d7f68 100644
--- a/ipaserver/advise/plugins/fedora_authconfig.py
+++ b/ipaserver/advise/plugins/fedora_authconfig.py
@@ -18,9 +18,13 @@
#
from ipalib import api
-from ipalib.frontend import Advice
+from ipalib.plugable import Registry
+from ipaserver.advise.base import Advice
+register = Registry()
+
+@register()
class config_fedora_authconfig(Advice):
"""
Provides client configuration instructions using authconfig.
@@ -36,6 +40,3 @@ class config_fedora_authconfig(Advice):
"--enablerfc2307bis --enablekrb5"
advice = template.format(server=api.env.host)
self.log.command(advice)
-
-
-api.register(config_fedora_authconfig)
diff --git a/ipaserver/advise/plugins/legacy_clients.py b/ipaserver/advise/plugins/legacy_clients.py
index 6d17f7eca..e673cb45f 100644
--- a/ipaserver/advise/plugins/legacy_clients.py
+++ b/ipaserver/advise/plugins/legacy_clients.py
@@ -19,9 +19,12 @@
import os
from ipalib import api
-from ipalib.frontend import Advice
+from ipalib.plugable import Registry
+from ipaserver.advise.base import Advice
from ipapython.ipautil import template_file, SHARE_DIR
+register = Registry()
+
class config_base_legacy_client(Advice):
def get_uri_and_base(self):
@@ -80,6 +83,7 @@ class config_base_legacy_client(Advice):
self.log.command('service sssd start')
+@register()
class config_redhat_sssd_before_1_9(config_base_legacy_client):
"""
Legacy client configuration for Red Hat based systems, using SSSD.
@@ -113,9 +117,7 @@ class config_redhat_sssd_before_1_9(config_base_legacy_client):
super(config_redhat_sssd_before_1_9, self).configure_ca_cert()
-api.register(config_redhat_sssd_before_1_9)
-
-
+@register()
class config_generic_linux_sssd_before_1_9(config_base_legacy_client):
"""
Legacy client configuration for non Red Hat based linux systems,
@@ -170,9 +172,7 @@ class config_generic_linux_sssd_before_1_9(config_base_legacy_client):
'/etc/ldap/ldap.conf\n')
-api.register(config_generic_linux_sssd_before_1_9)
-
-
+@register()
class config_redhat_nss_pam_ldapd(config_base_legacy_client):
"""
Legacy client configuration for Red Hat based systems,
@@ -207,9 +207,7 @@ class config_redhat_nss_pam_ldapd(config_base_legacy_client):
super(config_redhat_nss_pam_ldapd, self).configure_ca_cert()
-api.register(config_redhat_nss_pam_ldapd)
-
-
+@register()
class config_generic_linux_nss_pam_ldapd(config_base_legacy_client):
"""
Legacy client configuration for non Red Hat based linux systems,
@@ -276,9 +274,7 @@ class config_generic_linux_nss_pam_ldapd(config_base_legacy_client):
'/etc/ldap/ldap.conf\n')
-api.register(config_generic_linux_nss_pam_ldapd)
-
-
+@register()
class config_freebsd_nss_pam_ldapd(config_base_legacy_client):
"""
Legacy client configuration for FreeBSD, using nss-pam-ldapd.
@@ -343,9 +339,8 @@ class config_freebsd_nss_pam_ldapd(config_base_legacy_client):
self.log.command('curl -k https://%s/ipa/config/ca.crt > '
'%s' % (api.env.host, cacrt))
-api.register(config_freebsd_nss_pam_ldapd)
-
+@register()
class config_redhat_nss_ldap(config_base_legacy_client):
"""
Legacy client configuration for Red Hat based systems,
@@ -378,5 +373,3 @@ class config_redhat_nss_ldap(config_base_legacy_client):
'Therefore, clients older than RHEL5.2 will not be '
'able to interoperate with IPA server 3.x.')
super(config_redhat_nss_ldap, self).configure_ca_cert()
-
-api.register(config_redhat_nss_ldap)