Get reviewed and fixed based on comments.
Merged latest version.
This commit is contained in:
		| @@ -6,8 +6,10 @@ keys | ||||
| networks | ||||
| nova.sqlite | ||||
| CA/cacert.pem | ||||
| CA/crl.pem | ||||
| CA/index.txt* | ||||
| CA/openssl.cnf | ||||
| CA/serial* | ||||
| CA/newcerts/*.pem | ||||
| CA/private/cakey.pem | ||||
| nova/vcsversion.py | ||||
|   | ||||
							
								
								
									
										1
									
								
								.mailmap
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								.mailmap
									
									
									
									
									
								
							| @@ -30,3 +30,4 @@ | ||||
| <rconradharris@gmail.com> <rick.harris@rackspace.com>  | ||||
| <corywright@gmail.com> <cory.wright@rackspace.com> | ||||
| <ant@openstack.org> <amesserl@rackspace.com> | ||||
| <chiradeep@cloud.com> <chiradeep@chiradeep-lt2> | ||||
|   | ||||
							
								
								
									
										3
									
								
								Authors
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Authors
									
									
									
									
									
								
							| @@ -3,6 +3,7 @@ Anne Gentle <anne@openstack.org> | ||||
| Anthony Young <sleepsonthefloor@gmail.com> | ||||
| Antony Messerli <ant@openstack.org> | ||||
| Armando Migliaccio <Armando.Migliaccio@eu.citrix.com> | ||||
| Chiradeep Vittal <chiradeep@cloud.com> | ||||
| Chris Behrens <cbehrens@codestud.com> | ||||
| Chmouel Boudjnah <chmouel@chmouel.com> | ||||
| Cory Wright <corywright@gmail.com> | ||||
| @@ -23,6 +24,7 @@ Josh Kearney <josh.kearney@rackspace.com> | ||||
| Joshua McKenty <jmckenty@gmail.com> | ||||
| Justin Santa Barbara <justin@fathomdb.com> | ||||
| Kei Masumoto <masumotok@nttdata.co.jp> | ||||
| Ken Pepple <ken.pepple@gmail.com> | ||||
| Matt Dietz <matt.dietz@rackspace.com> | ||||
| Michael Gundlach <michael.gundlach@rackspace.com> | ||||
| Monty Taylor <mordred@inaugust.com> | ||||
| @@ -41,4 +43,3 @@ Trey Morris <trey.morris@rackspace.com> | ||||
| Vishvananda Ishaya <vishvananda@gmail.com> | ||||
| Youcef Laribi <Youcef.Laribi@eu.citrix.com> | ||||
| Zhixue Wu <Zhixue.Wu@citrix.com> | ||||
|  | ||||
|   | ||||
							
								
								
									
										109
									
								
								bin/nova-api-paste
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										109
									
								
								bin/nova-api-paste
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,109 @@ | ||||
| #!/usr/bin/env python | ||||
| # pylint: disable-msg=C0103 | ||||
| # vim: tabstop=4 shiftwidth=4 softtabstop=4 | ||||
|  | ||||
| # Copyright 2010 United States Government as represented by the | ||||
| # 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. | ||||
|  | ||||
| """Starter script for Nova API.""" | ||||
|  | ||||
| import gettext | ||||
| import os | ||||
| import sys | ||||
|  | ||||
| from paste import deploy | ||||
|  | ||||
| # 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 flags | ||||
| from nova import log as logging | ||||
| from nova import wsgi | ||||
|  | ||||
| LOG = logging.getLogger('nova.api') | ||||
| LOG.setLevel(logging.DEBUG) | ||||
| LOG.addHandler(logging.StreamHandler()) | ||||
|  | ||||
| FLAGS = flags.FLAGS | ||||
|  | ||||
| API_ENDPOINTS = ['ec2', 'openstack'] | ||||
|  | ||||
|  | ||||
| def load_configuration(paste_config): | ||||
|     """Load the paste configuration from the config file and return it.""" | ||||
|     config = None | ||||
|     # Try each known name to get the global DEFAULTS, which will give ports | ||||
|     for name in API_ENDPOINTS: | ||||
|         try: | ||||
|             config = deploy.appconfig("config:%s" % paste_config, name=name) | ||||
|         except LookupError: | ||||
|             pass | ||||
|         if config: | ||||
|             verbose = config.get('verbose', None) | ||||
|             if verbose: | ||||
|                 FLAGS.verbose = int(verbose) == 1 | ||||
|                 if FLAGS.verbose: | ||||
|                     logging.getLogger().setLevel(logging.DEBUG) | ||||
|             return config | ||||
|     LOG.debug(_("Paste config at %s has no secion for known apis"), | ||||
|               paste_config) | ||||
|     print _("Paste config at %s has no secion for any known apis") % \ | ||||
|           paste_config | ||||
|     os.exit(1) | ||||
|  | ||||
|  | ||||
| def launch_api(paste_config_file, section, server, port, host): | ||||
|     """Launch an api server from the specified port and IP.""" | ||||
|     LOG.debug(_("Launching %s api on %s:%s"), section, host, port) | ||||
|     app = deploy.loadapp('config:%s' % paste_config_file, name=section) | ||||
|     server.start(app, int(port), host) | ||||
|  | ||||
|  | ||||
| def run_app(paste_config_file): | ||||
|     LOG.debug(_("Using paste.deploy config at: %s"), configfile) | ||||
|     config = load_configuration(paste_config_file) | ||||
|     LOG.debug(_("Configuration: %r"), config) | ||||
|     server = wsgi.Server() | ||||
|     ip = config.get('host', '0.0.0.0') | ||||
|     for api in API_ENDPOINTS: | ||||
|         port = config.get("%s_port" % api, None) | ||||
|         if not port: | ||||
|             continue | ||||
|         host = config.get("%s_host" % api, ip) | ||||
|         launch_api(configfile, api, server, port, host) | ||||
|     LOG.debug(_("All api servers launched, now waiting")) | ||||
|     server.wait() | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     FLAGS(sys.argv) | ||||
|     configfiles = ['/etc/nova/nova-api.conf'] | ||||
|     if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')): | ||||
|         configfiles.insert(0, | ||||
|                        os.path.join(possible_topdir, 'etc', 'nova-api.conf')) | ||||
|     for configfile in configfiles: | ||||
|         if os.path.exists(configfile): | ||||
|             run_app(configfile) | ||||
|             break | ||||
|         else: | ||||
|             LOG.debug(_("Skipping missing configuration: %s"), configfile) | ||||
| @@ -22,7 +22,6 @@ Handle lease database updates from DHCP servers. | ||||
| """ | ||||
|  | ||||
| import gettext | ||||
| import logging | ||||
| import os | ||||
| import sys | ||||
|  | ||||
| @@ -39,6 +38,7 @@ gettext.install('nova', unicode=1) | ||||
| from nova import context | ||||
| from nova import db | ||||
| from nova import flags | ||||
| from nova import log as logging | ||||
| from nova import rpc | ||||
| from nova import utils | ||||
| from nova.network import linux_net | ||||
| @@ -49,11 +49,13 @@ flags.DECLARE('network_size', 'nova.network.manager') | ||||
| flags.DECLARE('num_networks', 'nova.network.manager') | ||||
| flags.DECLARE('update_dhcp_on_disassociate', 'nova.network.manager') | ||||
|  | ||||
| LOG = logging.getLogger('nova.dhcpbridge') | ||||
|  | ||||
|  | ||||
| def add_lease(mac, ip_address, _hostname, _interface): | ||||
|     """Set the IP that was assigned by the DHCP server.""" | ||||
|     if FLAGS.fake_rabbit: | ||||
|         logging.debug("leasing ip") | ||||
|         LOG.debug(_("leasing ip")) | ||||
|         network_manager = utils.import_object(FLAGS.network_manager) | ||||
|         network_manager.lease_fixed_ip(context.get_admin_context(), | ||||
|                                        mac, | ||||
| @@ -68,14 +70,14 @@ def add_lease(mac, ip_address, _hostname, _interface): | ||||
|  | ||||
| def old_lease(mac, ip_address, hostname, interface): | ||||
|     """Update just as add lease.""" | ||||
|     logging.debug("Adopted old lease or got a change of mac/hostname") | ||||
|     LOG.debug(_("Adopted old lease or got a change of mac/hostname")) | ||||
|     add_lease(mac, ip_address, hostname, interface) | ||||
|  | ||||
|  | ||||
| def del_lease(mac, ip_address, _hostname, _interface): | ||||
|     """Called when a lease expires.""" | ||||
|     if FLAGS.fake_rabbit: | ||||
|         logging.debug("releasing ip") | ||||
|         LOG.debug(_("releasing ip")) | ||||
|         network_manager = utils.import_object(FLAGS.network_manager) | ||||
|         network_manager.release_fixed_ip(context.get_admin_context(), | ||||
|                                          mac, | ||||
| @@ -100,6 +102,7 @@ def main(): | ||||
|     flagfile = os.environ.get('FLAGFILE', FLAGS.dhcpbridge_flagfile) | ||||
|     utils.default_flagfile(flagfile) | ||||
|     argv = FLAGS(sys.argv) | ||||
|     logging.basicConfig() | ||||
|     interface = os.environ.get('DNSMASQ_INTERFACE', 'br0') | ||||
|     if int(os.environ.get('TESTING', '0')): | ||||
|         FLAGS.fake_rabbit = True | ||||
| @@ -117,9 +120,9 @@ def main(): | ||||
|         mac = argv[2] | ||||
|         ip = argv[3] | ||||
|         hostname = argv[4] | ||||
|         logging.debug("Called %s for mac %s with ip %s and " | ||||
|                       "hostname %s on interface %s", | ||||
|                       action, mac, ip, hostname, interface) | ||||
|         LOG.debug(_("Called %s for mac %s with ip %s and " | ||||
|                     "hostname %s on interface %s"), | ||||
|                   action, mac, ip, hostname, interface) | ||||
|         globals()[action + '_lease'](mac, ip, hostname, interface) | ||||
|     else: | ||||
|         print init_leases(interface) | ||||
|   | ||||
| @@ -23,7 +23,6 @@ | ||||
|  | ||||
| import gettext | ||||
| import os | ||||
| import logging | ||||
| import sys | ||||
| from twisted.application import service | ||||
|  | ||||
| @@ -37,19 +36,23 @@ if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')): | ||||
|  | ||||
| gettext.install('nova', unicode=1) | ||||
|  | ||||
| from nova import log as logging | ||||
| from nova import utils | ||||
| from nova import twistd | ||||
| from nova.compute import monitor | ||||
|  | ||||
| # TODO(todd): shouldn't this be done with flags?  And what about verbose? | ||||
| logging.getLogger('boto').setLevel(logging.WARN) | ||||
|  | ||||
| LOG = logging.getLogger('nova.instancemonitor') | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     utils.default_flagfile() | ||||
|     twistd.serve(__file__) | ||||
|  | ||||
| if __name__ == '__builtin__': | ||||
|     logging.warn('Starting instance monitor') | ||||
|     LOG.warn(_('Starting instance monitor')) | ||||
|     # pylint: disable-msg=C0103 | ||||
|     monitor = monitor.InstanceMonitor() | ||||
|  | ||||
|   | ||||
							
								
								
									
										156
									
								
								bin/nova-logspool
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								bin/nova-logspool
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,156 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| # Copyright 2010 United States Government as represented by the | ||||
| # 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. | ||||
|  | ||||
| """ | ||||
| Tools for working with logs generated by nova components | ||||
| """ | ||||
|  | ||||
|  | ||||
| import json | ||||
| import os | ||||
| import re | ||||
| import sys | ||||
|  | ||||
|  | ||||
| class Request(object): | ||||
|     def __init__(self): | ||||
|         self.time = "" | ||||
|         self.host = "" | ||||
|         self.logger = "" | ||||
|         self.message = "" | ||||
|         self.trace = "" | ||||
|         self.env = "" | ||||
|         self.request_id = "" | ||||
|  | ||||
|     def add_error_line(self, error_line): | ||||
|         self.time = " ".join(error_line.split(" ")[:3]) | ||||
|         self.host = error_line.split(" ")[3] | ||||
|         self.logger = error_line.split("(")[1].split(" ")[0] | ||||
|         self.request_id = error_line.split("[")[1].split(" ")[0] | ||||
|         error_lines = error_line.split("#012") | ||||
|         self.message = self.clean_log_line(error_lines.pop(0)) | ||||
|         self.trace = "\n".join([self.clean_trace(l) for l in error_lines]) | ||||
|  | ||||
|     def add_environment_line(self, env_line): | ||||
|         self.env = self.clean_env_line(env_line) | ||||
|  | ||||
|     def clean_log_line(self, line): | ||||
|         """Remove log format for time, level, etc: split after context""" | ||||
|         return line.split('] ')[-1] | ||||
|  | ||||
|     def clean_env_line(self, line): | ||||
|         """Also has an 'Environment: ' string in the message""" | ||||
|         return re.sub(r'^Environment: ', '', self.clean_log_line(line)) | ||||
|  | ||||
|     def clean_trace(self, line): | ||||
|         """trace has a different format, so split on TRACE:""" | ||||
|         return line.split('TRACE: ')[-1] | ||||
|  | ||||
|     def to_dict(self): | ||||
|         return {'traceback': self.trace, 'message': self.message, | ||||
|                 'host': self.host, 'env': self.env, 'logger': self.logger, | ||||
|                 'request_id': self.request_id} | ||||
|  | ||||
|  | ||||
| class LogReader(object): | ||||
|     def __init__(self, filename): | ||||
|         self.filename = filename | ||||
|         self._errors = {} | ||||
|  | ||||
|     def process(self, spooldir): | ||||
|         with open(self.filename) as f: | ||||
|             line = f.readline() | ||||
|             while len(line) > 0: | ||||
|                 parts = line.split(" ") | ||||
|                 level = (len(parts) < 6) or parts[5] | ||||
|                 if level == 'ERROR': | ||||
|                     self.handle_logged_error(line) | ||||
|                 elif level == '[-]' and self.last_error: | ||||
|                     # twisted stack trace line | ||||
|                     clean_line = " ".join(line.split(" ")[6:]) | ||||
|                     self.last_error.trace = self.last_error.trace + clean_line | ||||
|                 else: | ||||
|                     self.last_error = None | ||||
|                 line = f.readline() | ||||
|         self.update_spool(spooldir) | ||||
|  | ||||
|     def handle_logged_error(self, line): | ||||
|         request_id = re.search(r' \[([A-Z0-9\-/]+)', line) | ||||
|         if not request_id: | ||||
|             raise Exception("Unable to parse request id from %s" % line) | ||||
|         request_id = request_id.group(1) | ||||
|         data = self._errors.get(request_id, Request()) | ||||
|         if self.is_env_line(line): | ||||
|             data.add_environment_line(line) | ||||
|         elif self.is_error_line(line): | ||||
|             data.add_error_line(line) | ||||
|         else: | ||||
|             # possibly error from twsited | ||||
|             data.add_error_line(line) | ||||
|         self.last_error = data | ||||
|         self._errors[request_id] = data | ||||
|  | ||||
|     def is_env_line(self, line): | ||||
|         return re.search('Environment: ', line) | ||||
|  | ||||
|     def is_error_line(self, line): | ||||
|         return re.search('raised', line) | ||||
|  | ||||
|     def update_spool(self, directory): | ||||
|         processed_dir = "%s/processed" % directory | ||||
|         self._ensure_dir_exists(processed_dir) | ||||
|         for rid, value in self._errors.iteritems(): | ||||
|             if not self.has_been_processed(processed_dir, rid): | ||||
|                 with open("%s/%s" % (directory, rid), "w") as spool: | ||||
|                     spool.write(json.dumps(value.to_dict())) | ||||
|         self.flush_old_processed_spool(processed_dir) | ||||
|  | ||||
|     def _ensure_dir_exists(self, d): | ||||
|         mkdir = False | ||||
|         try: | ||||
|             os.stat(d) | ||||
|         except: | ||||
|             mkdir = True | ||||
|         if mkdir: | ||||
|             os.mkdir(d) | ||||
|  | ||||
|     def has_been_processed(self, processed_dir, rid): | ||||
|         rv = False | ||||
|         try: | ||||
|             os.stat("%s/%s" % (processed_dir, rid)) | ||||
|             rv = True | ||||
|         except: | ||||
|             pass | ||||
|         return rv | ||||
|  | ||||
|     def flush_old_processed_spool(self, processed_dir): | ||||
|         keys = self._errors.keys() | ||||
|         procs = os.listdir(processed_dir) | ||||
|         for p in procs: | ||||
|             if p not in keys: | ||||
|                 # log has rotated and the old error won't be seen again | ||||
|                 os.unlink("%s/%s" % (processed_dir, p)) | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     filename = '/var/log/nova.log' | ||||
|     spooldir = '/var/spool/nova' | ||||
|     if len(sys.argv) > 1: | ||||
|         filename = sys.argv[1] | ||||
|     if len(sys.argv) > 2: | ||||
|         spooldir = sys.argv[2] | ||||
|     LogReader(filename).process(spooldir) | ||||
							
								
								
									
										113
									
								
								bin/nova-manage
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								bin/nova-manage
									
									
									
									
									
								
							| @@ -53,9 +53,10 @@ | ||||
|   CLI interface for nova management. | ||||
| """ | ||||
|  | ||||
| import datetime | ||||
| import gettext | ||||
| import logging | ||||
| import os | ||||
| import re | ||||
| import sys | ||||
| import time | ||||
|  | ||||
| @@ -76,6 +77,7 @@ from nova import crypto | ||||
| from nova import db | ||||
| from nova import exception | ||||
| from nova import flags | ||||
| from nova import log as logging | ||||
| from nova import quota | ||||
| from nova import utils | ||||
| from nova.auth import manager | ||||
| @@ -333,6 +335,11 @@ class ProjectCommands(object): | ||||
|         arguments: name project_manager [description]""" | ||||
|         self.manager.create_project(name, project_manager, description) | ||||
|  | ||||
|     def modify(self, name, project_manager, description=None): | ||||
|         """Modifies a project | ||||
|         arguments: name project_manager [description]""" | ||||
|         self.manager.modify_project(name, project_manager, description) | ||||
|  | ||||
|     def delete(self, name): | ||||
|         """Deletes an existing project | ||||
|         arguments: name""" | ||||
| @@ -460,34 +467,29 @@ class InstanceCommands(object): | ||||
|     def live_migration(self, ec2_id, dest): | ||||
|         """live_migration""" | ||||
|  | ||||
|  | ||||
|         if FLAGS.connection_type != 'libvirt': | ||||
|             raise exception.Error('Only KVM is supported for now. ' | ||||
|                 'Sorry.') | ||||
|  | ||||
|         if FLAGS.volume_driver != 'nova.volume.driver.AOEDriver': | ||||
|             raise exception.Error('Only AOEDriver is supported for now. ' | ||||
|                 'Sorry.') | ||||
|  | ||||
|         logging.basicConfig() | ||||
|         ctxt = context.get_admin_context() | ||||
|         instance_id = cloud.ec2_id_to_id(ec2_id) | ||||
|  | ||||
|         try: | ||||
|             internal_id = cloud.ec2_id_to_internal_id(ec2_id) | ||||
|             instance_ref = db.instance_get_by_internal_id(ctxt, internal_id) | ||||
|             instance_id = instance_ref['id'] | ||||
|         except exception.NotFound as e: | ||||
|             msg = _('instance(%s) is not found') | ||||
|             e.args += (msg % ec2_id,) | ||||
|             raise e | ||||
|         rpc.call(ctxt, | ||||
|                  FLAGS.scheduler_topic, | ||||
|                  {"method": "live_migration", | ||||
|                   "args": {"instance_id": instance_id, | ||||
|                            "dest": dest, | ||||
|                            "topic": FLAGS.compute_topic}}) | ||||
|  | ||||
|         ret = rpc.call(ctxt, | ||||
|                        FLAGS.scheduler_topic, | ||||
|                        {"method": "live_migration", | ||||
|                         "args": {"instance_id": instance_id, | ||||
|                                 "dest": dest, | ||||
|                                 "topic": FLAGS.compute_topic}}) | ||||
|  | ||||
|         if None != ret: | ||||
|             raise ret | ||||
|  | ||||
|         print 'Finished all procedure. Check migrating finishes successfully' | ||||
|         print 'check status by using euca-describe-instances.' | ||||
|         msg = 'Migration of %s initiated. ' % ec2_id | ||||
|         msg += 'Check its progress using euca-describe-instances.' | ||||
|         print msg | ||||
|  | ||||
|  | ||||
| class HostCommands(object): | ||||
| @@ -510,13 +512,13 @@ class HostCommands(object): | ||||
|         logging.basicConfig() | ||||
|  | ||||
|         result = rpc.call(context.get_admin_context(), | ||||
|                          FLAGS.scheduler_topic, | ||||
|                          {"method": "show_host_resource", | ||||
|                           "args": {"host": host}}) | ||||
|                      FLAGS.scheduler_topic, | ||||
|                      {"method": "show_host_resource", | ||||
|                       "args": {"host": host}}) | ||||
|  | ||||
|         # Checking result msg format is necessary, that will have done | ||||
|         # when this feture is included in API. | ||||
|         if dict != type(result): | ||||
|         if type(result) != dict: | ||||
|             print 'Unexpected error occurs' | ||||
|         elif not result['ret']: | ||||
|             print '%s' % result['msg'] | ||||
| @@ -535,6 +537,60 @@ class HostCommands(object): | ||||
|                                              val['local_gb']) | ||||
|  | ||||
|  | ||||
| class ServiceCommands(object): | ||||
|     """Enable and disable running services""" | ||||
|  | ||||
|     def list(self, host=None, service=None): | ||||
|         """Show a list of all running services. Filter by host & service name. | ||||
|         args: [host] [service]""" | ||||
|         ctxt = context.get_admin_context() | ||||
|         now = datetime.datetime.utcnow() | ||||
|         services = db.service_get_all(ctxt) | ||||
|         if host: | ||||
|             services = [s for s in services if s['host'] == host] | ||||
|         if service: | ||||
|             services = [s for s in services if s['binary'] == service] | ||||
|         for svc in services: | ||||
|             delta = now - (svc['updated_at'] or svc['created_at']) | ||||
|             alive = (delta.seconds <= 15) | ||||
|             art = (alive and ":-)") or "XXX" | ||||
|             active = 'enabled' | ||||
|             if svc['disabled']: | ||||
|                 active = 'disabled' | ||||
|             print "%-10s %-10s %-8s %s %s" % (svc['host'], svc['binary'], | ||||
|                                               active, art, | ||||
|                                               svc['updated_at']) | ||||
|  | ||||
|     def enable(self, host, service): | ||||
|         """Enable scheduling for a service | ||||
|         args: host service""" | ||||
|         ctxt = context.get_admin_context() | ||||
|         svc = db.service_get_by_args(ctxt, host, service) | ||||
|         if not svc: | ||||
|             print "Unable to find service" | ||||
|             return | ||||
|         db.service_update(ctxt, svc['id'], {'disabled': False}) | ||||
|  | ||||
|     def disable(self, host, service): | ||||
|         """Disable scheduling for a service | ||||
|         args: host service""" | ||||
|         ctxt = context.get_admin_context() | ||||
|         svc = db.service_get_by_args(ctxt, host, service) | ||||
|         if not svc: | ||||
|             print "Unable to find service" | ||||
|             return | ||||
|         db.service_update(ctxt, svc['id'], {'disabled': True}) | ||||
|  | ||||
|  | ||||
| class LogCommands(object): | ||||
|     def request(self, request_id, logfile='/var/log/nova.log'): | ||||
|         """Show all fields in the log for the given request.  Assumes you | ||||
|         haven't changed the log format too much. | ||||
|         ARGS: request_id [logfile]""" | ||||
|         lines = utils.execute("cat %s | grep '\[%s '" % (logfile, request_id)) | ||||
|         print re.sub('#012', "\n", "\n".join(lines)) | ||||
|  | ||||
|  | ||||
| CATEGORIES = [ | ||||
|     ('user', UserCommands), | ||||
|     ('project', ProjectCommands), | ||||
| @@ -544,7 +600,9 @@ CATEGORIES = [ | ||||
|     ('floating', FloatingIpCommands), | ||||
|     ('network', NetworkCommands), | ||||
|     ('instance', InstanceCommands), | ||||
|     ('host', HostCommands)] | ||||
|     ('host', HostCommands), | ||||
|     ('service', ServiceCommands), | ||||
|     ('log', LogCommands)] | ||||
|  | ||||
|  | ||||
| def lazy_match(name, key_value_tuples): | ||||
| @@ -583,9 +641,6 @@ def main(): | ||||
|     utils.default_flagfile() | ||||
|     argv = FLAGS(sys.argv) | ||||
|  | ||||
|     if FLAGS.verbose: | ||||
|         logging.getLogger().setLevel(logging.DEBUG) | ||||
|  | ||||
|     script_name = argv.pop(0) | ||||
|     if len(argv) < 1: | ||||
|         print script_name + " category action [<args>]" | ||||
|   | ||||
							
								
								
									
										97
									
								
								bin/nova-spoolsentry
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								bin/nova-spoolsentry
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| #!/usr/bin/env python | ||||
| # vim: tabstop=4 shiftwidth=4 softtabstop=4 | ||||
|  | ||||
| # Copyright 2010 United States Government as represented by the | ||||
| # 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. | ||||
|  | ||||
|  | ||||
| import base64 | ||||
| import json | ||||
| import logging | ||||
| import os | ||||
| import shutil | ||||
| import sys | ||||
| import urllib | ||||
| import urllib2 | ||||
| try: | ||||
|     import cPickle as pickle | ||||
| except: | ||||
|     import pickle | ||||
|  | ||||
|  | ||||
| class SpoolSentry(object): | ||||
|     def __init__(self, spool_dir, sentry_url, key=None): | ||||
|         self.spool_dir = spool_dir | ||||
|         self.sentry_url = sentry_url | ||||
|         self.key = key | ||||
|  | ||||
|     def process(self): | ||||
|         for fname in os.listdir(self.spool_dir): | ||||
|             if fname == "processed": | ||||
|                 continue | ||||
|             try: | ||||
|                 sourcefile = "%s/%s" % (self.spool_dir, fname) | ||||
|                 with open(sourcefile) as f: | ||||
|                     fdata = f.read() | ||||
|                 data_from_json = json.loads(fdata) | ||||
|                 data = self.build_data(data_from_json) | ||||
|                 self.send_data(data) | ||||
|                 destfile = "%s/processed/%s" % (self.spool_dir, fname) | ||||
|                 shutil.move(sourcefile, destfile) | ||||
|             except: | ||||
|                 logging.exception("Unable to upload record %s", fname) | ||||
|                 raise | ||||
|  | ||||
|     def build_data(self, filejson): | ||||
|         env = {'SERVER_NAME': 'unknown', 'SERVER_PORT': '0000', | ||||
|                'SCRIPT_NAME': '/unknown/', 'PATH_INFO': 'unknown'} | ||||
|         if filejson['env']: | ||||
|             env = json.loads(filejson['env']) | ||||
|         url = "http://%s:%s%s%s" % (env['SERVER_NAME'], env['SERVER_PORT'], | ||||
|                                     env['SCRIPT_NAME'], env['PATH_INFO']) | ||||
|         rv = {'logger': filejson['logger'], 'level': logging.ERROR, | ||||
|               'server_name': filejson['host'], 'url': url, | ||||
|               'message': filejson['message'], | ||||
|               'traceback': filejson['traceback']} | ||||
|         rv['data'] = {} | ||||
|         if filejson['env']: | ||||
|             rv['data']['META'] = env | ||||
|         if filejson['request_id']: | ||||
|             rv['data']['request_id'] = filejson['request_id'] | ||||
|         return rv | ||||
|  | ||||
|     def send_data(self, data): | ||||
|         data = { | ||||
|             'data': base64.b64encode(pickle.dumps(data).encode('zlib')), | ||||
|             'key': self.key | ||||
|         } | ||||
|         req = urllib2.Request(self.sentry_url) | ||||
|         res = urllib2.urlopen(req, urllib.urlencode(data)) | ||||
|         if res.getcode() != 200: | ||||
|             raise Exception("Bad HTTP code: %s" % res.getcode()) | ||||
|         txt = res.read() | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     sentryurl = 'http://127.0.0.1/sentry/store/' | ||||
|     key = '' | ||||
|     spooldir = '/var/spool/nova' | ||||
|     if len(sys.argv) > 1: | ||||
|         sentryurl = sys.argv[1] | ||||
|     if len(sys.argv) > 2: | ||||
|         key = sys.argv[2] | ||||
|     if len(sys.argv) > 3: | ||||
|         spooldir = sys.argv[3] | ||||
|     SpoolSentry(spooldir, sentryurl, key).process() | ||||
| @@ -1,97 +0,0 @@ | ||||
| source/api/nova..adminclient.rst | ||||
| source/api/nova..api.cloud.rst | ||||
| source/api/nova..api.ec2.admin.rst | ||||
| source/api/nova..api.ec2.apirequest.rst | ||||
| source/api/nova..api.ec2.cloud.rst | ||||
| source/api/nova..api.ec2.images.rst | ||||
| source/api/nova..api.ec2.metadatarequesthandler.rst | ||||
| source/api/nova..api.openstack.auth.rst | ||||
| source/api/nova..api.openstack.backup_schedules.rst | ||||
| source/api/nova..api.openstack.faults.rst | ||||
| source/api/nova..api.openstack.flavors.rst | ||||
| source/api/nova..api.openstack.images.rst | ||||
| source/api/nova..api.openstack.servers.rst | ||||
| source/api/nova..api.openstack.sharedipgroups.rst | ||||
| source/api/nova..auth.dbdriver.rst | ||||
| source/api/nova..auth.fakeldap.rst | ||||
| source/api/nova..auth.ldapdriver.rst | ||||
| source/api/nova..auth.manager.rst | ||||
| source/api/nova..auth.signer.rst | ||||
| source/api/nova..cloudpipe.pipelib.rst | ||||
| source/api/nova..compute.disk.rst | ||||
| source/api/nova..compute.instance_types.rst | ||||
| source/api/nova..compute.manager.rst | ||||
| source/api/nova..compute.monitor.rst | ||||
| source/api/nova..compute.power_state.rst | ||||
| source/api/nova..context.rst | ||||
| source/api/nova..crypto.rst | ||||
| source/api/nova..db.api.rst | ||||
| source/api/nova..db.sqlalchemy.api.rst | ||||
| source/api/nova..db.sqlalchemy.models.rst | ||||
| source/api/nova..db.sqlalchemy.session.rst | ||||
| source/api/nova..exception.rst | ||||
| source/api/nova..fakerabbit.rst | ||||
| source/api/nova..flags.rst | ||||
| source/api/nova..image.service.rst | ||||
| source/api/nova..manager.rst | ||||
| source/api/nova..network.linux_net.rst | ||||
| source/api/nova..network.manager.rst | ||||
| source/api/nova..objectstore.bucket.rst | ||||
| source/api/nova..objectstore.handler.rst | ||||
| source/api/nova..objectstore.image.rst | ||||
| source/api/nova..objectstore.stored.rst | ||||
| source/api/nova..process.rst | ||||
| source/api/nova..quota.rst | ||||
| source/api/nova..rpc.rst | ||||
| source/api/nova..scheduler.chance.rst | ||||
| source/api/nova..scheduler.driver.rst | ||||
| source/api/nova..scheduler.manager.rst | ||||
| source/api/nova..scheduler.simple.rst | ||||
| source/api/nova..server.rst | ||||
| source/api/nova..service.rst | ||||
| source/api/nova..test.rst | ||||
| source/api/nova..tests.access_unittest.rst | ||||
| source/api/nova..tests.api.fakes.rst | ||||
| source/api/nova..tests.api.openstack.fakes.rst | ||||
| source/api/nova..tests.api.openstack.test_api.rst | ||||
| source/api/nova..tests.api.openstack.test_auth.rst | ||||
| source/api/nova..tests.api.openstack.test_faults.rst | ||||
| source/api/nova..tests.api.openstack.test_flavors.rst | ||||
| source/api/nova..tests.api.openstack.test_images.rst | ||||
| source/api/nova..tests.api.openstack.test_ratelimiting.rst | ||||
| source/api/nova..tests.api.openstack.test_servers.rst | ||||
| source/api/nova..tests.api.openstack.test_sharedipgroups.rst | ||||
| source/api/nova..tests.api.test_wsgi.rst | ||||
| source/api/nova..tests.api_integration.rst | ||||
| source/api/nova..tests.api_unittest.rst | ||||
| source/api/nova..tests.auth_unittest.rst | ||||
| source/api/nova..tests.cloud_unittest.rst | ||||
| source/api/nova..tests.compute_unittest.rst | ||||
| source/api/nova..tests.declare_flags.rst | ||||
| source/api/nova..tests.fake_flags.rst | ||||
| source/api/nova..tests.flags_unittest.rst | ||||
| source/api/nova..tests.network_unittest.rst | ||||
| source/api/nova..tests.objectstore_unittest.rst | ||||
| source/api/nova..tests.process_unittest.rst | ||||
| source/api/nova..tests.quota_unittest.rst | ||||
| source/api/nova..tests.real_flags.rst | ||||
| source/api/nova..tests.rpc_unittest.rst | ||||
| source/api/nova..tests.runtime_flags.rst | ||||
| source/api/nova..tests.scheduler_unittest.rst | ||||
| source/api/nova..tests.service_unittest.rst | ||||
| source/api/nova..tests.twistd_unittest.rst | ||||
| source/api/nova..tests.validator_unittest.rst | ||||
| source/api/nova..tests.virt_unittest.rst | ||||
| source/api/nova..tests.volume_unittest.rst | ||||
| source/api/nova..twistd.rst | ||||
| source/api/nova..utils.rst | ||||
| source/api/nova..validate.rst | ||||
| source/api/nova..virt.connection.rst | ||||
| source/api/nova..virt.fake.rst | ||||
| source/api/nova..virt.images.rst | ||||
| source/api/nova..virt.libvirt_conn.rst | ||||
| source/api/nova..virt.xenapi.rst | ||||
| source/api/nova..volume.driver.rst | ||||
| source/api/nova..volume.manager.rst | ||||
| source/api/nova..wsgi.rst | ||||
| source/api/autoindex.rst | ||||
| @@ -16,13 +16,13 @@ Here's a script you can use to install (and then run) Nova on Ubuntu or Debian ( | ||||
| Step 2: Install dependencies | ||||
| ---------------------------- | ||||
|  | ||||
| Nova requires rabbitmq for messaging and optionally you can use redis for storing state, so install these first. | ||||
| Nova requires rabbitmq for messaging, so install that first. | ||||
|  | ||||
| *Note:* You must have sudo installed to run these commands as shown here. | ||||
|  | ||||
| :: | ||||
|  | ||||
|     sudo apt-get install rabbitmq-server redis-server | ||||
|     sudo apt-get install rabbitmq-server | ||||
|  | ||||
|  | ||||
| You'll see messages starting with "Reading package lists... Done" and you must confirm by typing Y that you want to continue. | ||||
| @@ -31,11 +31,10 @@ If you're running on Ubuntu 10.04, you'll need to install Twisted and python-gfl | ||||
|  | ||||
| :: | ||||
|  | ||||
|     sudo apt-get install python-twisted | ||||
|  | ||||
|     sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 95C71FE2 | ||||
|     sudo sh -c 'echo "deb http://ppa.launchpad.net/openstack/openstack-ppa/ubuntu lucid main" > /etc/apt/sources.list.d/openstackppa.list' | ||||
|     sudo apt-get update && sudo apt-get install python-gflags | ||||
|     sudo add-get install python-software-properties | ||||
|     sudo add-apt-repository ppa:nova-core/trunk | ||||
|     sudo apt-get update | ||||
|     sudo apt-get install python-twisted python-gflags | ||||
|  | ||||
|  | ||||
| Once you've done this, continue at Step 3 here: :doc:`../single.node.install` | ||||
|   | ||||
| @@ -76,11 +76,11 @@ External unix tools that are required: | ||||
| * aoetools and vblade-persist (if you use aoe-volumes) | ||||
|  | ||||
| Nova uses cutting-edge versions of many packages. There are ubuntu packages in | ||||
| the nova-core ppa.  You can use add this ppa to your sources list on an ubuntu | ||||
| machine with the following commands:: | ||||
| the nova-core trunk ppa.  You can use add this ppa to your sources list on an | ||||
| ubuntu machine with the following commands:: | ||||
|  | ||||
|   sudo apt-get install -y python-software-properties | ||||
|   sudo add-apt-repository ppa:nova-core/ppa | ||||
|   sudo add-apt-repository ppa:nova-core/trunk | ||||
|  | ||||
| Recommended | ||||
| ----------- | ||||
|   | ||||
| @@ -46,12 +46,12 @@ Assumptions | ||||
| Step 1 Use apt-get to get the latest code | ||||
| ----------------------------------------- | ||||
|  | ||||
| 1. Setup Nova PPA with https://launchpad.net/~nova-core/+archive/ppa. | ||||
| 1. Setup Nova PPA with https://launchpad.net/~nova-core/+archive/trunk. | ||||
|  | ||||
| :: | ||||
|      | ||||
|     sudo apt-get install python-software-properties | ||||
|     sudo add-apt-repository ppa:nova-core/ppa | ||||
|     sudo add-apt-repository ppa:nova-core/trunk | ||||
| 	 | ||||
| 2. Run update. | ||||
|  | ||||
| @@ -77,21 +77,20 @@ Nova development has consolidated all .conf files to nova.conf as of November 20 | ||||
|  | ||||
| #. These need to be defined in the nova.conf configuration file:: | ||||
|  | ||||
|    --sql_connection=mysql://root:nova@$CC_ADDR/nova # location of nova sql db | ||||
|    --s3_host=$CC_ADDR  # This is where nova is hosting the objectstore service, which | ||||
|                        # will contain the VM images and buckets | ||||
|    --rabbit_host=$CC_ADDR # This is where the rabbit AMQP messaging service is hosted | ||||
|    --cc_host=$CC_ADDR     # This is where the the nova-api service lives | ||||
|    --verbose              # Optional but very helpful during initial setup | ||||
|    --ec2_url=http://$CC_ADDR:8773/services/Cloud | ||||
|    --network_manager=nova.network.manager.FlatManager # simple, no-vlan networking type | ||||
|  | ||||
|    --fixed_range=<network/prefix>   # ip network to use for VM guests, ex 192.168.2.64/26 | ||||
|    --network_size=<# of addrs>      # number of ip addrs to use for VM guests, ex 64 | ||||
|         --sql_connection=mysql://root:nova@$CC_ADDR/nova # location of nova sql db | ||||
|         --s3_host=$CC_ADDR  # This is where Nova is hosting the objectstore service, which | ||||
|                             # will contain the VM images and buckets | ||||
|         --rabbit_host=$CC_ADDR # This is where the rabbit AMQP messaging service is hosted | ||||
|         --cc_host=$CC_ADDR     # This is where the the nova-api service lives | ||||
|         --verbose              # Optional but very helpful during initial setup | ||||
|         --ec2_url=http://$CC_ADDR:8773/services/Cloud | ||||
|         --network_manager=nova.network.manager.FlatManager # simple, no-vlan networking type | ||||
|         --fixed_range=<network/prefix>   # ip network to use for VM guests, ex 192.168.2.64/26 | ||||
|         --network_size=<# of addrs>      # number of ip addrs to use for VM guests, ex 64 | ||||
|  | ||||
| #. Create a nova group:: | ||||
|  | ||||
|    sudo addgroup nova | ||||
|         sudo addgroup nova | ||||
|  | ||||
| The Nova config file should have its owner set to root:nova, and mode set to 0640, since they contain your MySQL server's root password. | ||||
|  | ||||
|   | ||||
| @@ -1,99 +0,0 @@ | ||||
| .. toctree:: | ||||
|    :maxdepth: 1 | ||||
|  | ||||
|    nova..adminclient.rst | ||||
|    nova..api.cloud.rst | ||||
|    nova..api.ec2.admin.rst | ||||
|    nova..api.ec2.apirequest.rst | ||||
|    nova..api.ec2.cloud.rst | ||||
|    nova..api.ec2.images.rst | ||||
|    nova..api.ec2.metadatarequesthandler.rst | ||||
|    nova..api.openstack.auth.rst | ||||
|    nova..api.openstack.backup_schedules.rst | ||||
|    nova..api.openstack.faults.rst | ||||
|    nova..api.openstack.flavors.rst | ||||
|    nova..api.openstack.images.rst | ||||
|    nova..api.openstack.servers.rst | ||||
|    nova..api.openstack.sharedipgroups.rst | ||||
|    nova..auth.dbdriver.rst | ||||
|    nova..auth.fakeldap.rst | ||||
|    nova..auth.ldapdriver.rst | ||||
|    nova..auth.manager.rst | ||||
|    nova..auth.signer.rst | ||||
|    nova..cloudpipe.pipelib.rst | ||||
|    nova..compute.disk.rst | ||||
|    nova..compute.instance_types.rst | ||||
|    nova..compute.manager.rst | ||||
|    nova..compute.monitor.rst | ||||
|    nova..compute.power_state.rst | ||||
|    nova..context.rst | ||||
|    nova..crypto.rst | ||||
|    nova..db.api.rst | ||||
|    nova..db.sqlalchemy.api.rst | ||||
|    nova..db.sqlalchemy.models.rst | ||||
|    nova..db.sqlalchemy.session.rst | ||||
|    nova..exception.rst | ||||
|    nova..fakerabbit.rst | ||||
|    nova..flags.rst | ||||
|    nova..image.service.rst | ||||
|    nova..manager.rst | ||||
|    nova..network.linux_net.rst | ||||
|    nova..network.manager.rst | ||||
|    nova..objectstore.bucket.rst | ||||
|    nova..objectstore.handler.rst | ||||
|    nova..objectstore.image.rst | ||||
|    nova..objectstore.stored.rst | ||||
|    nova..process.rst | ||||
|    nova..quota.rst | ||||
|    nova..rpc.rst | ||||
|    nova..scheduler.chance.rst | ||||
|    nova..scheduler.driver.rst | ||||
|    nova..scheduler.manager.rst | ||||
|    nova..scheduler.simple.rst | ||||
|    nova..server.rst | ||||
|    nova..service.rst | ||||
|    nova..test.rst | ||||
|    nova..tests.access_unittest.rst | ||||
|    nova..tests.api.fakes.rst | ||||
|    nova..tests.api.openstack.fakes.rst | ||||
|    nova..tests.api.openstack.test_api.rst | ||||
|    nova..tests.api.openstack.test_auth.rst | ||||
|    nova..tests.api.openstack.test_faults.rst | ||||
|    nova..tests.api.openstack.test_flavors.rst | ||||
|    nova..tests.api.openstack.test_images.rst | ||||
|    nova..tests.api.openstack.test_ratelimiting.rst | ||||
|    nova..tests.api.openstack.test_servers.rst | ||||
|    nova..tests.api.openstack.test_sharedipgroups.rst | ||||
|    nova..tests.api.test_wsgi.rst | ||||
|    nova..tests.api_integration.rst | ||||
|    nova..tests.api_unittest.rst | ||||
|    nova..tests.auth_unittest.rst | ||||
|    nova..tests.cloud_unittest.rst | ||||
|    nova..tests.compute_unittest.rst | ||||
|    nova..tests.declare_flags.rst | ||||
|    nova..tests.fake_flags.rst | ||||
|    nova..tests.flags_unittest.rst | ||||
|    nova..tests.network_unittest.rst | ||||
|    nova..tests.objectstore_unittest.rst | ||||
|    nova..tests.process_unittest.rst | ||||
|    nova..tests.quota_unittest.rst | ||||
|    nova..tests.real_flags.rst | ||||
|    nova..tests.rpc_unittest.rst | ||||
|    nova..tests.runtime_flags.rst | ||||
|    nova..tests.scheduler_unittest.rst | ||||
|    nova..tests.service_unittest.rst | ||||
|    nova..tests.twistd_unittest.rst | ||||
|    nova..tests.validator_unittest.rst | ||||
|    nova..tests.virt_unittest.rst | ||||
|    nova..tests.volume_unittest.rst | ||||
|    nova..twistd.rst | ||||
|    nova..utils.rst | ||||
|    nova..validate.rst | ||||
|    nova..virt.connection.rst | ||||
|    nova..virt.fake.rst | ||||
|    nova..virt.images.rst | ||||
|    nova..virt.libvirt_conn.rst | ||||
|    nova..virt.xenapi.rst | ||||
|    nova..volume.driver.rst | ||||
|    nova..volume.manager.rst | ||||
|    nova..wsgi.rst | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..adminclient` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..adminclient | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.cloud` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.cloud | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.ec2.admin` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.ec2.admin | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.ec2.apirequest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.ec2.apirequest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.ec2.cloud` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.ec2.cloud | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.ec2.images` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.ec2.images | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.ec2.metadatarequesthandler` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.ec2.metadatarequesthandler | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.openstack.auth` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.openstack.auth | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.openstack.backup_schedules` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.openstack.backup_schedules | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.openstack.faults` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.openstack.faults | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.openstack.flavors` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.openstack.flavors | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.openstack.images` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.openstack.images | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.openstack.servers` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.openstack.servers | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..api.openstack.sharedipgroups` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..api.openstack.sharedipgroups | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..auth.dbdriver` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..auth.dbdriver | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..auth.fakeldap` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..auth.fakeldap | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..auth.ldapdriver` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..auth.ldapdriver | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..auth.manager` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..auth.manager | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..auth.signer` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..auth.signer | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..cloudpipe.pipelib` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..cloudpipe.pipelib | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..compute.disk` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..compute.disk | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..compute.instance_types` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..compute.instance_types | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..compute.manager` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..compute.manager | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..compute.monitor` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..compute.monitor | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..compute.power_state` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..compute.power_state | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..context` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..context | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..crypto` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..crypto | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..db.api` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..db.api | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..db.sqlalchemy.api` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..db.sqlalchemy.api | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..db.sqlalchemy.models` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..db.sqlalchemy.models | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..db.sqlalchemy.session` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..db.sqlalchemy.session | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..exception` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..exception | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..fakerabbit` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..fakerabbit | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..flags` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..flags | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..image.service` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..image.service | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..manager` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..manager | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..network.linux_net` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..network.linux_net | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..network.manager` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..network.manager | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..objectstore.bucket` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..objectstore.bucket | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..objectstore.handler` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..objectstore.handler | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..objectstore.image` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..objectstore.image | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..objectstore.stored` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..objectstore.stored | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..process` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..process | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..quota` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..quota | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..rpc` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..rpc | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..scheduler.chance` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..scheduler.chance | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..scheduler.driver` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..scheduler.driver | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..scheduler.manager` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..scheduler.manager | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..scheduler.simple` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..scheduler.simple | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..server` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..server | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..service` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..service | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..test` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..test | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.access_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.access_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.fakes` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.fakes | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.openstack.fakes` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.openstack.fakes | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.openstack.test_api` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.openstack.test_api | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.openstack.test_auth` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.openstack.test_auth | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.openstack.test_faults` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.openstack.test_faults | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.openstack.test_flavors` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.openstack.test_flavors | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.openstack.test_images` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.openstack.test_images | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.openstack.test_ratelimiting` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.openstack.test_ratelimiting | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.openstack.test_servers` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.openstack.test_servers | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.openstack.test_sharedipgroups` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.openstack.test_sharedipgroups | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api.test_wsgi` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api.test_wsgi | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api_integration` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api_integration | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.api_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.api_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.auth_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.auth_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.cloud_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.cloud_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.compute_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.compute_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.declare_flags` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.declare_flags | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.fake_flags` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.fake_flags | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.flags_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.flags_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.network_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.network_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.objectstore_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.objectstore_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.process_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.process_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.quota_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.quota_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.real_flags` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.real_flags | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.rpc_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.rpc_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.runtime_flags` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.runtime_flags | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.scheduler_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.scheduler_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.service_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.service_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.twistd_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.twistd_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.validator_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.validator_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.virt_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.virt_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
| @@ -1,6 +0,0 @@ | ||||
| The :mod:`nova..tests.volume_unittest` Module | ||||
| ============================================================================== | ||||
| .. automodule:: nova..tests.volume_unittest | ||||
|   :members: | ||||
|   :undoc-members: | ||||
|   :show-inheritance: | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 masumotok
					masumotok