Blame roles/ipareplica/library/ipareplica_ds_enable_ssl.py

Packit Service ee01e6
#!/usr/bin/python
Packit Service 0a38ef
# -*- coding: utf-8 -*-
Packit Service 0a38ef
Packit Service 0a38ef
# Authors:
Packit Service 0a38ef
#   Thomas Woerner <twoerner@redhat.com>
Packit Service 0a38ef
#
Packit Service 0a38ef
# Based on ipa-replica-install code
Packit Service 0a38ef
#
Packit Service 0a38ef
# Copyright (C) 2018  Red Hat
Packit Service 0a38ef
# see file 'COPYING' for use and warranty information
Packit Service 0a38ef
#
Packit Service 0a38ef
# This program is free software; you can redistribute it and/or modify
Packit Service 0a38ef
# it under the terms of the GNU General Public License as published by
Packit Service 0a38ef
# the Free Software Foundation, either version 3 of the License, or
Packit Service 0a38ef
# (at your option) any later version.
Packit Service 0a38ef
#
Packit Service 0a38ef
# This program is distributed in the hope that it will be useful,
Packit Service 0a38ef
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 0a38ef
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 0a38ef
# GNU General Public License for more details.
Packit Service 0a38ef
#
Packit Service 0a38ef
# You should have received a copy of the GNU General Public License
Packit Service 0a38ef
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 0a38ef
Packit Service 0a38ef
from __future__ import print_function
Packit Service 0a38ef
Packit Service 0a38ef
ANSIBLE_METADATA = {
Packit Service 0a38ef
    'metadata_version': '1.0',
Packit Service 0a38ef
    'supported_by': 'community',
Packit Service 0a38ef
    'status': ['preview'],
Packit Service 0a38ef
}
Packit Service 0a38ef
Packit Service 0a38ef
DOCUMENTATION = '''
Packit Service 0a38ef
---
Packit Service 0a38ef
module: ipareplica_ds_enable_ssl
Packit Service 0a38ef
short description: DS enable SSL
Packit Service 0a38ef
description:
Packit Service 0a38ef
  DS enable SSL
Packit Service 0a38ef
options:
Packit Service 0a38ef
  setup_ca:
Packit Service 0a38ef
    description: Configure a dogtag CA
Packit Service 0a38ef
    required: yes
Packit Service 0a38ef
  setup_kra:
Packit Service 0a38ef
    description: Configure a dogtag KRA
Packit Service 0a38ef
    required: yes
Packit Service 0a38ef
  no_pkinit:
Packit Service 0a38ef
    description: Disable pkinit setup steps
Packit Service 0a38ef
    required: yes
Packit Service 0a38ef
  dirsrv_config_file:
Packit Service 0a38ef
    description:
Packit Service 0a38ef
      The path to LDIF file that will be used to modify configuration of
Packit Service 0a38ef
      dse.ldif during installation of the directory server instance
Packit Service 0a38ef
    required: yes
Packit Service 0a38ef
  subject_base:
Packit Service 0a38ef
    description:
Packit Service 0a38ef
      The certificate subject base (default O=<realm-name>).
Packit Service 0a38ef
      RDNs are in LDAP order (most specific RDN first).
Packit Service 0a38ef
    required: no
Packit Service 0a38ef
  config_master_host_name:
Packit Service 0a38ef
    description: The config master_host_name setting
Packit Service 0a38ef
    required: no
Packit Service 0a38ef
  ccache:
Packit Service 0a38ef
    description: The local ccache
Packit Service 0a38ef
    required: no
Packit Service 0a38ef
  _ca_enabled:
Packit Service 0a38ef
    description: The installer _ca_enabled setting
Packit Service 0a38ef
    required: yes
Packit Service 0a38ef
  _ca_file:
Packit Service 0a38ef
    description: The installer _ca_file setting
Packit Service 0a38ef
    required: yes
Packit Service 0a38ef
  _dirsrv_pkcs12_info:
Packit Service 0a38ef
    description: The installer _dirsrv_pkcs12_info setting
Packit Service 0a38ef
    required: yes
Packit Service 0a38ef
  _pkinit_pkcs12_info:
Packit Service 0a38ef
    description: The installer _pkinit_pkcs12_info setting
Packit Service 0a38ef
    required: yes
Packit Service 0a38ef
  _top_dir:
Packit Service 0a38ef
    description: The installer _top_dir setting
Packit Service 0a38ef
    required: no
Packit Service 0a38ef
  dirman_password:
Packit Service 0a38ef
    description: Directory Manager (master) password
Packit Service 0a38ef
    required: no
Packit Service 0a38ef
  ds_ca_subject:
Packit Service 0a38ef
    description: The ds.ca_subject setting
Packit Service 0a38ef
    required: no
Packit Service 0a38ef
author:
Packit Service 0a38ef
    - Thomas Woerner
Packit Service 0a38ef
'''
Packit Service 0a38ef
Packit Service 0a38ef
EXAMPLES = '''
Packit Service 0a38ef
'''
Packit Service 0a38ef
Packit Service 0a38ef
RETURN = '''
Packit Service 0a38ef
'''
Packit Service 0a38ef
Packit Service 0a38ef
import os
Packit Service 0a38ef
Packit Service 0a38ef
from ansible.module_utils.basic import AnsibleModule
Packit Service 0a38ef
from ansible.module_utils.ansible_ipa_replica import (
Packit Service 0a38ef
    AnsibleModuleLog, setup_logging, installer, DN, paths,
Packit Service 0a38ef
    gen_env_boostrap_finalize_core, constants, api_bootstrap_finalize,
Packit Service 0a38ef
    gen_ReplicaConfig, gen_remote_api, api, redirect_stdout,
Packit Service 0a38ef
    replica_ds_init_info
Packit Service 0a38ef
)
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
def main():
Packit Service 0a38ef
    ansible_module = AnsibleModule(
Packit Service 0a38ef
        argument_spec=dict(
Packit Service 0a38ef
            # server
Packit Service 0a38ef
            setup_ca=dict(required=False, type='bool'),
Packit Service 0a38ef
            setup_kra=dict(required=False, type='bool'),
Packit Service 0a38ef
            no_pkinit=dict(required=False, type='bool'),
Packit Service 0a38ef
            dirsrv_config_file=dict(required=False),
Packit Service 0a38ef
            # certificate system
Packit Service 0a38ef
            subject_base=dict(required=True),
Packit Service 0a38ef
            # additional
Packit Service 0a38ef
            config_master_host_name=dict(required=True),
Packit Service 0a38ef
            ccache=dict(required=True),
Packit Service 0a38ef
            _ca_enabled=dict(required=False, type='bool'),
Packit Service 0a38ef
            _ca_file=dict(required=False),
Packit Service 0a38ef
            _dirsrv_pkcs12_info=dict(required=False, type='list'),
Packit Service 0a38ef
            _pkinit_pkcs12_info=dict(required=False, type='list'),
Packit Service 0a38ef
            _top_dir=dict(required=True),
Packit Service 0a38ef
            dirman_password=dict(required=True, no_log=True),
Packit Service 0a38ef
            ds_ca_subject=dict(required=True),
Packit Service 0a38ef
        ),
Packit Service 0a38ef
        supports_check_mode=True,
Packit Service 0a38ef
    )
