rather comprehensive style fixes

This commit is contained in:
andy
2010-08-16 14:16:21 +02:00
parent 56c9d8dc45
commit 02b35b0c17
16 changed files with 70 additions and 45 deletions

View File

@@ -20,6 +20,7 @@ Nova User API client library.
""" """
import base64 import base64
import boto import boto
from boto.ec2.regioninfo import RegionInfo from boto.ec2.regioninfo import RegionInfo
@@ -57,6 +58,7 @@ class UserInfo(object):
elif name == 'secretkey': elif name == 'secretkey':
self.secretkey = str(value) self.secretkey = str(value)
class UserRole(object): class UserRole(object):
""" """
Information about a Nova user's role, as parsed through SAX. Information about a Nova user's role, as parsed through SAX.
@@ -79,6 +81,7 @@ class UserRole(object):
else: else:
setattr(self, name, str(value)) setattr(self, name, str(value))
class ProjectInfo(object): class ProjectInfo(object):
""" """
Information about a Nova project, as parsed through SAX Information about a Nova project, as parsed through SAX
@@ -114,12 +117,14 @@ class ProjectInfo(object):
else: else:
setattr(self, name, str(value)) setattr(self, name, str(value))
class ProjectMember(object): class ProjectMember(object):
""" """
Information about a Nova project member, as parsed through SAX. Information about a Nova project member, as parsed through SAX.
Fields include: Fields include:
memberId memberId
""" """
def __init__(self, connection=None): def __init__(self, connection=None):
self.connection = connection self.connection = connection
self.memberId = None self.memberId = None
@@ -135,6 +140,7 @@ class ProjectMember(object):
self.memberId = value self.memberId = value
else: else:
setattr(self, name, str(value)) setattr(self, name, str(value))
class HostInfo(object): class HostInfo(object):
""" """
@@ -163,6 +169,7 @@ class HostInfo(object):
def endElement(self, name, value, connection): def endElement(self, name, value, connection):
setattr(self, name, value) setattr(self, name, value)
class NovaAdminClient(object): class NovaAdminClient(object):
def __init__(self, clc_ip='127.0.0.1', region='nova', access_key='admin', def __init__(self, clc_ip='127.0.0.1', region='nova', access_key='admin',
secret_key='admin', **kwargs): secret_key='admin', **kwargs):

View File

@@ -219,7 +219,6 @@ class FakeLDAP(object):
raise NO_SUCH_OBJECT() raise NO_SUCH_OBJECT()
return objects return objects
@property @property
def __redis_prefix(self): def __redis_prefix(self):
return 'ldap:' return 'ldap:'

View File

@@ -30,6 +30,7 @@ import sys
from nova import exception from nova import exception
from nova import flags from nova import flags
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
flags.DEFINE_string('ldap_url', 'ldap://localhost', flags.DEFINE_string('ldap_url', 'ldap://localhost',
'Point this at your ldap server') 'Point this at your ldap server')

View File

