#7330 ipa-server-install --uninstall does not return error code on error
Closed: fixed 6 years ago Opened 6 years ago by cheimes.

Issue

ipa-server-install --uninstall --unattended returns 0 even when uninstallation has failed with a fatal error.

Steps to Reproduce

  1. run ipa-server-install --uninstall --unattended --debug with 4.6.2
  2. run echo $?

Actual behavior

# ipa-server-install --uninstall --unattended

WARNING: Failed to connect to Directory Server to find information about
replication agreements. Uninstallation will continue despite the possible
existing replication agreements.

If this server is the last instance of CA,
KRA, or DNSSEC master, uninstallation may result in data loss.
Shutting down all IPA services
Configuring certmonger to stop tracking system certificates for KRA
Configuring certmonger to stop tracking system certificates for CA
ipapython.install.common: ERROR    {'desc': "Can't contact LDAP server", 'errno': 111, 'info': 'Connection refused'}
# echo $?
0

Expected behavior

error code should not be 0

Additional info:

I think the issue is caused by the exception handler of ipapython.install.common.Continuous. It swallows the exception and does not set an error indicator.

ipapython.ipautil: DEBUG    stderr=
ipapython.install.common: DEBUG    Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/ipapython/install/common.py", line 94, in _handle_execute_exception
    super(Continuous, self)._handle_execute_exception(exc_info)
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 459, in _handle_execute_exception
    self._handle_exception(exc_info)
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 449, in _handle_exception
    six.reraise(*exc_info)
  File "/usr/lib/python3.6/site-packages/six.py", line 686, in reraise
    raise value
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 420, in __runner
    step()
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 417, in <lambda>
    step = lambda: next(self.__gen)
  File "/usr/lib/python3.6/site-packages/ipapython/install/util.py", line 81, in run_generator_with_yield_from
    six.reraise(*exc_info)
  File "/usr/lib/python3.6/site-packages/six.py", line 686, in reraise
    raise value
  File "/usr/lib/python3.6/site-packages/ipapython/install/util.py", line 59, in run_generator_with_yield_from
    value = gen.send(prev_value)
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 654, in _configure
    next(executor)
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 430, in __runner
    exc_handler(exc_info)
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 459, in _handle_execute_exception
    self._handle_exception(exc_info)
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 517, in _handle_exception
    self.__parent._handle_exception(exc_info)
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 449, in _handle_exception
    six.reraise(*exc_info)
  File "/usr/lib/python3.6/site-packages/six.py", line 686, in reraise
    raise value
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 514, in _handle_exception
    super(ComponentBase, self)._handle_exception(exc_info)
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 449, in _handle_exception
    six.reraise(*exc_info)
  File "/usr/lib/python3.6/site-packages/six.py", line 686, in reraise
    raise value
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 420, in __runner
    step()
  File "/usr/lib/python3.6/site-packages/ipapython/install/core.py", line 417, in <lambda>
    step = lambda: next(self.__gen)
  File "/usr/lib/python3.6/site-packages/ipapython/install/util.py", line 81, in run_generator_with_yield_from
    six.reraise(*exc_info)
  File "/usr/lib/python3.6/site-packages/six.py", line 686, in reraise
    raise value
  File "/usr/lib/python3.6/site-packages/ipapython/install/util.py", line 59, in run_generator_with_yield_from
    value = gen.send(prev_value)
  File "/usr/lib/python3.6/site-packages/ipapython/install/common.py", line 74, in _uninstall
    for _nothing in self._uninstaller(self.parent):
  File "/usr/lib/python3.6/site-packages/ipaserver/install/server/__init__.py", line 589, in main
    uninstall(self)
  File "/usr/lib/python3.6/site-packages/ipaserver/install/server/install.py", line 250, in decorated
    func(installer)
  File "/usr/lib/python3.6/site-packages/ipaserver/install/server/install.py", line 1083, in uninstall
    custodiainstance.CustodiaInstance().uninstall()
  File "/usr/lib/python3.6/site-packages/ipaserver/install/custodiainstance.py", line 76, in uninstall
    keystore.remove_server_keys()
  File "/usr/lib/python3.6/site-packages/ipaserver/secrets/kem.py", line 250, in remove_server_keys
    self.remove_keys('host')
  File "/usr/lib/python3.6/site-packages/ipaserver/secrets/kem.py", line 258, in remove_keys
    ldapconn.del_key(KEY_USAGE_SIG, principal)
  File "/usr/lib/python3.6/site-packages/ipaserver/secrets/kem.py", line 169, in del_key
    dn = self._get_dn(usage, principal)
  File "/usr/lib/python3.6/site-packages/ipaserver/secrets/kem.py", line 133, in _get_dn
    return DN(('cn', name), service_rdn, self.keysbase)
  File "/usr/lib/python3.6/site-packages/ipaserver/secrets/kem.py", line 40, in keysbase
    return '%s,%s' % (IPA_REL_BASE_DN, self.basedn)
  File "/usr/lib/python3.6/site-packages/ipaserver/secrets/common.py", line 24, in basedn
    conn = self.connect()
  File "/usr/lib/python3.6/site-packages/ipaserver/secrets/common.py", line 38, in connect
    conn.sasl_interactive_bind_s('', auth_tokens)
  File "/usr/lib64/python3.6/site-packages/ldap/ldapobject.py", line 431, in sasl_interactive_bind_s
    return self._ldap_call(self._l.sasl_interactive_bind_s,who,auth,RequestControlTuples(serverctrls),RequestControlTuples(clientctrls),sasl_flags)
  File "/usr/lib64/python3.6/site-packages/ldap/ldapobject.py", line 298, in _ldap_call
    reraise(exc_type, exc_value, exc_traceback)
  File "/usr/lib64/python3.6/site-packages/ldap/compat.py", line 43, in reraise
    raise exc_value
  File "/usr/lib64/python3.6/site-packages/ldap/ldapobject.py", line 282, in _ldap_call
    result = func(*args,**kwargs)
ldap.SERVER_DOWN: {'desc': "Can't contact LDAP server", 'errno': 111, 'info': 'Connection refused'}

Metadata Update from @fbarreto:
- Issue assigned to fbarreto

6 years ago

Metadata Update from @fbarreto:
- Assignee reset

6 years ago

Metadata Update from @rcritten:
- Issue priority set to: normal
- Issue set to the milestone: FreeIPA 4.6.4

6 years ago

Metadata Update from @rcritten:
- Issue assigned to rcritten

6 years ago

master:

  • 68c7b03 Return a value if exceptions are raised in server uninstall
  • 64fca87 Remove the Continuous installer class, it is unused

ipa-4-6:

  • b446e45 Return a value if exceptions are raised in server uninstall
  • 68f1744 Remove the Continuous installer class, it is unused

Metadata Update from @cheimes:
- Issue close_status updated to: fixed
- Issue status updated to: Closed (was: Open)

6 years ago

Login to comment on this ticket.

Metadata