|
3 | 3 | //! Wraps Redis Enterprise API client operations for MCP tool invocation. |
4 | 4 |
|
5 | 5 | use redis_enterprise::{ |
6 | | - AlertHandler, BdbHandler, ClusterHandler, CrdbHandler, CrdbTasksHandler, CreateDatabaseRequest, |
7 | | - CreateLdapMappingRequest, CreateRedisAclRequest, CreateRoleRequest, CreateUserRequest, |
8 | | - DebugInfoHandler, DiagnosticRequest, DiagnosticsHandler, EndpointsHandler, EnterpriseClient, |
9 | | - JobSchedulerHandler, LdapMappingHandler, LicenseHandler, LogsHandler, ModuleHandler, |
10 | | - NodeHandler, ProxyHandler, RedisAclHandler, RolesHandler, ShardHandler, StatsHandler, |
11 | | - UserHandler, |
| 6 | + AlertHandler, BdbGroupsHandler, BdbHandler, ClusterHandler, CrdbHandler, CrdbTasksHandler, |
| 7 | + CreateDatabaseRequest, CreateLdapMappingRequest, CreateRedisAclRequest, CreateRoleRequest, |
| 8 | + CreateUserRequest, DebugInfoHandler, DiagnosticRequest, DiagnosticsHandler, EndpointsHandler, |
| 9 | + EnterpriseClient, JobSchedulerHandler, LdapMappingHandler, LicenseHandler, LogsHandler, |
| 10 | + ModuleHandler, NodeHandler, OcspHandler, ProxyHandler, RedisAclHandler, RolesHandler, |
| 11 | + ShardHandler, StatsHandler, SuffixesHandler, UserHandler, |
12 | 12 | }; |
13 | 13 | use redisctl_config::Config; |
14 | 14 | use rmcp::{ErrorData as RmcpError, model::*}; |
@@ -897,4 +897,101 @@ impl EnterpriseTools { |
897 | 897 | "message": format!("CRDB task {} cancelled", task_id) |
898 | 898 | })) |
899 | 899 | } |
| 900 | + |
| 901 | + // ========================================================================= |
| 902 | + // BDB Groups Operations |
| 903 | + // ========================================================================= |
| 904 | + |
| 905 | + /// List all BDB groups |
| 906 | + pub async fn list_bdb_groups(&self) -> Result<CallToolResult, RmcpError> { |
| 907 | + let handler = BdbGroupsHandler::new(self.client.clone()); |
| 908 | + let groups = handler.list().await.map_err(|e| self.to_error(e))?; |
| 909 | + self.to_result(serde_json::to_value(groups).map_err(|e| self.to_error(e))?) |
| 910 | + } |
| 911 | + |
| 912 | + /// Get a specific BDB group |
| 913 | + pub async fn get_bdb_group(&self, uid: u64) -> Result<CallToolResult, RmcpError> { |
| 914 | + let handler = BdbGroupsHandler::new(self.client.clone()); |
| 915 | + let group = handler |
| 916 | + .get(uid as u32) |
| 917 | + .await |
| 918 | + .map_err(|e| self.to_error(e))?; |
| 919 | + self.to_result(serde_json::to_value(group).map_err(|e| self.to_error(e))?) |
| 920 | + } |
| 921 | + |
| 922 | + /// Delete a BDB group |
| 923 | + pub async fn delete_bdb_group(&self, uid: u64) -> Result<CallToolResult, RmcpError> { |
| 924 | + let handler = BdbGroupsHandler::new(self.client.clone()); |
| 925 | + handler |
| 926 | + .delete(uid as u32) |
| 927 | + .await |
| 928 | + .map_err(|e| self.to_error(e))?; |
| 929 | + self.to_result(serde_json::json!({ |
| 930 | + "success": true, |
| 931 | + "message": format!("BDB group {} deleted successfully", uid) |
| 932 | + })) |
| 933 | + } |
| 934 | + |
| 935 | + // ========================================================================= |
| 936 | + // OCSP Operations |
| 937 | + // ========================================================================= |
| 938 | + |
| 939 | + /// Get OCSP configuration |
| 940 | + pub async fn get_ocsp_config(&self) -> Result<CallToolResult, RmcpError> { |
| 941 | + let handler = OcspHandler::new(self.client.clone()); |
| 942 | + let config = handler.get_config().await.map_err(|e| self.to_error(e))?; |
| 943 | + self.to_result(serde_json::to_value(config).map_err(|e| self.to_error(e))?) |
| 944 | + } |
| 945 | + |
| 946 | + /// Get OCSP status |
| 947 | + pub async fn get_ocsp_status(&self) -> Result<CallToolResult, RmcpError> { |
| 948 | + let handler = OcspHandler::new(self.client.clone()); |
| 949 | + let status = handler.get_status().await.map_err(|e| self.to_error(e))?; |
| 950 | + self.to_result(serde_json::to_value(status).map_err(|e| self.to_error(e))?) |
| 951 | + } |
| 952 | + |
| 953 | + /// Test OCSP connectivity |
| 954 | + pub async fn test_ocsp(&self) -> Result<CallToolResult, RmcpError> { |
| 955 | + let handler = OcspHandler::new(self.client.clone()); |
| 956 | + let result = handler.test().await.map_err(|e| self.to_error(e))?; |
| 957 | + self.to_result(serde_json::to_value(result).map_err(|e| self.to_error(e))?) |
| 958 | + } |
| 959 | + |
| 960 | + // ========================================================================= |
| 961 | + // DNS Suffix Operations |
| 962 | + // ========================================================================= |
| 963 | + |
| 964 | + /// List all DNS suffixes |
| 965 | + pub async fn list_suffixes(&self) -> Result<CallToolResult, RmcpError> { |
| 966 | + let handler = SuffixesHandler::new(self.client.clone()); |
| 967 | + let suffixes = handler.list().await.map_err(|e| self.to_error(e))?; |
| 968 | + self.to_result(serde_json::to_value(suffixes).map_err(|e| self.to_error(e))?) |
| 969 | + } |
| 970 | + |
| 971 | + /// Get a specific DNS suffix |
| 972 | + pub async fn get_suffix(&self, name: &str) -> Result<CallToolResult, RmcpError> { |
| 973 | + let handler = SuffixesHandler::new(self.client.clone()); |
| 974 | + let suffix = handler.get(name).await.map_err(|e| self.to_error(e))?; |
| 975 | + self.to_result(serde_json::to_value(suffix).map_err(|e| self.to_error(e))?) |
| 976 | + } |
| 977 | + |
| 978 | + /// Get cluster DNS suffixes |
| 979 | + pub async fn get_cluster_suffixes(&self) -> Result<CallToolResult, RmcpError> { |
| 980 | + let handler = SuffixesHandler::new(self.client.clone()); |
| 981 | + let suffixes = handler |
| 982 | + .cluster_suffixes() |
| 983 | + .await |
| 984 | + .map_err(|e| self.to_error(e))?; |
| 985 | + self.to_result(serde_json::to_value(suffixes).map_err(|e| self.to_error(e))?) |
| 986 | + } |
| 987 | + |
| 988 | + /// Delete a DNS suffix |
| 989 | + pub async fn delete_suffix(&self, name: &str) -> Result<CallToolResult, RmcpError> { |
| 990 | + let handler = SuffixesHandler::new(self.client.clone()); |
| 991 | + handler.delete(name).await.map_err(|e| self.to_error(e))?; |
| 992 | + self.to_result(serde_json::json!({ |
| 993 | + "success": true, |
| 994 | + "message": format!("DNS suffix '{}' deleted successfully", name) |
| 995 | + })) |
| 996 | + } |
900 | 997 | } |
0 commit comments