diff --git a/bin/nova-spicehtml5proxy b/bin/nova-spicehtml5proxy new file mode 100755 index 000000000000..b1882bbea60d --- /dev/null +++ b/bin/nova-spicehtml5proxy @@ -0,0 +1,93 @@ +#!/usr/bin/env python +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright (c) 2012 OpenStack, LLC. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +''' +Websocket proxy that is compatible with OpenStack Nova +SPICE HTML5 consoles. Leverages websockify.py by Joel Martin +''' + +import os +import sys + +from nova import config +from nova.console import websocketproxy as ws +from nova.openstack.common import cfg + + +opts = [ + cfg.BoolOpt('record', + default=False, + help='Record sessions to FILE.[session_number]'), + cfg.BoolOpt('daemon', + default=False, + help='Become a daemon (background process)'), + cfg.BoolOpt('ssl_only', + default=False, + help='Disallow non-encrypted connections'), + cfg.BoolOpt('source_is_ipv6', + default=False, + help='Source is ipv6'), + cfg.StrOpt('cert', + default='self.pem', + help='SSL certificate file'), + cfg.StrOpt('key', + default=None, + help='SSL key file (if separate from cert)'), + cfg.StrOpt('web', + default='/usr/share/spice-html5', + help='Run webserver on same port. Serve files from DIR.'), + cfg.StrOpt('spicehtml5proxy_host', + default='0.0.0.0', + help='Host on which to listen for incoming requests'), + cfg.IntOpt('spicehtml5proxy_port', + default=6082, + help='Port on which to listen for incoming requests'), + ] + +CONF = cfg.CONF +CONF.register_cli_opts(opts) + + +if __name__ == '__main__': + if CONF.ssl_only and not os.path.exists(CONF.cert): + parser.error("SSL only and %s not found" % CONF.cert) + + # Setup flags + config.parse_args(sys.argv) + + # Check to see if spice html/js/css files are present + if not os.path.exists(CONF.web): + print "Can not find spice html/js/css files at %s." % CONF.web + sys.exit(-1) + + # Create and start the NovaWebSockets proxy + server = ws.NovaWebSocketProxy(listen_host=CONF.spicehtml5proxy_host, + listen_port=CONF.spicehtml5proxy_port, + source_is_ipv6=CONF.source_is_ipv6, + verbose=CONF.verbose, + cert=CONF.cert, + key=CONF.key, + ssl_only=CONF.ssl_only, + daemon=CONF.daemon, + record=CONF.record, + web=CONF.web, + target_host='ignore', + target_port='ignore', + wrap_mode='exit', + wrap_cmd=None) + server.start_server() diff --git a/doc/source/conf.py b/doc/source/conf.py index 804080e79d2f..0bdaeb08e5e0 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -145,6 +145,8 @@ man_pages = [ [u'OpenStack'], 1), ('man/nova-novncproxy', 'nova-novncproxy', u'Cloud controller fabric', [u'OpenStack'], 1), + ('man/nova-spicehtml5proxy', 'nova-spicehtml5proxy', u'Cloud controller fabric', + [u'OpenStack'], 1), ('man/nova-objectstore', 'nova-objectstore', u'Cloud controller fabric', [u'OpenStack'], 1), ('man/nova-rootwrap', 'nova-rootwrap', u'Cloud controller fabric', diff --git a/doc/source/man/nova-spicehtml5proxy.rst b/doc/source/man/nova-spicehtml5proxy.rst new file mode 100644 index 000000000000..4d0aaa202d93 --- /dev/null +++ b/doc/source/man/nova-spicehtml5proxy.rst @@ -0,0 +1,48 @@ +==================== +nova-spicehtml5proxy +==================== + +-------------------------------------------------------- +Websocket Proxy for OpenStack Nova SPICE HTML5 consoles. +-------------------------------------------------------- + +:Author: openstack@lists.launchpad.net +:Date: 2012-09-27 +:Copyright: OpenStack LLC +:Version: 2012.1 +:Manual section: 1 +:Manual group: cloud computing + +SYNOPSIS +======== + + nova-spicehtml5proxy [options] + +DESCRIPTION +=========== + +Websocket proxy that is compatible with OpenStack Nova +SPICE HTML5 consoles. + +OPTIONS +======= + + **General options** + +FILES +======== + +* /etc/nova/nova.conf +* /etc/nova/policy.json +* /etc/nova/rootwrap.conf +* /etc/nova/rootwrap.d/ + +SEE ALSO +======== + +* `OpenStack Nova `__ + +BUGS +==== + +* Nova is sourced in Launchpad so you can view current bugs at `OpenStack Nova `__ diff --git a/setup.py b/setup.py index 12de5c4d6816..78c9062c24a5 100644 --- a/setup.py +++ b/setup.py @@ -66,6 +66,7 @@ setuptools.setup(name='nova', 'bin/nova-objectstore', 'bin/nova-rootwrap', 'bin/nova-scheduler', + 'bin/nova-spicehtml5proxy', 'bin/nova-xvpvncproxy', ], py_modules=[])