Began refactoring django_nova into django_openstack and submodules

This commit is contained in:
Devin Carlen 2011-05-12 14:25:06 -07:00
parent 03dce1929d
commit 9ff4f407d1
94 changed files with 86 additions and 85 deletions

View File

@ -1,10 +1,10 @@
django-nova/.installed.cfg
django-nova/bin
django-nova/develop-eggs/
django-nova/downloads/
django-nova/eggs/
django-nova/parts/
django-nova/src/django_nova.egg-info
django-openstack/.installed.cfg
django-openstack/bin
django-openstack/develop-eggs/
django-openstack/downloads/
django-openstack/eggs/
django-openstack/parts/
django-openstack/src/django_nova.egg-info
django-nova-syspanel/src/django_nova_syspanel.egg-info
openstack-dashboard/.dashboard-venv
openstack-dashboard/local/dashboard_openstack.sqlite3

View File

@ -1,7 +1,7 @@
[buildout]
parts = python django
develop = .
eggs = django-nova
eggs = django-openstack
[python]
recipe = zc.recipe.egg
@ -11,9 +11,9 @@ eggs = ${buildout:eggs}
[django]
recipe = djangorecipe
version = 1.2.4
project = django_nova
projectegg = django_nova
project = django_openstack
projectegg = django_openstack
settings = testsettings
test = django_nova
test = django_openstack
eggs = ${buildout:eggs}

View File

