These fixes are the result of trolling the pylint violations here

https://jenkins.openstack.org/job/nova-pylint-errors/violations/
This commit is contained in:
Matthew Hooker 2011-08-10 14:53:53 +00:00 committed by Tarmac
commit 651ff37524
28 changed files with 115 additions and 162 deletions

View File

@ -1,110 +0,0 @@
#!/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.
"""
Download images from Canonical Image Store
"""
import gettext
import json
import os
import tempfile
import shutil
import subprocess
import sys
import urllib2
# 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 utils
from nova.objectstore import image
FLAGS = flags.FLAGS
API_URL = 'https://imagestore.canonical.com/api/dashboard'
def get_images():
"""Get a list of the images from the imagestore URL."""
images = json.load(urllib2.urlopen(API_URL))['images']
images = [img for img in images if img['title'].find('amd64') > -1]
return images
def download(img):
"""Download an image to the local filesystem."""
# FIXME(ja): add checksum/signature checks
tempdir = tempfile.mkdtemp(prefix='cis-')
kernel_id = None
ramdisk_id = None
for f in img['files']:
if f['kind'] == 'kernel':
dest = os.path.join(tempdir, 'kernel')
subprocess.call(['curl', '--fail', f['url'], '-o', dest])
kernel_id = image.Image.add(dest,
description='kernel/' + img['title'], kernel=True)
for f in img['files']:
if f['kind'] == 'ramdisk':
dest = os.path.join(tempdir, 'ramdisk')
subprocess.call(['curl', '--fail', f['url'], '-o', dest])
ramdisk_id = image.Image.add(dest,
description='ramdisk/' + img['title'], ramdisk=True)
for f in img['files']:
if f['kind'] == 'image':
dest = os.path.join(tempdir, 'image')
subprocess.call(['curl', '--fail', f['url'], '-o', dest])
ramdisk_id = image.Image.add(dest,
description=img['title'], kernel=kernel_id, ramdisk=ramdisk_id)
shutil.rmtree(tempdir)
def main():
"""Main entry point."""
utils.default_flagfile()
argv = FLAGS(sys.argv)
logging.setup()
images = get_images()
if len(argv) == 2:
for img in images:
if argv[1] == 'all' or argv[1] == img['title']:
download(img)
else:
print 'usage: %s (title|all)'
print 'available images:'
for img in images:
print img['title']
if __name__ == '__main__':
main()

View File

@ -85,7 +85,10 @@ class APIRouter(base_wsgi.Router):
self._setup_routes(mapper)
super(APIRouter, self).__init__(mapper)
def _setup_routes(self, mapper, version):
def _setup_routes(self, mapper):
raise NotImplementedError(_("You must implement _setup_routes."))
def _setup_base_routes(self, mapper, version):
"""Routes common to all versions."""
server_members = self.server_members
@ -156,7 +159,7 @@ class APIRouterV10(APIRouter):
"""Define routes specific to OpenStack API V1.0."""
def _setup_routes(self, mapper):
super(APIRouterV10, self)._setup_routes(mapper, '1.0')
self._setup_base_routes(mapper, '1.0')
mapper.resource("shared_ip_group", "shared_ip_groups",
collection={'detail': 'GET'},
@ -172,7 +175,7 @@ class APIRouterV11(APIRouter):
"""Define routes specific to OpenStack API V1.1."""
def _setup_routes(self, mapper):
super(APIRouterV11, self)._setup_routes(mapper, '1.1')
self._setup_base_routes(mapper, '1.1')
image_metadata_controller = image_metadata.create_resource()

View File

@ -102,7 +102,7 @@ class FloatingIPController(object):
def delete(self, req, id):
context = req.environ['nova.context']
ip = self.network_api.get_floating_ip(context, id)
if 'fixed_ip' in ip:
try:
self.disassociate(req, id, '')

View File

@ -14,8 +14,6 @@
# under the License.
import base64
import re
import webob
from webob import exc
from xml.dom import minidom

View File

@ -461,7 +461,11 @@ class ResourceExtension(object):
"""Add top level resources to the OpenStack API in nova."""
def __init__(self, collection, controller, parent=None,
collection_actions={}, member_actions={}):
collection_actions=None, member_actions=None):
if not collection_actions:
collection_actions = {}
if not member_actions:
member_actions = {}
self.collection = collection
self.controller = controller
self.parent = parent

