Return unique error when automount is already or not configured

Use identical return codes as ipa-client-install when uninstalling
ipa-client-automount and it is not configured, or when calling
it again to return that is ias already configured.

https://pagure.io/freeipa/issue/7396

Signed-off-by: Rob Crittenden <rcritten@redhat.com>
Reviewed-By: Tibor Dudlak <tdudlak@redhat.com>
This commit is contained in:
Rob Crittenden 2018-04-30 17:16:40 -04:00
parent 230760ffea
commit a0e846f56c
2 changed files with 36 additions and 13 deletions

View File

@ -43,6 +43,8 @@ from six.moves.urllib.parse import urlsplit
from optparse import OptionParser # pylint: disable=deprecated-module from optparse import OptionParser # pylint: disable=deprecated-module
from ipaclient.install import ipachangeconf, ipadiscovery from ipaclient.install import ipachangeconf, ipadiscovery
from ipaclient.install.client import (CLIENT_NOT_CONFIGURED,
CLIENT_ALREADY_CONFIGURED)
from ipalib import api, errors from ipalib import api, errors
from ipalib.install import sysrestore from ipalib.install import sysrestore
from ipalib.install.kinit import kinit_keytab from ipalib.install.kinit import kinit_keytab
@ -189,7 +191,8 @@ def configure_autofs_sssd(fstore, statestore, autodiscover, options):
domain.add_provider('ipa', 'autofs') domain.add_provider('ipa', 'autofs')
try: try:
domain.get_option('ipa_automount_location') domain.get_option('ipa_automount_location')
sys.exit('An automount location is already configured') print('An automount location is already configured')
sys.exit(CLIENT_ALREADY_CONFIGURED)
except SSSDConfig.NoOptionError: except SSSDConfig.NoOptionError:
domain.set_option('ipa_automount_location', options.location) domain.set_option('ipa_automount_location', options.location)
break break
@ -252,17 +255,31 @@ def configure_autofs_common(fstore, statestore, options):
autofs.service_name, str(e)) autofs.service_name, str(e))
def uninstall(fstore, statestore): def uninstall(fstore, statestore):
RESTORE_FILES=[
paths.SYSCONFIG_AUTOFS,
paths.NSSWITCH_CONF,
paths.AUTOFS_LDAP_AUTH_CONF,
paths.SYSCONFIG_NFS,
paths.IDMAPD_CONF,
]
STATES=['autofs', 'rpcidmapd', 'rpcgssd']
# automount only touches /etc/nsswitch.conf if LDAP is
# used. Don't restore it otherwise.
if (statestore.get_state('authconfig', 'sssd') or
(statestore.get_state('authselect', 'profile') == 'sssd')):
RESTORE_FILES.remove(paths.NSSWITCH_CONF)
if (not any(fstore.has_file(f) for f in RESTORE_FILES) or
not any(statestore.has_state(s) for s in STATES)):
print("IPA automount is not configured on this system")
return CLIENT_NOT_CONFIGURED
print("Restoring configuration") print("Restoring configuration")
if fstore.has_file(paths.SYSCONFIG_AUTOFS):
fstore.restore_file(paths.SYSCONFIG_AUTOFS) for filepath in RESTORE_FILES:
if fstore.has_file(paths.NSSWITCH_CONF): if fstore.has_file(filepath):
fstore.restore_file(paths.NSSWITCH_CONF) fstore.restore_file(filepath)
if fstore.has_file(paths.AUTOFS_LDAP_AUTH_CONF):
fstore.restore_file(paths.AUTOFS_LDAP_AUTH_CONF)
if fstore.has_file(paths.SYSCONFIG_NFS):
fstore.restore_file(paths.SYSCONFIG_NFS)
if fstore.has_file(paths.IDMAPD_CONF):
fstore.restore_file(paths.IDMAPD_CONF)
if statestore.has_state('autofs'): if statestore.has_state('autofs'):
enabled = statestore.restore_state('autofs', 'enabled') enabled = statestore.restore_state('autofs', 'enabled')
running = statestore.restore_state('autofs', 'running') running = statestore.restore_state('autofs', 'running')
@ -382,7 +399,8 @@ def main():
try: try:
check_client_configuration() check_client_configuration()
except ScriptError as e: except ScriptError as e:
sys.exit(e) print(e.msg)
sys.exit(e.rval)
fstore = sysrestore.FileStore(paths.IPA_CLIENT_SYSRESTORE) fstore = sysrestore.FileStore(paths.IPA_CLIENT_SYSRESTORE)
statestore = sysrestore.StateFile(paths.IPA_CLIENT_SYSRESTORE) statestore = sysrestore.StateFile(paths.IPA_CLIENT_SYSRESTORE)
@ -412,7 +430,8 @@ def main():
ca_cert_path = paths.IPA_CA_CRT ca_cert_path = paths.IPA_CA_CRT
if statestore.has_state('autofs'): if statestore.has_state('autofs'):
sys.exit('automount is already configured on this system.\n') print('An automount location is already configured')
sys.exit(CLIENT_ALREADY_CONFIGURED)
autodiscover = False autodiscover = False
ds = ipadiscovery.IPADiscovery() ds = ipadiscovery.IPADiscovery()

View File

@ -87,3 +87,7 @@ Files that will be configured when using the ldap automount client:
0 if the installation was successful 0 if the installation was successful
1 if an error occurred 1 if an error occurred
2 if uninstalling and automount is not configured
3 if installing and automount already configured