diff --git a/doc/source/conf.py b/doc/source/conf.py index f83589a895ce..a36b23afd57f 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -148,6 +148,8 @@ man_pages = [ [u'OpenStack'], 1), ('man/nova-spicehtml5proxy', 'nova-spicehtml5proxy', u'Cloud controller fabric', [u'OpenStack'], 1), + ('man/nova-serialproxy', 'nova-serialproxy', 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/index.rst b/doc/source/man/index.rst index af0e4b83c77c..38dc6cad5ead 100644 --- a/doc/source/man/index.rst +++ b/doc/source/man/index.rst @@ -46,4 +46,5 @@ Reference nova-scheduler nova-spicehtml5proxy nova-xvpvncproxy + nova-serialproxy diff --git a/doc/source/man/nova-serialproxy.rst b/doc/source/man/nova-serialproxy.rst new file mode 100644 index 000000000000..d8ba0df51457 --- /dev/null +++ b/doc/source/man/nova-serialproxy.rst @@ -0,0 +1,48 @@ +================ +nova-serialproxy +================ + +-------------------------------------------------------- +Websocket serial Proxy for OpenStack Nova serial ports. +-------------------------------------------------------- + +:Author: openstack@lists.launchpad.net +:Date: 2014-03-15 +:Copyright: OpenStack Foundation +:Version: 2014.2 +:Manual section: 1 +:Manual group: cloud computing + +SYNOPSIS +======== + + nova-serialproxy [options] + +DESCRIPTION +=========== + +Websocket proxy that is compatible with OpenStack Nova +serial ports. + +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/nova/cmd/serialproxy.py b/nova/cmd/serialproxy.py new file mode 100644 index 000000000000..6e28bc128583 --- /dev/null +++ b/nova/cmd/serialproxy.py @@ -0,0 +1,88 @@ +# 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 +Serial consoles. Leverages websockify.py by Joel Martin. +Based on nova-novncproxy. +""" + +import os +import sys + +from oslo.config import cfg + +from nova import config +from nova.console import websocketproxy +from nova.openstack.common import log as logging +from nova.openstack.common.report import guru_meditation_report as gmr +from nova import version + + +opts = [ + cfg.StrOpt('serialproxy_host', + default='0.0.0.0', + help='Host on which to listen for incoming requests'), + cfg.IntOpt('serialproxy_port', + default=6083, + help='Port on which to listen for incoming requests'), + ] + +CONF = cfg.CONF +CONF.register_cli_opts(opts, group="serial_console") +CONF.import_opt('debug', 'nova.openstack.common.log') +CONF.import_opt('record', 'nova.cmd.novnc') +CONF.import_opt('daemon', 'nova.cmd.novnc') +CONF.import_opt('ssl_only', 'nova.cmd.novnc') +CONF.import_opt('source_is_ipv6', 'nova.cmd.novnc') +CONF.import_opt('cert', 'nova.cmd.novnc') +CONF.import_opt('key', 'nova.cmd.novnc') +CONF.import_opt('web', 'nova.cmd.novnc') + + +def exit_with_error(msg, errno=-1): + print(msg) and sys.exit(errno) + + +def main(): + # Setup flags + config.parse_args(sys.argv) + + if CONF.ssl_only and not os.path.exists(CONF.cert): + exit_with_error("SSL only and %s not found" % CONF.cert) + + # Check to see if tty html/js/css files are present + if not os.path.exists(CONF.web): + exit_with_error("Can not find serial terminal " + "html/js files at %s." % CONF.web) + + logging.setup("nova") + gmr.TextGuruMeditation.setup_autorun(version) + + # Create and start the NovaWebSockets proxy + server = websocketproxy.NovaWebSocketProxy( + listen_host=CONF.serial_console.serialproxy_host, + listen_port=CONF.serial_console.serialproxy_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, + traffic=CONF.verbose and not CONF.daemon, + web=CONF.web, + file_only=True, + RequestHandlerClass=websocketproxy.NovaProxyRequestHandler) + server.start_server() diff --git a/setup.cfg b/setup.cfg index b969868f9f06..3b9b1b821908 100644 --- a/setup.cfg +++ b/setup.cfg @@ -52,6 +52,7 @@ console_scripts = nova-objectstore = nova.cmd.objectstore:main nova-rootwrap = oslo.rootwrap.cmd:main nova-scheduler = nova.cmd.scheduler:main + nova-serialproxy = nova.cmd.serialproxy:main nova-spicehtml5proxy = nova.cmd.spicehtml5proxy:main nova-xvpvncproxy = nova.cmd.xvpvncproxy:main