)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cd919bc645ab3066be06eefe8d8cb52ef7aaeeb","unresolved":false,"context_lines":[{"line_number":12,"context_line":"global identification."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I4112ccd508eb85403933fec8b52efd468e866772"},{"line_number":15,"context_line":"Closes-bug: #1652642"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da4df55a_f70a3489","line":15,"updated":"2016-12-27 19:32:00.000000000","message":"We\u0027re going to need a spec for this. I think we could fast track it and make an exception for the spec freeze, but based on our policy we need a spec for all API impacting changes.","commit_id":"89bff053e6b4d3e5a9489b5c6fce514256049708"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a61eba9c4a5a0ba0bf8cde516912d436881867f6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"global identification."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"TODO: needs to fill out the api-ref"},{"line_number":15,"context_line":"TODO: needs to be an approved blueprint"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I4112ccd508eb85403933fec8b52efd468e866772"},{"line_number":18,"context_line":"Closes-bug: #1652642"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da4df55a_7912a058","line":15,"updated":"2016-12-28 17:05:52.000000000","message":"Track this against blueprint return-uuid-from-os-aggregates-api","commit_id":"63071ee7f27a276a592d8b0a7f6a653d6d32918f"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"89187be172daff09887e4a6d275e1f74593e9917","unresolved":false,"context_lines":[{"line_number":968,"context_line":"  in: body"},{"line_number":969,"context_line":"  required: false"},{"line_number":970,"context_line":"  type: string"},{"line_number":971,"context_line":"aggregate_uuid:"},{"line_number":972,"context_line":"  description: |"},{"line_number":973,"context_line":"    The UUID of the host aggregate."},{"line_number":974,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"da4df55a_1f4b335a","line":971,"updated":"2016-12-28 21:49:47.000000000","message":"This needs \"min_version: 2.41\" in it.","commit_id":"5bbb512b1bc9743c3cc04e6fe1688652e9b0eb5a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"73f8f3c8816ecef0c9cb3d794e13148caab9c50a","unresolved":false,"context_lines":[{"line_number":968,"context_line":"  in: body"},{"line_number":969,"context_line":"  required: false"},{"line_number":970,"context_line":"  type: string"},{"line_number":971,"context_line":"aggregate_uuid:"},{"line_number":972,"context_line":"  description: |"},{"line_number":973,"context_line":"    The UUID of the host aggregate."},{"line_number":974,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"da4df55a_1fb9732e","line":971,"in_reply_to":"da4df55a_1f4b335a","updated":"2016-12-28 21:53:13.000000000","message":"done!","commit_id":"5bbb512b1bc9743c3cc04e6fe1688652e9b0eb5a"}],"doc/api_samples/os-aggregates/v2.41/aggregate-post-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cd919bc645ab3066be06eefe8d8cb52ef7aaeeb","unresolved":false,"context_lines":[{"line_number":7,"context_line":"        \"id\": 1,"},{"line_number":8,"context_line":"        \"name\": \"name\","},{"line_number":9,"context_line":"        \"updated_at\": null"},{"line_number":10,"context_line":"    }"},{"line_number":11,"context_line":"}"}],"source_content_type":"application/json","patch_set":2,"id":"da4df55a_b7ed0cb9","line":10,"updated":"2016-12-27 19:32:00.000000000","message":"This is missing the uuid field in the v2.41 response.","commit_id":"89bff053e6b4d3e5a9489b5c6fce514256049708"}],"doc/api_samples/os-aggregates/v2.41/aggregate-update-post-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cd919bc645ab3066be06eefe8d8cb52ef7aaeeb","unresolved":false,"context_lines":[{"line_number":10,"context_line":"            \"availability_zone\": \"nova2\""},{"line_number":11,"context_line":"        },"},{"line_number":12,"context_line":"        \"name\": \"newname\","},{"line_number":13,"context_line":"        \"updated_at\": \"2016-12-26T22:16:16.230111\""},{"line_number":14,"context_line":"    }"},{"line_number":15,"context_line":"}"}],"source_content_type":"application/json","patch_set":2,"id":"da4df55a_d72c5004","line":13,"updated":"2016-12-27 19:32:00.000000000","message":"Missing uuid field in here.","commit_id":"89bff053e6b4d3e5a9489b5c6fce514256049708"}],"doc/api_samples/os-aggregates/v2.41/aggregates-add-host-post-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cd919bc645ab3066be06eefe8d8cb52ef7aaeeb","unresolved":false,"context_lines":[{"line_number":12,"context_line":"            \"availability_zone\": \"nova\""},{"line_number":13,"context_line":"        },"},{"line_number":14,"context_line":"        \"name\": \"name\","},{"line_number":15,"context_line":"        \"updated_at\": null"},{"line_number":16,"context_line":"    }"},{"line_number":17,"context_line":"}"}],"source_content_type":"application/json","patch_set":2,"id":"da4df55a_17333863","line":15,"updated":"2016-12-27 19:32:00.000000000","message":"Missing uuid field.","commit_id":"89bff053e6b4d3e5a9489b5c6fce514256049708"}],"doc/api_samples/os-aggregates/v2.41/aggregates-get-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cd919bc645ab3066be06eefe8d8cb52ef7aaeeb","unresolved":false,"context_lines":[{"line_number":10,"context_line":"            \"availability_zone\": \"nova\""},{"line_number":11,"context_line":"        },"},{"line_number":12,"context_line":"        \"name\": \"name\","},{"line_number":13,"context_line":"        \"updated_at\": null"},{"line_number":14,"context_line":"    }"},{"line_number":15,"context_line":"}"}],"source_content_type":"application/json","patch_set":2,"id":"da4df55a_37383c3d","line":13,"updated":"2016-12-27 19:32:00.000000000","message":"Missing uuid field.","commit_id":"89bff053e6b4d3e5a9489b5c6fce514256049708"}],"nova/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5dc90086ff94b9a96c317f0c956e99dcef02655c","unresolved":false,"context_lines":[{"line_number":449,"context_line":"2.41"},{"line_number":450,"context_line":"----"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"  The \u0027uuid\u0027 attribute of an aggregate is now returned from calls to GET"},{"line_number":453,"context_line":"  `/os-aggregates`. This attribute is auto-generated upon creation of an"},{"line_number":454,"context_line":"  aggregate. The `os-aggregates` API resource endpoint remains an"},{"line_number":455,"context_line":"  administrator-only API."}],"source_content_type":"text/x-rst","patch_set":4,"id":"da4df55a_8950e8d5","line":452,"range":{"start_line":452,"start_character":69,"end_line":452,"end_character":72},"updated":"2016-12-28 00:11:41.000000000","message":"And POST and PUT...basically everything with os-aggregates.","commit_id":"63071ee7f27a276a592d8b0a7f6a653d6d32918f"}],"nova/tests/functional/api_sample_tests/api_samples/os-aggregates/v2.41/aggregate-post-resp.json.tpl":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cd919bc645ab3066be06eefe8d8cb52ef7aaeeb","unresolved":false,"context_lines":[{"line_number":6,"context_line":"        \"deleted_at\": null,"},{"line_number":7,"context_line":"        \"id\": %(aggregate_id)s,"},{"line_number":8,"context_line":"        \"name\": \"name\","},{"line_number":9,"context_line":"        \"updated_at\": null"},{"line_number":10,"context_line":"    }"},{"line_number":11,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":2,"id":"da4df55a_d71370b6","line":9,"updated":"2016-12-27 19:32:00.000000000","message":"missing uuid","commit_id":"89bff053e6b4d3e5a9489b5c6fce514256049708"}],"nova/tests/functional/api_sample_tests/test_aggregates.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a69df12e3da174c5482c6fb9133a6c1db16076e","unresolved":false,"context_lines":[{"line_number":84,"context_line":"class AggregatesV2_41_SampleJsonTest(api_sample_base.ApiSampleTestBaseV21):"},{"line_number":85,"context_line":"    ADMIN_API \u003d True"},{"line_number":86,"context_line":"    sample_dir \u003d \"os-aggregates\""},{"line_number":87,"context_line":"    microversion \u003d \u00272.41\u0027"},{"line_number":88,"context_line":"    scenarios \u003d ["},{"line_number":89,"context_line":"        ("},{"line_number":90,"context_line":"            \"v2.41\", {"}],"source_content_type":"text/x-python","patch_set":3,"id":"da4df55a_86537738","line":87,"updated":"2016-12-27 23:18:55.000000000","message":"This isn\u0027t getting set on self.api which makes the requests, so you need to explicitly set it, like in here:\n\nhttps://github.com/openstack/nova/blob/d442488ebe19a6b3ddea6ec8668f92c7e2a0a644/nova/tests/functional/api_sample_tests/test_hypervisors.py#L142\n\nThat\u0027s a bit of a hack and I feel like the base class should handle that.","commit_id":"436970e154519cdcdfc1a3f1993297209ea48026"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"18f5b1d7448e09555c11debf0680486e7f3413cb","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    microversion \u003d \u00272.41\u0027"},{"line_number":88,"context_line":"    scenarios \u003d ["},{"line_number":89,"context_line":"        ("},{"line_number":90,"context_line":"            \"v2.41\", {"},{"line_number":91,"context_line":"                \u0027api_major_version\u0027: \u0027v2.1\u0027,"},{"line_number":92,"context_line":"                \u0027microversion\u0027: \u00272.41\u0027"},{"line_number":93,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":3,"id":"da4df55a_060f8788","line":90,"range":{"start_line":90,"start_character":13,"end_line":90,"end_character":18},"updated":"2016-12-27 22:37:16.000000000","message":"I\u0027m not sure but I think this needs to be v2_41 - it might just be the name it puts on the test though.","commit_id":"436970e154519cdcdfc1a3f1993297209ea48026"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"18f5b1d7448e09555c11debf0680486e7f3413cb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        ("},{"line_number":90,"context_line":"            \"v2.41\", {"},{"line_number":91,"context_line":"                \u0027api_major_version\u0027: \u0027v2.1\u0027,"},{"line_number":92,"context_line":"                \u0027microversion\u0027: \u00272.41\u0027"},{"line_number":93,"context_line":"            },"},{"line_number":94,"context_line":"        )"},{"line_number":95,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":3,"id":"da4df55a_26280be2","line":92,"updated":"2016-12-27 22:37:16.000000000","message":"I believe this is redundant since you already set the microversion attribute above.","commit_id":"436970e154519cdcdfc1a3f1993297209ea48026"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a69df12e3da174c5482c6fb9133a6c1db16076e","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def _test_aggregate_create(self):"},{"line_number":98,"context_line":"        subs \u003d {"},{"line_number":99,"context_line":"            \"aggregate_id\": \u0027(?P\u003cid\u003e\\d+)\u0027,"},{"line_number":100,"context_line":"            \u0027uuid\u0027: \u0027[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}\u0027"},{"line_number":101,"context_line":"                    \u0027-[0-9a-f]{4}-[0-9a-f]{12}\u0027,"},{"line_number":102,"context_line":"        }"},{"line_number":103,"context_line":"        response \u003d self._do_post(\u0027os-aggregates\u0027, \u0027aggregate-post-req\u0027, subs)"},{"line_number":104,"context_line":"        return self._verify_response(\u0027aggregate-post-resp\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da4df55a_a6323b0e","line":101,"range":{"start_line":100,"start_character":12,"end_line":101,"end_character":48},"updated":"2016-12-27 23:18:55.000000000","message":"I don\u0027t think we actually need this because of:\n\nhttps://github.com/openstack/nova/blob/d442488ebe19a6b3ddea6ec8668f92c7e2a0a644/nova/tests/functional/api_samples_test_base.py#L432","commit_id":"436970e154519cdcdfc1a3f1993297209ea48026"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8c6de0bbc61c2fe8a53bb8c0f282ed1a06bea5c7","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        # maybe good enough. Alternatively we have to mock out the DB API"},{"line_number":105,"context_line":"        # to return a fake aggregate with a hard-coded uuid that matches the"},{"line_number":106,"context_line":"        # API sample which isn\u0027t fun either."},{"line_number":107,"context_line":"        subs[\u0027uuid\u0027] \u003d jsonutils.loads(response.content)[\u0027aggregate\u0027][\u0027uuid\u0027]"},{"line_number":108,"context_line":"        return self._verify_response(\u0027aggregate-post-resp\u0027,"},{"line_number":109,"context_line":"                                     subs, response, 200)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_3efa4043","line":107,"updated":"2017-01-03 07:41:24.000000000","message":"I\u0027m not sure it is worth to verify that the uuid is equal or not. In the most of API sample test, it only ensure the uuid is existed by comparing the sample file and template file.\n\nWe can just do like this https://github.com/openstack/nova/blob/master/nova/tests/functional/api_sample_tests/test_servers.py#L64","commit_id":"3f7c701a51a93b3bb46d026ccbd9444d5844d686"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8d76fe14a23c92d9743b6e0324ee6bbe2f197315","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        # maybe good enough. Alternatively we have to mock out the DB API"},{"line_number":105,"context_line":"        # to return a fake aggregate with a hard-coded uuid that matches the"},{"line_number":106,"context_line":"        # API sample which isn\u0027t fun either."},{"line_number":107,"context_line":"        subs[\u0027uuid\u0027] \u003d jsonutils.loads(response.content)[\u0027aggregate\u0027][\u0027uuid\u0027]"},{"line_number":108,"context_line":"        return self._verify_response(\u0027aggregate-post-resp\u0027,"},{"line_number":109,"context_line":"                                     subs, response, 200)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_c9d059f9","line":107,"in_reply_to":"ba5201f7_3efa4043","updated":"2017-01-04 19:11:02.000000000","message":"@alex_xu: Yeah, that\u0027s how I had things originally:\n\nhttps://review.openstack.org/#/c/415031/3/nova/tests/functional/api_sample_tests/test_aggregates.py\n\nMatt changed it to this for a reason, though. Matt, can you elaborate? What was tripping you up about using a uuid regex substitution?","commit_id":"3f7c701a51a93b3bb46d026ccbd9444d5844d686"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa94a7aa06ef93d2c7f170c4eb674db5ae5f1f32","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        # maybe good enough. Alternatively we have to mock out the DB API"},{"line_number":105,"context_line":"        # to return a fake aggregate with a hard-coded uuid that matches the"},{"line_number":106,"context_line":"        # API sample which isn\u0027t fun either."},{"line_number":107,"context_line":"        subs[\u0027uuid\u0027] \u003d jsonutils.loads(response.content)[\u0027aggregate\u0027][\u0027uuid\u0027]"},{"line_number":108,"context_line":"        return self._verify_response(\u0027aggregate-post-resp\u0027,"},{"line_number":109,"context_line":"                                     subs, response, 200)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_94ae6496","line":107,"in_reply_to":"ba5201f7_49ce292f","updated":"2017-01-04 19:33:58.000000000","message":"So as noted above we\u0027d have to stub the DB API to return a static aggregate uuid to validate with subs in the response. I didn\u0027t want to do that here.\n\nBut for the other tests that build on this created aggregate, like test_update_aggregate, we could sub out the uuid in the response for those with the uuid from the aggregate we created here, like when comparing the aggregate-update-post-resp response for example. We\u0027d have to look at doing that in a generic way so we could feed the subs back into the parent class.","commit_id":"3f7c701a51a93b3bb46d026ccbd9444d5844d686"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"22688eb3da08cf94112113e3bf9455fb221c0c42","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        # maybe good enough. Alternatively we have to mock out the DB API"},{"line_number":105,"context_line":"        # to return a fake aggregate with a hard-coded uuid that matches the"},{"line_number":106,"context_line":"        # API sample which isn\u0027t fun either."},{"line_number":107,"context_line":"        subs[\u0027uuid\u0027] \u003d jsonutils.loads(response.content)[\u0027aggregate\u0027][\u0027uuid\u0027]"},{"line_number":108,"context_line":"        return self._verify_response(\u0027aggregate-post-resp\u0027,"},{"line_number":109,"context_line":"                                     subs, response, 200)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_49ce292f","line":107,"in_reply_to":"ba5201f7_c9d059f9","updated":"2017-01-04 19:14:06.000000000","message":"_verify_response already handles it eventually here:\n\nhttps://github.com/openstack/nova/blob/7f05ff78509d7832e5caac193072518f5d4c6ff3/nova/tests/functional/api_samples_test_base.py#L341\n\nhttps://github.com/openstack/nova/blob/7f05ff78509d7832e5caac193072518f5d4c6ff3/nova/tests/functional/api_samples_test_base.py#L432","commit_id":"3f7c701a51a93b3bb46d026ccbd9444d5844d686"}]}
