diff --git a/roles/ipareplica/library/ipareplica_enable_ipa.py b/roles/ipareplica/library/ipareplica_enable_ipa.py new file mode 100644 index 0000000000000000000000000000000000000000..7c473b82c417bcfaf594388dbdbcf3a033920a47 --- /dev/null +++ b/roles/ipareplica/library/ipareplica_enable_ipa.py @@ -0,0 +1,152 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Authors: +# Thomas Woerner <twoerner@redhat.com> +# +# Based on ipa-replica-install code +# +# Copyright (C) 2018 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/>. + +from __future__ import print_function + +ANSIBLE_METADATA = { + 'metadata_version': '1.0', + 'supported_by': 'community', + 'status': ['preview'], +} + +DOCUMENTATION = ''' +--- +module: ipareplica_enable_ipa +short description: +description: Enable IPA + Enable IPA +options: + subject_base: + description: The certificate subject base (default O=<realm-name>). + required: yes + ccache: + description: The installation specific ccache file. + required: yes + _top_dir: + description: The temporary top directory used for the installation. + required: yes + setup_ca: + description: Configure a dogtag CA + required: yes + config_master_host_name: + description: The master host name + required: yes +author: + - Thomas Woerner +''' + +EXAMPLES = ''' +''' + +RETURN = ''' +''' + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.ansible_ipa_replica import * + +def main(): + ansible_module = AnsibleModule( + argument_spec = dict( + hostname=dict(required=False), + ### server ### + ### certificate system ### + subject_base=dict(required=True), + ### additional ### + ccache=dict(required=True), + _top_dir = dict(required=True), + setup_ca=dict(required=True), + config_master_host_name=dict(required=True), + ), + supports_check_mode = True, + ) + + ansible_module._ansible_debug = True + ansible_log = AnsibleModuleLog(ansible_module) + + # get parameters # + + options = installer + options.host_name = ansible_module.params.get('hostname') + ### server ### + ### certificate system ### + options.subject_base = ansible_module.params.get('subject_base') + if options.subject_base is not None: + options.subject_base = DN(options.subject_base) + ### additional ### + ccache = ansible_module.params.get('ccache') + os.environ['KRB5CCNAME'] = ccache + options._top_dir = ansible_module.params.get('_top_dir') + options.setup_ca = ansible_module.params.get('setup_ca') + config_master_host_name = ansible_module.params.get('config_master_host_name') + + # init # + + fstore = sysrestore.FileStore(paths.SYSRESTORE) + sstore = sysrestore.StateFile(paths.SYSRESTORE) + + ansible_log.debug("== INSTALL ==") + + promote = installer.promote + + env = gen_env_boostrap_finalize_core(paths.ETC_IPA, + constants.DEFAULT_CONFIG) + api_bootstrap_finalize(env) + config = gen_ReplicaConfig() + config.subject_base = options.subject_base + config.master_host_name = config_master_host_name + + remote_api = gen_remote_api(config.master_host_name, paths.ETC_IPA) + installer._remote_api = remote_api + + conn = remote_api.Backend.ldap2 + ccache = os.environ['KRB5CCNAME'] + + api.Backend.ldap2.connect() + + with redirect_stdout(ansible_log): + # Enable configured services and update DNS SRV records + service.enable_services(config.host_name) + api.Command.dns_update_system_records() + ca_servers = service.find_providing_servers('CA', api.Backend.ldap2, + api) + api.Backend.ldap2.disconnect() + + # Everything installed properly, activate ipa service. + services.knownservices.ipa.enable() + + # Print a warning if CA role is only installed on one server + if len(ca_servers) == 1: + msg = textwrap.dedent(u''' + WARNING: The CA service is only installed on one server ({}). + It is strongly recommended to install it on another server. + Run ipa-ca-install(1) on another master to accomplish this. + '''.format(ca_servers[0])) + ansible_module.warn(msg) + + # done # + + ansible_module.exit_json(changed=True) + +if __name__ == '__main__': + main() diff --git a/roles/ipareplica/library/ipaserver_enable_ipa.py b/roles/ipareplica/library/ipaserver_enable_ipa.py deleted file mode 120000 index d708756f9cdaba8218a82c40b90577a35d6395e5..0000000000000000000000000000000000000000 --- a/roles/ipareplica/library/ipaserver_enable_ipa.py +++ /dev/null @@ -1 +0,0 @@ -../../ipaserver/library/ipaserver_enable_ipa.py \ No newline at end of file diff --git a/roles/ipareplica/tasks/install.yml b/roles/ipareplica/tasks/install.yml index e99ea51e93c54997ed2ede4186b62a8a0529b794..e8e8056a83150cdf2d9640febbf6e6acd0bf4874 100644 --- a/roles/ipareplica/tasks/install.yml +++ b/roles/ipareplica/tasks/install.yml @@ -603,12 +603,15 @@ # ipareplica_backend_disconnect: - name: Install - Enable IPA - ipaserver_enable_ipa: + ipareplica_enable_ipa: hostname: "{{ result_ipareplica_test.hostname }}" + ### certificate system ### + subject_base: "{{ result_ipareplica_prepare.subject_base }}" + ### additional ### + ccache: "{{ result_ipareplica_prepare.ccache }}" + _top_dir: "{{ result_ipareplica_prepare._top_dir }}" setup_ca: "{{ result_ipareplica_prepare.config_setup_ca }}" - # The setup_dns step is only used on the server, therefore simply - # setting setup_dns to reuse the server version here. - setup_dns: no + config_master_host_name: "{{ result_ipareplica_prepare.config_master_host_name }}" register: result_ipareplica_enable_ipa - name: Install - Cleanup root IPA cache