Merge & fix conflict.
This commit is contained in:
2
Authors
2
Authors
@@ -8,6 +8,7 @@ Chmouel Boudjnah <chmouel@chmouel.com>
|
|||||||
Chris Behrens <cbehrens@codestud.com>
|
Chris Behrens <cbehrens@codestud.com>
|
||||||
Cory Wright <corywright@gmail.com>
|
Cory Wright <corywright@gmail.com>
|
||||||
David Pravec <David.Pravec@danix.org>
|
David Pravec <David.Pravec@danix.org>
|
||||||
|
Dan Prince <dan.prince@rackspace.com>
|
||||||
Dean Troyer <dtroyer@gmail.com>
|
Dean Troyer <dtroyer@gmail.com>
|
||||||
Devin Carlen <devin.carlen@gmail.com>
|
Devin Carlen <devin.carlen@gmail.com>
|
||||||
Ed Leafe <ed@leafe.com>
|
Ed Leafe <ed@leafe.com>
|
||||||
@@ -23,6 +24,7 @@ Joe Heck <heckj@mac.com>
|
|||||||
Joel Moore <joelbm24@gmail.com>
|
Joel Moore <joelbm24@gmail.com>
|
||||||
John Dewey <john@dewey.ws>
|
John Dewey <john@dewey.ws>
|
||||||
Jonathan Bryce <jbryce@jbryce.com>
|
Jonathan Bryce <jbryce@jbryce.com>
|
||||||
|
Jordan Rinke <jordan@openstack.org>
|
||||||
Josh Durgin <joshd@hq.newdream.net>
|
Josh Durgin <joshd@hq.newdream.net>
|
||||||
Josh Kearney <josh.kearney@rackspace.com>
|
Josh Kearney <josh.kearney@rackspace.com>
|
||||||
Joshua McKenty <jmckenty@gmail.com>
|
Joshua McKenty <jmckenty@gmail.com>
|
||||||
|
|||||||
@@ -495,9 +495,9 @@ class NetworkCommands(object):
|
|||||||
cidr=fixed_range,
|
cidr=fixed_range,
|
||||||
num_networks=int(num_networks),
|
num_networks=int(num_networks),
|
||||||
network_size=int(network_size),
|
network_size=int(network_size),
|
||||||
|
cidr_v6=fixed_range_v6,
|
||||||
vlan_start=int(vlan_start),
|
vlan_start=int(vlan_start),
|
||||||
vpn_start=int(vpn_start),
|
vpn_start=int(vpn_start))
|
||||||
cidr_v6=fixed_range_v6)
|
|
||||||
|
|
||||||
|
|
||||||
class ServiceCommands(object):
|
class ServiceCommands(object):
|
||||||
|
|||||||
@@ -190,6 +190,45 @@ class HostInfo(object):
|
|||||||
setattr(self, name, value)
|
setattr(self, name, value)
|
||||||
|
|
||||||
|
|
||||||
|
class InstanceType(object):
|
||||||
|
"""
|
||||||
|
Information about a Nova instance type, as parsed through SAX.
|
||||||
|
|
||||||
|
**Fields include**
|
||||||
|
|
||||||
|
* name
|
||||||
|
* vcpus
|
||||||
|
* disk_gb
|
||||||
|
* memory_mb
|
||||||
|
* flavor_id
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, connection=None):
|
||||||
|
self.connection = connection
|
||||||
|
self.name = None
|
||||||
|
self.vcpus = None
|
||||||
|
self.disk_gb = None
|
||||||
|
self.memory_mb = None
|
||||||
|
self.flavor_id = None
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return 'InstanceType:%s' % self.name
|
||||||
|
|
||||||
|
def startElement(self, name, attrs, connection):
|
||||||
|
return None
|
||||||
|
|
||||||
|
def endElement(self, name, value, connection):
|
||||||
|
if name == "memoryMb":
|
||||||
|
self.memory_mb = str(value)
|
||||||
|
elif name == "flavorId":
|
||||||
|
self.flavor_id = str(value)
|
||||||
|
elif name == "diskGb":
|
||||||
|
self.disk_gb = str(value)
|
||||||
|
else:
|
||||||
|
setattr(self, name, str(value))
|
||||||
|
|
||||||
|
|
||||||
class NovaAdminClient(object):
|
class NovaAdminClient(object):
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
@@ -373,3 +412,8 @@ class NovaAdminClient(object):
|
|||||||
|
|
||||||
def get_hosts(self):
|
def get_hosts(self):
|
||||||
return self.apiconn.get_list('DescribeHosts', {}, [('item', HostInfo)])
|
return self.apiconn.get_list('DescribeHosts', {}, [('item', HostInfo)])
|
||||||
|
|
||||||
|
def get_instance_types(self):
|
||||||
|
"""Grabs the list of all users."""
|
||||||
|
return self.apiconn.get_list('DescribeInstanceTypes', {},
|
||||||
|
[('item', InstanceType)])
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ from nova.auth import manager
|
|||||||
class FakeHttplibSocket(object):
|
class FakeHttplibSocket(object):
|
||||||
"""a fake socket implementation for httplib.HTTPResponse, trivial"""
|
"""a fake socket implementation for httplib.HTTPResponse, trivial"""
|
||||||
def __init__(self, response_string):
|
def __init__(self, response_string):
|
||||||
|
self.response_string = response_string
|
||||||
self._buffer = StringIO.StringIO(response_string)
|
self._buffer = StringIO.StringIO(response_string)
|
||||||
|
|
||||||
def makefile(self, _mode, _other):
|
def makefile(self, _mode, _other):
|
||||||
@@ -66,13 +67,16 @@ class FakeHttplibConnection(object):
|
|||||||
# For some reason, the response doesn't have "HTTP/1.0 " prepended; I
|
# For some reason, the response doesn't have "HTTP/1.0 " prepended; I
|
||||||
# guess that's a function the web server usually provides.
|
# guess that's a function the web server usually provides.
|
||||||
resp = "HTTP/1.0 %s" % resp
|
resp = "HTTP/1.0 %s" % resp
|
||||||
sock = FakeHttplibSocket(resp)
|
self.sock = FakeHttplibSocket(resp)
|
||||||
self.http_response = httplib.HTTPResponse(sock)
|
self.http_response = httplib.HTTPResponse(self.sock)
|
||||||
self.http_response.begin()
|
self.http_response.begin()
|
||||||
|
|
||||||
def getresponse(self):
|
def getresponse(self):
|
||||||
return self.http_response
|
return self.http_response
|
||||||
|
|
||||||
|
def getresponsebody(self):
|
||||||
|
return self.sock.response_string
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
"""Required for compatibility with boto/tornado"""
|
"""Required for compatibility with boto/tornado"""
|
||||||
pass
|
pass
|
||||||
@@ -104,7 +108,7 @@ class ApiEc2TestCase(test.TestCase):
|
|||||||
self.app = ec2.Authenticate(ec2.Requestify(ec2.Executor(),
|
self.app = ec2.Authenticate(ec2.Requestify(ec2.Executor(),
|
||||||
'nova.api.ec2.cloud.CloudController'))
|
'nova.api.ec2.cloud.CloudController'))
|
||||||
|
|
||||||
def expect_http(self, host=None, is_secure=False):
|
def expect_http(self, host=None, is_secure=False, api_version=None):
|
||||||
"""Returns a new EC2 connection"""
|
"""Returns a new EC2 connection"""
|
||||||
self.ec2 = boto.connect_ec2(
|
self.ec2 = boto.connect_ec2(
|
||||||
aws_access_key_id='fake',
|
aws_access_key_id='fake',
|
||||||
@@ -113,13 +117,31 @@ class ApiEc2TestCase(test.TestCase):
|
|||||||
region=regioninfo.RegionInfo(None, 'test', self.host),
|
region=regioninfo.RegionInfo(None, 'test', self.host),
|
||||||
port=8773,
|
port=8773,
|
||||||
path='/services/Cloud')
|
path='/services/Cloud')
|
||||||
|
if api_version:
|
||||||
|
self.ec2.APIVersion = api_version
|
||||||
|
|
||||||
self.mox.StubOutWithMock(self.ec2, 'new_http_connection')
|
self.mox.StubOutWithMock(self.ec2, 'new_http_connection')
|
||||||
http = FakeHttplibConnection(
|
self.http = FakeHttplibConnection(
|
||||||
self.app, '%s:8773' % (self.host), False)
|
self.app, '%s:8773' % (self.host), False)
|
||||||
# pylint: disable-msg=E1103
|
# pylint: disable-msg=E1103
|
||||||
self.ec2.new_http_connection(host, is_secure).AndReturn(http)
|
self.ec2.new_http_connection(host, is_secure).AndReturn(self.http)
|
||||||
return http
|
return self.http
|
||||||
|
|
||||||
|
def test_xmlns_version_matches_request_version(self):
|
||||||
|
self.expect_http(api_version='2010-10-30')
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
user = self.manager.create_user('fake', 'fake', 'fake')
|
||||||
|
project = self.manager.create_project('fake', 'fake', 'fake')
|
||||||
|
|
||||||
|
# Any request should be fine
|
||||||
|
self.ec2.get_all_instances()
|
||||||
|
self.assertTrue(self.ec2.APIVersion in self.http.getresponsebody(),
|
||||||
|
'The version in the xmlns of the response does '
|
||||||
|
'not match the API version given in the request.')
|
||||||
|
|
||||||
|
self.manager.delete_project(project)
|
||||||
|
self.manager.delete_user(user)
|
||||||
|
|
||||||
def test_describe_instances(self):
|
def test_describe_instances(self):
|
||||||
"""Test that, after creating a user and a project, the describe
|
"""Test that, after creating a user and a project, the describe
|
||||||
|
|||||||
@@ -479,6 +479,19 @@ class NWFilterTestCase(test.TestCase):
|
|||||||
'project_id': 'fake'})
|
'project_id': 'fake'})
|
||||||
inst_id = instance_ref['id']
|
inst_id = instance_ref['id']
|
||||||
|
|
||||||
|
ip = '10.11.12.13'
|
||||||
|
|
||||||
|
network_ref = db.project_get_network(self.context,
|
||||||
|
'fake')
|
||||||
|
|
||||||
|
fixed_ip = {'address': ip,
|
||||||
|
'network_id': network_ref['id']}
|
||||||
|
|
||||||
|
admin_ctxt = context.get_admin_context()
|
||||||
|
db.fixed_ip_create(admin_ctxt, fixed_ip)
|
||||||
|
db.fixed_ip_update(admin_ctxt, ip, {'allocated': True,
|
||||||
|
'instance_id': instance_ref['id']})
|
||||||
|
|
||||||
def _ensure_all_called():
|
def _ensure_all_called():
|
||||||
instance_filter = 'nova-instance-%s' % instance_ref['name']
|
instance_filter = 'nova-instance-%s' % instance_ref['name']
|
||||||
secgroup_filter = 'nova-secgroup-%s' % self.security_group['id']
|
secgroup_filter = 'nova-secgroup-%s' % self.security_group['id']
|
||||||
|
|||||||
Reference in New Issue
Block a user