Convert installation tools to platform-independent access to system services

http://fedorahosted.org/freeipa/ticket/1605
This commit is contained in:
Alexander Bokovoy 2011-09-13 00:11:54 +03:00 committed by Martin Kosek
parent 45e379d5bf
commit bbbb550aaa
5 changed files with 50 additions and 34 deletions

View File

@ -24,6 +24,7 @@ import socket
import os, traceback, logging, shutil
from ipapython import ipautil
from ipapython import services as ipaservices
from ipaserver.install import installutils, service
from ipaserver.install import certs
@ -36,7 +37,6 @@ from ipapython import version
from ipalib import api, util
from ipapython.config import IPAOptionParser
from ipapython import sysrestore
from ipapython import ipautil
CACERT="/etc/ipa/ca.crt"
REPLICA_INFO_TOP_DIR=None
@ -146,7 +146,7 @@ def main():
cs.add_cert_to_service()
# We need to restart apache as we drop a new config file in there
ipautil.service_restart('httpd', '', True)
ipaservices.knownservices.httpd.restart(capture_output=True)
try:
if not os.geteuid()==0:

View File

@ -24,6 +24,7 @@ import os
try:
from optparse import OptionParser
from ipapython import ipautil, config
from ipapython import services as ipaservices
from ipaserver.install import installutils
from ipaserver.install.ldapupdate import LDAPUpdate, BadSyntax
from ipaserver.plugins.ldap2 import ldap2
@ -143,15 +144,17 @@ def main():
# Enable either the portmap or rpcbind service
try:
ipautil.run(["/sbin/chkconfig", "portmap", "on"])
servicemsg = "portmap"
portmap = ipaservices.knownservices.portmap
portmap.enable()
servicemsg = portmap.service_name
except ipautil.CalledProcessError, cpe:
if cpe.returncode == 1:
try:
ipautil.run(["/sbin/chkconfig", "rpcbind", "on"])
servicemsg = "rpcbind"
rpcbind = ipaservices.knownservices.rpcbind
rpcbind.enable()
servicemsg = rpcbind.service_name
except ipautil.CalledProcessError, cpe:
print "Unable to enable either portmap or rpcbind"
print "Unable to enable either %s or %s" % (portmap.service_name, rpcbind.service_name)
retval = 3
# The cn=config entry for the plugin may already exist but it

View File

@ -39,6 +39,7 @@ from ipapython import version
from ipalib import api, errors, util
from ipapython.config import IPAOptionParser
from ipapython import sysrestore
from ipapython import services as ipaservices
CACERT="/etc/ipa/ca.crt"
REPLICA_INFO_TOP_DIR=None
@ -258,7 +259,7 @@ def check_dirsrv():
sys.exit(1)
try:
service.stop("dirsrv")
ipaservices.knownservices.dirsrv.stop()
except:
pass
@ -441,7 +442,7 @@ def main():
if CA:
CA.import_ra_cert(dir + "/ra.p12")
CA.fix_ra_perms()
service.restart("httpd")
ipaservices.knownservices.httpd.restart()
# The DS instance is created before the keytab, add the SSL cert we
# generated
@ -451,9 +452,9 @@ def main():
service.print_msg("Applying LDAP updates")
ds.apply_updates()
service.restart("dirsrv")
service.restart("krb5kdc")
service.restart("httpd")
ipaservices.knownservices.dirsrv.restart()
ipaservices.knownservices.krb5kdc.restart()
ipaservices.knownservices.httpd.restart()
if options.setup_dns:
install_bind(config, options)
@ -470,7 +471,7 @@ def main():
ds.init_memberof()
#Everything installed properly, activate ipa service.
service.chkconfig_on('ipa')
ipaservices.knownservices.ipa.enable()
try:
if not os.geteuid()==0:

View File

@ -63,6 +63,7 @@ from ipapython.config import IPAOptionParser
from ipalib.dn import DN
from ipalib.x509 import load_certificate_from_file, load_certificate_chain_from_file
from ipalib.constants import DNS_ZONE_REFRESH
from ipapython import services as ipaservices
pw_name = None
uninstalling = False
@ -438,7 +439,7 @@ def check_dirsrv(unattended):
sys.exit(1)
try:
service.stop("dirsrv")
ipaservices.knownservices.dirsrv.stop()
except:
pass
@ -510,7 +511,7 @@ def uninstall():
except KeyError:
logging.info("Group %s already removed", dsinstance.DS_GROUP)
service.chkconfig_off('ipa')
ipaservices.knownservices.ipa.disable()
# Now for some sanity checking. Make sure everything was really
# uninstalled.
@ -999,7 +1000,7 @@ def main():
os.remove(pw_name)
else:
http.create_instance(realm_name, host_name, domain_name, dm_password, autoconfig=True, self_signed_ca=options.selfsign, subject_base=options.subject, auto_redirect=options.ui_redirect)
ipautil.run(["/sbin/restorecon", "/var/cache/ipa/sessions"])
ipaservices.restore_context("/var/cache/ipa/sessions")
set_subject_in_config(realm_name, dm_password, util.realm_to_suffix(realm_name), options.subject)
@ -1043,7 +1044,7 @@ def main():
#Everything installed properly, activate ipa service.
service.chkconfig_on('ipa')
ipaservices.knownservices.ipa.enable()
print "=============================================================================="
print "Setup complete"
@ -1067,7 +1068,7 @@ def main():
print "\t This ticket will allow you to use the IPA tools (e.g., ipa user-add)"
print "\t and the web user interface."
if not service.is_running("ntpd"):
if not ipaservices.knownservices.ntpd.is_running():
print "\t3. Kerberos requires time synchronization between clients"
print "\t and servers for correct operation. You should consider enabling ntpd."