@ -5,11 +5,11 @@ def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()
setup(
name = "django-nova",
version = "0.1",
url = 'https://launchpad.net/django-nova/',
name = "django-openstack",
version = "0.2",
url = 'https://launchpad.net/django-openstack/',
license = 'Apache 2.0',
description = "A Django interface for OpenStack Nova.",
description = "A Django interface for OpenStack.",
long_description = read('README'),
author = 'Devin Carlen',
author_email = 'devin.carlen@gmail.com',

View File

@ -24,8 +24,8 @@ import re
from django import forms
from django.contrib.auth import models as auth_models
from django_nova.connection import get_nova_admin_connection
from django_nova.exceptions import wrap_nova_error
from django_openstack.connection import get_nova_admin_connection
from django_openstack.exceptions import wrap_nova_error
# TODO: Store this in settings.

View File

@ -24,8 +24,8 @@ import boto.ec2.volume
import boto.exception
import boto.s3
from django.conf import settings
from django_nova.connection import get_nova_admin_connection
from django_nova.exceptions import wrap_nova_error
from django_openstack.connection import get_nova_admin_connection
from django_openstack.exceptions import wrap_nova_error
class ProjectManager(object):
@ -35,12 +35,12 @@ class ProjectManager(object):
self.projectManagerId = project.projectManagerId
self.region = region
def get_nova_connection(self):
def get_openstack_connection(self):
"""
Returns a boto connection for a user's project.
"""
nova = get_nova_admin_connection()
return nova.connection_for(self.username,
openstack = get_nova_admin_connection()
return openstack.connection_for(self.username,
self.projectname,
clc_url=self.region['endpoint'],
region=self.region['name'])
@ -50,16 +50,16 @@ class ProjectManager(object):
Returns a buffer of a zip file containing signed credentials
for the project's Nova user.
"""
nova = get_nova_admin_connection()
return nova.get_zip(self.username, self.projectname)
openstack = get_nova_admin_connection()
return openstack.get_zip(self.username, self.projectname)
def get_images(self, image_ids=None):
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
images = conn.get_all_images(image_ids=image_ids)
sorted_images = [i for i in images if i.ownerId == self.username] + \
[i for i in images if i.ownerId != self.username]
return [i for i in sorted_images if i.type == 'machine' and i.location.split('/')[0] != 'nova']
return [i for i in sorted_images if i.type == 'machine' and i.location.split('/')[0] != 'openstack']
def get_image(self, image_id):
try:
@ -73,12 +73,12 @@ class ProjectManager(object):
Removes the image's listing but leaves the image
and manifest in the object store in tact.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.deregister_image(image_id)
@wrap_nova_error
def update_image(self, image_id, display_name=None, description=None):
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
params = {
'ImageId': image_id,
'DisplayName': display_name,
@ -89,7 +89,7 @@ class ProjectManager(object):
@wrap_nova_error
def modify_image_attribute(self, image_id, attribute=None, operation=None,
groups='all'):
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.modify_image_attribute(image_id,
attribute=attribute,
operation=operation,
@ -101,7 +101,7 @@ class ProjectManager(object):
"""
Runs instances of the specified image id.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.run_instances(image_id, **kwargs)
def get_instance_count(self):
@ -118,7 +118,7 @@ class ProjectManager(object):
"""
Returns all instances in this project.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
reservations = conn.get_all_instances()
instances = []
for reservation in reservations:
@ -131,8 +131,8 @@ class ProjectManager(object):
"""
Returns detail about the specified instance.
"""
conn = self.get_nova_connection()
# TODO: Refactor this once nova's describe_instances filters by instance_id.
conn = self.get_openstack_connection()
# TODO: Refactor this once openstack's describe_instances filters by instance_id.
reservations = conn.get_all_instances()
for reservation in reservations:
for instance in reservation.instances:
@ -142,7 +142,7 @@ class ProjectManager(object):
@wrap_nova_error
def update_instance(self, instance_id, updates):
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
params = {'InstanceId': instance_id, 'DisplayName': updates['nickname'],
'DisplayDescription': updates['description']}
return conn.get_object('UpdateInstance', params,
@ -176,7 +176,7 @@ class ProjectManager(object):
@wrap_nova_error
def terminate_instance(self, instance_id):
""" Terminates the specified instance within this project. """
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
conn.terminate_instances([instance_id])
@wrap_nova_error
@ -184,7 +184,7 @@ class ProjectManager(object):
"""
Returns all security groups associated with this project.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
groups = []
for g in conn.get_all_security_groups():
@ -199,7 +199,7 @@ class ProjectManager(object):
"""
Returns the specified security group for this project.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
try:
return conn.get_all_security_groups(groupnames=name.encode('ASCII'))[0]
@ -218,7 +218,7 @@ class ProjectManager(object):
"""
Creates a new security group in this project.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.create_security_group(name, description)
@wrap_nova_error
@ -226,7 +226,7 @@ class ProjectManager(object):
"""
Deletes a security group from the project.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.delete_security_group(name = name)
@wrap_nova_error
@ -234,7 +234,7 @@ class ProjectManager(object):
"""
Authorizes a rule for the specified security group.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.authorize_security_group (
group_name = group_name,
ip_protocol = ip_protocol,
@ -248,7 +248,7 @@ class ProjectManager(object):
"""
Revokes a rule for the specified security group.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.revoke_security_group (
group_name = group_name,
ip_protocol = ip_protocol,
@ -262,7 +262,7 @@ class ProjectManager(object):
"""
Returns all key pairs associated with this project.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
keys = []
for k in conn.get_all_key_pairs():
@ -277,7 +277,7 @@ class ProjectManager(object):
"""
Returns the specified security group for this project.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
try:
return conn.get_all_key_pairs(keynames=name.encode('ASCII'))[0]
@ -296,7 +296,7 @@ class ProjectManager(object):
"""
Creates a new key pair for this project.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.create_key_pair(name)
@wrap_nova_error
@ -304,7 +304,7 @@ class ProjectManager(object):
"""
Deletes a new key pair from this project.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
conn.delete_key_pair(name)
@wrap_nova_error
@ -312,29 +312,29 @@ class ProjectManager(object):
"""
Returns all volumes in this project.
"""
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.get_all_volumes()
@wrap_nova_error
def create_volume(self, size, display_name=None, display_description=None,
snapshot=None):
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
params = {'Size': size, 'DisplayName': display_name,
'DisplayDescription': display_description}
return conn.get_object('CreateVolume', params, boto.ec2.volume.Volume)
@wrap_nova_error
def delete_volume(self, volume_id):
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.delete_volume(volume_id)
@wrap_nova_error
def attach_volume(self, volume_id, instance_id, device):
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.attach_volume(volume_id, instance_id, device)
@wrap_nova_error
def detach_volume(self, volume_id):
conn = self.get_nova_connection()
conn = self.get_openstack_connection()
return conn.detach_volume(volume_id)

View File

@ -30,7 +30,7 @@ from django.core import mail
from django.db import models
from django.db.models.signals import post_save
from django.template.loader import render_to_string
from django_nova.connection import get_nova_admin_connection
from django_openstack.connection import get_nova_admin_connection
SHA1_RE=re.compile('^[a-f0-9]{40}$')
@ -102,7 +102,7 @@ def credentials_post_save(sender, instance, created, *args, **kwargs):
message.send(fail_silently=False)
post_save.connect(credentials_post_save,
CredentialsAuthorization,
dispatch_uid='django_nova.CredentialsAuthorization.post_save')
dispatch_uid='django_openstack.CredentialsAuthorization.post_save')
def user_post_save(sender, instance, created, *args, **kwargs):
@ -120,4 +120,4 @@ def user_post_save(sender, instance, created, *args, **kwargs):
nova.create_user(instance.username)
post_save.connect(user_post_save,
auth_models.User,
dispatch_uid='django_nova.User.post_save')
dispatch_uid='django_openstack.User.post_save')

View File

@ -24,9 +24,9 @@ from django.conf import settings
from django.core.cache import cache
from django.core.exceptions import PermissionDenied
from django.http import Http404
from django_nova import manager
from django_nova.connection import get_nova_admin_connection
from django_nova.exceptions import wrap_nova_error
from django_openstack import manager
from django_openstack.connection import get_nova_admin_connection
from django_openstack.exceptions import wrap_nova_error
@wrap_nova_error

View File

@ -26,8 +26,8 @@ import nova_adminclient as adminclient
from django import test
from django.conf import settings
from django.contrib.auth import models as auth_models
from django_nova import manager
from django_nova import shortcuts
from django_openstack import manager
from django_openstack import shortcuts
TEST_PROJECT = 'test'

View File

@ -23,8 +23,8 @@ Unit tests for credential views.
import mox
from django.conf import settings
from django.core.urlresolvers import reverse
from django_nova import models
from django_nova.tests.view_tests.base import BaseViewTests
from django_openstack import models
from django_openstack.tests.view_tests.base import BaseViewTests
class CredentialViewTests(BaseViewTests):
@ -36,9 +36,9 @@ class CredentialViewTests(BaseViewTests):
.AndReturn(None)
self.mox.ReplayAll()
res = self.client.get(reverse('nova_credentials_authorize',
res = self.client.get(reverse('openstack_credentials_authorize',
args=[auth_token]))
self.assertTemplateUsed(res, 'django_nova/credentials/expired.html')
self.assertTemplateUsed(res, 'django_openstack/credentials/expired.html')
self.mox.VerifyAll()
@ -59,7 +59,7 @@ class CredentialViewTests(BaseViewTests):
self.mox.ReplayAll()
res = self.client.get(reverse('nova_credentials_authorize',
res = self.client.get(reverse('openstack_credentials_authorize',
args=[auth_token]))
self.assertEqual(res.status_code, 200)
self.assertEqual(res['Content-Disposition'],

View File

@ -25,9 +25,9 @@ import boto.ec2.instance
import mox
from django.core.urlresolvers import reverse
from django_nova import forms
from django_nova import shortcuts
from django_nova.tests.view_tests.base import BaseProjectViewTests, TEST_PROJECT
from django_openstack import forms
from django_openstack import shortcuts
from django_openstack.tests.view_tests.base import BaseProjectViewTests, TEST_PROJECT
TEST_IMAGE_ID = 'ami_test'
@ -56,7 +56,7 @@ class ImageViewTests(BaseProjectViewTests):
res = self.client.get(reverse('nova_images', args=[TEST_PROJECT]))
self.assertEqual(res.status_code, 200)
self.assertTemplateUsed(res, 'django_nova/images/index.html')
self.assertTemplateUsed(res, 'django_openstack/images/index.html')
self.assertEqual(len(res.context['image_lists']), 3)
self.mox.VerifyAll()
@ -75,7 +75,7 @@ class ImageViewTests(BaseProjectViewTests):
args = [TEST_PROJECT, TEST_IMAGE_ID]
res = self.client.get(reverse('nova_images_launch', args=args))
self.assertEqual(res.status_code, 200)
self.assertTemplateUsed(res, 'django_nova/images/launch.html')
self.assertTemplateUsed(res, 'django_openstack/images/launch.html')
self.assertEqual(res.context['ami'].id, TEST_IMAGE_ID)
self.mox.VerifyAll()
@ -133,7 +133,7 @@ class ImageViewTests(BaseProjectViewTests):
res = self.client.get(reverse('nova_images_detail',
args=[TEST_PROJECT, TEST_IMAGE_ID]))
self.assertEqual(res.status_code, 200)
self.assertTemplateUsed(res, 'django_nova/images/index.html')
self.assertTemplateUsed(res, 'django_openstack/images/index.html')
self.assertEqual(res.context['ami'].id, TEST_IMAGE_ID)
self.mox.VerifyAll()
@ -202,7 +202,7 @@ class ImageViewTests(BaseProjectViewTests):
args = [TEST_PROJECT, TEST_IMAGE_ID]
res = self.client.get(reverse('nova_images_update', args=args))
self.assertEqual(res.status_code, 200)
self.assertTemplateUsed(res, 'django_nova/images/edit.html')
self.assertTemplateUsed(res, 'django_openstack/images/edit.html')
self.assertEqual(res.context['ami'].id, TEST_IMAGE_ID)
self.mox.VerifyAll()

View File

@ -24,7 +24,8 @@ import boto.ec2.instance
import mox
from django.core.urlresolvers import reverse
from django_nova.tests.view_tests.base import BaseProjectViewTests, TEST_PROJECT
from django_openstack.tests.view_tests.base import (BaseProjectViewTests,
TEST_PROJECT)
TEST_INSTANCE_ID = 'i-abcdefgh'
@ -39,7 +40,7 @@ class InstanceViewTests(BaseProjectViewTests):
res = self.client.get(reverse('nova_instances', args=[TEST_PROJECT]))
self.assertEqual(res.status_code, 200)
self.assertTemplateUsed(res, 'django_nova/instances/index.html')
self.assertTemplateUsed(res, 'django_openstack/instances/index.html')
self.assertEqual(len(res.context['instances']), 0)
self.mox.VerifyAll()
@ -60,7 +61,7 @@ class InstanceViewTests(BaseProjectViewTests):
res = self.client.get(reverse('nova_instances_detail',
args=[TEST_PROJECT, TEST_INSTANCE_ID]))
self.assertEqual(res.status_code, 200)
self.assertTemplateUsed(res, 'django_nova/instances/index.html')
self.assertTemplateUsed(res, 'django_openstack/instances/index.html')
self.assertEqual(res.context['selected_instance'].id, instance.id)
self.mox.VerifyAll()

View File

@ -24,8 +24,8 @@ import boto.ec2.keypair
import mox
from django.core.urlresolvers import reverse
from django_nova.tests.view_tests.base import (BaseProjectViewTests,
TEST_PROJECT)
from django_openstack.tests.view_tests.base import (BaseProjectViewTests,
TEST_PROJECT)
TEST_KEY = 'test_key'
@ -41,7 +41,7 @@ class KeyPairViewTests(BaseProjectViewTests):
response = self.client.get(reverse('nova_keypairs',
args=[TEST_PROJECT]))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'django_nova/keypairs/index.html')
self.assertTemplateUsed(response, 'django_openstack/keypairs/index.html')
self.assertEqual(len(response.context['keypairs']), 0)
self.mox.VerifyAll()

View File

@ -21,8 +21,8 @@ Unit tests for region views.
"""
from django.core.urlresolvers import reverse
from django_nova.tests.view_tests.base import BaseViewTests
from django_nova import shortcuts
from django_openstack.tests.view_tests.base import BaseViewTests
from django_openstack import shortcuts
TEST_REGION = 'one'

View File

@ -24,9 +24,9 @@ import boto.ec2.volume
import mox
from django.core.urlresolvers import reverse
from django_nova import forms
from django_nova.tests.view_tests.base import (BaseProjectViewTests,
TEST_PROJECT)
from django_openstack import forms
from django_openstack.tests.view_tests.base import (BaseProjectViewTests,
TEST_PROJECT)
TEST_VOLUME = 'vol-0000001'
@ -55,7 +55,7 @@ class VolumeTests(BaseProjectViewTests):
response = self.client.get(reverse('nova_volumes',
args=[TEST_PROJECT]))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'django_nova/volumes/index.html')
self.assertTemplateUsed(response, 'django_openstack/volumes/index.html')
self.assertEqual(len(response.context['volumes']), 0)
self.mox.VerifyAll()

View File

@ -4,12 +4,12 @@ ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
DEBUG = True
TESTSERVER = 'http://testserver'
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = '/tmp/django-nova.db'
DATABASE_NAME = '/tmp/django-openstack.db'
INSTALLED_APPS = ['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django_nova']
ROOT_URLCONF = 'django_nova.tests.urls'
'django_openstack']
ROOT_URLCONF = 'django_openstack.tests.urls'
TEMPLATE_DIRS = (
os.path.join(ROOT_PATH, 'tests', 'templates')
)