mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Expose the method-listing call as host.list_methods.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
This commit is contained in:
1 parent
3a7400aa86
commit
fccf5da0dd
6 files changed
+92
-11
No files matched your search
@@ -4952,6 +4952,27 @@ dmesg string
|
||||
\vspace{0.3cm}
|
||||
\vspace{0.3cm}
|
||||
\vspace{0.3cm}
|
||||
\subsubsection{RPC name:~list\_methods}
|
||||
|
||||
{\bf Overview:}
|
||||
List all supported methods.
|
||||
|
||||
\noindent {\bf Signature:}
|
||||
\begin{verbatim} (string Set) list_methods (session_id s)\end{verbatim}
|
||||
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
\noindent {\bf Return Type:}
|
||||
{\tt
|
||||
string Set
|
||||
}
|
||||
|
||||
|
||||
The name of every supported method.
|
||||
\vspace{0.3cm}
|
||||
\vspace{0.3cm}
|
||||
\vspace{0.3cm}
|
||||
\subsubsection{RPC name:~get\_all}
|
||||
|
||||
{\bf Overview:}
|
||||
|
||||
@@ -435,6 +435,13 @@ extern bool
|
||||
xen_host_dmesg(xen_session *session, char **result, xen_host host);
|
||||
|
||||
|
||||
/**
|
||||
* List all supported methods.
|
||||
*/
|
||||
extern bool
|
||||
xen_host_list_methods(xen_session *session, struct xen_string_set **result);
|
||||
|
||||
|
||||
/**
|
||||
* Return a list of all the hosts known to the system.
|
||||
*/
|
||||
|
||||
@@ -739,6 +739,18 @@ xen_host_dmesg(xen_session *session, char **result, xen_host host)
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
xen_host_list_methods(xen_session *session, struct xen_string_set **result)
|
||||
{
|
||||
|
||||
abstract_type result_type = abstract_type_string_set;
|
||||
|
||||
*result = NULL;
|
||||
xen_call_(session, "host.list_methods", NULL, 0, &result_type, result);
|
||||
return session->ok;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
xen_host_get_all(xen_session *session, struct xen_host_set **result)
|
||||
{
|
||||
|
||||
@@ -64,6 +64,7 @@ typedef struct
|
||||
|
||||
static xen_vm create_new_vm(xen_session *session, bool hvm);
|
||||
static void print_session_info(xen_session *session);
|
||||
static void print_methods(xen_session *session);
|
||||
static void print_vm_power_state(xen_session *session, xen_vm vm);
|
||||
static void print_vm_metrics(xen_session *session, xen_vm vm);
|
||||
|
||||
@@ -166,6 +167,14 @@ int main(int argc, char **argv)
|
||||
return 1;
|
||||
}
|
||||
|
||||
print_methods(session);
|
||||
if (!session->ok)
|
||||
{
|
||||
/* Error has been logged, just clean up. */
|
||||
CLEANUP;
|
||||
return 1;
|
||||
}
|
||||
|
||||
xen_vm vm;
|
||||
if (!xen_vm_get_by_uuid(session, &vm,
|
||||
"00000000-0000-0000-0000-000000000000"))
|
||||
@@ -644,6 +653,40 @@ static void print_session_info(xen_session *session)
|
||||
}
|
||||
|
||||
|
||||
static int pstrcmp(const void *p1, const void *p2)
|
||||
{
|
||||
return strcmp(*(char **)p1, *(char **)p2);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Print the list of supported methods.
|
||||
*/
|
||||
static void print_methods(xen_session *session)
|
||||
{
|
||||
xen_string_set *methods;
|
||||
|
||||
if (!xen_host_list_methods(session, &methods))
|
||||
{
|
||||
print_error(session);
|
||||
goto done;
|
||||
}
|
||||
|
||||
printf("%zd.\n", methods->size);
|
||||
qsort(methods->contents, methods->size, sizeof(char *), pstrcmp);
|
||||
|
||||
printf("Supported methods:\n");
|
||||
for (size_t i = 0; i < methods->size; i++)
|
||||
{
|
||||
printf(" %s\n", methods->contents[i]);
|
||||
}
|
||||
fflush(stdout);
|
||||
|
||||
done:
|
||||
xen_string_set_free(methods);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Print the metrics for the given VM.
|
||||
*/
|
||||
|
||||
@@ -886,7 +886,8 @@ class XendAPI(object):
|
||||
('get_log', 'String'),
|
||||
('send_debug_keys', None)]
|
||||
|
||||
host_funcs = [('get_by_name_label', 'Set(host)')]
|
||||
host_funcs = [('get_by_name_label', None),
|
||||
('list_methods', None)]
|
||||
|
||||
# attributes
|
||||
def host_get_name_label(self, session, host_ref):
|
||||
@@ -1010,6 +1011,12 @@ class XendAPI(object):
|
||||
return xen_api_success((XendNode.instance().uuid,))
|
||||
return xen_api_success([])
|
||||
|
||||
def host_list_methods(self, _):
|
||||
def _funcs():
|
||||
return [getattr(XendAPI, x) for x in XendAPI.__dict__]
|
||||
|
||||
return xen_api_success([x.api for x in _funcs()
|
||||
if hasattr(x, 'api')])
|
||||
|
||||
# Xen API: Class host_CPU
|
||||
# ----------------------------------------------------------------
|
||||
@@ -2611,15 +2618,6 @@ class XendAPI(object):
|
||||
return xen_api_success({'uuid': debug_ref})
|
||||
|
||||
|
||||
def list_all_methods(self, _):
|
||||
def _funcs():
|
||||
return [getattr(XendAPI, x) for x in XendAPI.__dict__]
|
||||
|
||||
return xen_api_success([x.api for x in _funcs()
|
||||
if hasattr(x, 'api')])
|
||||
list_all_methods.api = '_UNSUPPORTED_list_all_methods'
|
||||
|
||||
|
||||
class XendAPIAsyncProxy:
|
||||
""" A redirector for Async.Class.function calls to XendAPI
|
||||
but wraps the call for use with the XendTaskManager.
|
||||
|
||||
@@ -591,7 +591,7 @@ class Shell(cmd.Cmd):
|
||||
self.prompt = "xm> "
|
||||
if serverType == SERVER_XEN_API:
|
||||
try:
|
||||
res = server.xenapi._UNSUPPORTED_list_all_methods()
|
||||
res = server.xenapi.host.list_methods()
|
||||
for f in res:
|
||||
setattr(Shell, 'do_' + f + ' ', self.default)
|
||||
except:
|
||||
|
||||