diff --git a/openstackclient/compute/v2/aggregate.py b/openstackclient/compute/v2/aggregate.py
index 7f9161a996..fa64647899 100644
--- a/openstackclient/compute/v2/aggregate.py
+++ b/openstackclient/compute/v2/aggregate.py
@@ -101,6 +101,8 @@ class CreateAggregate(command.ShowOne):
                 parsed_args.property,
             )._info)
 
+        # TODO(dtroyer): re-format metadata field to properites as
+        #                in the set command
         return zip(*sorted(six.iteritems(info)))
 
 
diff --git a/openstackclient/tests/functional/compute/v2/test_aggregate.py b/openstackclient/tests/functional/compute/v2/test_aggregate.py
index 590d28cb03..c591dd61fd 100644
--- a/openstackclient/tests/functional/compute/v2/test_aggregate.py
+++ b/openstackclient/tests/functional/compute/v2/test_aggregate.py
@@ -11,7 +11,6 @@
 #    under the License.
 
 import json
-import time
 import uuid
 
 from openstackclient.tests.functional import base
@@ -20,12 +19,13 @@ from openstackclient.tests.functional import base
 class AggregateTests(base.TestCase):
     """Functional tests for aggregate"""
 
-    def test_aggregate_create_and_delete(self):
+    def test_aggregate_crud(self):
         """Test create, delete multiple"""
         name1 = uuid.uuid4().hex
         cmd_output = json.loads(self.openstack(
             'aggregate create -f json ' +
             '--zone nova ' +
+            '--property a=b ' +
             name1
         ))
         self.assertEqual(
@@ -36,11 +36,17 @@ class AggregateTests(base.TestCase):
             'nova',
             cmd_output['availability_zone']
         )
+        # TODO(dtroyer): enable the following once the properties field
+        #                is correctly formatted in the create output
+        # self.assertIn(
+        #     "a='b'",
+        #     cmd_output['properties']
+        # )
 
         name2 = uuid.uuid4().hex
         cmd_output = json.loads(self.openstack(
             'aggregate create -f json ' +
-            '--zone nova ' +
+            '--zone external ' +
             name2
         ))
         self.assertEqual(
@@ -48,102 +54,15 @@ class AggregateTests(base.TestCase):
             cmd_output['name']
         )
         self.assertEqual(
-            'nova',
+            'external',
             cmd_output['availability_zone']
         )
 
-        # Loop a few times since this is timing-sensitive
-        # Just hard-code it for now, since there is no pause and it is
-        # racy we shouldn't have to wait too long, a minute or two
-        # seems reasonable
-        wait_time = 0
-        while wait_time <= 120:
-            cmd_output = json.loads(self.openstack(
-                'aggregate show -f json ' +
-                name2
-            ))
-            if cmd_output['name'] != name2:
-                # Hang out for a bit and try again
-                print('retrying aggregate check')
-                wait_time += 10
-                time.sleep(10)
-            else:
-                break
-
-        del_output = self.openstack(
-            'aggregate delete ' +
-            name1 + ' ' +
-            name2
-        )
-        self.assertOutput('', del_output)
-
-    def test_aggregate_list(self):
-        """Test aggregate list"""
-        name1 = uuid.uuid4().hex
-        self.openstack(
-            'aggregate create ' +
-            '--zone nova ' +
-            '--property a=b ' +
-            name1
-        )
-        self.addCleanup(
-            self.openstack,
-            'aggregate delete ' + name1,
-            fail_ok=True,
-        )
-
-        name2 = uuid.uuid4().hex
-        self.openstack(
-            'aggregate create ' +
-            '--zone internal ' +
-            '--property c=d ' +
-            name2
-        )
-        self.addCleanup(
-            self.openstack,
-            'aggregate delete ' + name2,
-            fail_ok=True,
-        )
-
-        cmd_output = json.loads(self.openstack(
-            'aggregate list -f json'
-        ))
-        names = [x['Name'] for x in cmd_output]
-        self.assertIn(name1, names)
-        self.assertIn(name2, names)
-        zones = [x['Availability Zone'] for x in cmd_output]
-        self.assertIn('nova', zones)
-        self.assertIn('internal', zones)
-
-        # Test aggregate list --long
-        cmd_output = json.loads(self.openstack(
-            'aggregate list --long -f json'
-        ))
-        names = [x['Name'] for x in cmd_output]
-        self.assertIn(name1, names)
-        self.assertIn(name2, names)
-        zones = [x['Availability Zone'] for x in cmd_output]
-        self.assertIn('nova', zones)
-        self.assertIn('internal', zones)
-        properties = [x['Properties'] for x in cmd_output]
-        self.assertIn({'a': 'b'}, properties)
-        self.assertIn({'c': 'd'}, properties)
-
-    def test_aggregate_set_and_unset(self):
-        """Test aggregate set, show and unset"""
-        name1 = uuid.uuid4().hex
-        name2 = uuid.uuid4().hex
-        self.openstack(
-            'aggregate create ' +
-            '--zone nova ' +
-            '--property a=b ' +
-            name1
-        )
-        self.addCleanup(self.openstack, 'aggregate delete ' + name2)
-
+        # Test aggregate set
+        name3 = uuid.uuid4().hex
         raw_output = self.openstack(
             'aggregate set ' +
-            '--name ' + name2 + ' ' +
+            '--name ' + name3 + ' ' +
             '--zone internal ' +
             '--no-property ' +
             '--property c=d ' +
@@ -153,10 +72,10 @@ class AggregateTests(base.TestCase):
 
         cmd_output = json.loads(self.openstack(
             'aggregate show -f json ' +
-            name2
+            name3
         ))
         self.assertEqual(
-            name2,
+            name3,
             cmd_output['name']
         )
         self.assertEqual(
@@ -172,23 +91,56 @@ class AggregateTests(base.TestCase):
             cmd_output['properties']
         )
 
+        # Test aggregate list
+        cmd_output = json.loads(self.openstack(
+            'aggregate list -f json'
+        ))
+        names = [x['Name'] for x in cmd_output]
+        self.assertIn(name3, names)
+        self.assertIn(name2, names)
+        zones = [x['Availability Zone'] for x in cmd_output]
+        self.assertIn('external', zones)
+        self.assertIn('internal', zones)
+
+        # Test aggregate list --long
+        cmd_output = json.loads(self.openstack(
+            'aggregate list --long -f json'
+        ))
+        names = [x['Name'] for x in cmd_output]
+        self.assertIn(name3, names)
+        self.assertIn(name2, names)
+        zones = [x['Availability Zone'] for x in cmd_output]
+        self.assertIn('external', zones)
+        self.assertIn('internal', zones)
+        properties = [x['Properties'] for x in cmd_output]
+        self.assertNotIn({'a': 'b'}, properties)
+        self.assertIn({'c': 'd'}, properties)
+
         # Test unset
         raw_output = self.openstack(
             'aggregate unset ' +
             '--property c ' +
-            name2
+            name3
         )
         self.assertOutput('', raw_output)
 
         cmd_output = json.loads(self.openstack(
             'aggregate show -f json ' +
-            name2
+            name3
         ))
         self.assertNotIn(
             "c='d'",
             cmd_output['properties']
         )
 
+        # test aggregate delete
+        del_output = self.openstack(
+            'aggregate delete ' +
+            name3 + ' ' +
+            name2
+        )
+        self.assertOutput('', del_output)
+
     def test_aggregate_add_and_remove_host(self):
         """Test aggregate add and remove host"""
         # Get a host