summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArmando Migliaccio <armando.migliaccio@citrix.com>2010-11-30 19:08:06 +0000
committerArmando Migliaccio <armando.migliaccio@citrix.com>2010-11-30 19:08:06 +0000
commitbf050bf0090c972a32b57ef7724c73627fcd04c7 (patch)
tree0395916810e199a789875c1463b66a57e4eb931f
parent40de074f44059f89caa15420a7174f63c76eec48 (diff)
parent689a06fdd47c84271512ec2913f2216b5fc1b341 (diff)
brought latest changes from trunk
-rwxr-xr-xcontrib/nova.sh20
-rw-r--r--nova/api/openstack/faults.py2
-rw-r--r--nova/compute/manager.py2
-rw-r--r--nova/compute/monitor.py2
-rw-r--r--nova/crypto.py4
-rw-r--r--nova/flags.py33
-rw-r--r--nova/network/linux_net.py2
-rw-r--r--nova/objectstore/bucket.py2
-rw-r--r--nova/objectstore/image.py4
-rw-r--r--nova/tests/api/openstack/test_api.py8
10 files changed, 52 insertions, 27 deletions
diff --git a/contrib/nova.sh b/contrib/nova.sh
index 6033c9e3a..7407422b3 100755
--- a/contrib/nova.sh
+++ b/contrib/nova.sh
@@ -23,7 +23,7 @@ MYSQL_PASS=${MYSQL_PASS:-nova}
TEST=${TEST:-0}
USE_LDAP=${USE_LDAP:-0}
LIBVIRT_TYPE=${LIBVIRT_TYPE:-qemu}
-NET_MAN=${NET_MAN:-FlatDHCPManager}
+NET_MAN=${NET_MAN:-VlanManager}
# NOTE(vish): If you are using FlatDHCP on multiple hosts, set the interface
# below but make sure that the interface doesn't already have an
# ip or you risk breaking things.
@@ -42,10 +42,10 @@ else
fi
mkdir -p /etc/nova
-cat >/etc/nova/nova-manage.conf << NOVA_CONF_EOF
+cat >$NOVA_DIR/bin/nova.conf << NOVA_CONF_EOF
--verbose
--nodaemon
---dhcpbridge_flagfile=/etc/nova/nova-manage.conf
+--dhcpbridge_flagfile=$NOVA_DIR/bin/nova.conf
--FAKE_subdomain=ec2
--network_manager=nova.network.manager.$NET_MAN
--cc_host=$HOST_IP
@@ -56,7 +56,7 @@ cat >/etc/nova/nova-manage.conf << NOVA_CONF_EOF
NOVA_CONF_EOF
if [ -n "$FLAT_INTERFACE" ]; then
- echo "--flat_interface=$FLAT_INTERFACE" >>/etc/nova/nova-manage.conf
+ echo "--flat_interface=$FLAT_INTERFACE" >>$NOVA_DIR/bin/nova.conf
fi
if [ "$CMD" == "branch" ]; then
@@ -142,12 +142,12 @@ if [ "$CMD" == "run" ]; then
# nova api crashes if we start it with a regular screen command,
# so send the start command by forcing text into the window.
- screen_it api "$NOVA_DIR/bin/nova-api --flagfile=/etc/nova/nova-manage.conf"
- screen_it objectstore "$NOVA_DIR/bin/nova-objectstore --flagfile=/etc/nova/nova-manage.conf"
- screen_it compute "$NOVA_DIR/bin/nova-compute --flagfile=/etc/nova/nova-manage.conf"
- screen_it network "$NOVA_DIR/bin/nova-network --flagfile=/etc/nova/nova-manage.conf"
- screen_it scheduler "$NOVA_DIR/bin/nova-scheduler --flagfile=/etc/nova/nova-manage.conf"
- screen_it volume "$NOVA_DIR/bin/nova-volume --flagfile=/etc/nova/nova-manage.conf"
+ screen_it api "$NOVA_DIR/bin/nova-api"
+ screen_it objectstore "$NOVA_DIR/bin/nova-objectstore"
+ screen_it compute "$NOVA_DIR/bin/nova-compute"
+ screen_it network "$NOVA_DIR/bin/nova-network"
+ screen_it scheduler "$NOVA_DIR/bin/nova-scheduler"
+ screen_it volume "$NOVA_DIR/bin/nova-volume"
screen_it test ". $NOVA_DIR/novarc"
screen -S nova -x
fi
diff --git a/nova/api/openstack/faults.py b/nova/api/openstack/faults.py
index e69e51439..224a7ef0b 100644
--- a/nova/api/openstack/faults.py
+++ b/nova/api/openstack/faults.py
@@ -47,7 +47,7 @@ class Fault(webob.exc.HTTPException):
"""Generate a WSGI response based on the exception passed to ctor."""
# Replace the body with fault details.
code = self.wrapped_exc.status_int
- fault_name = self._fault_names.get(code, "cloudServersFault")
+ fault_name = self._fault_names.get(code, "computeFault")
fault_data = {
fault_name: {
'code': code,
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index 890d79fba..50a9d316b 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -47,7 +47,7 @@ from nova.compute import power_state
FLAGS = flags.FLAGS
-flags.DEFINE_string('instances_path', utils.abspath('../instances'),
+flags.DEFINE_string('instances_path', '$state_path/instances',
'where instances are stored on disk')
flags.DEFINE_string('compute_driver', 'nova.virt.connection.get_connection',
'Driver to use for volume creation')
diff --git a/nova/compute/monitor.py b/nova/compute/monitor.py
index ce45b14f6..22653113a 100644
--- a/nova/compute/monitor.py
+++ b/nova/compute/monitor.py
@@ -46,7 +46,7 @@ flags.DEFINE_integer('monitoring_instances_delay', 5,
'Sleep time between updates')
flags.DEFINE_integer('monitoring_instances_step', 300,
'Interval of RRD updates')
-flags.DEFINE_string('monitoring_rrd_path', '/var/nova/monitor/instances',
+flags.DEFINE_string('monitoring_rrd_path', '$state_path/monitor/instances',
'Location of RRD files')
diff --git a/nova/crypto.py b/nova/crypto.py
index d73559587..aacc50b17 100644
--- a/nova/crypto.py
+++ b/nova/crypto.py
@@ -40,9 +40,9 @@ from nova import flags
FLAGS = flags.FLAGS
flags.DEFINE_string('ca_file', 'cacert.pem', 'Filename of root CA')
-flags.DEFINE_string('keys_path', utils.abspath('../keys'),
+flags.DEFINE_string('keys_path', '$state_path/keys',
'Where we keep our keys')
-flags.DEFINE_string('ca_path', utils.abspath('../CA'),
+flags.DEFINE_string('ca_path', '$state_path/CA',
'Where we keep our root CA')
flags.DEFINE_boolean('use_intermediate_ca', False,
'Should we use intermediate CAs for each project?')
diff --git a/nova/flags.py b/nova/flags.py
index f7ae26050..cb9fa105b 100644
--- a/nova/flags.py
+++ b/nova/flags.py
@@ -24,6 +24,7 @@ where they're used.
import getopt
import os
import socket
+import string
import sys
import gflags
@@ -38,11 +39,12 @@ class FlagValues(gflags.FlagValues):
"""
- def __init__(self):
+ def __init__(self, extra_context=None):
gflags.FlagValues.__init__(self)
self.__dict__['__dirty'] = []
self.__dict__['__was_already_parsed'] = False
self.__dict__['__stored_argv'] = []
+ self.__dict__['__extra_context'] = extra_context
def __call__(self, argv):
# We're doing some hacky stuff here so that we don't have to copy
@@ -112,7 +114,7 @@ class FlagValues(gflags.FlagValues):
def ParseNewFlags(self):
if '__stored_argv' not in self.__dict__:
return
- new_flags = FlagValues()
+ new_flags = FlagValues(self)
for k in self.__dict__['__dirty']:
new_flags[k] = gflags.FlagValues.__getitem__(self, k)
@@ -134,9 +136,29 @@ class FlagValues(gflags.FlagValues):
def __getattr__(self, name):
if self.IsDirty(name):
self.ParseNewFlags()
- return gflags.FlagValues.__getattr__(self, name)
+ val = gflags.FlagValues.__getattr__(self, name)
+ if type(val) is str:
+ tmpl = string.Template(val)
+ context = [self, self.__dict__['__extra_context']]
+ return tmpl.substitute(StrWrapper(context))
+ return val
+class StrWrapper(object):
+ """Wrapper around FlagValues objects
+
+ Wraps FlagValues objects for string.Template so that we're
+ sure to return strings."""
+ def __init__(self, context_objs):
+ self.context_objs = context_objs
+
+ def __getitem__(self, name):
+ for context in self.context_objs:
+ val = getattr(context, name, False)
+ if val:
+ return str(val)
+ raise KeyError(name)
+
FLAGS = FlagValues()
gflags.FLAGS = FLAGS
gflags.DEFINE_flag(gflags.HelpFlag(), FLAGS)
@@ -222,8 +244,11 @@ DEFINE_string('vpn_key_suffix',
DEFINE_integer('auth_token_ttl', 3600, 'Seconds for auth tokens to linger')
+DEFINE_string('state_path', os.path.join(os.path.dirname(__file__), '../'),
+ "Top-level directory for maintaining nova's state")
+
DEFINE_string('sql_connection',
- 'sqlite:///%s/nova.sqlite' % os.path.abspath("./"),
+ 'sqlite:///$state_path/nova.sqlite',
'connection string for sql database')
DEFINE_string('compute_manager', 'nova.compute.manager.ComputeManager',
diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py
index 391abfb76..7b00e65d4 100644
--- a/nova/network/linux_net.py
+++ b/nova/network/linux_net.py
@@ -38,7 +38,7 @@ flags.DEFINE_string('dhcpbridge_flagfile',
'/etc/nova/nova-dhcpbridge.conf',
'location of flagfile for dhcpbridge')
-flags.DEFINE_string('networks_path', utils.abspath('../networks'),
+flags.DEFINE_string('networks_path', '$state_path/networks',
'Location to keep network config files')
flags.DEFINE_string('public_interface', 'vlan1',
'Interface for public IP addresses')
diff --git a/nova/objectstore/bucket.py b/nova/objectstore/bucket.py
index 697982538..82767e52f 100644
--- a/nova/objectstore/bucket.py
+++ b/nova/objectstore/bucket.py
@@ -33,7 +33,7 @@ from nova.objectstore import stored
FLAGS = flags.FLAGS
-flags.DEFINE_string('buckets_path', utils.abspath('../buckets'),
+flags.DEFINE_string('buckets_path', '$state_path/buckets',
'path to s3 buckets')
diff --git a/nova/objectstore/image.py b/nova/objectstore/image.py
index 4554444fa..7292dbab8 100644
--- a/nova/objectstore/image.py
+++ b/nova/objectstore/image.py
@@ -39,8 +39,8 @@ from nova.objectstore import bucket
FLAGS = flags.FLAGS
-flags.DEFINE_string('images_path', utils.abspath('../images'),
- 'path to decrypted images')
+flags.DEFINE_string('images_path', '$state_path/images',
+ 'path to decrypted images')
class Image(object):
diff --git a/nova/tests/api/openstack/test_api.py b/nova/tests/api/openstack/test_api.py
index dd83991b9..d8b202e21 100644
--- a/nova/tests/api/openstack/test_api.py
+++ b/nova/tests/api/openstack/test_api.py
@@ -50,12 +50,12 @@ class APITest(unittest.TestCase):
api.application = succeed
resp = Request.blank('/').get_response(api)
- self.assertFalse('cloudServersFault' in resp.body, resp.body)
+ self.assertFalse('computeFault' in resp.body, resp.body)
self.assertEqual(resp.status_int, 200, resp.body)
api.application = raise_webob_exc
resp = Request.blank('/').get_response(api)
- self.assertFalse('cloudServersFault' in resp.body, resp.body)
+ self.assertFalse('computeFault' in resp.body, resp.body)
self.assertEqual(resp.status_int, 404, resp.body)
api.application = raise_api_fault
@@ -65,10 +65,10 @@ class APITest(unittest.TestCase):
api.application = fail
resp = Request.blank('/').get_response(api)
- self.assertTrue('{"cloudServersFault' in resp.body, resp.body)
+ self.assertTrue('{"computeFault' in resp.body, resp.body)
self.assertEqual(resp.status_int, 500, resp.body)
api.application = fail
resp = Request.blank('/.xml').get_response(api)
- self.assertTrue('<cloudServersFault' in resp.body, resp.body)
+ self.assertTrue('<computeFault' in resp.body, resp.body)
self.assertEqual(resp.status_int, 500, resp.body)