[autotest] Add an RPC to get a list of servers from server DB based on given role and status

BUG=chromium:446333
TEST=local rpc runs
DEPLOY=apache

Change-Id: I39b2c1c8c81b47b492d5eaa642ace234ff86c6a5
Reviewed-on: https://chromium-review.googlesource.com/238760
Trybot-Ready: Dan Shi <dshi@chromium.org>
Tested-by: Dan Shi <dshi@chromium.org>
Reviewed-by: Fang Deng <fdeng@chromium.org>
Reviewed-by: Don Garrett <dgarrett@chromium.org>
Commit-Queue: Dan Shi <dshi@chromium.org>
diff --git a/frontend/afe/site_rpc_interface.py b/frontend/afe/site_rpc_interface.py
index 71d9c21..025c087 100644
--- a/frontend/afe/site_rpc_interface.py
+++ b/frontend/afe/site_rpc_interface.py
@@ -27,6 +27,7 @@
 from autotest_lib.server.hosts import moblab_host
 from autotest_lib.site_utils import host_history
 from autotest_lib.site_utils import job_history
+from autotest_lib.site_utils import server_manager_utils
 from autotest_lib.site_utils import stable_version_utils
 
 
@@ -462,6 +463,25 @@
     shard.delete()
 
 
+def get_servers(role=None, status=None):
+    """Get a list of servers with matching role and status.
+
+    @param role: Name of the server role, e.g., drone, scheduler. Default to
+                 None to match any role.
+    @param status: Status of the server, e.g., primary, backup, repair_required.
+                   Default to None to match any server status.
+
+    @raises error.RPCException: If server database is not used.
+    @return: A list of server names for servers with matching role and status.
+    """
+    if not server_manager_utils.use_server_db():
+        raise error.RPCException('Server database is not enabled. Please try '
+                                 'retrieve servers from global config.')
+    servers = server_manager_utils.get_servers(hostname=None, role=role,
+                                               status=status)
+    return [s.get_details() for s in servers]
+
+
 def get_stable_version(board=stable_version_utils.DEFAULT):
     """Get stable version for the given board.