From 695d09aa69b0e9ccfa47fefeb6c5f7892651bd35 Mon Sep 17 00:00:00 2001
From: Thomas Woerner <twoerner@redhat.com>
Date: Thu, 19 Jul 2018 14:12:45 +0200
Subject: [PATCH] ipaclient: Backup and set hostname explicitly

This is needed to use ipaclient in ipareplica for client deployment.
---
 .../library/ipaclient_set_hostname.py         | 81 +++++++++++++++++++
 roles/ipaclient/tasks/install.yml             |  5 ++
 2 files changed, 86 insertions(+)
 create mode 100644 roles/ipaclient/library/ipaclient_set_hostname.py

diff --git a/roles/ipaclient/library/ipaclient_set_hostname.py b/roles/ipaclient/library/ipaclient_set_hostname.py
new file mode 100644
index 00000000..aed2df59
--- /dev/null
+++ b/roles/ipaclient/library/ipaclient_set_hostname.py
@@ -0,0 +1,81 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# Authors:
+#   Thomas Woerner <twoerner@redhat.com>
+#
+# Based on ipa-client-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/>.
+
+ANSIBLE_METADATA = {
+    'metadata_version': '1.0',
+    'supported_by': 'community',
+    'status': ['preview'],
+}
+
+DOCUMENTATION = '''
+---
+module: ipaclient_set_hostname
+short description: Backup and set hostname
+description:
+  Backup and set hostname
+options:
+  hostname:
+    description: The hostname of the machine to join (FQDN).
+    required: true
+author:
+    - Thomas Woerner
+'''
+
+EXAMPLES = '''
+# Backup and set hostname
+- name: Backup and set hostname
+  ipaclient_set_hostname:
+    hostname: client1.example.com
+'''
+
+RETURN = '''
+'''
+
+import os
+import tempfile
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible.module_utils.ansible_ipa_client import *
+
+def main():
+    module = AnsibleModule(
+        argument_spec = dict(
+            hostname=dict(required=True),
+        ),
+        supports_check_mode = True,
+    )
+
+    module._ansible_debug = True
+    hostname = module.params.get('hostname')
+
+    fstore = sysrestore.FileStore(paths.IPA_CLIENT_SYSRESTORE)
+    statestore = sysrestore.StateFile(paths.IPA_CLIENT_SYSRESTORE)
+
+    tasks.backup_hostname(fstore, statestore)
+    tasks.set_hostname(hostname)
+
+    module.exit_json(changed=True)
+
+if __name__ == '__main__':
+    main()
diff --git a/roles/ipaclient/tasks/install.yml b/roles/ipaclient/tasks/install.yml
index 6b78cb94..62d9365b 100644
--- a/roles/ipaclient/tasks/install.yml
+++ b/roles/ipaclient/tasks/install.yml
@@ -131,6 +131,11 @@
     failed_when: iparmkeytab.rc != 0 and iparmkeytab.rc != 3 and iparmkeytab.rc != 5
     when: ipaclient_use_otp | bool or ipaclient_force_join | bool
 
+  - name: Install - Backup and set hostname
+    ipaclient_set_hostname:
+      hostname: "{{ ipadiscovery.hostname }}"
+    when: not ipaclient_on_master | bool
+
   - name: Install - Join IPA
     ipajoin:
       servers: "{{ ipadiscovery.servers }}"
-- 
GitLab