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:
commit
651ff37524
@ -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()
|
@ -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()
|
||||
|
||||
|
@ -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, '')
|
||||
|
@ -14,8 +14,6 @@
|
||||
# under the License.
|
||||
|
||||
import base64
|
||||
import re
|
||||
import webob
|
||||
|
||||
from webob import exc
|
||||
from xml.dom import minidom
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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):
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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']
|
||||
|
@ -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
|
||||
|
@ -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')
|
||||
|
||||
|
||||
|
@ -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'
|
||||
|
@ -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'
|
||||
|
@ -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)
|
||||
|
@ -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'
|
||||
|
@ -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)
|
||||
|
@ -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]
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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())
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user