Show flavor details on servers launching

Change-Id: Icb732604af962dab37d8e167b5358d0872ee243f
This commit is contained in:
Zhenguo Niu 2017-05-17 13:22:35 +08:00
parent 55cb393e1d
commit fa24481e55
3 changed files with 87 additions and 2 deletions

View File

@ -0,0 +1,39 @@
{% load i18n horizon humanize bootstrap %}
{% block help_message %}
{% endblock %}
<h4>{% trans "Flavor Details" %}</h4>
<table class="flavor_table table table-striped table-fixed">
<tbody>
<tr><td class="flavor_name">{% trans "Name" %}</td><td><span id="bm_flavor_name" class="truncate"></span></td></tr>
<tr><td class="flavor_name">{% trans "CPUs" %}</td><td><span id="bm_flavor_cpus"></span></td></tr>
<tr><td class="flavor_name">{% trans "RAM" %}</td><td><span id="bm_flavor_ram"></span></td></tr>
<tr><td class="flavor_name">{% trans "Disks" %}</td><td><span id="bm_flavor_disks"></span></td></tr>
<tr><td class="flavor_name">{% trans "Nics" %}</td><td><span id="bm_flavor_nics"></span></td></tr>
</tbody>
</table>
<script type="text/javascript" charset="utf-8">
var selected_flavor;
var flavors = ({{ flavors|safe|default:"{}" }});
var flavor_id = $("#id_flavor").children(":selected").val();
$("#id_flavor").change(function() {
selected_flavor = flavors[this.value]
$("#bm_flavor_name").text(selected_flavor["name"]);
$("#bm_flavor_cpus").text(selected_flavor["cpus"]);
$("#bm_flavor_ram").text(selected_flavor["ram"]);
$("#bm_flavor_nics").text(selected_flavor["nics"]);
$("#bm_flavor_disks").text(selected_flavor["disks"]);
})
if (flavor_id) {
selected_flavor = flavors[flavor_id]
$("#bm_flavor_name").text(selected_flavor["name"]);
$("#bm_flavor_cpus").text(selected_flavor["cpus"]);
$("#bm_flavor_ram").text(selected_flavor["ram"]);
$("#bm_flavor_nics").text(selected_flavor["nics"]);
$("#bm_flavor_disks").text(selected_flavor["disks"]);
}
</script>

View File

@ -0,0 +1,6 @@
{% extends 'project/servers/_flavors_and_quotas.html' %}
{% load i18n %}
{% block help_message %}
<p>{% blocktrans %}Specify the details for launching a server.{% endblocktrans %}</p>
{% endblock %}

View File

@ -16,6 +16,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import json
import logging
from oslo_utils import units
@ -27,6 +28,7 @@ from django.views.decorators.debug import sensitive_variables
from horizon import exceptions
from horizon import forms
from horizon.templatetags import sizeformat
from horizon.utils import functions
from horizon import workflows
@ -86,6 +88,8 @@ class SetServerDetailsAction(workflows.Action):
class Meta(object):
name = _("Details")
help_text_template = ("project/servers/"
"_launch_details_help.html")
def __init__(self, request, context, *args, **kwargs):
self._init_images_cache()
@ -118,8 +122,6 @@ class SetServerDetailsAction(workflows.Action):
flavor_list.sort()
if not flavor_list:
flavor_list.insert(0, ("", _("No flavors found")))
elif len(flavor_list) > 1:
flavor_list.insert(0, ("", _("Select Flavor")))
return flavor_list
def populate_availability_zone_choices(self, request, context):
@ -160,6 +162,44 @@ class SetServerDetailsAction(workflows.Action):
choices.insert(0, ("", _("No images available")))
return choices
def get_help_text(self, extra_context=None):
extra = {} if extra_context is None else dict(extra_context)
try:
flavors = mogan.flavor_list(self.request)
flavors_dict = {}
for flavor in flavors:
cpus = "%s %s cores" % (flavor.cpus['model'],
flavor.cpus['cores'])
size_ram = sizeformat.mb_float_format(flavor.memory['size_mb'])
ram = "%s %s" % (size_ram, flavor.memory['type'])
disks = ""
for disk in flavor.disks:
if disks != "":
disks += "<br>"
size_disk = sizeformat.diskgbformat(disk['size_gb'])
disk = "%s %s" % (disk['type'], size_disk)
disks += disk
nics = ""
for nic in flavor.nics:
if nics != "":
nics += "<br>"
nic = "%s %s" % (nic['type'], nic['speed'])
nics += nic
flavor_dict = {'name': flavor.name,
'cpus': cpus,
'ram': ram,
'disks': disks,
'nics': nics}
flavors_dict[flavor.uuid] = flavor_dict
extra['flavors'] = json.dumps(flavors_dict)
except Exception:
exceptions.handle(self.request,
_("Unable to retrieve flavor information."))
return super(SetServerDetailsAction, self).get_help_text(extra)
class SetServerDetails(workflows.Step):
action_class = SetServerDetailsAction