aurora update info command should print out update metadata
* Metadata is represented as a list of key value pair

Bugs closed: AURORA-1906

Reviewed at https://reviews.apache.org/r/66980/
diff --git a/src/main/python/apache/aurora/client/cli/update.py b/src/main/python/apache/aurora/client/cli/update.py
index 7abc5d1..f9d8417 100644
--- a/src/main/python/apache/aurora/client/cli/update.py
+++ b/src/main/python/apache/aurora/client/cli/update.py
@@ -585,6 +585,11 @@
         "instance_update_events": []
       }
 
+      if details.update.summary.metadata is not None:
+        result["metadata"] = [{metadata.key: metadata.value} for metadata in sorted(
+            [update_metadata for update_metadata in details.update.summary.metadata],
+            key=lambda x: (x.key, x.value))]
+
       update_events = details.updateEvents
       if update_events is not None and len(update_events) > 0:
         for event in update_events:
@@ -632,6 +637,13 @@
             event.instanceId, format_timestamp(event.timestampMs),
             JobUpdateAction._VALUES_TO_NAMES[event.action]
           ), indent=2)
+      if details.update.summary.metadata is not None:
+        update_metadata = sorted(
+            [metadata for metadata in details.update.summary.metadata],
+            key=lambda x: (x.key, x.value))
+        context.print_out("Metadata:")
+        for metadata in update_metadata:
+          context.print_out("%s: %s" % (metadata.key, metadata.value), indent=2)
     return EXIT_OK
 
 
diff --git a/src/test/python/apache/aurora/client/cli/test_supdate.py b/src/test/python/apache/aurora/client/cli/test_supdate.py
index a3bb5b9..5dfa38f 100644
--- a/src/test/python/apache/aurora/client/cli/test_supdate.py
+++ b/src/test/python/apache/aurora/client/cli/test_supdate.py
@@ -616,9 +616,13 @@
                 key=UPDATE_KEY,
                 user="me",
                 state=JobUpdateState(
-                  status=JobUpdateStatus.ROLLING_FORWARD,
-                  createdTimestampMs=1000,
-                  lastModifiedTimestampMs=2000))),
+                    status=JobUpdateStatus.ROLLING_FORWARD,
+                    createdTimestampMs=1000,
+                    lastModifiedTimestampMs=2000),
+                metadata={
+                    Metadata("issue", "test"),
+                    Metadata("country", "America"),
+                    Metadata("country", "Canada")})),
         updateEvents=[
             JobUpdateEvent(
                 status=JobUpdateStatus.ROLLING_FORWARD,
@@ -671,7 +675,11 @@
   Instance 1 at 1970-01-01T00:00:06: INSTANCE_UPDATING
   Instance 2 at 1970-01-01T00:00:07: INSTANCE_UPDATING
   Instance 1 at 1970-01-01T00:00:08: INSTANCE_UPDATED
-  Instance 2 at 1970-01-01T00:00:09: INSTANCE_UPDATED"""
+  Instance 2 at 1970-01-01T00:00:09: INSTANCE_UPDATED
+Metadata:
+  country: America
+  country: Canada
+  issue: test"""
 
   def test_update_info(self):
     self._mock_options.id = 'update_id'
@@ -734,6 +742,11 @@
                 "instance": 2,
                 "timestamp": 9000
             }
+        ],
+        "metadata": [
+            {"country": "America"},
+            {"country": "Canada"},
+            {"issue": "test"}
         ]
     }