summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
Diffstat (limited to 'nova')
-rw-r--r--nova/adminclient.py16
-rw-r--r--nova/api/__init__.py1
-rw-r--r--nova/compute/monitor.py4
-rw-r--r--nova/flags.py2
-rw-r--r--nova/server.py4
-rw-r--r--nova/tests/misc_unittest.py48
-rw-r--r--nova/twistd.py4
-rw-r--r--nova/utils.py18
8 files changed, 89 insertions, 8 deletions
diff --git a/nova/adminclient.py b/nova/adminclient.py
index af55197fc..5a62cce7d 100644
--- a/nova/adminclient.py
+++ b/nova/adminclient.py
@@ -22,13 +22,15 @@ Nova User API client library.
import base64
import boto
import httplib
+
+from nova import flags
from boto.ec2.regioninfo import RegionInfo
+FLAGS = flags.FLAGS
+
DEFAULT_CLC_URL = 'http://127.0.0.1:8773'
DEFAULT_REGION = 'nova'
-DEFAULT_ACCESS_KEY = 'admin'
-DEFAULT_SECRET_KEY = 'admin'
class UserInfo(object):
@@ -192,9 +194,13 @@ class HostInfo(object):
class NovaAdminClient(object):
- def __init__(self, clc_url=DEFAULT_CLC_URL, region=DEFAULT_REGION,
- access_key=DEFAULT_ACCESS_KEY, secret_key=DEFAULT_SECRET_KEY,
- **kwargs):
+ def __init__(
+ self,
+ clc_url=DEFAULT_CLC_URL,
+ region=DEFAULT_REGION,
+ access_key=FLAGS.aws_access_key_id,
+ secret_key=FLAGS.aws_secret_access_key,
+ **kwargs):
parts = self.split_clc_url(clc_url)
self.clc_url = clc_url
diff --git a/nova/api/__init__.py b/nova/api/__init__.py
index 7e75445a8..80f9f2109 100644
--- a/nova/api/__init__.py
+++ b/nova/api/__init__.py
@@ -22,7 +22,6 @@ Root WSGI middleware for all API controllers.
:osapi_subdomain: subdomain running the OpenStack API (default: api)
:ec2api_subdomain: subdomain running the EC2 API (default: ec2)
-:FAKE_subdomain: set to 'api' or 'ec2', requests default to that endpoint
"""
diff --git a/nova/compute/monitor.py b/nova/compute/monitor.py
index d0154600f..ce45b14f6 100644
--- a/nova/compute/monitor.py
+++ b/nova/compute/monitor.py
@@ -211,8 +211,8 @@ def store_graph(instance_id, filename):
# the response we can make our own client that does the actual
# request and hands it off to the response parser.
s3 = boto.s3.connection.S3Connection(
- aws_access_key_id='admin',
- aws_secret_access_key='admin',
+ aws_access_key_id=FLAGS.aws_access_key_id,
+ aws_secret_access_key=FLAGS.aws_secret_access_key,
is_secure=False,
calling_format=boto.s3.connection.OrdinaryCallingFormat(),
port=FLAGS.s3_port,
diff --git a/nova/flags.py b/nova/flags.py
index 121b9ca25..f7ae26050 100644
--- a/nova/flags.py
+++ b/nova/flags.py
@@ -179,6 +179,8 @@ DEFINE_list('region_list',
[],
'list of region=url pairs separated by commas')
DEFINE_string('connection_type', 'libvirt', 'libvirt, xenapi or fake')
+DEFINE_string('aws_access_key_id', 'admin', 'AWS Access ID')
+DEFINE_string('aws_secret_access_key', 'admin', 'AWS Access Key')
DEFINE_integer('s3_port', 3333, 's3 port')
DEFINE_string('s3_host', '127.0.0.1', 's3 host')
DEFINE_string('compute_topic', 'compute', 'the topic compute nodes listen on')
diff --git a/nova/server.py b/nova/server.py
index cb424caa1..a0ee54681 100644
--- a/nova/server.py
+++ b/nova/server.py
@@ -42,6 +42,8 @@ flags.DEFINE_bool('daemonize', False, 'daemonize this process')
# clutter.
flags.DEFINE_bool('use_syslog', True, 'output to syslog when daemonizing')
flags.DEFINE_string('logfile', None, 'log file to output to')
+flags.DEFINE_string('logdir', None, 'directory to keep log files in '
+ '(will be prepended to $logfile)')
flags.DEFINE_string('pidfile', None, 'pid file to output to')
flags.DEFINE_string('working_directory', './', 'working directory...')
flags.DEFINE_integer('uid', os.getuid(), 'uid under which to run')
@@ -119,6 +121,8 @@ def daemonize(args, name, main):
else:
if not FLAGS.logfile:
FLAGS.logfile = '%s.log' % name
+ if FLAGS.logdir:
+ FLAGS.logfile = os.path.join(FLAGS.logdir, FLAGS.logfile)
logfile = logging.FileHandler(FLAGS.logfile)
logfile.setFormatter(formatter)
logger.addHandler(logfile)
diff --git a/nova/tests/misc_unittest.py b/nova/tests/misc_unittest.py
new file mode 100644
index 000000000..856060afa
--- /dev/null
+++ b/nova/tests/misc_unittest.py
@@ -0,0 +1,48 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC
+#
+# 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 os
+import subprocess
+
+from nova import test
+from nova.utils import parse_mailmap, str_dict_replace
+
+
+class ProjectTestCase(test.TrialTestCase):
+ def test_authors_up_to_date(self):
+ if os.path.exists('../.bzr'):
+ log_cmd = subprocess.Popen(["bzr", "log", "-n0"],
+ stdout=subprocess.PIPE)
+ changelog = log_cmd.communicate()[0]
+ mailmap = parse_mailmap('../.mailmap')
+
+ contributors = set()
+ for l in changelog.split('\n'):
+ l = l.strip()
+ if (l.startswith('author:') or l.startswith('committer:')
+ and not l == 'committer: Tarmac'):
+ email = l.split(' ')[-1]
+ contributors.add(str_dict_replace(email, mailmap))
+
+ authors_file = open('../Authors', 'r').read()
+
+ missing = set()
+ for contributor in contributors:
+ if not contributor in authors_file:
+ missing.add(contributor)
+
+ self.assertTrue(len(missing) == 0,
+ '%r not listed in Authors' % missing)
diff --git a/nova/twistd.py b/nova/twistd.py
index 3ec0ff61e..cb5648ce6 100644
--- a/nova/twistd.py
+++ b/nova/twistd.py
@@ -43,6 +43,8 @@ else:
FLAGS = flags.FLAGS
+flags.DEFINE_string('logdir', None, 'directory to keep log files in '
+ '(will be prepended to $logfile)')
class TwistdServerOptions(ServerOptions):
@@ -246,6 +248,8 @@ def serve(filename):
FLAGS.logfile = '%s.log' % name
elif FLAGS.logfile.endswith('twistd.log'):
FLAGS.logfile = FLAGS.logfile.replace('twistd.log', '%s.log' % name)
+ if FLAGS.logdir:
+ FLAGS.logfile = os.path.join(FLAGS.logdir, FLAGS.logfile)
if not FLAGS.prefix:
FLAGS.prefix = name
elif FLAGS.prefix.endswith('twisted'):
diff --git a/nova/utils.py b/nova/utils.py
index 2970b93bb..142584df8 100644
--- a/nova/utils.py
+++ b/nova/utils.py
@@ -175,6 +175,24 @@ def parse_isotime(timestr):
return datetime.datetime.strptime(timestr, TIME_FORMAT)
+def parse_mailmap(mailmap='.mailmap'):
+ mapping = {}
+ if os.path.exists(mailmap):
+ fp = open(mailmap, 'r')
+ for l in fp:
+ l = l.strip()
+ if not l.startswith('#') and ' ' in l:
+ canonical_email, alias = l.split(' ')
+ mapping[alias] = canonical_email
+ return mapping
+
+
+def str_dict_replace(s, mapping):
+ for s1, s2 in mapping.iteritems():
+ s = s.replace(s1, s2)
+ return s
+
+
class LazyPluggable(object):
"""A pluggable backend loaded lazily based on some value."""