summaryrefslogtreecommitdiffstats
path: root/ipaserver
diff options
context:
space:
mode:
authorMartin Babinsky <mbabinsk@redhat.com>2015-05-15 19:02:22 +0200
committerJan Cholasta <jcholast@redhat.com>2015-05-25 16:23:32 +0000
commit6a4b428120c2e351ad0f1b4573f50b106844b1fd (patch)
treeefd52a4aa59c5194c57389866310cebb319cb05f /ipaserver
parent5fd8e53f66bcc96afbcf08686c345e6f2b7ee775 (diff)
downloadfreeipa-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>
Diffstat (limited to 'ipaserver')
-rw-r--r--ipaserver/install/ipa_kra_install.py83
-rw-r--r--ipaserver/install/kra.py85
2 files changed, 98 insertions, 70 deletions
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)