merge trunk

This commit is contained in:
Anthony Young 2011-01-10 13:06:36 -08:00
commit 220259d6ca
205 changed files with 6368 additions and 1992 deletions

View File

@ -12,3 +12,4 @@ CA/openssl.cnf
CA/serial*
CA/newcerts/*.pem
CA/private/cakey.pem
nova/vcsversion.py

View File

@ -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>

View File

@ -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>
@ -22,6 +23,7 @@ Jonathan Bryce <jbryce@jbryce.com>
Josh Kearney <josh.kearney@rackspace.com>
Joshua McKenty <jmckenty@gmail.com>
Justin Santa Barbara <justin@fathomdb.com>
Ken Pepple <ken.pepple@gmail.com>
Matt Dietz <matt.dietz@rackspace.com>
Michael Gundlach <michael.gundlach@rackspace.com>
Monty Taylor <mordred@inaugust.com>
@ -39,4 +41,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>

2
babel.cfg Normal file
View File

@ -0,0 +1,2 @@
[python: **.py]

109
bin/nova-api-paste Executable file
View 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)

View File

@ -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)

View File

@ -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
View 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)

View File

@ -53,9 +53,10 @@
CLI interface for nova management.
"""
import datetime
import gettext
import logging
import os
import re
import sys
import time
@ -452,6 +453,61 @@ class NetworkCommands(object):
int(network_size), int(vlan_start),
int(vpn_start))
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),
@ -459,7 +515,9 @@ CATEGORIES = [
('shell', ShellCommands),
('vpn', VpnCommands),
('floating', FloatingIpCommands),
('network', NetworkCommands)]
('network', NetworkCommands),
('service', ServiceCommands),
('log', LogCommands)]
def lazy_match(name, key_value_tuples):
@ -498,9 +556,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
View 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()

View File

@ -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

View File

@ -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`

View File

@ -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
-----------

View File

@ -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.

View File

@ -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

View File

@ -1,6 +0,0 @@
The :mod:`nova..adminclient` Module
==============================================================================
.. automodule:: nova..adminclient
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.cloud` Module
==============================================================================
.. automodule:: nova..api.cloud
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.ec2.admin` Module
==============================================================================
.. automodule:: nova..api.ec2.admin
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.ec2.apirequest` Module
==============================================================================
.. automodule:: nova..api.ec2.apirequest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.ec2.cloud` Module
==============================================================================
.. automodule:: nova..api.ec2.cloud
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.ec2.images` Module
==============================================================================
.. automodule:: nova..api.ec2.images
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.ec2.metadatarequesthandler` Module
==============================================================================
.. automodule:: nova..api.ec2.metadatarequesthandler
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.openstack.auth` Module
==============================================================================
.. automodule:: nova..api.openstack.auth
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.openstack.backup_schedules` Module
==============================================================================
.. automodule:: nova..api.openstack.backup_schedules
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.openstack.faults` Module
==============================================================================
.. automodule:: nova..api.openstack.faults
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.openstack.flavors` Module
==============================================================================
.. automodule:: nova..api.openstack.flavors
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.openstack.images` Module
==============================================================================
.. automodule:: nova..api.openstack.images
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.openstack.servers` Module
==============================================================================
.. automodule:: nova..api.openstack.servers
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..api.openstack.sharedipgroups` Module
==============================================================================
.. automodule:: nova..api.openstack.sharedipgroups
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..auth.dbdriver` Module
==============================================================================
.. automodule:: nova..auth.dbdriver
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..auth.fakeldap` Module
==============================================================================
.. automodule:: nova..auth.fakeldap
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..auth.ldapdriver` Module
==============================================================================
.. automodule:: nova..auth.ldapdriver
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..auth.manager` Module
==============================================================================
.. automodule:: nova..auth.manager
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..auth.signer` Module
==============================================================================
.. automodule:: nova..auth.signer
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..cloudpipe.pipelib` Module
==============================================================================
.. automodule:: nova..cloudpipe.pipelib
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..compute.disk` Module
==============================================================================
.. automodule:: nova..compute.disk
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..compute.instance_types` Module
==============================================================================
.. automodule:: nova..compute.instance_types
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..compute.manager` Module
==============================================================================
.. automodule:: nova..compute.manager
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..compute.monitor` Module
==============================================================================
.. automodule:: nova..compute.monitor
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..compute.power_state` Module
==============================================================================
.. automodule:: nova..compute.power_state
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..context` Module
==============================================================================
.. automodule:: nova..context
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..crypto` Module
==============================================================================
.. automodule:: nova..crypto
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..db.api` Module
==============================================================================
.. automodule:: nova..db.api
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..db.sqlalchemy.api` Module
==============================================================================
.. automodule:: nova..db.sqlalchemy.api
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..db.sqlalchemy.models` Module
==============================================================================
.. automodule:: nova..db.sqlalchemy.models
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..db.sqlalchemy.session` Module
==============================================================================
.. automodule:: nova..db.sqlalchemy.session
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..exception` Module
==============================================================================
.. automodule:: nova..exception
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..fakerabbit` Module
==============================================================================
.. automodule:: nova..fakerabbit
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..flags` Module
==============================================================================
.. automodule:: nova..flags
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..image.service` Module
==============================================================================
.. automodule:: nova..image.service
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..manager` Module
==============================================================================
.. automodule:: nova..manager
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..network.linux_net` Module
==============================================================================
.. automodule:: nova..network.linux_net
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..network.manager` Module
==============================================================================
.. automodule:: nova..network.manager
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..objectstore.bucket` Module
==============================================================================
.. automodule:: nova..objectstore.bucket
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..objectstore.handler` Module
==============================================================================
.. automodule:: nova..objectstore.handler
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..objectstore.image` Module
==============================================================================
.. automodule:: nova..objectstore.image
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..objectstore.stored` Module
==============================================================================
.. automodule:: nova..objectstore.stored
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..process` Module
==============================================================================
.. automodule:: nova..process
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..quota` Module
==============================================================================
.. automodule:: nova..quota
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..rpc` Module
==============================================================================
.. automodule:: nova..rpc
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..scheduler.chance` Module
==============================================================================
.. automodule:: nova..scheduler.chance
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..scheduler.driver` Module
==============================================================================
.. automodule:: nova..scheduler.driver
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..scheduler.manager` Module
==============================================================================
.. automodule:: nova..scheduler.manager
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..scheduler.simple` Module
==============================================================================
.. automodule:: nova..scheduler.simple
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..server` Module
==============================================================================
.. automodule:: nova..server
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..service` Module
==============================================================================
.. automodule:: nova..service
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..test` Module
==============================================================================
.. automodule:: nova..test
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.access_unittest` Module
==============================================================================
.. automodule:: nova..tests.access_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.api.fakes` Module
==============================================================================
.. automodule:: nova..tests.api.fakes
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.api.openstack.fakes` Module
==============================================================================
.. automodule:: nova..tests.api.openstack.fakes
:members:
:undoc-members:
:show-inheritance:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.api.test_wsgi` Module
==============================================================================
.. automodule:: nova..tests.api.test_wsgi
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.api_integration` Module
==============================================================================
.. automodule:: nova..tests.api_integration
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.api_unittest` Module
==============================================================================
.. automodule:: nova..tests.api_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.auth_unittest` Module
==============================================================================
.. automodule:: nova..tests.auth_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.cloud_unittest` Module
==============================================================================
.. automodule:: nova..tests.cloud_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.compute_unittest` Module
==============================================================================
.. automodule:: nova..tests.compute_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.declare_flags` Module
==============================================================================
.. automodule:: nova..tests.declare_flags
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.fake_flags` Module
==============================================================================
.. automodule:: nova..tests.fake_flags
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.flags_unittest` Module
==============================================================================
.. automodule:: nova..tests.flags_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.network_unittest` Module
==============================================================================
.. automodule:: nova..tests.network_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.objectstore_unittest` Module
==============================================================================
.. automodule:: nova..tests.objectstore_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.process_unittest` Module
==============================================================================
.. automodule:: nova..tests.process_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.quota_unittest` Module
==============================================================================
.. automodule:: nova..tests.quota_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.real_flags` Module
==============================================================================
.. automodule:: nova..tests.real_flags
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.rpc_unittest` Module
==============================================================================
.. automodule:: nova..tests.rpc_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.runtime_flags` Module
==============================================================================
.. automodule:: nova..tests.runtime_flags
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.scheduler_unittest` Module
==============================================================================
.. automodule:: nova..tests.scheduler_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.service_unittest` Module
==============================================================================
.. automodule:: nova..tests.service_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.twistd_unittest` Module
==============================================================================
.. automodule:: nova..tests.twistd_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.validator_unittest` Module
==============================================================================
.. automodule:: nova..tests.validator_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,6 +0,0 @@
The :mod:`nova..tests.virt_unittest` Module
==============================================================================
.. automodule:: nova..tests.virt_unittest
:members:
:undoc-members:
:show-inheritance:

View File

@ -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