diff --git a/irods/api_number.py b/irods/api_number.py index 03ac3de8..af8fe277 100644 --- a/irods/api_number.py +++ b/irods/api_number.py @@ -181,4 +181,5 @@ "TOUCH_APN": 20007, "AUTH_PLUG_REQ_AN": 1201, "AUTHENTICATION_APN": 110000, + "ZONE_REPORT_AN": 10205, } diff --git a/irods/manager/zone_manager.py b/irods/manager/zone_manager.py index 25cd106a..ad96b30f 100644 --- a/irods/manager/zone_manager.py +++ b/irods/manager/zone_manager.py @@ -41,3 +41,20 @@ def remove(self, zone_name): conn.send(request) response = conn.recv() logger.debug(response.int_info) + + def zone_report(self): + """ + Get zone report. + + Requires rodsadmin privileges. + + Returns: + dict: Contains zone configuration. + """ + message_body = "" + request = iRODSMessage("RODS_API_REQ", msg=message_body, int_info=api_number["ZONE_REPORT_AN"]) + with self.sess.pool.get_connection() as conn: + conn.send(request) + response = conn.recv() + logger.debug(response.int_info) + return response.get_json_encoded_struct() diff --git a/irods/test/admin_test.py b/irods/test/admin_test.py index 7634f5df..d524ff41 100644 --- a/irods/test/admin_test.py +++ b/irods/test/admin_test.py @@ -52,6 +52,16 @@ def test_create_delete_local_user(self): with self.assertRaises(UserDoesNotExist): self.sess.users.get(self.new_user_name) + def test_zone_report(self): + # get zone report + report = self.sess.zones.zone_report() + + # confirm it is a dict + self.assertTrue(isinstance(report, dict)) + + # confirm zone name matches + self.assertEqual(report["zones"][0]["servers"][0]["server_config"]["zone_name"], self.sess.zone) + def test_create_delete_user_zone(self): # user should not be already present with self.assertRaises(UserDoesNotExist):