View File

@ -122,8 +122,10 @@ class API(base.Base):
if len(content) > content_limit:
raise quota.QuotaError(code="OnsetFileContentLimitExceeded")
def _check_metadata_properties_quota(self, context, metadata={}):
def _check_metadata_properties_quota(self, context, metadata=None):
"""Enforce quota limits on metadata properties."""
if not metadata:
metadata = {}
num_metadata = len(metadata)
quota_metadata = quota.allowed_metadata_items(context, num_metadata)
if quota_metadata < num_metadata:
@ -149,7 +151,7 @@ class API(base.Base):
min_count=None, max_count=None,
display_name='', display_description='',
key_name=None, key_data=None, security_group='default',
availability_zone=None, user_data=None, metadata={},
availability_zone=None, user_data=None, metadata=None,
injected_files=None, admin_password=None, zone_blob=None,
reservation_id=None):
"""Verify all the input parameters regardless of the provisioning
@ -161,6 +163,8 @@ class API(base.Base):
min_count = 1
if not max_count:
max_count = min_count
if not metadata:
metadata = {}
num_instances = quota.allowed_instances(context, max_count,
instance_type)
@ -436,12 +440,16 @@ class API(base.Base):
min_count=None, max_count=None,
display_name='', display_description='',
key_name=None, key_data=None, security_group='default',
availability_zone=None, user_data=None, metadata={},
availability_zone=None, user_data=None, metadata=None,
injected_files=None, admin_password=None, zone_blob=None,
reservation_id=None, block_device_mapping=None):
"""Provision the instances by passing the whole request to
the Scheduler for execution. Returns a Reservation ID
related to the creation of all of these instances."""
if not metadata:
metadata = {}
num_instances, base_options, image = self._check_create_parameters(
context, instance_type,
image_href, kernel_id, ramdisk_id,
@ -466,7 +474,7 @@ class API(base.Base):
min_count=None, max_count=None,
display_name='', display_description='',
key_name=None, key_data=None, security_group='default',
availability_zone=None, user_data=None, metadata={},
availability_zone=None, user_data=None, metadata=None,
injected_files=None, admin_password=None, zone_blob=None,
reservation_id=None, block_device_mapping=None):
"""
@ -481,6 +489,9 @@ class API(base.Base):
Returns a list of instance dicts.
"""
if not metadata:
metadata = {}
num_instances, base_options, image = self._check_create_parameters(
context, instance_type,
image_href, kernel_id, ramdisk_id,

View File

@ -3348,8 +3348,6 @@ def instance_metadata_update(context, instance_id, metadata, delete):
try:
meta_ref = instance_metadata_get_item(context, instance_id,
meta_key, session)
# if the item doesn't exist, we also need to set key and instance_id
except exception.InstanceMetadataNotFound, e:
meta_ref = models.InstanceMetadata()
item.update({"key": meta_key, "instance_id": instance_id})
@ -3447,6 +3445,7 @@ def instance_type_extra_specs_delete(context, instance_type_id, key):
@require_context
def instance_type_extra_specs_get_item(context, instance_type_id, key,
session=None):
if not session:
session = get_session()
@ -3470,10 +3469,8 @@ def instance_type_extra_specs_update_or_create(context, instance_type_id,
spec_ref = None
for key, value in specs.iteritems():
try:
spec_ref = instance_type_extra_specs_get_item(context,
instance_type_id,
key,
session)
spec_ref = instance_type_extra_specs_get_item(
context, instance_type_id, key, session)
except exception.InstanceTypeExtraSpecsNotFound, e:
spec_ref = models.InstanceTypeExtraSpecs()
spec_ref.update({"key": key, "value": value,

View File

@ -155,7 +155,10 @@ class BaseRequestHandler(object):
self.finish('<?xml version="1.0" encoding="UTF-8"?>\n' +
''.join(parts))
def _render_parts(self, value, parts=[]):
def _render_parts(self, value, parts=None):
if not parts:
parts = []
if isinstance(value, basestring):
parts.append(utils.xhtml_escape(value))
elif isinstance(value, int) or isinstance(value, long):

View File

@ -96,7 +96,8 @@ class LeastCostScheduler(zone_aware_scheduler.ZoneAwareScheduler):
cost_fn_str=cost_fn_str)
try:
weight = getattr(FLAGS, "%s_weight" % cost_fn.__name__)
flag_name = "%s_weight" % cost_fn.__name__
weight = getattr(FLAGS, flag_name)
except AttributeError:
raise exception.SchedulerWeightFlagNotFound(
flag_name=flag_name)

View File

@ -69,8 +69,10 @@ class SchedulerManager(manager.Manager):
return self.zone_manager.get_zone_capabilities(context)
def update_service_capabilities(self, context=None, service_name=None,
host=None, capabilities={}):
host=None, capabilities=None):
"""Process a capability update from a service node."""
if not capability:
capability = {}
self.zone_manager.update_service_capabilities(service_name,
host, capabilities)

View File

@ -266,8 +266,8 @@ class ZoneAwareScheduler(driver.Scheduler):
"""
if topic != "compute":
raise NotImplemented(_("Zone Aware Scheduler only understands "
"Compute nodes (for now)"))
raise NotImplementedError(_("Zone Aware Scheduler only understands"
" Compute nodes (for now)"))
num_instances = request_spec.get('num_instances', 1)
instance_type = request_spec['instance_type']

