Several minor changes

* Base image name and keypair name were added to cluster details
 * In Node Group Details renamed fields: 'Node Group' to 'Name', 'Nodes Count'
   to 'Number of Nodes', 'Node Group Template' to 'Template'.
 * In cluster details instances now have http links

Change-Id: Ie582228c4956145a222f7021658c538ca1c7b80a
This commit is contained in:
Dmitry Mescheryakov 2013-07-01 17:47:24 +04:00
parent b9cd0acb8b
commit 8ad431d6ed
5 changed files with 61 additions and 6 deletions

View File

@ -22,9 +22,12 @@ from django.utils.translation import ugettext_lazy as _
from horizon import tables
from horizon import tabs
from savannadashboard.utils import compatibility
from savannadashboard.utils import importutils
nova = importutils.import_any('openstack_dashboard.api.nova',
'horizon.api.nova')
glance = importutils.import_any('openstack_dashboard.api.glance',
'horizon.api.glance')
from savannadashboard.api import client as savannaclient
@ -47,7 +50,10 @@ class GeneralTab(tabs.Tab):
if str(val).startswith("http://"):
cluster.info[info_key][key] = build_link(val)
return {"cluster": cluster}
base_image = glance.image_get(request,
cluster.default_image_id)
return {"cluster": cluster, "base_image": base_image}
def build_link(url):
@ -67,6 +73,9 @@ class NodeGroupsTab(tabs.Tab):
if not ng["flavor_id"]:
continue
ng["flavor_name"] = nova.flavor_get(request, ng["flavor_id"]).name
ng["node_group_template"] = savanna.node_group_templates.get(
ng["node_group_template_id"])
return {"cluster": cluster}
@ -81,6 +90,8 @@ class Instance(object):
class InstancesTable(tables.DataTable):
name = tables.Column("name",
link=(compatibility.convert_url(
"horizon:project:instances:detail")),
verbose_name=_("Name"))
internal_ip = tables.Column("internal_ip",

View File

@ -15,10 +15,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from django.utils.translation import ugettext as _
import logging
from django.utils.translation import ugettext as _
import horizon
from savannadashboard.utils import compatibility
LOG = logging.getLogger(__name__)
class SavannaDashboard(horizon.Dashboard):
name = _("Savanna")
@ -34,3 +39,6 @@ class SavannaDashboard(horizon.Dashboard):
horizon.register(SavannaDashboard)
LOG.info('Savanna recognizes Dashboard release as "%s"' %
compatibility.get_dashboard_release())

View File

@ -15,6 +15,12 @@
<dt>{% trans "Hadoop Version" %}</dt>
<dd>{{ cluster.hadoop_version }}</dd>
</dl>
<dl>
<dt>{% trans "Base Image" %}</dt>
<dd>{{ base_image.name }}</dd>
<dt>{% trans "Keypair" %}</dt>
<dd>{{ cluster.user_keypair_id }}</dd>
</dl>
<dl>
<dt>{% trans "Node Configurations" %}</dt>
{% if cluster.cluster_configs %}

View File

@ -3,16 +3,16 @@
<div class="status row-fluid detail">
{% for node_group in cluster.node_groups %}
<dl class="well">
<h4>{% trans "Node Group" %}: {{ node_group.name }}</h4>
<dt>{% trans "Nodes Count" %}</dt>
<h4>{% trans "Name" %}: {{ node_group.name }}</h4>
<dt>{% trans "Number of Nodes" %}</dt>
<dd>{{ node_group.count }}</dd>
<dt>{% trans "Flavor" %}</dt>
<dd>{{ node_group.flavor_name|default:"Flavor is not specified" }}</dd>
<dt>{% trans "Node Group Template" %}</dt>
<dt>{% trans "Template" %}</dt>
{% if node_group.node_group_template_id %}
<dd><a href="/savanna/nodegroup_templates/{{ node_group.node_group_template_id }}">{{ node_group.node_group_template_id }} </a></dd>
<dd><a href="/savanna/nodegroup_templates/{{ node_group.node_group_template_id }}">{{ node_group.node_group_template.name }} </a></dd>
{% else %}
<dd>{% trans "Template not specified" %}</dd>
{% endif %}

View File

@ -0,0 +1,30 @@
"""Provide compatibility with various OpenStack releases.
All the code which depends on OpenStack release version should be placed there.
Folsom is the oldest recognizable release.
"""
def get_dashboard_release():
"""Return release codename of currently running Dashboard."""
import horizon.version
if hasattr(horizon.version, 'HORIZON_VERSION'):
return 'folsom'
return 'grizzly'
def _is_folsom():
return get_dashboard_release() == 'folsom'
def convert_url(link):
"""Expect grizzly url and convert it to folsom if needed
For example, 'horizon:project:instances:detail' should be converted to
'horizon:nova:instances:detail'
"""
if _is_folsom():
return link.replace('project', 'nova', 1)
return link