@@ -37,7 +37,6 @@ from nova.network import vpn
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
flags.DEFINE_list('allowed_roles', flags.DEFINE_list('allowed_roles',
['cloudadmin', 'itsec', 'sysadmin', 'netadmin', 'developer'], ['cloudadmin', 'itsec', 'sysadmin', 'netadmin', 'developer'],
'Allowed roles for project') 'Allowed roles for project')
@@ -52,7 +51,6 @@ flags.DEFINE_list('superuser_roles', ['cloudadmin'],
flags.DEFINE_list('global_roles', ['cloudadmin', 'itsec'], flags.DEFINE_list('global_roles', ['cloudadmin', 'itsec'],
'Roles that apply to all projects') 'Roles that apply to all projects')
flags.DEFINE_string('credentials_template', flags.DEFINE_string('credentials_template',
utils.abspath('auth/novarc.template'), utils.abspath('auth/novarc.template'),
'Template for creating users rc file') 'Template for creating users rc file')
@@ -67,15 +65,14 @@ flags.DEFINE_string('credential_cert_file', 'cert.pem',
'Filename of certificate in credentials zip') 'Filename of certificate in credentials zip')
flags.DEFINE_string('credential_rc_file', 'novarc', flags.DEFINE_string('credential_rc_file', 'novarc',
'Filename of rc in credentials zip') 'Filename of rc in credentials zip')
flags.DEFINE_string('credential_cert_subject', flags.DEFINE_string('credential_cert_subject',
'/C=US/ST=California/L=MountainView/O=AnsoLabs/' '/C=US/ST=California/L=MountainView/O=AnsoLabs/'
'OU=NovaDev/CN=%s-%s', 'OU=NovaDev/CN=%s-%s',
'Subject for certificate for users') 'Subject for certificate for users')
flags.DEFINE_string('auth_driver', 'nova.auth.ldapdriver.FakeLdapDriver', flags.DEFINE_string('auth_driver', 'nova.auth.ldapdriver.FakeLdapDriver',
'Driver that auth manager uses') 'Driver that auth manager uses')
class AuthBase(object): class AuthBase(object):
"""Base class for objects relating to auth """Base class for objects relating to auth
@@ -83,6 +80,7 @@ class AuthBase(object):
an id member. They may optionally contain methods that delegate to an id member. They may optionally contain methods that delegate to
AuthManager, but should not implement logic themselves. AuthManager, but should not implement logic themselves.
""" """
@classmethod @classmethod
def safe_id(cls, obj): def safe_id(cls, obj):
"""Safe get object id """Safe get object id
@@ -100,6 +98,7 @@ class AuthBase(object):
class User(AuthBase): class User(AuthBase):
"""Object representing a user""" """Object representing a user"""
def __init__(self, id, name, access, secret, admin): def __init__(self, id, name, access, secret, admin):
AuthBase.__init__(self) AuthBase.__init__(self)
self.id = id self.id = id
@@ -161,6 +160,7 @@ class KeyPair(AuthBase):
Even though this object is named KeyPair, only the public key and Even though this object is named KeyPair, only the public key and
fingerprint is stored. The user's private key is not saved. fingerprint is stored. The user's private key is not saved.
""" """
def __init__(self, id, name, owner_id, public_key, fingerprint): def __init__(self, id, name, owner_id, public_key, fingerprint):
AuthBase.__init__(self) AuthBase.__init__(self)
self.id = id self.id = id
@@ -179,6 +179,7 @@ class KeyPair(AuthBase):
class Project(AuthBase): class Project(AuthBase):
"""Represents a Project returned from the datastore""" """Represents a Project returned from the datastore"""
def __init__(self, id, name, project_manager_id, description, member_ids): def __init__(self, id, name, project_manager_id, description, member_ids):
AuthBase.__init__(self) AuthBase.__init__(self)
self.id = id self.id = id
@@ -227,7 +228,6 @@ class Project(AuthBase):
self.member_ids) self.member_ids)
class AuthManager(object): class AuthManager(object):
"""Manager Singleton for dealing with Users, Projects, and Keypairs """Manager Singleton for dealing with Users, Projects, and Keypairs
@@ -239,7 +239,9 @@ class AuthManager(object):
AuthManager also manages associated data related to Auth objects that AuthManager also manages associated data related to Auth objects that
need to be more accessible, such as vpn ips and ports. need to be more accessible, such as vpn ips and ports.
""" """
_instance = None _instance = None
def __new__(cls, *args, **kwargs): def __new__(cls, *args, **kwargs):
"""Returns the AuthManager singleton""" """Returns the AuthManager singleton"""
if not cls._instance: if not cls._instance:

View File

@@ -32,6 +32,7 @@ def allow(*roles):
return wrapped_f return wrapped_f
return wrap return wrap
def deny(*roles): def deny(*roles):
def wrap(f): def wrap(f):
def wrapped_f(self, context, *args, **kwargs): def wrapped_f(self, context, *args, **kwargs):
@@ -44,6 +45,7 @@ def deny(*roles):
return wrapped_f return wrapped_f
return wrap return wrap
def __matches_role(context, role): def __matches_role(context, role):
if role == 'all': if role == 'all':
return True return True

View File

