diff --git a/library/ipaextras.py b/library/ipaextras.py new file mode 100644 index 0000000000000000000000000000000000000000..7a770d094468d163c4786c27dc08ecb98456fd02 --- /dev/null +++ b/library/ipaextras.py @@ -0,0 +1,201 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Authors: +# Thomas Woerner <twoerner@redhat.com> +# +# Based on ipa-client-install code +# +# Copyright (C) 2017 Red Hat +# see file 'COPYING' for use and warranty information +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +ANSIBLE_METADATA = { + 'metadata_version': '1.0', + 'supported_by': 'community', + 'status': ['preview'], +} + +DOCUMENTATION = ''' +--- +module: ipaextras +short description: Configure IPA extras +description: +Configure IPA extras +options: + servers: + description: The FQDN of the IPA servers to connect to. + required: false + domain: + description: The primary DNS domain of an existing IPA deployment. + required: false + ntp: + description: Set to no to not configure and enable NTP + required: false + force_ntpd: + description: Stop and disable any time&date synchronization services besides ntpd. + required: false + ntp_servers: + description: The ntp servers to configure if ntp is enabled. + required: false + ssh: + description: Configure OpenSSH client + required: false + default: yes + sssd: + description: Configure the client to use SSSD for authentication + required: false + default: yes + trust_sshfp: + description: Configure OpenSSH client to trust DNS SSHFP records + required: false + default: yes + sshd: + description: Configure OpenSSH server + required: false + default: yes + automount_location: + description: Automount location + required: false + default: no + firefox: + description: Configure Firefox to use IPA domain credentials + required: false + default: no + firefox_dir: + description: Specify directory where Firefox is installed (for example: '/usr/lib/firefox') + required: false + no_nisdomain: + description: Do not configure NIS domain name + required: false + default: no + nisdomain: + description: NIS domain name + required: false + on_master: +author: + - Thomas Woerner +''' + +EXAMPLES = ''' +- name: IPA extras configurations + ipaextras: + servers: ["server1.example.com","server2.example.com"] + domain: example.com +''' + +RETURN = ''' +''' + +import logging +import os +from ansible.module_utils.basic import AnsibleModule +from ipalib.install 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 + +def main(): + module = AnsibleModule( + argument_spec = dict( + servers=dict(required=True, type='list'), + domain=dict(required=True), + ntp=dict(required=False, type='bool', default='no'), + force_ntpd=dict(required=False, type='bool', default='no'), + ntp_servers=dict(required=False, type='list'), + ssh=dict(required=False, type='bool', default='yes'), + sssd=dict(required=False, type='bool', default='yes'), + trust_sshfp=dict(required=False, type='bool', default='yes'), + sshd=dict(required=False, type='bool', default='yes'), + automount_location=dict(required=False), + firefox=dict(required=False, type='bool', default='no'), + firefox_dir=dict(required=False), + no_nisdomain=dict(required=False, type='bool', default='no'), + nisdomain=dict(required=False), + on_master=dict(required=False, type='bool', default='no'), + ), + # required_one_of = ( [ '', '' ] ), + supports_check_mode = True, + ) + + module._ansible_debug = True + servers = module.params.get('servers') + domain = module.params.get('domain') + ntp = module.params.get('ntp') + force_ntpd = module.params.get('force_ntpd') + ntp_servers = module.params.get('ntp_servers') + ssh = module.params.get('ssh') + sssd = module.params.get('sssd') + trust_sshfp = module.params.get('trust_sshfp') + sshd = module.params.get('sshd') + automount_location = module.params.get('automount_location') + firefox = module.params.get('firefox') + firefox_dir = module.params.get('firefox_dir') + no_nisdomain = module.params.get('no_nisdomain') + nisdomain = module.params.get('nisdomain') + on_master = module.params.get('on_master') + + fstore = sysrestore.FileStore(paths.IPA_CLIENT_SYSRESTORE) + statestore = sysrestore.StateFile(paths.IPA_CLIENT_SYSRESTORE) + logger = logging.getLogger("ipa-client-install") + + os.environ['KRB5CCNAME'] = CCACHE_FILE + + class Object(object): + pass + options = Object() + options.sssd = sssd + options.trust_sshfp = trust_sshfp + options.location = automount_location + options.server = servers + options.firefox_dir = firefox_dir + options.nisdomain = nisdomain + + if ntp and not on_master: + # disable other time&date services first + if force_ntpd: + ntpconf.force_ntpd(statestore) + + ntpconf.config_ntp(ntp_servers, fstore, statestore) + module.log("NTP enabled") + + if ssh: + configure_ssh_config(fstore, options) + + if sshd: + configure_sshd_config(fstore, options) + + if automount_location: + configure_automount(options) + + if firefox: + configure_firefox(options, statestore, domain) + + if not no_nisdomain: + configure_nisdomain( + options=options, domain=domain, statestore=statestore) + + # Cleanup: Remove CCACHE_FILE + try: + os.remove(CCACHE_FILE) + except Exception: + pass + + module.exit_json(changed=True) + +if __name__ == '__main__': + main()