summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLadislav Smola <lsmola@redhat.com>2013-07-29 08:45:56 +0200
committerTomas Sedovic <tomas@sedovic.cz>2013-08-01 16:18:58 +0200
commitb28ae98f317cfd6c8016a5f263e46a94dafbfbe7 (patch)
tree2bdaff953b24f950bc0da7f23427daef6f11d854
parent4a315458a58ac1e585a763c384f6b9f27f59b9f5 (diff)
downloadtuskar-ui-b28ae98f317cfd6c8016a5f263e46a94dafbfbe7.tar.gz
Node instaces from nova
- connecting nova baremaetal instances, to nova instances Change-Id: If8a8ae1c98325faec2a0e1ad2a9ccb3bc8fa9cc5
-rw-r--r--openstack_dashboard/api/tuskar.py86
-rw-r--r--openstack_dashboard/dashboards/infrastructure/resource_management/nodes/tables.py8
-rw-r--r--openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/nodes/_detail_overview.html14
3 files changed, 72 insertions, 36 deletions
diff --git a/openstack_dashboard/api/tuskar.py b/openstack_dashboard/api/tuskar.py
index db2ae0e1..6c0fabda 100644
--- a/openstack_dashboard/api/tuskar.py
+++ b/openstack_dashboard/api/tuskar.py
@@ -139,7 +139,7 @@ class Node(StringIdAPIResourceWrapper):
dummy model.
"""
_attrs = ['id', 'pm_address', 'cpus', 'memory_mb', 'service_host',
- 'local_gb']
+ 'local_gb', 'pm_user']
@classmethod
def manager(cls):
@@ -153,7 +153,36 @@ class Node(StringIdAPIResourceWrapper):
@classmethod
def get(cls, request, node_id):
- return cls(cls.manager().get(node_id))
+ # FIXME ugly, fix after demo, make abstraction of instance details
+ # this is realy not optimal, but i dont hve time do fix it now
+ instances, more = nova.server_list(
+ request,
+ search_opts={'paginate': True},
+ all_tenants=True)
+
+ instance_details = {}
+ for instance in instances:
+ id = (instance.
+ _apiresource._info['OS-EXT-SRV-ATTR:hypervisor_hostname'])
+ instance_details[id] = instance
+
+ node = cls(cls.manager().get(node_id))
+
+ detail = instance_details.get(node_id)
+ if detail:
+ addresses = detail._apiresource.addresses.get('ctlplane')
+ if addresses:
+ node.ip_address_other = (", "
+ .join([addr['addr'] for addr in addresses]))
+
+ node.status = detail._apiresource._info['OS-EXT-STS:vm_state']
+ node.power_mamanegemt = ""
+ if node.pm_user:
+ node.power_mamanegemt = node.pm_user + "/********"
+ else:
+ node.status = 'unprovisioned'
+
+ return node
@classmethod
def list(cls, request):
@@ -178,18 +207,22 @@ class Node(StringIdAPIResourceWrapper):
# FIXME: just a mock of used instances, add real values
used_instances = 0
+ if not self.rack or not self.rack.resource_class:
+ return []
resource_class = self.rack.resource_class
+
added_flavors = tuskarclient(self.request).flavors\
.list(resource_class.id)
self._flavors = []
- for f in added_flavors:
- flavor_obj = Flavor(f)
- #flavor_obj.max_vms = f.max_vms
+ if added_flavors:
+ for f in added_flavors:
+ flavor_obj = Flavor(f)
+ #flavor_obj.max_vms = f.max_vms
- # FIXME just a mock of used instances, add real values
- used_instances += 5
- flavor_obj.used_instances = used_instances
- self._flavors.append(flavor_obj)
+ # FIXME just a mock of used instances, add real values
+ used_instances += 5
+ flavor_obj.used_instances = used_instances
+ self._flavors.append(flavor_obj)
return self._flavors
@@ -202,9 +235,13 @@ class Node(StringIdAPIResourceWrapper):
@property
def rack(self):
- if not hasattr(self, '_rack'):
- self._rack = self._apiresource.rack
- return self._rack
+ # FIXME association should always contain something
+ try:
+ if not hasattr(self, '_rack'):
+ self._rack = self._apiresource.rack
+ return self._rack
+ except:
+ return None
@property
def cpu(self):
@@ -300,7 +337,7 @@ class Node(StringIdAPIResourceWrapper):
@property
# FIXME: just mock implementation, add proper one
def is_provisioned(self):
- return self.rack is not None
+ return self.status != "unprovisioned" and self.rack
@property
def alerts(self):
@@ -365,6 +402,7 @@ class Rack(StringIdAPIResourceWrapper):
@classmethod
def get(cls, request, rack_id):
rack = cls(tuskarclient(request).racks.get(rack_id))
+ rack.request = request
return rack
@property
@@ -388,7 +426,7 @@ class Rack(StringIdAPIResourceWrapper):
@property
def list_nodes(self):
if not hasattr(self, '_nodes'):
- self._nodes = [Node.get(None, node['id']) for node in (
+ self._nodes = [Node.get(self.request, node['id']) for node in (
self._apiresource.nodes)]
return self._nodes
@@ -468,21 +506,25 @@ class Rack(StringIdAPIResourceWrapper):
@property
def list_flavors(self):
+
if not hasattr(self, '_flavors'):
# FIXME just a mock of used instances, add real values
used_instances = 0
+ if not self.resource_class:
+ return []
added_flavors = tuskarclient(self.request).flavors\
.list(self.resource_class.id)
self._flavors = []
- for f in added_flavors:
- flavor_obj = Flavor(f)
- #flavor_obj.max_vms = f.max_vms
-
- # FIXME just a mock of used instances, add real values
- used_instances += 2
- flavor_obj.used_instances = used_instances
- self._flavors.append(flavor_obj)
+ if added_flavors:
+ for f in added_flavors:
+ flavor_obj = Flavor(f)
+ #flavor_obj.max_vms = f.max_vms
+
+ # FIXME just a mock of used instances, add real values
+ used_instances += 2
+ flavor_obj.used_instances = used_instances
+ self._flavors.append(flavor_obj)
return self._flavors
diff --git a/openstack_dashboard/dashboards/infrastructure/resource_management/nodes/tables.py b/openstack_dashboard/dashboards/infrastructure/resource_management/nodes/tables.py
index f1b19783..2bcf1cdc 100644
--- a/openstack_dashboard/dashboards/infrastructure/resource_management/nodes/tables.py
+++ b/openstack_dashboard/dashboards/infrastructure/resource_management/nodes/tables.py
@@ -35,10 +35,6 @@ class NodesFilterAction(tables.FilterAction):
class NodesTable(tables.DataTable):
- STATUS_CHOICES = (
- ("active", True),
- ("error", False),
- )
service_host = tables.Column("service_host",
link=("horizon:infrastructure:"
"resource_management:nodes:detail"),
@@ -46,9 +42,7 @@ class NodesTable(tables.DataTable):
mac_address = tables.Column("mac_address", verbose_name=_("MAC Address"))
pm_address = tables.Column("pm_address", verbose_name=_("IP Address"))
status = tables.Column("status",
- verbose_name=_("Status"),
- status=True,
- status_choices=STATUS_CHOICES)
+ verbose_name=_("Status"))
usage = tables.Column("usage",
verbose_name=_("Usage"))
diff --git a/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/nodes/_detail_overview.html b/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/nodes/_detail_overview.html
index 82cc68e3..f4cad731 100644
--- a/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/nodes/_detail_overview.html
+++ b/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/nodes/_detail_overview.html
@@ -9,12 +9,12 @@
<dl>
<dt>{% trans "MAC Address" %}</dt>
<dd>{{ node.mac_address|default:_("None") }}</dd>
- <dt>{% trans "Management IP" %}</dt>
- <dd>{{ node.ip_address|default:_("None") }}</dd>
- <dt>{% trans "IP Address (Other)" %}</dt>
+ <dt>{% trans "IPs" %}</dt>
<dd>{{ node.ip_address_other|default:_("None") }}</dd>
- <dt>{% trans "Location" %}</dt>
- <dd>{{ node.rack.location|default:_("None") }}</dd>
+ <dt>{% trans "Management IP" %}</dt>
+ <dd>{{ node.pm_address|default:_("None") }}</dd>
+ <dt>{% trans "Power Management" %}</dt>
+ <dd>{{ node.rack.power_management|default:_("-") }}</dd>
<dt>{% trans "Status" %}</dt>
<dd>{{ node.status|default:_("None") }}</dd>
</dl>
@@ -29,8 +29,8 @@
{% else %}
<dd>{% trans "None" %}</dd>
{% endif %}
- <dt>{% trans "Region" %}</dt>
- <dd>{{ node.region|default:_("None") }}</dd>
+ <!--<dt>{% trans "Region" %}</dt>
+ <dd>{{ node.region|default:_("None") }}</dd>-->
<dt>{% trans "Node Type" %}</dt>
<dd>{{ node.type|default:_("none") }}</dd>
<dt>{% trans "Provisioned Image" %}</dt>