@@ -48,11 +48,15 @@ import hashlib
import hmac import hmac
import logging import logging
import urllib import urllib
import boto # NOTE(vish): for new boto
import boto.utils # NOTE(vish): for old boto # NOTE(vish): for new boto
import boto
# NOTE(vish): for old boto
import boto.utils
from nova.exception import Error from nova.exception import Error
class Signer(object): class Signer(object):
""" hacked up code from boto/connection.py """ """ hacked up code from boto/connection.py """
@@ -77,7 +81,6 @@ class Signer(object):
return self._calc_signature_2(params, verb, server_string, path) return self._calc_signature_2(params, verb, server_string, path)
raise Error('Unknown Signature Version: %s' % self.SignatureVersion) raise Error('Unknown Signature Version: %s' % self.SignatureVersion)
def _get_utf8_value(self, value): def _get_utf8_value(self, value):
if not isinstance(value, str) and not isinstance(value, unicode): if not isinstance(value, str) and not isinstance(value, unicode):
value = str(value) value = str(value)
@@ -133,5 +136,6 @@ class Signer(object):
logging.debug('base64 encoded digest: %s' % b64) logging.debug('base64 encoded digest: %s' % b64)
return b64 return b64
if __name__ == '__main__': if __name__ == '__main__':
print Signer('foo').generate({"SignatureMethod": 'HmacSHA256', 'SignatureVersion': '2'}, "get", "server", "/foo") print Signer('foo').generate({"SignatureMethod": 'HmacSHA256', 'SignatureVersion': '2'}, "get", "server", "/foo")

View File

@@ -37,6 +37,7 @@ def user_dict(user, base64_file=None):
else: else:
return {} return {}
def project_dict(project): def project_dict(project):
"""Convert the project object to a result dict""" """Convert the project object to a result dict"""
if project: if project:
@@ -47,6 +48,7 @@ def project_dict(project):
else: else:
return {} return {}
def host_dict(host): def host_dict(host):
"""Convert a host model object to a result dict""" """Convert a host model object to a result dict"""
if host: if host:
@@ -54,6 +56,7 @@ def host_dict(host):
else: else:
return {} return {}
def admin_only(target): def admin_only(target):
"""Decorator for admin-only API calls""" """Decorator for admin-only API calls"""
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
@@ -66,6 +69,7 @@ def admin_only(target):
return wrapper return wrapper
class AdminController(object): class AdminController(object):
""" """
API Controller for users, hosts, nodes, and workers. API Controller for users, hosts, nodes, and workers.

View File

@@ -25,12 +25,13 @@ import logging
import multiprocessing import multiprocessing
import random import random
import re import re
import tornado.web
from twisted.internet import defer
import urllib import urllib
# TODO(termie): replace minidom with etree # TODO(termie): replace minidom with etree
from xml.dom import minidom from xml.dom import minidom
import tornado.web
from twisted.internet import defer
from nova import crypto from nova import crypto
from nova import exception from nova import exception
from nova import flags from nova import flags
@@ -43,6 +44,7 @@ from nova.endpoint import cloud
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
flags.DEFINE_integer('cc_port', 8773, 'cloud controller port') flags.DEFINE_integer('cc_port', 8773, 'cloud controller port')
_log = logging.getLogger("api") _log = logging.getLogger("api")
_log.setLevel(logging.DEBUG) _log.setLevel(logging.DEBUG)
@@ -227,6 +229,7 @@ class MetadataRequestHandler(tornado.web.RequestHandler):
self.print_data(data) self.print_data(data)
self.finish() self.finish()
class APIRequestHandler(tornado.web.RequestHandler): class APIRequestHandler(tornado.web.RequestHandler):
def get(self, controller_name): def get(self, controller_name):
self.execute(controller_name) self.execute(controller_name)

View File

@@ -26,6 +26,7 @@ import base64
import logging import logging
import os import os
import time import time
from twisted.internet import defer from twisted.internet import defer
from nova import datastore from nova import datastore
@@ -44,7 +45,6 @@ from nova.volume import service
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
flags.DEFINE_string('cloud_topic', 'cloud', 'the topic clouds listen on') flags.DEFINE_string('cloud_topic', 'cloud', 'the topic clouds listen on')
@@ -362,7 +362,6 @@ class CloudController(object):
'status': volume['attach_status'], 'status': volume['attach_status'],
'volumeId': volume_id}) 'volumeId': volume_id})
@rbac.allow('projectmanager', 'sysadmin') @rbac.allow('projectmanager', 'sysadmin')
def detach_volume(self, context, volume_id, **kwargs): def detach_volume(self, context, volume_id, **kwargs):
volume = self._get_volume(context, volume_id) volume = self._get_volume(context, volume_id)

