Merge "Refactor nodepool to configure glance only when uploading imaes"

This commit is contained in:
Jenkins
2014-08-18 18:05:13 +00:00
committed by Gerrit Code Review
2 changed files with 57 additions and 79 deletions

View File

@@ -92,7 +92,7 @@ class FakeHTTPClient(object):
return None, dict(extensions=dict())
class FakeNovaClient(object):
class FakeClient(object):
def __init__(self):
self.flavors = FakeList([
Dummy(id='f1', ram=8192, name='Fake Flavor'),
@@ -112,20 +112,6 @@ class FakeGlanceClient(object):
return True
class FakeClient(object):
def __init__(self):
self.client = FakeHTTPClient()
self.client.user = 'fake'
self.client.password = 'fake'
self.client.projectid = 'fake'
self.client.service_type = None
self.client.service_name = None
self.client.region_name = None
self.nova = FakeNovaClient()
self.glance = FakeGlanceClient()
class FakeFile(StringIO.StringIO):
def __init__(self, path):
StringIO.StringIO.__init__(self)

View File

@@ -96,14 +96,14 @@ class NotFound(Exception):
class CreateServerTask(Task):
def main(self, client):
server = client.nova.servers.create(**self.args)
server = client.servers.create(**self.args)
return str(server.id)
class GetServerTask(Task):
def main(self, client):
try:
server = client.nova.servers.get(self.args['server_id'])
server = client.servers.get(self.args['server_id'])
except novaclient.exceptions.NotFound:
raise NotFound()
return make_server_dict(server)
@@ -111,52 +111,52 @@ class GetServerTask(Task):
class DeleteServerTask(Task):
def main(self, client):
client.nova.servers.delete(self.args['server_id'])
client.servers.delete(self.args['server_id'])
class ListServersTask(Task):
def main(self, client):
servers = client.nova.servers.list()
servers = client.servers.list()
return [make_server_dict(server) for server in servers]
class AddKeypairTask(Task):
def main(self, client):
client.nova.keypairs.create(**self.args)
client.keypairs.create(**self.args)
class ListKeypairsTask(Task):
def main(self, client):
keys = client.nova.keypairs.list()
keys = client.keypairs.list()
return [dict(id=str(key.id), name=key.name) for
key in keys]
class DeleteKeypairTask(Task):
def main(self, client):
client.nova.keypairs.delete(self.args['name'])
client.keypairs.delete(self.args['name'])
class CreateFloatingIPTask(Task):
def main(self, client):
ip = client.nova.floating_ips.create(**self.args)
ip = client.floating_ips.create(**self.args)
return dict(id=str(ip.id), ip=ip.ip)
class AddFloatingIPTask(Task):
def main(self, client):
client.nova.servers.add_floating_ip(**self.args)
client.servers.add_floating_ip(**self.args)
class GetFloatingIPTask(Task):
def main(self, client):
ip = client.nova.floating_ips.get(self.args['ip_id'])
ip = client.floating_ips.get(self.args['ip_id'])
return dict(id=str(ip.id), ip=ip.ip, instance_id=str(ip.instance_id))
class ListFloatingIPsTask(Task):
def main(self, client):
ips = client.nova.floating_ips.list()
ips = client.floating_ips.list()
return [dict(id=str(ip.id), ip=ip.ip,
instance_id=str(ip.instance_id)) for
ip in ips]
@@ -164,31 +164,57 @@ class ListFloatingIPsTask(Task):
class RemoveFloatingIPTask(Task):
def main(self, client):
client.nova.servers.remove_floating_ip(**self.args)
client.servers.remove_floating_ip(**self.args)
class DeleteFloatingIPTask(Task):
def main(self, client):
client.nova.floating_ips.delete(self.args['ip_id'])
client.floating_ips.delete(self.args['ip_id'])
class CreateImageTask(Task):
def main(self, client):
# This returns an id
return str(client.nova.servers.create_image(**self.args))
return str(client.servers.create_image(**self.args))
class UploadImageTask(Task):
def get_glance_client(self, provider):
keystone_kwargs = {'auth_url': provider.auth_url,
'username': provider.username,
'password': provider.password,
'tenant_name': provider.project_id}
glance_kwargs = {'service_type': 'image'}
if provider.region_name:
keystone_kwargs['region_name'] = provider.region_name
# get endpoint and authtoken
keystone = ksclient.Client(**keystone_kwargs)
glance_endpoint = keystone.service_catalog.url_for(
attr='region',
filter_value=keystone_kwargs['region_name'],
service_type='image')
glance_endpoint = glance_endpoint.replace('/v1.0', '')
# configure glance client
glance = glanceclient.client.Client('1', glance_endpoint,
token=keystone.auth_token,
**glance_kwargs)
return glance
def main(self, client):
if self.args['image_name'].startswith('fake-dib-image'):
image = fakeprovider.FakeGlanceClient()
image.update(data='fake')
else:
image = client.glance.images.create(
# configure glance and upload image
glanceclient = self.get_glance_client(self.args['provider'])
image = glanceclient.images.create(
name=self.args['image_name'], is_public=False,
disk_format=self.args['disk_format'],
container_format=self.args['container_format'])
image.update(data=open(self.args['filename'], 'rb'))
glanceclient = None
return image.id
@@ -196,7 +222,7 @@ class UploadImageTask(Task):
class GetImageTask(Task):
def main(self, client):
try:
image = client.nova.images.get(**self.args)
image = client.images.get(**self.args)
except novaclient.exceptions.NotFound:
raise NotFound()
# HP returns 404, rackspace can return a 'DELETED' image.
@@ -208,7 +234,7 @@ class GetImageTask(Task):
class ListExtensionsTask(Task):
def main(self, client):
try:
resp, body = client.nova.client.get('/extensions')
resp, body = client.client.get('/extensions')
return [x['alias'] for x in body['extensions']]
except novaclient.exceptions.NotFound:
# No extensions present.
@@ -217,32 +243,26 @@ class ListExtensionsTask(Task):
class ListFlavorsTask(Task):
def main(self, client):
flavors = client.nova.flavors.list()
flavors = client.flavors.list()
return [dict(id=str(flavor.id), ram=flavor.ram, name=flavor.name)
for flavor in flavors]
class ListImagesTask(Task):
def main(self, client):
images = client.nova.images.list()
images = client.images.list()
return [make_image_dict(image) for image in images]
class FindImageTask(Task):
def main(self, client):
image = client.nova.images.find(**self.args)
image = client.images.find(**self.args)
return dict(id=str(image.id))
class DeleteImageTask(Task):
def main(self, client):
client.nova.images.delete(**self.args)
class ClientContainer(object):
def __init__(self, nova, glance):
self.nova = nova
self.glance = glance
client.images.delete(**self.args)
class FindNetworkTask(Task):
@@ -288,47 +308,18 @@ class ProviderManager(TaskManager):
def _getClient(self):
tenant_networks = novaclient.extension.Extension(
'tenant_networks', novaclient.v1_1.contrib.tenant_networks)
nova_kwargs = {}
keystone_kwargs = {}
glance_kwargs = {}
# specific args for client
nova_kwargs['auth_url'] = keystone_kwargs['auth_url'] = \
self.provider.auth_url
nova_kwargs['extensions'] = [tenant_networks]
keystone_kwargs['username'] = self.provider.username
keystone_kwargs['password'] = self.provider.password
keystone_kwargs['tenant_name'] = self.provider.project_id
args = ['1.1', self.provider.username, self.provider.password,
self.provider.project_id, self.provider.auth_url]
kwargs = {'extensions': [tenant_networks]}
if self.provider.service_type:
nova_kwargs['service_type'] = self.provider.service_type
glance_kwargs['service_type'] = 'image'
kwargs['service_type'] = self.provider.service_type
if self.provider.service_name:
nova_kwargs['service_name'] = self.provider.service_name
kwargs['service_name'] = self.provider.service_name
if self.provider.region_name:
nova_kwargs['region_name'] = keystone_kwargs['region_name'] = \
self.provider.region_name
kwargs['region_name'] = self.provider.region_name
if self.provider.auth_url == 'fake':
return fakeprovider.FAKE_CLIENT
nova = novaclient.client.Client(
'1.1', self.provider.username, self.provider.password,
self.provider.project_id, **nova_kwargs)
keystone = ksclient.Client(**keystone_kwargs)
glance_endpoint = keystone.service_catalog.url_for(
attr='region',
filter_value=keystone_kwargs['region_name'],
service_type='image')
glance_endpoint = glance_endpoint.replace("/v1.0", "")
glance = glanceclient.client.Client(
'1', glance_endpoint, token=keystone.auth_token,
**glance_kwargs)
return ClientContainer(nova, glance)
return novaclient.client.Client(*args, **kwargs)
def _getFlavors(self):
flavors = self.listFlavors()
@@ -500,7 +491,8 @@ class ProviderManager(TaskManager):
def uploadImage(self, image_name, filename, disk_format, container_format):
return self.submitTask(UploadImageTask(
image_name=image_name, filename='%s.%s' % (filename, disk_format),
disk_format=disk_format, container_format=container_format))
disk_format=disk_format, container_format=container_format,
provider=self.provider))
def listExtensions(self):
return self.submitTask(ListExtensionsTask())