View File

@ -819,12 +819,15 @@ class FakeHttplibConnection(object):
self.app = app
self.host = host
def request(self, method, path, body="", headers={}):
def request(self, method, path, body="", headers=None):
"""
Requests made via this connection actually get translated and routed
into our WSGI app, we then wait for the response and turn it back into
an `httplib.HTTPResponse`.
"""
if not headers:
headers = {}
req = webob.Request.blank(path)
req.method = method
req.headers = headers

View File

@ -303,7 +303,7 @@ class SimpleDriverTestCase(test.TestCase):
db.compute_node_create(self.context, dic)
return db.service_get(self.context, s_ref['id'])
def test_doesnt_report_disabled_hosts_as_up(self):
def test_doesnt_report_disabled_hosts_as_up_no_queue(self):
"""Ensures driver doesn't find hosts before they are enabled"""
# NOTE(vish): constructing service without create method
# because we are going to use it without queue
@ -326,7 +326,7 @@ class SimpleDriverTestCase(test.TestCase):
compute1.kill()
compute2.kill()
def test_reports_enabled_hosts_as_up(self):
def test_reports_enabled_hosts_as_up_no_queue(self):
"""Ensures driver can find the hosts that are up"""
# NOTE(vish): constructing service without create method
# because we are going to use it without queue
@ -345,7 +345,7 @@ class SimpleDriverTestCase(test.TestCase):
compute1.kill()
compute2.kill()
def test_least_busy_host_gets_instance(self):
def test_least_busy_host_gets_instance_no_queue(self):
"""Ensures the host with less cores gets the next one"""
compute1 = service.Service('host1',
'nova-compute',
@ -368,7 +368,7 @@ class SimpleDriverTestCase(test.TestCase):
compute1.kill()
compute2.kill()
def test_specific_host_gets_instance(self):
def test_specific_host_gets_instance_no_queue(self):
"""Ensures if you set availability_zone it launches on that zone"""
compute1 = service.Service('host1',
'nova-compute',
@ -391,7 +391,7 @@ class SimpleDriverTestCase(test.TestCase):
compute1.kill()
compute2.kill()
def test_wont_sechedule_if_specified_host_is_down(self):
def test_wont_sechedule_if_specified_host_is_down_no_queue(self):
compute1 = service.Service('host1',
'nova-compute',
'compute',
@ -410,7 +410,7 @@ class SimpleDriverTestCase(test.TestCase):
db.instance_destroy(self.context, instance_id2)
compute1.kill()
def test_will_schedule_on_disabled_host_if_specified(self):
def test_will_schedule_on_disabled_host_if_specified_no_queue(self):
compute1 = service.Service('host1',
'nova-compute',
'compute',
@ -425,7 +425,7 @@ class SimpleDriverTestCase(test.TestCase):
db.instance_destroy(self.context, instance_id2)
compute1.kill()
def test_too_many_cores(self):
def test_too_many_cores_no_queue(self):
"""Ensures we don't go over max cores"""
compute1 = service.Service('host1',
'nova-compute',
@ -458,7 +458,7 @@ class SimpleDriverTestCase(test.TestCase):
compute1.kill()
compute2.kill()
def test_least_busy_host_gets_volume(self):
def test_least_busy_host_gets_volume_no_queue(self):
"""Ensures the host with less gigabytes gets the next one"""
volume1 = service.Service('host1',
'nova-volume',
@ -479,7 +479,7 @@ class SimpleDriverTestCase(test.TestCase):
volume1.delete_volume(self.context, volume_id1)
db.volume_destroy(self.context, volume_id2)
def test_doesnt_report_disabled_hosts_as_up(self):
def test_doesnt_report_disabled_hosts_as_up2(self):
"""Ensures driver doesn't find hosts before they are enabled"""
compute1 = self.start_service('compute', host='host1')
compute2 = self.start_service('compute', host='host2')
@ -992,7 +992,7 @@ class ZoneRedirectTest(test.TestCase):
decorator = FakeRerouteCompute("foo", id_to_return=FAKE_UUID_NOT_FOUND)
try:
result = decorator(go_boom)(None, None, 1)
self.assertFail(_("Should have rerouted."))
self.fail(_("Should have rerouted."))
except api.RedirectResult, e:
self.assertEquals(e.results['magic'], 'found me')
@ -1080,10 +1080,10 @@ class DynamicNovaClientTest(test.TestCase):
class FakeZonesProxy(object):
def do_something(*args, **kwargs):
def do_something(self, *args, **kwargs):
return 42
def raises_exception(*args, **kwargs):
def raises_exception(self, *args, **kwargs):
raise Exception('testing')

View File

@ -62,7 +62,12 @@ class project_generator(object):
class user_and_project_generator(object):
def __init__(self, manager, user_state={}, project_state={}):
def __init__(self, manager, user_state=None, project_state=None):
if not user_state:
user_state = {}
if not project_state:
project_state = {}
self.manager = manager
if 'name' not in user_state:
user_state['name'] = 'test1'

View File

@ -76,9 +76,9 @@ class ComputeTestCase(test.TestCase):
def _create_instance(self, params=None):
"""Create a test instance"""
if params is None:
if not params:
params = {}
inst = {}
inst['image_ref'] = 1
inst['reservation_id'] = 'r-fakeres'
@ -91,8 +91,11 @@ class ComputeTestCase(test.TestCase):
inst.update(params)
return db.instance_create(self.context, inst)['id']
def _create_instance_type(self, params={}):
def _create_instance_type(self, params=None):
"""Create a test instance"""
if not params:
params = {}
context = self.context.elevated()
inst = {}
inst['name'] = 'm1.small'

View File

@ -136,7 +136,7 @@ class InstanceTypeExtraSpecsTestCase(test.TestCase):
"m1.small")
self.assertEquals(instance_type['extra_specs'], {})
def test_instance_type_get_with_extra_specs(self):
def test_instance_type_get_by_flavor_id_with_extra_specs(self):
instance_type = db.api.instance_type_get_by_flavor_id(
context.get_admin_context(),
105)

View File

@ -1194,8 +1194,11 @@ class NWFilterTestCase(test.TestCase):
'project_id': 'fake',
'instance_type_id': 1})
def _create_instance_type(self, params={}):
def _create_instance_type(self, params=None):
"""Create a test instance"""
if not params:
params = {}
context = self.context.elevated()
inst = {}
inst['name'] = 'm1.small'

View File

@ -654,6 +654,24 @@ class XenAPIVMTestCase(test.TestCase):
# Ensure that it will not unrescue a non-rescued instance.
self.assertRaises(Exception, conn.unrescue, instance, None)
def test_revert_migration(self):
instance = self._create_instance()
class VMOpsMock():
def __init__(self):
self.revert_migration_called = False
def revert_migration(self, instance):
self.revert_migration_called = True
stubs.stubout_session(self.stubs, stubs.FakeSessionForMigrationTests)
conn = xenapi_conn.get_connection(False)
conn._vmops = VMOpsMock()
conn.revert_migration(instance)
self.assertTrue(conn._vmops.revert_migration_called)
def _create_instance(self, instance_id=1, spawn=True):
"""Creates and spawns a test instance."""
stubs.stubout_loopingcall_start(self.stubs)

View File

@ -294,7 +294,7 @@ class FakeConnection(driver.ComputeDriver):
"""
pass
def destroy(self, instance, network_info):
def destroy(self, instance, network_info, cleanup=True):
key = instance.name
if key in self.instances:
del self.instances[key]

View File

@ -374,7 +374,7 @@ class HyperVConnection(driver.ComputeDriver):
raise exception.InstanceNotFound(instance_id=instance.id)
self._set_vm_state(instance.name, 'Reboot')
def destroy(self, instance, network_info):
def destroy(self, instance, network_info, cleanup=True):
"""Destroy the VM. Also destroy the associated VHD disk files"""
LOG.debug(_("Got request to destroy vm %s"), instance.name)
vm = self._lookup(instance.name)

View File

@ -68,7 +68,10 @@ class GlanceWriteThread(object):
"""Ensures that image data is written to in the glance client and that
it is in correct ('active')state."""
def __init__(self, input, glance_client, image_id, image_meta={}):
def __init__(self, input, glance_client, image_id, image_meta=None):
if not image_meta:
image_meta = {}
self.input = input
self.glance_client = glance_client
self.image_id = image_id

View File

@ -63,7 +63,7 @@ class VMWareVlanBridgeDriver(VIFDriver):
vswitch_associated = network_utils.get_vswitch_for_vlan_interface(
session, vlan_interface)
if vswitch_associated is None:
raise exception.SwicthNotFoundForNetworkAdapter(
raise exception.SwitchNotFoundForNetworkAdapter(
adapter=vlan_interface)
# Check whether bridge already exists and retrieve the the ref of the
# network whose name_label is "bridge"

View File

@ -95,9 +95,12 @@ def build_recursive_traversal_spec(client_factory):
def build_property_spec(client_factory, type="VirtualMachine",
properties_to_collect=["name"],
properties_to_collect=None,
all_properties=False):
"""Builds the Property Spec."""
if not properties_to_collect:
properties_to_collect = ["name"]
property_spec = client_factory.create('ns0:PropertySpec')
property_spec.all = all_properties
property_spec.pathSet = properties_to_collect
@ -155,8 +158,11 @@ def get_dynamic_property(vim, mobj, type, property_name):
return property_value
def get_objects(vim, type, properties_to_collect=["name"], all=False):
def get_objects(vim, type, properties_to_collect=None, all=False):
"""Gets the list of objects of the type specified."""
if not properties_to_collect:
properties_to_collect = ["name"]
client_factory = vim.client.factory
object_spec = build_object_spec(client_factory,
vim.get_service_content().rootFolder,

View File

@ -33,11 +33,15 @@ QUEUE_BUFFER_SIZE = 10
def start_transfer(read_file_handle, data_size, write_file_handle=None,
glance_client=None, image_id=None, image_meta={}):
glance_client=None, image_id=None, image_meta=None):
"""Start the data transfer from the reader to the writer.
Reader writes to the pipe and the writer reads from the pipe. This means
that the total transfer time boils down to the slower of the read/write
and not the addition of the two times."""
if not image_meta:
image_meta = {}
# The pipe that acts as an intermediate store of data for reader to write
# to and writer to grab from.
thread_safe_pipe = io_util.ThreadSafePipe(QUEUE_BUFFER_SIZE, data_size)

View File

@ -137,7 +137,7 @@ class VMWareESXConnection(driver.ComputeDriver):
"""Reboot VM instance."""
self._vmops.reboot(instance, network_info)
def destroy(self, instance, network_info):
def destroy(self, instance, network_info, cleanup=True):
"""Destroy VM instance."""
self._vmops.destroy(instance, network_info)

View File

@ -797,7 +797,7 @@ def get_vdi_for_vm_safely(session, vm_ref):
else:
num_vdis = len(vdi_refs)
if num_vdis != 1:
raise exception.Exception(_("Unexpected number of VDIs"
raise exception.Error(_("Unexpected number of VDIs"
"(%(num_vdis)s) found"
" for VM %(vm_ref)s") % locals())

View File

@ -217,7 +217,7 @@ class XenAPIConnection(driver.ComputeDriver):
"""
self._vmops.inject_file(instance, b64_path, b64_contents)
def destroy(self, instance, network_info):
def destroy(self, instance, network_info, cleanup=True):
"""Destroy VM instance"""
self._vmops.destroy(instance, network_info)

View File

@ -123,7 +123,6 @@ setup(name='nova',
'bin/nova-console',
'bin/nova-dhcpbridge',
'bin/nova-direct-api',
'bin/nova-import-canonical-imagestore',
'bin/nova-logspool',
'bin/nova-manage',
'bin/nova-network',