From a870dfae7da2df1e51a9066bf0583c3ab86690e8 Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Fri, 23 Sep 2011 12:08:23 -0700 Subject: Add nova-all to run all services * Cleans up service for objectstore and vncproxy * Fixes virt.fake to be runnable via a flag Change-Id: I18e05a4d727bbbd3481063623dc3b6ad52e233d4 --- nova/objectstore/s3server.py | 7 ++++ nova/virt/fake.py | 2 +- nova/vnc/auth.py | 5 +-- nova/vnc/server.py | 96 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 nova/vnc/server.py (limited to 'nova') diff --git a/nova/objectstore/s3server.py b/nova/objectstore/s3server.py index 1ab47b034..485cc3cde 100644 --- a/nova/objectstore/s3server.py +++ b/nova/objectstore/s3server.py @@ -55,6 +55,13 @@ flags.DEFINE_string('buckets_path', '$state_path/buckets', 'path to s3 buckets') +def get_wsgi_server(): + return wsgi.Server("S3 Objectstore", + S3Application(FLAGS.buckets_path), + port=FLAGS.s3_port, + host=FLAGS.s3_host) + + class S3Application(wsgi.Router): """Implementation of an S3-like storage server based on local files. diff --git a/nova/virt/fake.py b/nova/virt/fake.py index 60cc43b01..2c5b12237 100644 --- a/nova/virt/fake.py +++ b/nova/virt/fake.py @@ -35,7 +35,7 @@ from nova.virt import driver LOG = logging.getLogger('nova.compute.disk') -def get_connection(_): +def get_connection(_=None): # The read_only parameter is ignored. return FakeConnection.instance() diff --git a/nova/vnc/auth.py b/nova/vnc/auth.py index ce5e10388..b96dc595e 100644 --- a/nova/vnc/auth.py +++ b/nova/vnc/auth.py @@ -22,19 +22,16 @@ import time import urlparse import webob -from webob import Request - from nova import context from nova import flags from nova import log as logging from nova import manager from nova import rpc from nova import utils -from nova import wsgi from nova import vnc -LOG = logging.getLogger('nova.vnc-proxy') +LOG = logging.getLogger('nova.vncproxy') FLAGS = flags.FLAGS diff --git a/nova/vnc/server.py b/nova/vnc/server.py new file mode 100644 index 000000000..cad8696f1 --- /dev/null +++ b/nova/vnc/server.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright (c) 2010 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. + +"""Auth Components for VNC Console.""" + +import os +import sys + +from nova import flags +from nova import log as logging +from nova import version +from nova import wsgi +from nova.vnc import auth +from nova.vnc import proxy + + +LOG = logging.getLogger('nova.vncproxy') +FLAGS = flags.FLAGS +flags.DEFINE_string('vncproxy_wwwroot', '/var/lib/nova/noVNC/', + 'Full path to noVNC directory') +flags.DEFINE_boolean('vnc_debug', False, + 'Enable debugging features, like token bypassing') +flags.DEFINE_integer('vncproxy_port', 6080, + 'Port that the VNC proxy should bind to') +flags.DEFINE_string('vncproxy_host', '0.0.0.0', + 'Address that the VNC proxy should bind to') +flags.DEFINE_integer('vnc_token_ttl', 300, + 'How many seconds before deleting tokens') +flags.DEFINE_string('vncproxy_manager', 'nova.vnc.auth.VNCProxyAuthManager', + 'Manager for vncproxy auth') + + +def get_wsgi_server(): + LOG.audit(_("Starting nova-vncproxy node (version %s)"), + version.version_string_with_vcs()) + + if not (os.path.exists(FLAGS.vncproxy_wwwroot) and + os.path.exists(FLAGS.vncproxy_wwwroot + '/vnc_auto.html')): + LOG.info(_("Missing vncproxy_wwwroot (version %s)"), + FLAGS.vncproxy_wwwroot) + LOG.info(_("You need a slightly modified version of noVNC " + "to work with the nova-vnc-proxy")) + LOG.info(_("Check out the most recent nova noVNC code: %s"), + "git://github.com/sleepsonthefloor/noVNC.git") + LOG.info(_("And drop it in %s"), FLAGS.vncproxy_wwwroot) + sys.exit(1) + + app = proxy.WebsocketVNCProxy(FLAGS.vncproxy_wwwroot) + + LOG.audit(_("Allowing access to the following files: %s"), + app.get_whitelist()) + + with_logging = auth.LoggingMiddleware(app) + + if FLAGS.vnc_debug: + with_auth = proxy.DebugMiddleware(with_logging) + else: + with_auth = auth.VNCNovaAuthMiddleware(with_logging) + + wsgi_server = wsgi.Server("VNC Proxy", + with_auth, + host=FLAGS.vncproxy_host, + port=FLAGS.vncproxy_port) + wsgi_server.start_tcp(handle_flash_socket_policy, + 843, + host=FLAGS.vncproxy_host) + return wsgi_server + + +def handle_flash_socket_policy(socket): + LOG.info(_("Received connection on flash socket policy port")) + + fd = socket.makefile('rw') + expected_command = "" + if expected_command in fd.read(len(expected_command) + 1): + LOG.info(_("Received valid flash socket policy request")) + fd.write('' % (FLAGS.vncproxy_port)) + fd.flush() + socket.close() -- cgit