add in xs-console worker and tests.
This commit is contained in:
		
							
								
								
									
										1
									
								
								Authors
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Authors
									
									
									
									
									
								
							| @@ -22,6 +22,7 @@ Joshua McKenty <jmckenty@gmail.com> | |||||||
| Justin Santa Barbara <justin@fathomdb.com> | Justin Santa Barbara <justin@fathomdb.com> | ||||||
| Matt Dietz <matt.dietz@rackspace.com> | Matt Dietz <matt.dietz@rackspace.com> | ||||||
| Michael Gundlach <michael.gundlach@rackspace.com> | Michael Gundlach <michael.gundlach@rackspace.com> | ||||||
|  | Monsyne Dragon <mdragon@rackspace.com> | ||||||
| Monty Taylor <mordred@inaugust.com> | Monty Taylor <mordred@inaugust.com> | ||||||
| Paul Voccio <paul@openstack.org> | Paul Voccio <paul@openstack.org> | ||||||
| Rick Clark <rick@openstack.org> | Rick Clark <rick@openstack.org> | ||||||
|   | |||||||
| @@ -56,11 +56,12 @@ if __name__ == '__main__': | |||||||
|  |  | ||||||
|     compute = service.Service.create(binary='nova-compute') |     compute = service.Service.create(binary='nova-compute') | ||||||
|     network = service.Service.create(binary='nova-network') |     network = service.Service.create(binary='nova-network') | ||||||
|     volume = service.Service.create(binary='nova-volume') | #    volume = service.Service.create(binary='nova-volume') | ||||||
|     scheduler = service.Service.create(binary='nova-scheduler') |     scheduler = service.Service.create(binary='nova-scheduler') | ||||||
|     #objectstore = service.Service.create(binary='nova-objectstore') |     #objectstore = service.Service.create(binary='nova-objectstore') | ||||||
|  |  | ||||||
|     service.serve(compute, network, volume, scheduler) | #    service.serve(compute, network, volume, scheduler) | ||||||
|  |     service.serve(compute, network, scheduler) | ||||||
|  |  | ||||||
|     server = wsgi.Server() |     server = wsgi.Server() | ||||||
|     server.start(api.API('os'), FLAGS.osapi_port, host=FLAGS.osapi_host) |     server.start(api.API('os'), FLAGS.osapi_port, host=FLAGS.osapi_host) | ||||||
|   | |||||||
							
								
								
									
										44
									
								
								bin/nova-console
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										44
									
								
								bin/nova-console
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | #!/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. | ||||||
|  |  | ||||||
|  | """Starter script for Nova Console Proxy.""" | ||||||
|  |  | ||||||
|  | import eventlet | ||||||
|  | eventlet.monkey_patch() | ||||||
|  |  | ||||||
|  | import gettext | ||||||
|  | import os | ||||||
|  | import sys | ||||||
|  |  | ||||||
|  | # If ../nova/__init__.py exists, add ../ to Python search path, so that | ||||||
|  | # it will override what happens to be installed in /usr/(local/)lib/python... | ||||||
|  | possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]), | ||||||
|  |                                    os.pardir, | ||||||
|  |                                    os.pardir)) | ||||||
|  | if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')): | ||||||
|  |     sys.path.insert(0, possible_topdir) | ||||||
|  |  | ||||||
|  | gettext.install('nova', unicode=1) | ||||||
|  |  | ||||||
|  | from nova import service | ||||||
|  | from nova import utils | ||||||
|  |  | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     utils.default_flagfile() | ||||||
|  |     service.serve() | ||||||
|  |     service.wait() | ||||||
| @@ -216,6 +216,7 @@ DEFINE_integer('s3_port', 3333, 's3 port') | |||||||
| DEFINE_string('s3_host', utils.get_my_ip(), 's3 host (for infrastructure)') | DEFINE_string('s3_host', utils.get_my_ip(), 's3 host (for infrastructure)') | ||||||
| DEFINE_string('s3_dmz', utils.get_my_ip(), 's3 dmz ip (for instances)') | DEFINE_string('s3_dmz', utils.get_my_ip(), 's3 dmz ip (for instances)') | ||||||
| DEFINE_string('compute_topic', 'compute', 'the topic compute nodes listen on') | DEFINE_string('compute_topic', 'compute', 'the topic compute nodes listen on') | ||||||
|  | DEFINE_string('console_topic', 'console', 'the topic console proxy nodes listen on') | ||||||
| DEFINE_string('scheduler_topic', 'scheduler', | DEFINE_string('scheduler_topic', 'scheduler', | ||||||
|               'the topic scheduler nodes listen on') |               'the topic scheduler nodes listen on') | ||||||
| DEFINE_string('volume_topic', 'volume', 'the topic volume nodes listen on') | DEFINE_string('volume_topic', 'volume', 'the topic volume nodes listen on') | ||||||
| @@ -263,6 +264,8 @@ DEFINE_string('sql_connection', | |||||||
|  |  | ||||||
| DEFINE_string('compute_manager', 'nova.compute.manager.ComputeManager', | DEFINE_string('compute_manager', 'nova.compute.manager.ComputeManager', | ||||||
|               'Manager for compute') |               'Manager for compute') | ||||||
|  | DEFINE_string('console_manager', 'nova.console.manager.ConsoleProxyManager', | ||||||
|  |               'Manager for console proxy') | ||||||
| DEFINE_string('network_manager', 'nova.network.manager.VlanManager', | DEFINE_string('network_manager', 'nova.network.manager.VlanManager', | ||||||
|               'Manager for network') |               'Manager for network') | ||||||
| DEFINE_string('volume_manager', 'nova.volume.manager.VolumeManager', | DEFINE_string('volume_manager', 'nova.volume.manager.VolumeManager', | ||||||
|   | |||||||
							
								
								
									
										134
									
								
								nova/tests/test_console.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								nova/tests/test_console.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,134 @@ | |||||||
|  | # vim: tabstop=4 shiftwidth=4 softtabstop=4 | ||||||
|  |  | ||||||
|  | # Copyright (c) 2010 Openstack, LLC. | ||||||
|  | # Administrator of the National Aeronautics and Space Administration. | ||||||
|  | # 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. | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | Tests For Console proxy. | ||||||
|  | """ | ||||||
|  |  | ||||||
|  | import datetime | ||||||
|  | import logging | ||||||
|  |  | ||||||
|  | from nova import context | ||||||
|  | from nova import db | ||||||
|  | from nova import exception | ||||||
|  | from nova import flags | ||||||
|  | from nova import test | ||||||
|  | from nova import utils | ||||||
|  | from nova.auth import manager | ||||||
|  | from nova.console import manager as console_manager | ||||||
|  |  | ||||||
|  | FLAGS = flags.FLAGS | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ConsoleTestCase(test.TestCase): | ||||||
|  |     """Test case for console proxy""" | ||||||
|  |     def setUp(self): | ||||||
|  |         logging.getLogger().setLevel(logging.DEBUG) | ||||||
|  |         super(ConsoleTestCase, self).setUp() | ||||||
|  |         self.flags(console_driver='nova.console.fake.FakeConsoleProxy', | ||||||
|  |                    stub_compute=True) | ||||||
|  |         self.console = utils.import_object(FLAGS.console_manager) | ||||||
|  |         self.manager = manager.AuthManager() | ||||||
|  |         self.user = self.manager.create_user('fake', 'fake', 'fake') | ||||||
|  |         self.project = self.manager.create_project('fake', 'fake', 'fake') | ||||||
|  |         self.context = context.get_admin_context() | ||||||
|  |         self.host = 'test_compute_host' | ||||||
|  |  | ||||||
|  |     def tearDown(self): | ||||||
|  |         self.manager.delete_user(self.user) | ||||||
|  |         self.manager.delete_project(self.project) | ||||||
|  |         super(ConsoleTestCase, self).tearDown() | ||||||
|  |  | ||||||
|  |     def _create_instance(self): | ||||||
|  |         """Create a test instance""" | ||||||
|  |         inst = {} | ||||||
|  |         #inst['host'] = self.host | ||||||
|  |         #inst['name'] = 'instance-1234' | ||||||
|  |         inst['image_id'] = 'ami-test' | ||||||
|  |         inst['reservation_id'] = 'r-fakeres' | ||||||
|  |         inst['launch_time'] = '10' | ||||||
|  |         inst['user_id'] = self.user.id | ||||||
|  |         inst['project_id'] = self.project.id | ||||||
|  |         inst['instance_type'] = 'm1.tiny' | ||||||
|  |         inst['mac_address'] = utils.generate_mac() | ||||||
|  |         inst['ami_launch_index'] = 0 | ||||||
|  |         return db.instance_create(self.context, inst)['id'] | ||||||
|  |  | ||||||
|  |     def test_get_pool_for_instance_host(self): | ||||||
|  |         pool = self.console.get_pool_for_instance_host(self.context, self.host) | ||||||
|  |         self.assertEqual(pool['compute_host'], self.host) | ||||||
|  |  | ||||||
|  |     def test_get_pool_creates_new_pool_if_needed(self): | ||||||
|  |         self.assertRaises(exception.NotFound, | ||||||
|  |                           db.console_pool_get_by_host_type, | ||||||
|  |                           self.context, | ||||||
|  |                           self.host, | ||||||
|  |                           self.console.host, | ||||||
|  |                           self.console.driver.console_type) | ||||||
|  |         pool = self.console.get_pool_for_instance_host(self.context, | ||||||
|  |                                                        self.host) | ||||||
|  |         pool2 = db.console_pool_get_by_host_type(self.context, | ||||||
|  |                               self.host, | ||||||
|  |                               self.console.host, | ||||||
|  |                               self.console.driver.console_type) | ||||||
|  |         self.assertEqual(pool['id'], pool2['id']) | ||||||
|  |  | ||||||
|  |     def test_get_pool_does_not_create_new_pool_if_exists(self): | ||||||
|  |         pool_info = {'address' : '127.0.0.1', | ||||||
|  |                      'username' : 'test', | ||||||
|  |                      'password' : '1234pass', | ||||||
|  |                      'host' : self.console.host, | ||||||
|  |                      'console_type' : self.console.driver.console_type, | ||||||
|  |                      'compute_host' : 'sometesthostname' } | ||||||
|  |         new_pool = db.console_pool_create(self.context, pool_info) | ||||||
|  |         pool = self.console.get_pool_for_instance_host(self.context, | ||||||
|  |                                                        'sometesthostname') | ||||||
|  |         self.assertEqual(pool['id'], new_pool['id']) | ||||||
|  |  | ||||||
|  |     def test_add_console(self): | ||||||
|  |         instance_id = self._create_instance() | ||||||
|  |         self.console.add_console(self.context, instance_id) | ||||||
|  |         instance = db.instance_get(self.context, instance_id) | ||||||
|  |         pool = db.console_pool_get_by_host_type(self.context, | ||||||
|  |                                                 instance['host'], | ||||||
|  |                                                 self.console.host, | ||||||
|  |                                                 self.console.driver.console_type) | ||||||
|  |  | ||||||
|  |         console_instances =  [con['instance_id'] for con in pool.consoles] | ||||||
|  |         self.assert_(instance_id in console_instances) | ||||||
|  |  | ||||||
|  |     def test_add_console_does_not_duplicate(self): | ||||||
|  |         instance_id = self._create_instance() | ||||||
|  |         cons1 = self.console.add_console(self.context, instance_id) | ||||||
|  |         cons2 = self.console.add_console(self.context, instance_id) | ||||||
|  |         self.assertEqual(cons1,cons2) | ||||||
|  |  | ||||||
|  |     def test_remove_console(self): | ||||||
|  |         instance_id = self._create_instance() | ||||||
|  |         self.console.add_console(self.context, instance_id) | ||||||
|  |         self.console.remove_console(self.context, instance_id) | ||||||
|  |  | ||||||
|  |         instance = db.instance_get(self.context, instance_id) | ||||||
|  |         pool = db.console_pool_get_by_host_type(self.context, | ||||||
|  |                                                 instance['host'], | ||||||
|  |                                                 self.console.host, | ||||||
|  |                                                 self.console.driver.console_type) | ||||||
|  |  | ||||||
|  |         console_instances =  [con['instance_id'] for con in pool.consoles] | ||||||
|  |         self.assert_(instance_id not in console_instances) | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user
	 Monsyne Dragon
					Monsyne Dragon