View File

@@ -21,10 +21,11 @@ Proxy AMI-related calls from the cloud controller, to the running
objectstore daemon. objectstore daemon.
""" """
import boto.s3.connection
import json import json
import urllib import urllib
import boto.s3.connection
from nova import flags from nova import flags
from nova import utils from nova import utils
from nova.auth import manager from nova.auth import manager
@@ -32,6 +33,7 @@ from nova.auth import manager
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
def modify(context, image_id, operation): def modify(context, image_id, operation):
conn(context).make_request( conn(context).make_request(
method='POST', method='POST',
@@ -53,6 +55,7 @@ def register(context, image_location):
return image_id return image_id
def list(context, filter_list=[]): def list(context, filter_list=[]):
""" return a list of all images that a user can see """ return a list of all images that a user can see
@@ -68,6 +71,7 @@ def list(context, filter_list=[]):
return [i for i in result if i['imageId'] in filter_list] return [i for i in result if i['imageId'] in filter_list]
return result return result
def deregister(context, image_id): def deregister(context, image_id):
""" unregister an image """ """ unregister an image """
conn(context).make_request( conn(context).make_request(
@@ -75,6 +79,7 @@ def deregister(context, image_id):
bucket='_images', bucket='_images',
query_args=qs({'image_id': image_id})) query_args=qs({'image_id': image_id}))
def conn(context): def conn(context):
access = manager.AuthManager().get_access_key(context.user, access = manager.AuthManager().get_access_key(context.user,
context.project) context.project)

View File

@@ -16,12 +16,13 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
""" Based a bit on the carrot.backeds.queue backend... but a lot better """ """Based a bit on the carrot.backeds.queue backend... but a lot better."""
from carrot.backends import base
import logging import logging
import Queue as queue import Queue as queue
from carrot.backends import base
class Message(base.BaseMessage): class Message(base.BaseMessage):
pass pass

View File

@@ -175,29 +175,25 @@ DEFINE_string('network_topic', 'network', 'the topic network nodes listen on')
DEFINE_bool('verbose', False, 'show debug output') DEFINE_bool('verbose', False, 'show debug output')
DEFINE_boolean('fake_rabbit', False, 'use a fake rabbit') DEFINE_boolean('fake_rabbit', False, 'use a fake rabbit')
DEFINE_bool('fake_network', False, 'should we use fake network devices and addresses') DEFINE_bool('fake_network', False,
'should we use fake network devices and addresses')
DEFINE_string('rabbit_host', 'localhost', 'rabbit host') DEFINE_string('rabbit_host', 'localhost', 'rabbit host')
DEFINE_integer('rabbit_port', 5672, 'rabbit port') DEFINE_integer('rabbit_port', 5672, 'rabbit port')
DEFINE_string('rabbit_userid', 'guest', 'rabbit userid') DEFINE_string('rabbit_userid', 'guest', 'rabbit userid')
DEFINE_string('rabbit_password', 'guest', 'rabbit password') DEFINE_string('rabbit_password', 'guest', 'rabbit password')
DEFINE_string('rabbit_virtual_host', '/', 'rabbit virtual host') DEFINE_string('rabbit_virtual_host', '/', 'rabbit virtual host')
DEFINE_string('control_exchange', 'nova', 'the main exchange to connect to') DEFINE_string('control_exchange', 'nova', 'the main exchange to connect to')
DEFINE_string('ec2_url', DEFINE_string('ec2_url', 'http://127.0.0.1:8773/services/Cloud',
'http://127.0.0.1:8773/services/Cloud', 'Url to ec2 api server')
'Url to ec2 api server')
DEFINE_string('default_image', DEFINE_string('default_image', 'ami-11111',
'ami-11111', 'default image to use, testing only')
'default image to use, testing only') DEFINE_string('default_kernel', 'aki-11111',
DEFINE_string('default_kernel', 'default kernel to use, testing only')
'aki-11111', DEFINE_string('default_ramdisk', 'ari-11111',
'default kernel to use, testing only') 'default ramdisk to use, testing only')
DEFINE_string('default_ramdisk', DEFINE_string('default_instance_type', 'm1.small',
'ari-11111', 'default instance type to use, testing only')
'default ramdisk to use, testing only')
DEFINE_string('default_instance_type',
'm1.small',
'default instance type to use, testing only')
DEFINE_string('vpn_image_id', 'ami-CLOUDPIPE', 'AMI for cloudpipe vpn server') DEFINE_string('vpn_image_id', 'ami-CLOUDPIPE', 'AMI for cloudpipe vpn server')
DEFINE_string('vpn_key_suffix', DEFINE_string('vpn_key_suffix',
@@ -207,10 +203,8 @@ DEFINE_string('vpn_key_suffix',
DEFINE_integer('auth_token_ttl', 3600, 'Seconds for auth tokens to linger') DEFINE_integer('auth_token_ttl', 3600, 'Seconds for auth tokens to linger')
# UNUSED # UNUSED
DEFINE_string('node_availability_zone', DEFINE_string('node_availability_zone', 'nova',
'nova', 'availability zone of this node')
'availability zone of this node') DEFINE_string('node_name', socket.gethostname(),
DEFINE_string('node_name', 'name of this node')
socket.gethostname(),
'name of this node')

View File

@@ -23,6 +23,7 @@ Process pool, still buggy right now.
import logging import logging
import multiprocessing import multiprocessing
import StringIO import StringIO
from twisted.internet import defer from twisted.internet import defer
from twisted.internet import error from twisted.internet import error
from twisted.internet import process from twisted.internet import process
@@ -205,6 +206,7 @@ class ProcessPool(object):
self._pool.release() self._pool.release()
return rv return rv
class SharedPool(object): class SharedPool(object):
_instance = None _instance = None
def __init__(self): def __init__(self):
@@ -213,5 +215,6 @@ class SharedPool(object):
def __getattr__(self, key): def __getattr__(self, key):
return getattr(self._instance, key) return getattr(self._instance, key)
def simple_execute(cmd, **kwargs): def simple_execute(cmd, **kwargs):
return SharedPool().simple_execute(cmd, **kwargs) return SharedPool().simple_execute(cmd, **kwargs)

View File

@@ -21,12 +21,13 @@ AMQP-based RPC. Queues have consumers and publishers.
No fan-out support yet. No fan-out support yet.
""" """
from carrot import connection as carrot_connection
from carrot import messaging
import json import json
import logging import logging
import sys import sys
import uuid import uuid
from carrot import connection as carrot_connection
from carrot import messaging
from twisted.internet import defer from twisted.internet import defer
from twisted.internet import task from twisted.internet import task

View File

@@ -57,6 +57,7 @@ def rangetest(**argchecks): # validate ranges for both+defaults
return onCall return onCall
return onDecorator return onDecorator
def typetest(**argchecks): def typetest(**argchecks):
def onDecorator(func): def onDecorator(func):
import sys import sys

View File

@@ -38,11 +38,11 @@ Due to our use of multiprocessing it we frequently get some ignorable
'Interrupted system call' exceptions after test completion. 'Interrupted system call' exceptions after test completion.
""" """
import __main__ import __main__
import os import os
import sys import sys
from twisted.scripts import trial as trial_script from twisted.scripts import trial as trial_script
from nova import datastore from nova import datastore
@@ -65,13 +65,12 @@ from nova.tests.volume_unittest import *
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
flags.DEFINE_bool('flush_db', True, flags.DEFINE_bool('flush_db', True,
'Flush the database before running fake tests') 'Flush the database before running fake tests')
flags.DEFINE_string('tests_stderr', 'run_tests.err.log', flags.DEFINE_string('tests_stderr', 'run_tests.err.log',
'Path to where to pipe STDERR during test runs. ' 'Path to where to pipe STDERR during test runs.'
'Default = "run_tests.err.log"') ' Default = "run_tests.err.log"')
if __name__ == '__main__': if __name__ == '__main__':
OptionsClass = twistd.WrapTwistedOptions(trial_script.Options) OptionsClass = twistd.WrapTwistedOptions(trial_script.Options)