From 3bfaf79732a5c4493ae700722c48a20dab8690a2 Mon Sep 17 00:00:00 2001
From: David Moreau Simard <dmsimard@iweb.com>
Date: Tue, 30 Jun 2015 14:36:51 -0400
Subject: [PATCH] Show which aggregate a hypervisor is member of

This adds support for showing which host aggregates
a hypervisor is member of, if any.
It supports hypervisors with or without nova cells.

Closes-bug: #1470875
Change-Id: I0cfe4f15fa8f8ba0be3295b79cd438998893114c
---
 openstackclient/compute/v2/hypervisor.py | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/openstackclient/compute/v2/hypervisor.py b/openstackclient/compute/v2/hypervisor.py
index 65035d0431..f33beb0892 100644
--- a/openstackclient/compute/v2/hypervisor.py
+++ b/openstackclient/compute/v2/hypervisor.py
@@ -77,6 +77,29 @@ class ShowHypervisor(show.ShowOne):
         hypervisor = utils.find_resource(compute_client.hypervisors,
                                          parsed_args.hypervisor)._info.copy()
 
+        aggregates = compute_client.aggregates.list()
+        hypervisor["aggregates"] = list()
+        if aggregates:
+            # Hypervisors in nova cells are prefixed by "<cell>@"
+            if "@" in hypervisor['service']['host']:
+                cell, service_host = hypervisor['service']['host'].split('@',
+                                                                         1)
+            else:
+                cell = None
+                service_host = hypervisor['service']['host']
+
+            if cell:
+                # The host aggregates are also prefixed by "<cell>@"
+                member_of = [aggregate.name
+                             for aggregate in aggregates
+                             if cell in aggregate.name and
+                             service_host in aggregate.hosts]
+            else:
+                member_of = [aggregate.name
+                             for aggregate in aggregates
+                             if service_host in aggregate.hosts]
+            hypervisor["aggregates"] = member_of
+
         uptime = compute_client.hypervisors.uptime(hypervisor['id'])._info
         # Extract data from uptime value
         # format: 0 up 0,  0 users,  load average: 0, 0, 0