From 955c589c5af70e2d90027807d5100ed5e7df54e5 Mon Sep 17 00:00:00 2001
From: Alexander Bokovoy <abokovoy@redhat.com>
Date: Thu, 1 Aug 2019 17:19:23 +0300
Subject: [PATCH] Allow rename of a host group

Fixes: https://pagure.io/freeipa/issue/6783
Signed-off-by: Alexander Bokovoy <abokovoy@redhat.com>
---
 API.txt                                       |  3 ++-
 ipaserver/plugins/hostgroup.py                |  1 +
 ipatests/test_xmlrpc/test_hostgroup_plugin.py | 21 +++++++++++++++++++
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/API.txt b/API.txt
index fdcbf1733f..5efa3efd5f 100644
--- a/API.txt
+++ b/API.txt
@@ -2746,7 +2746,7 @@ output: ListOfEntries('result')
 output: Output('summary', type=[<type 'unicode'>, <type 'NoneType'>])
 output: Output('truncated', type=[<type 'bool'>])
 command: hostgroup_mod/1
-args: 1,9,3
+args: 1,10,3
 arg: Str('cn', cli_name='hostgroup_name')
 option: Str('addattr*', cli_name='addattr')
 option: Flag('all', autofill=True, cli_name='all', default=False)
@@ -2754,6 +2754,7 @@ option: Str('delattr*', cli_name='delattr')
 option: Str('description?', autofill=False, cli_name='desc')
 option: Flag('no_members', autofill=True, default=False)
 option: Flag('raw', autofill=True, cli_name='raw', default=False)
+option: Str('rename?', cli_name='rename')
 option: Flag('rights', autofill=True, default=False)
 option: Str('setattr*', cli_name='setattr')
 option: Str('version?')
diff --git a/ipaserver/plugins/hostgroup.py b/ipaserver/plugins/hostgroup.py
index 341b3077b4..3b13ce413e 100644
--- a/ipaserver/plugins/hostgroup.py
+++ b/ipaserver/plugins/hostgroup.py
@@ -90,6 +90,7 @@ class hostgroup(LDAPObject):
         'memberindirect', 'memberofindirect',
     ]
     uuid_attribute = 'ipauniqueid'
+    allow_rename = True
     attribute_members = {
         'member': ['host', 'hostgroup'],
         'memberof': ['hostgroup', 'netgroup', 'hbacrule', 'sudorule'],
diff --git a/ipatests/test_xmlrpc/test_hostgroup_plugin.py b/ipatests/test_xmlrpc/test_hostgroup_plugin.py
index 2e93e1013e..e419ccaa68 100644
--- a/ipatests/test_xmlrpc/test_hostgroup_plugin.py
+++ b/ipatests/test_xmlrpc/test_hostgroup_plugin.py
@@ -29,6 +29,7 @@
 from ipalib import errors
 import pytest
 
+renamedhostgroup1 = u'renamedhostgroup1'
 
 @pytest.fixture(scope='class')
 def hostgroup(request):
@@ -105,6 +106,26 @@ def test_create_duplicate_hostgroup(self, hostgroup):
                 hostgroup.cn)):
             command()
 
+    def test_rename_hostgroup(self, hostgroup):
+        """ Rename a hostgroup and than rename it back """
+        origname = hostgroup.cn
+
+        command = hostgroup.make_command(
+                'hostgroup_mod', *[hostgroup.cn],
+                **dict(setattr=u'cn=%s' % renamedhostgroup1))
+        result = command()
+        hostgroup.attrs.update(cn=[renamedhostgroup1])
+        hostgroup.check_update(result)
+        hostgroup.cn = renamedhostgroup1
+
+        command = hostgroup.make_command(
+                'hostgroup_mod', *[hostgroup.cn],
+                **dict(setattr=u'cn=%s' % origname))
+        result = command()
+        hostgroup.attrs.update(cn=[origname])
+        hostgroup.check_update(result)
+        hostgroup.cn = origname
+
     def test_create_host_add_to_hostgroup(self, hostgroup, host):
         """ Check that host can be added to hostgroup """
         host.create()
