image editing now mostly working

This commit is contained in:
Jake Dahn
2011-06-22 11:59:28 -05:00
parent bf209031bd
commit e06e8e1e56
7 changed files with 80 additions and 30 deletions

View File

@@ -3,6 +3,7 @@ from django.conf import settings
INSTANCES = r'^instances/(?P<instance_id>[^/]+)/%s$'
IMAGES = r'^images/(?P<image_id>[^/]+)/%s$'
USERS = r'^users/(?P<user_id>[^/]+)/%s$'
TENANTS = r'^tenants/(?P<tenant_id>[^/]+)/%s$'
@@ -19,8 +20,7 @@ urlpatterns = patterns('django_openstack.syspanel.views.instances',
urlpatterns += patterns('django_openstack.syspanel.views.images',
url(r'^images/$', 'index', name='syspanel_images'),
# NOTE(termie): currently just using the 'dash' versions
#url(INSTANCES % 'console', 'console', name='syspanel_instances_console'),
url(IMAGES % 'update', 'update', name='syspanel_images_update'),
#url(INSTANCES % 'vnc', 'vnc', name='syspanel_instances_vnc'),
)

View File

@@ -40,6 +40,15 @@ class ToggleImage(forms.SelfHandlingForm):
messages.error(request, "Error updating image: %s" % e.message)
return redirect(request.build_absolute_uri())
class UpdateImageForm(forms.Form):
name = forms.CharField(max_length="5", label="Name")
kernel = forms.CharField(max_length="5", label="Kernel ID", required=False)
ramdisk = forms.CharField(max_length="5", label="Ramdisk ID", required=False)
architecture = forms.CharField(label="Architecture", required=False)
#project_id = forms.CharField(label="Project ID")
container_format = forms.CharField(label="Container Format", required=False)
disk_format = forms.CharField(label="Disk Format")
#is_public = forms.BooleanField(label="Publicly Available", required=False)
@login_required
@@ -74,7 +83,7 @@ def index(request):
@login_required
def update(request, image_id):
try:
image = glance_api(request).get_image(image_id)[0]
image = api.glance_api(request).get_image(image_id)[0]
except GlanceClientConnectionError, e:
messages.error(request, "Error connecting to glance: %s" % e.message)
except glance_exception.Error, e:
@@ -85,41 +94,35 @@ def update(request, image_id):
if form.is_valid():
image_form = form.clean()
metadata = {
'is_public': image_form['is_public'],
'is_public': True,
'disk_format': image_form['disk_format'],
'container_format': image_form['container_format'],
'name': image_form['name'],
'location': image_form['location'],
}
try:
# TODO add public flag to properties
metadata['properties'] = {
'kernel_id': int(image_form['kernel_id']),
'ramdisk_id': int(image_form['ramdisk_id']),
'image_state': image_form['state'],
'kernel_id': int(image_form['kernel']),
'ramdisk_id': int(image_form['ramdisk']),
'architecture': image_form['architecture'],
'project_id': image_form['project_id'],
}
glance_api(request).update_image(image_id, metadata)
api.glance_api(request).update_image(image_id, metadata)
messages.success(request, "Image was successfully updated.")
redirect("syspanel_images")
except GlanceClientConnectionError, e:
messages.error(request, "Error connecting to glance: %s" % e.message)
redirect("syspanel_images_update", image_id)
except glance_exception.Error, e:
messages.error(request, "Error updating image: %s" % e.message)
except:
messages.error(request, "Image could not be updated, please try again.")
redirect("syspanel_images_update", image_id)
else:
messages.error(request, "Image could not be uploaded, please try agian.")
form = UpdateImageForm(request.POST)
return render_to_response('django_nova_syspanel/images/image_update.html',{
return render_to_response('syspanel_image_update.html',{
'image': image,
'form': form,
}, context_instance = template.RequestContext(request))
return redirect('syspanel_images')
else:
form = UpdateImageForm(initial={
'name': image.get('name', ''),
@@ -134,7 +137,7 @@ def update(request, image_id):
'disk_format': image.get('disk_format', ''),
})
return render_to_response('django_nova_syspanel/images/image_update.html',{
return render_to_response('syspanel_image_update.html',{
'image': image,
'form': form,
}, context_instance = template.RequestContext(request))

View File

@@ -0,0 +1,10 @@
<form id="image_form" action="" method="post">
{% csrf_token %}
{% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %}
{% for field in form.visible_fields %}
{{ field.label_tag }}
{{ field.errors }}
{{ field }}
{% endfor %}
<input type="submit" value="Update Image" class="large-rounded" />
</form>

View File

@@ -24,7 +24,7 @@
<li>{% include "_delete_image.html" with form=delete_form %}</li>
<li>{% include "_toggle_image.html" with form=toggle_form %}</li>
<li><a href="{#% url syspanel_images_update image.id %#}">Edit</a></li>
<li><a href="{% url syspanel_images_update image.id %}">Edit</a></li>
</ul>
</td>
</tr>

View File

@@ -0,0 +1,37 @@
{% extends 'syspanel_base.html' %}
{# list of user's instances #}
{# standard nav, sidebar, list of instances in main #}
{% block sidebar %}
{% with current_sidebar="users" %}
{{block.super}}
{% endwith %}
{% endblock %}
{% block main %}
<div id='page_header'>
<h2><span>System Panel:</span> Images </h2>
<p class='desc'><span>&mdash;</span> Update Image </p>
</div>
{% include "_messages.html" %}
<div class="main_content">
<div class="dash_block wide form">
<div class='title_block'>
<h3>Update User</h3>
</div>
{% include '_image_form.html' %}
<div class="right">
<h3>Description:</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae est urna. Phasellus sagittis, sem posuere hendrerit mattis, velit risus viverra enim, tempus dapibus sem turpis ac erat.</p>
<p>Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis ligula nec lacus mollis eu laoreet lectus porta. </p>
<p>Sed iaculis mauris et est consectetur egestas. Praesent dolor libero, semper sed aliquet</p>
</div>
</div>
</div>
{% endblock %}

View File

@@ -20,7 +20,7 @@
<div class="main_content">
<div class="dash_block wide form">
<div class='title_block'>
<h3>Update User</h3>
<h3>Update Image</h3>
</div>
{% include '_user_form.html' %}

View File

@@ -1,15 +1,15 @@
$(function(){
// update/create image form
$("#images_form input#id_name").example("ami-ubuntu");
$("#images_form input#id_kernel").example("123");
$("#images_form input#id_ramdisk").example("123");
$("#images_form input#id_state").example("available");
$("#images_form input#id_location").example("file:///var/lib/glance/images/123");
$("#images_form input#id_architecture").example("x86_64");
$("#images_form input#id_project_id").example("some");
$("#images_form input#id_disk_format").example("ari");
$("#images_form input#id_container_format").example("ari");
$("#images_form input#id_ramdisk").example("123");
$("#image_form input#id_name").example("ami-ubuntu");
$("#image_form input#id_kernel").example("123");
$("#image_form input#id_ramdisk").example("123");
$("#image_form input#id_state").example("available");
$("#image_form input#id_location").example("file:///var/lib/glance/images/123");
$("#image_form input#id_architecture").example("x86_64");
$("#image_form input#id_project_id").example("some");
$("#image_form input#id_disk_format").example("ari");
$("#image_form input#id_container_format").example("ari");
$("#image_form input#id_ramdisk").example("123");
// launch instance form
$("#launch_img input#id_name").example("YetAnotherInstance")