Packit Service 0a38ef
Packit Service 0a38ef
    ansible_module._ansible_debug = True
Packit Service 0a38ef
    setup_logging()
Packit Service 0a38ef
    ansible_log = AnsibleModuleLog(ansible_module)
Packit Service 0a38ef
Packit Service 0a38ef
    # get parameters #
Packit Service 0a38ef
Packit Service 0a38ef
    options = installer
Packit Service 0a38ef
    # server
Packit Service 0a38ef
    options.setup_ca = ansible_module.params.get('setup_ca')
Packit Service 0a38ef
    options.setup_kra = ansible_module.params.get('setup_kra')
Packit Service 0a38ef
    options.no_pkinit = ansible_module.params.get('no_pkinit')
Packit Service 0a38ef
    options.dirsrv_config_file = ansible_module.params.get(
Packit Service 0a38ef
        'dirsrv_config_file')
Packit Service 0a38ef
    # certificate system
Packit Service 0a38ef
    options.subject_base = ansible_module.params.get('subject_base')
Packit Service 0a38ef
    if options.subject_base is not None:
Packit Service 0a38ef
        options.subject_base = DN(options.subject_base)
Packit Service 0a38ef
    # additional
Packit Service 0a38ef
    master_host_name = ansible_module.params.get('config_master_host_name')
