diff options
author | Martin Babinsky <mbabinsk@redhat.com> | 2015-05-15 19:02:22 +0200 |
---|---|---|
committer | Jan Cholasta <jcholast@redhat.com> | 2015-05-25 16:23:32 +0000 |
commit | 6a4b428120c2e351ad0f1b4573f50b106844b1fd (patch) | |
tree | efd52a4aa59c5194c57389866310cebb319cb05f | |
parent | 5fd8e53f66bcc96afbcf08686c345e6f2b7ee775 (diff) | |
download | freeipa-6a4b428120c2e351ad0f1b4573f50b106844b1fd.tar.gz freeipa-6a4b428120c2e351ad0f1b4573f50b106844b1fd.tar.xz freeipa-6a4b428120c2e351ad0f1b4573f50b106844b1fd.zip |
merge KRA installation machinery to a single module
This is a prerequisite to further refactoring of KRA install/uninstall
functionality in all IPA install scripts.
https://fedorahosted.org/freeipa/ticket/4468
Reviewed-By: Jan Cholasta <jcholast@redhat.com>
-rwxr-xr-x | install/tools/ipa-replica-install | 21 | ||||
-rwxr-xr-x | install/tools/ipa-server-install | 29 | ||||
-rw-r--r-- | ipaserver/install/ipa_kra_install.py | 83 | ||||
-rw-r--r-- | ipaserver/install/kra.py | 85 |
4 files changed, 118 insertions, 100 deletions
diff --git a/install/tools/ipa-replica-install b/install/tools/ipa-replica-install index f68cc8cf4..c75848b1a 100755 --- a/install/tools/ipa-replica-install +++ b/install/tools/ipa-replica-install @@ -37,10 +37,10 @@ from ipaserver.install import memcacheinstance, dnskeysyncinstance from ipaserver.install import otpdinstance from ipaserver.install.replication import replica_conn_check, ReplicationManager from ipaserver.install.installutils import ( - create_replica_config, read_replica_info_kra_enabled, private_ccache) + create_replica_config, private_ccache) from ipaserver.plugins.ldap2 import ldap2 from ipaserver.install import cainstance -from ipaserver.install import krainstance +from ipaserver.install import kra from ipaserver.install import dns as dns_installer from ipalib import api, create_api, errors, util, certstore, x509 from ipalib.constants import CACERT @@ -473,12 +473,12 @@ def main(): config.setup_kra = options.setup_kra if config.setup_kra: - if not config.setup_ca: - print "CA must be installed with the KRA" - sys.exit(1) - if not read_replica_info_kra_enabled(config.dir): - print "KRA is not installed on the master system" - sys.exit(1) + try: + kra.install_check(config, options, False, + dogtag.install_constants.DOGTAG_VERSION) + except RuntimeError as e: + print str(e) + exit(1) installutils.verify_fqdn(config.master_host_name, options.no_host_dns) @@ -660,10 +660,7 @@ def main(): ds.apply_updates() if options.setup_kra: - kra = krainstance.install_replica_kra(config) - service.print_msg("Restarting the directory server") - ds.restart() - kra.enable_client_auth_to_db(kra.dogtag_constants.KRA_CS_CFG_PATH) + kra.install(config, options, dirman_password) else: service.print_msg("Restarting the directory server") ds.restart() diff --git a/install/tools/ipa-server-install b/install/tools/ipa-server-install index cb6e1abe2..9bb8955dc 100755 --- a/install/tools/ipa-server-install +++ b/install/tools/ipa-server-install @@ -53,13 +53,13 @@ from ipaserver.install import httpinstance from ipaserver.install import ntpinstance from ipaserver.install import certs from ipaserver.install import cainstance -from ipaserver.install import krainstance from ipaserver.install import memcacheinstance from ipaserver.install import otpdinstance from ipaserver.install import sysupgrade from ipaserver.install import replication from ipaserver.install import dns as dns_installer from ipaserver.install import service, installutils +from ipaserver.install import kra from ipapython import version from ipapython import certmonger from ipapython import ipaldap @@ -577,11 +577,7 @@ def uninstall(): if cads_instance.is_configured(): cads_instance.uninstall() - kra_instance = krainstance.KRAInstance( - api.env.realm, dogtag_constants=dogtag_constants) - kra_instance.stop_tracking_certificates() - if kra_instance.is_installed(): - kra_instance.uninstall() + kra.uninstall() ca_instance = cainstance.CAInstance( api.env.realm, certs.NSS_DIR, dogtag_constants=dogtag_constants) @@ -1036,6 +1032,14 @@ def main(): else: admin_password = options.admin_password + if setup_kra: + try: + kra.install_check(None, options, False, + dogtag.install_constants.DOGTAG_VERSION) + except RuntimeError as e: + print str(e) + exit(1) + if options.setup_dns: dns_installer.install_check(False, False, options, host_name) ip_addresses = dns_installer.ip_addresses @@ -1290,18 +1294,7 @@ def main(): http.restart() if setup_kra: - kra = krainstance.KRAInstance(realm_name, - dogtag_constants=dogtag.install_constants) - kra.configure_instance(host_name, domain_name, dm_password, - dm_password, subject_base=options.subject) - - # This is done within stopped_service context, which restarts KRA - service.print_msg("Restarting the directory server") - ds.restart() - - service.print_msg("Enabling KRA to authenticate with the database " - "using client certificates") - kra.enable_client_auth_to_db(kra.dogtag_constants.KRA_CS_CFG_PATH) + kra.install(None, options, dm_password) # Set the admin user kerberos password ds.change_admin_password(admin_password) diff --git a/ipaserver/install/ipa_kra_install.py b/ipaserver/install/ipa_kra_install.py index 386da286a..edb622583 100644 --- a/ipaserver/install/ipa_kra_install.py +++ b/ipaserver/install/ipa_kra_install.py @@ -18,22 +18,16 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -from ConfigParser import RawConfigParser from textwrap import dedent from ipalib import api from ipaplatform import services from ipaplatform.paths import paths from ipapython import admintool -from ipapython import dogtag from ipapython import ipautil -from ipaserver.install import cainstance -from ipaserver.install import dogtaginstance -from ipaserver.install import krainstance -from ipaserver.install import dsinstance from ipaserver.install import installutils -from ipaserver.install import service -from ipaserver.install.installutils import ( - read_replica_info_kra_enabled, create_replica_config) +from ipaserver.install.installutils import create_replica_config +from ipaserver.install import dogtaginstance +from ipaserver.install import kra class KRAInstall(admintool.AdminTool): @@ -101,21 +95,7 @@ class KRAUninstaller(KRAInstall): def run(self): super(KRAUninstaller, self).run() - dogtag_constants = dogtag.configured_constants() - - kra_instance = krainstance.KRAInstance( - api.env.realm, dogtag_constants=dogtag_constants) - kra_instance.stop_tracking_certificates() - if kra_instance.is_installed(): - kra_instance.uninstall() - - # Update config file - parser = RawConfigParser() - parser.read(paths.IPA_DEFAULT_CONF) - parser.set('global', 'enable_kra', 'False') - - with open(paths.IPA_DEFAULT_CONF, 'w') as f: - parser.write(f) + kra.uninstall() class KRAInstaller(KRAInstall): @@ -141,26 +121,8 @@ class KRAInstaller(KRAInstall): " in unattended mode" ) - dogtag_version = int(api.env.dogtag_version) - enable_kra = api.env.enable_kra - - if enable_kra: - self.option_parser.error("KRA is already installed.") - - ca_installed = cainstance.is_ca_installed_locally() - - if ca_installed: - if dogtag_version >= 10: - # correct dogtag version of CA installed - pass - else: - self.option_parser.error( - "Dogtag must be version 10.2 or above to install KRA") - else: - self.option_parser.error( - "Dogtag CA is not installed. Please install the CA first") - self.installing_replica = dogtaginstance.is_installing_replica("KRA") + if self.installing_replica: if not self.args: self.option_parser.error("A replica file is required.") @@ -191,46 +153,27 @@ class KRAInstaller(KRAInstall): super(KRAInstaller, self).run() print dedent(self.INSTALLER_START_MESSAGE) - subject = dsinstance.DsInstance().find_subject_base() if not self.installing_replica: - kra = krainstance.KRAInstance( - api.env.realm, - dogtag_constants=dogtag.install_constants) - - kra.configure_instance( - api.env.host, api.env.domain, self.options.password, - self.options.password, subject_base=subject) + replica_config = None else: replica_config = create_replica_config( self.options.password, self.replica_file, self.options) - if not read_replica_info_kra_enabled(replica_config.dir): - raise admintool.ScriptError( - "Either KRA is not installed on the master system or " - "your replica file is out of date" - ) + self.options.setup_ca = False - kra = krainstance.install_replica_kra(replica_config) - service.print_msg("Restarting the directory server") - - ds = dsinstance.DsInstance() - ds.restart() + try: + kra.install_check(replica_config, self.options, api.env.enable_kra, + int(api.env.dogtag_version)) + except RuntimeError as e: + raise admintool.ScriptError(str(e)) - kra.enable_client_auth_to_db(kra.dogtag_constants.KRA_CS_CFG_PATH) + kra.install(replica_config, self.options, self.options.password) # Restart apache for new proxy config file services.knownservices.httpd.restart(capture_output=True) - # Update config file - parser = RawConfigParser() - parser.read(paths.IPA_DEFAULT_CONF) - parser.set('global', 'enable_kra', 'True') - - with open(paths.IPA_DEFAULT_CONF, 'w') as f: - parser.write(f) - def run(self): try: self._run() diff --git a/ipaserver/install/kra.py b/ipaserver/install/kra.py new file mode 100644 index 000000000..966d171dc --- /dev/null +++ b/ipaserver/install/kra.py @@ -0,0 +1,85 @@ +# +# Copyright (C) 2015 FreeIPA Contributors see COPYING for license +# + +import os +from ConfigParser import RawConfigParser +from ipalib import api +from ipaplatform.paths import paths +from ipapython import dogtag +from ipaserver.install import cainstance +from ipaserver.install import krainstance +from ipaserver.install import dsinstance +from ipaserver.install import service +from ipaserver.install.installutils import read_replica_info_kra_enabled + + +def install_check(replica_config, options, enable_kra, dogtag_version): + if enable_kra: + raise RuntimeError("KRA is already installed.") + + if not options.setup_ca: + if cainstance.is_ca_installed_locally(): + if dogtag_version >= 10: + # correct dogtag version of CA installed + pass + else: + raise RuntimeError( + "Dogtag must be version 10.2 or above to install KRA") + else: + raise RuntimeError( + "Dogtag CA is not installed. Please install the CA first") + + if replica_config is not None: + if not read_replica_info_kra_enabled(replica_config.dir): + raise RuntimeError( + "Either KRA is not installed on the master system or " + "your replica file is out of date" + ) + + +def install(replica_config, options, dm_password): + subject = dsinstance.DsInstance().find_subject_base() + if replica_config is None: + kra = krainstance.KRAInstance( + api.env.realm, + dogtag_constants=dogtag.install_constants) + + kra.configure_instance( + api.env.host, api.env.domain, dm_password, + dm_password, subject_base=subject) + else: + kra = krainstance.install_replica_kra(replica_config) + + service.print_msg("Restarting the directory server") + ds = dsinstance.DsInstance() + ds.restart() + + kra.enable_client_auth_to_db(kra.dogtag_constants.KRA_CS_CFG_PATH) + + # Update config file + parser = RawConfigParser() + parser.read(paths.IPA_DEFAULT_CONF) + parser.set('global', 'enable_kra', 'True') + + with open(paths.IPA_DEFAULT_CONF, 'w') as f: + parser.write(f) + + +def uninstall(): + dogtag_constants = dogtag.configured_constants() + + kra_instance = krainstance.KRAInstance( + api.env.realm, dogtag_constants=dogtag_constants) + kra_instance.stop_tracking_certificates() + if kra_instance.is_installed(): + kra_instance.uninstall() + + # Check if config file exists, then update it + if os.path.exists(paths.IPA_DEFAULT_CONF): + parser = RawConfigParser() + parser.read(paths.IPA_DEFAULT_CONF) + parser.set('global', 'enable_kra', 'False') + + with open(paths.IPA_DEFAULT_CONF, 'w') as f: + parser.write(f) |