View File

@ -22,6 +22,7 @@ import sys
try:
import os
from ipaserver.install import service
from ipapython import services as ipaservices
from ipaserver.install.dsinstance import config_dirname, realm_to_serverid
from ipaserver.install.installutils import is_ipa_configured
from ipapython import sysrestore
@ -161,9 +162,10 @@ def get_config():
return svc_list
def ipa_start(options):
dirsrv = ipaservices.knownservices.dirsrv
try:
print "Starting Directory Service"
service.start('dirsrv', capture_output=get_capture_output('dirsrv', options.debug))
dirsrv.start(capture_output=get_capture_output('dirsrv', options.debug))
except Exception, e:
raise IpactlError("Failed to start Directory Service: " + str(e))
@ -174,7 +176,7 @@ def ipa_start(options):
emit_err("Failed to read data from Directory Service: " + str(e))
emit_err("Shutting down")
try:
service.stop('dirsrv', capture_output=False)
dirsrv.stop(capture_output=False)
except:
pass
if isinstance(e, IpactlError):
@ -189,25 +191,28 @@ def ipa_start(options):
for (order, svc) in sorted(svc_list):
svc_name = service.SERVICE_LIST[svc][0]
svchandle = ipaservices.service(svc_name)
try:
print "Starting %s Service" % svc
service.start(svc_name, capture_output=get_capture_output(svc_name, options.debug))
svchandle.start(capture_output=get_capture_output(svc_name, options.debug))
except:
emit_err("Failed to start %s Service" % svc)
emit_err("Shutting down")
for (order, svc) in sorted(svc_list):
svc_name = service.SERVICE_LIST[svc][0]
svc_off = ipaservices.service(svc_name)
try:
service.stop(svc_name, capture_output=False)
svc_off.stop(capture_output=False)
except:
pass
try:
service.stop('dirsrv', capture_output=False)
svchandle.stop('dirsrv', capture_output=False)
except:
pass
raise IpactlError("Aborting ipactl")
def ipa_stop(options):
dirsrv = ipaservices.knownservices.dirsrv
svc_list = []
try:
svc_list = get_config()
@ -216,14 +221,14 @@ def ipa_stop(options):
# and see if we can get anything. If not throw our hands up and just
# exit
try:
service.start('dirsrv', capture_output=False)
dirsrv.start(capture_output=False)
svc_list = get_config()
except Exception, e:
emit_err("Failed to read data from Directory Service: " + str(e))
emit_err("Shutting down")
try:
# just try to stop it, do not read a result
service.stop('dirsrv')
dirsrv.stop()
finally:
raise IpactlError(None)
@ -233,23 +238,25 @@ def ipa_stop(options):
for (order, svc) in sorted(svc_list, reverse=True):
svc_name = service.SERVICE_LIST[svc][0]
svchandle = ipaservices.service(svc_name)
try:
print "Stopping %s Service" % svc
service.stop(svc_name, capture_output=False)
svchandle.stop(capture_output=False)
except:
emit_err("Failed to stop %s Service" % svc)
try:
print "Stopping Directory Service"
service.stop('dirsrv', capture_output=False)
dirsrv.stop('dirsrv', capture_output=False)
except:
raise IpactlError("Failed to stop Directory Service")
def ipa_restart(options):
dirsrv = ipaservices.knownservices.dirsrv
try:
print "Restarting Directory Service"
service.restart('dirsrv', capture_output=get_capture_output('dirsrv', options.debug))
dirsrv.restart(capture_output=get_capture_output('dirsrv', options.debug))
except Exception, e:
raise IpactlError("Failed to restart Directory Service: " + str(e))
@ -260,7 +267,7 @@ def ipa_restart(options):
emit_err("Failed to read data from Directory Service: " + str(e))
emit_err("Shutting down")
try:
service.stop('dirsrv', capture_output=False)
dirsrv.stop(capture_output=False)
except:
pass
if isinstance(e, IpactlError):
@ -275,27 +282,30 @@ def ipa_restart(options):
for (order, svc) in sorted(svc_list):
svc_name = service.SERVICE_LIST[svc][0]
svchandle = ipaservices.service(svc_name)
try:
print "Restarting %s Service" % svc
service.restart(svc_name, capture_output=get_capture_output(svc_name, options.debug))
svchandle.restart(capture_output=get_capture_output(svc_name, options.debug))
except:
emit_err("Failed to restart %s Service" % svc)
emit_err("Shutting down")
for (order, svc) in sorted(svc_list):
svc_name = service.SERVICE_LIST[svc][0]
svc_off = ipaservices.service(svc_name)
try:
service.stop(svc_name, capture_output=False)
svc_off.stop(capture_output=False)
except:
pass
try:
service.stop('dirsrv', capture_output=False)
dirsrv.stop(capture_output=False)
except:
pass
raise IpactlError("Aborting ipactl")
def ipa_status(options):
dirsrv = ipaservices.knownservices.dirsrv
try:
if service.is_running('dirsrv'):
if dirsrv.is_running():
print "Directory Service: RUNNING"
else:
print "Directory Service: STOPPED"
@ -315,8 +325,9 @@ def ipa_status(options):
for (order, svc) in sorted(svc_list):
svc_name = service.SERVICE_LIST[svc][0]
svchandle = ipaservices.service(svc_name)
try:
if service.is_running(svc_name):
if svchandle.is_running():
print "%s Service: RUNNING" % svc
else:
print "%s Service: STOPPED" % svc