Packit Service 0a38ef
    ccache = ansible_module.params.get('ccache')
Packit Service 0a38ef
    os.environ['KRB5CCNAME'] = ccache
Packit Service 0a38ef
    # os.environ['KRB5CCNAME'] = ansible_module.params.get('installer_ccache')
Packit Service 0a38ef
    # installer._ccache = ansible_module.params.get('installer_ccache')
Packit Service 0a38ef
    ca_enabled = ansible_module.params.get('_ca_enabled')
Packit Service 0a38ef
    options._dirsrv_pkcs12_info = ansible_module.params.get(
Packit Service 0a38ef
        '_dirsrv_pkcs12_info')
Packit Service 0a38ef
    options._pkinit_pkcs12_info = ansible_module.params.get(
Packit Service 0a38ef
        '_pkinit_pkcs12_info')
Packit Service 0a38ef
    options._top_dir = ansible_module.params.get('_top_dir')
Packit Service 0a38ef
    dirman_password = ansible_module.params.get('dirman_password')
Packit Service 0a38ef
    ds_ca_subject = ansible_module.params.get('ds_ca_subject')
Packit Service 0a38ef
Packit Service 0a38ef
    # init #
Packit Service 0a38ef
Packit Service 0a38ef
    ansible_log.debug("== INSTALL ==")
Packit Service 0a38ef
Packit Service 0a38ef
    options = installer
Packit Service 0a38ef
    promote = installer.promote
Packit Service 0a38ef
Packit Service 0a38ef
    env = gen_env_boostrap_finalize_core(paths.ETC_IPA,
Packit Service 0a38ef
                                         constants.DEFAULT_CONFIG)
Packit Service 0a38ef
    api_bootstrap_finalize(env)
Packit Service 0a38ef
    config = gen_ReplicaConfig()
Packit Service 0a38ef
    config.dirman_password = dirman_password
Packit Service 0a38ef
    config.subject_base = options.subject_base
Packit Service a166ed
    config.master_host_name = master_host_name
Packit Service 0a38ef
Packit Service 0a38ef
    remote_api = gen_remote_api(master_host_name, paths.ETC_IPA)
Packit Service 0a38ef
    # installer._remote_api = remote_api
Packit Service 0a38ef
Packit Service 0a38ef
    conn = remote_api.Backend.ldap2
Packit Service 0a38ef
    ccache = os.environ['KRB5CCNAME']
Packit Service 0a38ef
Packit Service 0a38ef
    # There is a api.Backend.ldap2.connect call somewhere in ca, ds, dns or
Packit Service 0a38ef
    # ntpinstance
Packit Service 0a38ef
    api.Backend.ldap2.connect()
Packit Service 0a38ef
    conn.connect(ccache=ccache)
Packit Service 0a38ef
Packit Service 0a38ef
    with redirect_stdout(ansible_log):
Packit Service 0a38ef
        ds = replica_ds_init_info(ansible_log,
Packit Service 0a38ef
                                  config, options, ca_enabled,
Packit Service 0a38ef
                                  remote_api, ds_ca_subject,
Packit Service 0a38ef
                                  ca_file=paths.IPA_CA_CRT,
Packit Service 0a38ef
                                  promote=promote,
Packit Service 0a38ef
                                  pkcs12_info=installer._dirsrv_pkcs12_info)
Packit Service 0a38ef
Packit Service 0a38ef
        ansible_log.debug("-- DS.ENABLE_SSL --")
Packit Service 0a38ef
Packit Service 0a38ef
        # we now need to enable ssl on the ds
Packit Service 0a38ef
        ds.enable_ssl()
Packit Service 0a38ef
Packit Service 0a38ef
    # done #
Packit Service 0a38ef
Packit Service 0a38ef
    ansible_module.exit_json(changed=True)
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
if __name__ == '__main__':
Packit Service 0a38ef
    main()