diff options
Diffstat (limited to 'ipaserver/advise')
-rw-r--r-- | ipaserver/advise/base.py | 67 | ||||
-rw-r--r-- | ipaserver/advise/plugins/fedora_authconfig.py | 9 | ||||
-rw-r--r-- | ipaserver/advise/plugins/legacy_clients.py | 27 |
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) |