# HG changeset patch
# User anthony@xxxxxxxxxxxxxxxxxxxxx
# Node ID 95ac3f0f79bc1ab821cd93da525df52e2e33329a
# Parent 0fe87421cc8026fdbb13a5ac85c936fd951d3c0e
Add an xm serve command.
This command proxies the Xend XML-RPC over stdio. This is similiar to
mercurial's hg serve --stdio command.
The most obvious use of this command is remote XML-RPC invocation over SSH.
Signed-off-by: Anthony Liguori <aliguori@xxxxxxxxxx>
---
tools/python/xen/xm/main.py | 32 +++++++++++++++++++++++++++++++-
1 files changed, 31 insertions(+), 1 deletion(-)
diff -r 0fe87421cc80 -r 95ac3f0f79bc tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Tue Jun 20 10:25:18 2006 +0100
+++ b/tools/python/xen/xm/main.py Tue Jun 20 10:25:20 2006 +0100
@@ -41,6 +41,7 @@ import xen.xend.XendClient
import xen.xend.XendClient
from xen.xend.XendClient import server
from xen.util import security
+from select import select
# getopt.gnu_getopt is better, but only exists in Python 2.3+. Use
# getopt.getopt if gnu_getopt is not available. This will mean that options
@@ -124,6 +125,7 @@ loadpolicy_help = "loadpolicy <policy>
loadpolicy_help = "loadpolicy <policy> Load binary policy into
hypervisor"
makepolicy_help = "makepolicy <policy> Build policy and create
.bin/.map files"
labels_help = "labels [policy] [type=DOM|..] List <type> labels for
(active) policy."
+serve_help = "serve Proxy Xend XML-RPC over
stdio"
short_command_list = [
"console",
@@ -171,7 +173,8 @@ host_commands = [
host_commands = [
"dmesg",
"info",
- "log"
+ "log",
+ "serve",
]
scheduler_commands = [
@@ -833,6 +836,32 @@ def xm_log(args):
arg_check(args, "log", 0)
print server.xend.node.log()
+
+def xm_serve(args):
+ arg_check(args, "serve", 0)
+
+ from fcntl import fcntl, F_SETFL
+
+ s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ s.connect(xen.xend.XendClient.XML_RPC_SOCKET)
+ fcntl(sys.stdin, F_SETFL, os.O_NONBLOCK)
+
+ while True:
+ iwtd, owtd, ewtd = select([sys.stdin, s], [], [])
+ if s in iwtd:
+ data = s.recv(4096)
+ if len(data) > 0:
+ sys.stdout.write(data)
+ sys.stdout.flush()
+ else:
+ break
+ if sys.stdin in iwtd:
+ data = sys.stdin.read(4096)
+ if len(data) > 0:
+ s.sendall(data)
+ else:
+ break
+ s.close()
def parse_dev_info(info):
def get_info(n, t, d):
@@ -1072,6 +1101,7 @@ commands = {
"dmesg": xm_dmesg,
"info": xm_info,
"log": xm_log,
+ "serve": xm_serve,
# scheduler
"sched-bvt": xm_sched_bvt,
"sched-bvt-ctxallow": xm_sched_bvt_ctxallow,
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|