diff --git a/library/ipaextras.py b/library/ipaextras.py index 7a770d094468d163c4786c27dc08ecb98456fd02..c0a5652bd9d19902a6b26205addcffecd4466d24 100644 --- a/library/ipaextras.py +++ b/library/ipaextras.py @@ -99,15 +99,64 @@ EXAMPLES = ''' RETURN = ''' ''' -import logging import os +import sys +import tempfile +import inspect +import logging + from ansible.module_utils.basic import AnsibleModule -from ipalib.install import sysrestore +from ipapython.version import NUM_VERSION, VERSION +if NUM_VERSION < 40400: + raise Exception, "freeipa version '%s' is too old" % VERSION +try: + from ipalib.install import sysrestore +except ImportError: + from ipapython import sysrestore from ipaplatform.paths import paths -from ipaclient.install.client import CCACHE_FILE, configure_ssh_config, \ - configure_sshd_config, configure_automount, configure_firefox, \ - configure_nisdomain -from ipaclient.install import ntpconf +try: + from ipaclient.install.client import CCACHE_FILE, configure_ssh_config, \ + configure_sshd_config, configure_automount, configure_firefox, \ + configure_nisdomain +except ImportError: + # Create temporary copy of ipa-client-install script (as + # ipa_client_install.py) to be able to import the script easily and also + # to remove the global finally clause in which the generated ccache file + # gets removed. The ccache file will be needed in the next step. + # This is done in a temporary directory that gets removed right after + # ipa_client_install has been imported. + import shutil + temp_dir = tempfile.mkdtemp(dir="/tmp") + sys.path.append(temp_dir) + temp_file = "%s/ipa_client_install.py" % temp_dir + + with open("/usr/sbin/ipa-client-install", "r") as f_in: + with open(temp_file, "w") as f_out: + for line in f_in: + if line.startswith("finally:"): + break + f_out.write(line) + import ipa_client_install + + shutil.rmtree(temp_dir, ignore_errors=True) + sys.path.remove(temp_dir) + + argspec = inspect.getargspec(ipa_client_install.configure_nisdomain) + if len(argspec.args) == 3: + configure_nisdomain = ipa_client_install.configure_nisdomain + else: + def configure_nisdomain(options, domain, statestore=None): + return ipa_client_install.configure_nisdomain(options, domain) + + CCACHE_FILE = paths.IPA_DNS_CCACHE + configure_ssh_config = ipa_client_install.configure_ssh_config + configure_sshd_config = ipa_client_install.configure_sshd_config + configure_automount = ipa_client_install.configure_automount + configure_firefox = ipa_client_install.configure_firefox +try: + from ipaclient.install import ntpconf +except ImportError: + from ipaclient import ntpconf def main(): module = AnsibleModule(