console: introduce baseproxy and update consoles cmd

Introduces a new module baseproxy that provides the base
code shared between novncproxy, serialproxy, spicehtml5proxy
Updates them to use this new module.

Change-Id: I2d46b926f1c895aba412d84b4ee059fda3df9011
This commit is contained in:
Sahid Orentino Ferdjaoui
2014-11-10 04:15:46 -05:00
committed by sahid
parent ba01e01411
commit d2cbb9adea
4 changed files with 92 additions and 138 deletions

76
nova/cmd/baseproxy.py Normal file
View File

@@ -0,0 +1,76 @@
#
# Copyright (C) 2014 Red Hat, Inc
#
# 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.
#
"""Base proxy module used to create compatible consoles
for Openstack Nova."""
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
CONF = cfg.CONF
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 proxy(host, port):
# 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 CONF.web and not os.path.exists(CONF.web):
exit_with_error("Can not find html/js files at %s." % CONF.web)
logging.setup("nova")
gmr.TextGuruMeditation.setup_autorun(version)
# Create and start the NovaWebSockets proxy
websocketproxy.NovaWebSocketProxy(
listen_host=host,
listen_port=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
).start_server()

View File

@@ -18,18 +18,9 @@ Websocket proxy that is compatible with OpenStack Nova
noVNC consoles. Leverages websockify.py by Joel Martin
"""
from __future__ import print_function
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
from nova.cmd import baseproxy
opts = [
@@ -43,47 +34,12 @@ opts = [
CONF = cfg.CONF
CONF.register_cli_opts(opts)
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 main():
# Setup flags
# set default web flag option
CONF.set_default('web', '/usr/share/novnc')
config.parse_args(sys.argv)
logging.setup("nova")
if CONF.ssl_only and not os.path.exists(CONF.cert):
print("SSL only and %s not found" % CONF.cert)
return(-1)
# Check to see if novnc html/js/css files are present
if not os.path.exists(CONF.web):
print("Can not find novnc html/js/css files at %s." % CONF.web)
return(-1)
logging.setup("nova")
gmr.TextGuruMeditation.setup_autorun(version)
# Create and start the NovaWebSockets proxy
server = websocketproxy.NovaWebSocketProxy(
listen_host=CONF.novncproxy_host,
listen_port=CONF.novncproxy_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()
baseproxy.proxy(
host=CONF.novncproxy_host,
port=CONF.novncproxy_port)

View File

@@ -18,16 +18,9 @@ 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
from nova.cmd import baseproxy
opts = [
@@ -41,41 +34,12 @@ opts = [
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')
def exit_with_error(msg, errno=-1):
print(msg) and sys.exit(errno)
def main():
# Setup flags
config.parse_args(sys.argv)
# set default web flag option
CONF.set_default('web', None)
if CONF.ssl_only and not os.path.exists(CONF.cert):
exit_with_error("SSL only and %s not found" % CONF.cert)
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,
file_only=True,
RequestHandlerClass=websocketproxy.NovaProxyRequestHandler)
server.start_server()
baseproxy.proxy(
host=CONF.serial_console.serialproxy_host,
port=CONF.serial_console.serialproxy_port)

View File

@@ -18,18 +18,10 @@ Websocket proxy that is compatible with OpenStack Nova
SPICE HTML5 consoles. Leverages websockify.py by Joel Martin
"""
from __future__ import print_function
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
from nova.cmd import baseproxy
opts = [
cfg.StrOpt('html5proxy_host',
@@ -42,44 +34,10 @@ opts = [
CONF = cfg.CONF
CONF.register_cli_opts(opts, group='spice')
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 main():
# Setup flags
config.parse_args(sys.argv)
if CONF.ssl_only and not os.path.exists(CONF.cert):
print("SSL only and %s not found." % CONF.cert)
return(-1)
# 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)
return(-1)
logging.setup("nova")
gmr.TextGuruMeditation.setup_autorun(version)
# Create and start the NovaWebSockets proxy
server = websocketproxy.NovaWebSocketProxy(
listen_host=CONF.spice.html5proxy_host,
listen_port=CONF.spice.html5proxy_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,
RequestHandlerClass=websocketproxy.NovaProxyRequestHandler)
server.start_server()
baseproxy.proxy(
host=CONF.spice.html5proxy_host,
port=CONF.spice.html5proxy_port)