)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"4469b8765877f85d60443ccae427b897bbec157a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"placement: adds REST API for nested providers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new microversion (1.2) to the placement REST API for supporting"},{"line_number":10,"context_line":"nested resource providers. The only new attribute exposed through the"},{"line_number":11,"context_line":"public REST API is parent_provider_uuid, which should be"},{"line_number":12,"context_line":"self-describing."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"3a71b18c_b4cc3136","line":9,"range":{"start_line":9,"start_character":25,"end_line":9,"end_character":28},"updated":"2016-12-12 11:12:53.000000000","message":"1.3?","commit_id":"f2657a3e84f7ced023e6ca53c41f3fa905ee822e"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"4469b8765877f85d60443ccae427b897bbec157a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"self-describing."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Clients for the placement REST API can specify either"},{"line_number":15,"context_line":"OpenStack-API-Version: placement 1.2 or placement latest to handle the"},{"line_number":16,"context_line":"new parent_provider_uuid attribute and to query for resource providers"},{"line_number":17,"context_line":"in a provider tree."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"3a71b18c_74dff9d5","line":15,"range":{"start_line":15,"start_character":32,"end_line":15,"end_character":33},"updated":"2016-12-12 11:12:53.000000000","message":"ditto","commit_id":"f2657a3e84f7ced023e6ca53c41f3fa905ee822e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"eea6cd92f3dc84f8633bda8d76b2dee456173494","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"placement: adds REST API for nested providers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new microversion (1.3) to the placement REST API for supporting"},{"line_number":10,"context_line":"nested resource providers. The only new attribute exposed through the"},{"line_number":11,"context_line":"public REST API is parent_provider_uuid, which should be"},{"line_number":12,"context_line":"self-describing."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"ba5201f7_42867414","line":9,"updated":"2017-01-09 15:38:47.000000000","message":"1.4\n\nmicroversion wars!","commit_id":"f1819234765b42d6d02483b794841f9a21e483d4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c5ac0c43a9aedc9177e7eef78ea304ede4daa825","unresolved":false,"context_lines":[{"line_number":7,"context_line":"placement: adds REST API for nested providers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new microversion (1.11) to the placement REST API for supporting"},{"line_number":10,"context_line":"nested resource providers. The only new attribute exposed through the"},{"line_number":11,"context_line":"public REST API is \u0027parent_provider_uuid\u0027, which should be"},{"line_number":12,"context_line":"self-describing."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Clients for the placement REST API can specify either"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":45,"id":"7f515b1d_b9f607f9","line":11,"range":{"start_line":10,"start_character":27,"end_line":11,"end_character":41},"updated":"2017-10-04 17:07:24.000000000","message":"Why not also the root_provider_uuid?  (Haven\u0027t looked at the code yet.)","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f41e229a3279fda8cff632c618bfc7601a230744","unresolved":false,"context_lines":[{"line_number":7,"context_line":"placement: adds REST API for nested providers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new microversion (1.11) to the placement REST API for supporting"},{"line_number":10,"context_line":"nested resource providers. The only new attribute exposed through the"},{"line_number":11,"context_line":"public REST API is \u0027parent_provider_uuid\u0027, which should be"},{"line_number":12,"context_line":"self-describing."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Clients for the placement REST API can specify either"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":45,"id":"5f4e5783_df9410eb","line":11,"range":{"start_line":10,"start_character":27,"end_line":11,"end_character":41},"in_reply_to":"7f515b1d_b9f607f9","updated":"2017-10-10 16:44:08.000000000","message":"Done","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"8df50cc2268ffa3f998576c91ba52b8c945269ec","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"placement: adds REST API for nested providers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new microversion (1.13) to the placement REST API for supporting"},{"line_number":10,"context_line":"nested resource providers."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"For POST /resource_providers and PUT /resource_providers/{uuid}, a new"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":74,"id":"ff82abbf_868c6336","line":9,"range":{"start_line":9,"start_character":24,"end_line":9,"end_character":30},"updated":"2017-11-29 15:53:44.000000000","message":"This should be 1.14, no?","commit_id":"c17c717801269c7f53b4fdc9a3bf23b855cce953"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"8df50cc2268ffa3f998576c91ba52b8c945269ec","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\u003crp_uuid\u003e"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Clients for the placement REST API can specify either"},{"line_number":26,"context_line":"\u0027OpenStack-API-Version: placement 1.13\u0027 or \u0027placement latest\u0027 to handle"},{"line_number":27,"context_line":"the new \u0027parent_provider_uuid\u0027 attribute and to query for resource"},{"line_number":28,"context_line":"providers in a provider tree."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":74,"id":"ff82abbf_66859f06","line":26,"range":{"start_line":26,"start_character":34,"end_line":26,"end_character":38},"updated":"2017-11-29 15:53:44.000000000","message":"ditto","commit_id":"c17c717801269c7f53b4fdc9a3bf23b855cce953"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ffbd2c227cb2faa37b2331dc162839193adbd510","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"placement: adds REST API for nested providers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new microversion (1.14) to the placement REST API for supporting"},{"line_number":10,"context_line":"nested resource providers."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"For POST /resource_providers and PUT /resource_providers/{uuid}, a new"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":75,"id":"ff82abbf_6b931102","line":9,"updated":"2017-11-30 12:40:33.000000000","message":"Forever in hope.","commit_id":"b503772064a5488c67e3c5f255c10d270cd0d27b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"30b549cc9c100b1cc2fe9edddd6a582319ef92cb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"placement: adds REST API for nested providers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new microversion (1.13) to the placement REST API for supporting"},{"line_number":10,"context_line":"nested resource providers."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"For POST /resource_providers and PUT /resource_providers/{uuid}, a new"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":77,"id":"ff82abbf_b9888522","line":9,"range":{"start_line":9,"start_character":28,"end_line":9,"end_character":29},"updated":"2017-11-30 21:10:44.000000000","message":"Looks like this got reverted at PS76.  It\u0027s 1.14, right?","commit_id":"26420ef9f66e8e25f8df9d3d145fe1228b52e5c1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"30b549cc9c100b1cc2fe9edddd6a582319ef92cb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\u003crp_uuid\u003e"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Clients for the placement REST API can specify either"},{"line_number":26,"context_line":"\u0027OpenStack-API-Version: placement 1.13\u0027 or \u0027placement latest\u0027 to handle"},{"line_number":27,"context_line":"the new \u0027parent_provider_uuid\u0027 attribute and to query for resource"},{"line_number":28,"context_line":"providers in a provider tree."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":77,"id":"ff82abbf_397c751f","line":26,"range":{"start_line":26,"start_character":37,"end_line":26,"end_character":38},"updated":"2017-11-30 21:10:44.000000000","message":"ditto","commit_id":"26420ef9f66e8e25f8df9d3d145fe1228b52e5c1"}],"nova/api/openstack/placement/handlers/resource_provider.py":[{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"7d124effd0da568d4ca5fcd745bee6bf565539dc","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \"uuid\": {"},{"line_number":35,"context_line":"            \"type\": \"string\","},{"line_number":36,"context_line":"            \"format\": \"uuid\""},{"line_number":37,"context_line":"        },"},{"line_number":38,"context_line":"    },"},{"line_number":39,"context_line":"    \"required\": ["},{"line_number":40,"context_line":"        \"name\""}],"source_content_type":"text/x-python","patch_set":17,"id":"5a74a57a_5de7f311","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":10},"updated":"2016-11-30 17:07:10.000000000","message":"ultranit: I think, first you were trying to modify this schema just to add parent_provider_uuid and than you realized that new version is needed. As the result this little comma here is the leftover of this process thinking. Am I right? :)","commit_id":"fd590fdff50cb8eba6e3d38ca0a17b89519bc8d3"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"4469b8765877f85d60443ccae427b897bbec157a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"PUT_RESOURCE_PROVIDER_SCHEMA \u003d copy.deepcopy(POST_RESOURCE_PROVIDER_SCHEMA)"},{"line_number":47,"context_line":"PUT_RESOURCE_PROVIDER_SCHEMA[\u0027properties\u0027].pop(\u0027uuid\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"POST_RP_SCHEMA_V1_2 \u003d copy.deepcopy(POST_RESOURCE_PROVIDER_SCHEMA)"},{"line_number":50,"context_line":"POST_RP_SCHEMA_V1_2[\"properties\"][\"parent_provider_uuid\"] \u003d {"},{"line_number":51,"context_line":"    \"type\": \"string\","},{"line_number":52,"context_line":"    \"format\": \"uuid\""}],"source_content_type":"text/x-python","patch_set":20,"id":"3a71b18c_d49b6d15","line":49,"range":{"start_line":49,"start_character":16,"end_line":49,"end_character":19},"updated":"2016-12-12 11:12:53.000000000","message":"v1_3 based on release notes?","commit_id":"f2657a3e84f7ced023e6ca53c41f3fa905ee822e"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"c631c2d0185e7bc736482d78ba9d0832dce64930","unresolved":false,"context_lines":[{"line_number":46,"context_line":"PUT_RESOURCE_PROVIDER_SCHEMA \u003d copy.deepcopy(POST_RESOURCE_PROVIDER_SCHEMA)"},{"line_number":47,"context_line":"PUT_RESOURCE_PROVIDER_SCHEMA[\u0027properties\u0027].pop(\u0027uuid\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"POST_RP_SCHEMA_V1_2 \u003d copy.deepcopy(POST_RESOURCE_PROVIDER_SCHEMA)"},{"line_number":50,"context_line":"POST_RP_SCHEMA_V1_2[\"properties\"][\"parent_provider_uuid\"] \u003d {"},{"line_number":51,"context_line":"    \"type\": \"string\","},{"line_number":52,"context_line":"    \"format\": \"uuid\""}],"source_content_type":"text/x-python","patch_set":20,"id":"1a6eadb0_88ea070e","line":49,"range":{"start_line":49,"start_character":16,"end_line":49,"end_character":19},"in_reply_to":"3a71b18c_d49b6d15","updated":"2016-12-14 13:54:14.000000000","message":"Yup, You\u0027re right. I will change it in next patch.","commit_id":"f2657a3e84f7ced023e6ca53c41f3fa905ee822e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"89743b27a0ce181c9c8830a28e0cfa04a737a62b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"PUT_RP_SCHEMA_V1_5.pop(\u0027required\u0027)"},{"line_number":60,"context_line":"# PUT /resource-providers requires one of either name or"},{"line_number":61,"context_line":"# parent_provider_uuid in microversion 1.5."},{"line_number":62,"context_line":"PUT_RP_SCHEMA_V1_5[\"anyOf\"] \u003d ["},{"line_number":63,"context_line":"    {"},{"line_number":64,"context_line":"        \"required\": [\"name\"],"},{"line_number":65,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":38,"id":"7f231b9d_7a274a14","line":62,"updated":"2017-06-12 12:35:35.000000000","message":"s/5/8/ throughout the above (if you\u0027re lucky)","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94d39c886e9c45c0f4bd5a5f40b1e01e804482f4","unresolved":false,"context_lines":[{"line_number":59,"context_line":"PUT_RP_SCHEMA_V1_5.pop(\u0027required\u0027)"},{"line_number":60,"context_line":"# PUT /resource-providers requires one of either name or"},{"line_number":61,"context_line":"# parent_provider_uuid in microversion 1.5."},{"line_number":62,"context_line":"PUT_RP_SCHEMA_V1_5[\"anyOf\"] \u003d ["},{"line_number":63,"context_line":"    {"},{"line_number":64,"context_line":"        \"required\": [\"name\"],"},{"line_number":65,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":38,"id":"5f201791_a2054e48","line":62,"in_reply_to":"7f231b9d_7a274a14","updated":"2017-06-26 10:27:16.000000000","message":"Done\n\nNow 10","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94d39c886e9c45c0f4bd5a5f40b1e01e804482f4","unresolved":false,"context_lines":[{"line_number":103,"context_line":"# Placement API microversion 1.8 adds support for requesting resource providers"},{"line_number":104,"context_line":"# within a tree of providers. The \u0027tree\u0027 query string parameter should be a"},{"line_number":105,"context_line":"# UUID value indicating the root of the tree of providers to return"},{"line_number":106,"context_line":"GET_RPS_SCHEMA_1_8 \u003d copy.deepcopy(GET_RPS_SCHEMA_1_4)"},{"line_number":107,"context_line":"GET_RPS_SCHEMA_1_8[\u0027properties\u0027][\u0027tree\u0027] \u003d {"},{"line_number":108,"context_line":"    \"type\": \"string\","},{"line_number":109,"context_line":"    \"format\": \"uuid\","}],"source_content_type":"text/x-python","patch_set":38,"id":"5f201791_2297feee","line":106,"range":{"start_line":106,"start_character":0,"end_line":106,"end_character":18},"updated":"2017-06-26 10:27:16.000000000","message":"This is updated to 1_10","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"89743b27a0ce181c9c8830a28e0cfa04a737a62b","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \u0027generation\u0027: resource_provider.generation,"},{"line_number":191,"context_line":"        \u0027links\u0027: _serialize_links(environ, resource_provider)"},{"line_number":192,"context_line":"    }"},{"line_number":193,"context_line":"    if want_version \u003e (1, 2):"},{"line_number":194,"context_line":"        data[\u0027parent_provider_uuid\u0027] \u003d resource_provider.parent_provider_uuid"},{"line_number":195,"context_line":"    return data"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7f231b9d_1a73b617","line":193,"updated":"2017-06-12 12:35:35.000000000","message":"1, 8 ?","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"89743b27a0ce181c9c8830a28e0cfa04a737a62b","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":215,"context_line":"    schema \u003d POST_RESOURCE_PROVIDER_SCHEMA"},{"line_number":216,"context_line":"    want_version \u003d req.environ[microversion.MICROVERSION_ENVIRON]"},{"line_number":217,"context_line":"    if want_version.matches((1, 5)):"},{"line_number":218,"context_line":"        schema \u003d POST_RP_SCHEMA_V1_5"},{"line_number":219,"context_line":"    data \u003d util.extract_json(req.body, schema)"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7f231b9d_9ad586bc","line":217,"updated":"2017-06-12 12:35:35.000000000","message":"8","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94d39c886e9c45c0f4bd5a5f40b1e01e804482f4","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":215,"context_line":"    schema \u003d POST_RESOURCE_PROVIDER_SCHEMA"},{"line_number":216,"context_line":"    want_version \u003d req.environ[microversion.MICROVERSION_ENVIRON]"},{"line_number":217,"context_line":"    if want_version.matches((1, 5)):"},{"line_number":218,"context_line":"        schema \u003d POST_RP_SCHEMA_V1_5"},{"line_number":219,"context_line":"    data \u003d util.extract_json(req.body, schema)"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"5f201791_629056ee","line":217,"in_reply_to":"7f231b9d_9ad586bc","updated":"2017-06-26 10:27:16.000000000","message":"Done\n\nNow 10","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94d39c886e9c45c0f4bd5a5f40b1e01e804482f4","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    want_version \u003d req.environ[microversion.MICROVERSION_ENVIRON]"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    schema \u003d GET_RPS_SCHEMA_1_0"},{"line_number":301,"context_line":"    if want_version.matches((1, 8)):"},{"line_number":302,"context_line":"        schema \u003d GET_RPS_SCHEMA_1_8"},{"line_number":303,"context_line":"    elif want_version.matches((1, 4)):"},{"line_number":304,"context_line":"        schema \u003d GET_RPS_SCHEMA_1_4"},{"line_number":305,"context_line":"    elif want_version.matches((1, 3)):"}],"source_content_type":"text/x-python","patch_set":38,"id":"5f201791_c2ba8a6c","line":302,"range":{"start_line":301,"start_character":0,"end_line":302,"end_character":35},"updated":"2017-06-26 10:27:16.000000000","message":"Bumped to (1, 10)","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"89743b27a0ce181c9c8830a28e0cfa04a737a62b","unresolved":false,"context_lines":[{"line_number":369,"context_line":"    schema \u003d PUT_RESOURCE_PROVIDER_SCHEMA"},{"line_number":370,"context_line":"    want_version \u003d req.environ[microversion.MICROVERSION_ENVIRON]"},{"line_number":371,"context_line":"    if want_version.matches((1, 5)):"},{"line_number":372,"context_line":"        schema \u003d PUT_RP_SCHEMA_V1_5"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    data \u003d util.extract_json(req.body, schema)"},{"line_number":375,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7f231b9d_5a85aeac","line":372,"updated":"2017-06-12 12:35:35.000000000","message":"8","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94d39c886e9c45c0f4bd5a5f40b1e01e804482f4","unresolved":false,"context_lines":[{"line_number":369,"context_line":"    schema \u003d PUT_RESOURCE_PROVIDER_SCHEMA"},{"line_number":370,"context_line":"    want_version \u003d req.environ[microversion.MICROVERSION_ENVIRON]"},{"line_number":371,"context_line":"    if want_version.matches((1, 5)):"},{"line_number":372,"context_line":"        schema \u003d PUT_RP_SCHEMA_V1_5"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    data \u003d util.extract_json(req.body, schema)"},{"line_number":375,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"5f201791_a2b30e98","line":372,"in_reply_to":"7f231b9d_5a85aeac","updated":"2017-06-26 10:27:16.000000000","message":"Done\n\nNow 10","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a75f4c78d5a460e95c5b3e5c9b01d94f4996b6fc","unresolved":false,"context_lines":[{"line_number":49,"context_line":"PUT_RESOURCE_PROVIDER_SCHEMA[\u0027properties\u0027].pop(\u0027uuid\u0027)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"POST_RP_SCHEMA_V1_10 \u003d copy.deepcopy(POST_RESOURCE_PROVIDER_SCHEMA)"},{"line_number":52,"context_line":"POST_RP_SCHEMA_V1_10[\"properties\"][\"parent_provider_uuid\"] \u003d {"},{"line_number":53,"context_line":"    \"type\": \"string\","},{"line_number":54,"context_line":"    \"format\": \"uuid\""},{"line_number":55,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":41,"id":"5f201791_8c003b03","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":62},"updated":"2017-06-26 15:09:17.000000000","message":"We don\u0027t expose root_provider_uuid because it\u0027s only for internal use, I\u0027m guessing. Tests back this up","commit_id":"517e62fa8dcc47dcfb505cb4a3a4cde25f2224e7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1fc3224198fd64d3f173e7b6c8526adceac3c8f3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"PUT_RP_SCHEMA_V1_11.pop(\u0027required\u0027)"},{"line_number":59,"context_line":"# PUT /resource-providers requires one of either name or"},{"line_number":60,"context_line":"# parent_provider_uuid in microversion 1.11."},{"line_number":61,"context_line":"PUT_RP_SCHEMA_V1_11[\"anyOf\"] \u003d ["},{"line_number":62,"context_line":"    {"},{"line_number":63,"context_line":"        \"required\": [\"name\"],"},{"line_number":64,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":42,"id":"9f436f4f_18ad24ea","line":61,"range":{"start_line":61,"start_character":21,"end_line":61,"end_character":26},"updated":"2017-08-17 17:19:32.000000000","message":"nit:oneof and anyof are two different contracts.\n\noneof usually implies exactly oneof where is anyof usually \nallows at least one of but also allows allof.\n\nso is this constraint corerct or should the comment be updated to \n\n# PUT /resource-providers requires either name or\n# parent_provider_uuid in microversion 1.11.","commit_id":"61474b934e29eb5054dfba66338749b9fddc4c50"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":58,"context_line":"PUT_RP_SCHEMA_V1_11.pop(\u0027required\u0027)"},{"line_number":59,"context_line":"# PUT /resource-providers requires one of either name or"},{"line_number":60,"context_line":"# parent_provider_uuid in microversion 1.11."},{"line_number":61,"context_line":"PUT_RP_SCHEMA_V1_11[\"anyOf\"] \u003d ["},{"line_number":62,"context_line":"    {"},{"line_number":63,"context_line":"        \"required\": [\"name\"],"},{"line_number":64,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f515b1d_f1bc936d","line":61,"range":{"start_line":61,"start_character":21,"end_line":61,"end_character":26},"in_reply_to":"9f436f4f_18ad24ea","updated":"2017-10-04 18:44:31.000000000","message":"This is correct. Either name or parent_provider_uuid is required in the request. Specifying both name and parent_provider_uuid is fine, but you cannot leave both name and parent_provider_uuid out of the request.","commit_id":"61474b934e29eb5054dfba66338749b9fddc4c50"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"63e2be684a220a212b336d2b24f56cf8d298b9ea","unresolved":false,"context_lines":[{"line_number":56,"context_line":"PUT_RP_SCHEMA_V1_11 \u003d copy.deepcopy(POST_RP_SCHEMA_V1_11)"},{"line_number":57,"context_line":"PUT_RP_SCHEMA_V1_11[\u0027properties\u0027].pop(\u0027uuid\u0027)"},{"line_number":58,"context_line":"PUT_RP_SCHEMA_V1_11.pop(\u0027required\u0027)"},{"line_number":59,"context_line":"# PUT /resource-providers requires one of either name or"},{"line_number":60,"context_line":"# parent_provider_uuid in microversion 1.11."},{"line_number":61,"context_line":"PUT_RP_SCHEMA_V1_11[\"anyOf\"] \u003d ["},{"line_number":62,"context_line":"    {"}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_c5c358ec","line":59,"range":{"start_line":59,"start_character":15,"end_line":59,"end_character":16},"updated":"2017-10-01 16:04:54.000000000","message":"_ (underscore)","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f41e229a3279fda8cff632c618bfc7601a230744","unresolved":false,"context_lines":[{"line_number":56,"context_line":"PUT_RP_SCHEMA_V1_11 \u003d copy.deepcopy(POST_RP_SCHEMA_V1_11)"},{"line_number":57,"context_line":"PUT_RP_SCHEMA_V1_11[\u0027properties\u0027].pop(\u0027uuid\u0027)"},{"line_number":58,"context_line":"PUT_RP_SCHEMA_V1_11.pop(\u0027required\u0027)"},{"line_number":59,"context_line":"# PUT /resource-providers requires one of either name or"},{"line_number":60,"context_line":"# parent_provider_uuid in microversion 1.11."},{"line_number":61,"context_line":"PUT_RP_SCHEMA_V1_11[\"anyOf\"] \u003d ["},{"line_number":62,"context_line":"    {"}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_12917f9a","line":59,"range":{"start_line":59,"start_character":15,"end_line":59,"end_character":16},"in_reply_to":"7f515b1d_91179f52","updated":"2017-10-10 16:44:08.000000000","message":"Done","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":56,"context_line":"PUT_RP_SCHEMA_V1_11 \u003d copy.deepcopy(POST_RP_SCHEMA_V1_11)"},{"line_number":57,"context_line":"PUT_RP_SCHEMA_V1_11[\u0027properties\u0027].pop(\u0027uuid\u0027)"},{"line_number":58,"context_line":"PUT_RP_SCHEMA_V1_11.pop(\u0027required\u0027)"},{"line_number":59,"context_line":"# PUT /resource-providers requires one of either name or"},{"line_number":60,"context_line":"# parent_provider_uuid in microversion 1.11."},{"line_number":61,"context_line":"PUT_RP_SCHEMA_V1_11[\"anyOf\"] \u003d ["},{"line_number":62,"context_line":"    {"}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_91179f52","line":59,"range":{"start_line":59,"start_character":15,"end_line":59,"end_character":16},"in_reply_to":"7f515b1d_c5c358ec","updated":"2017-10-04 18:44:31.000000000","message":"ack, will fix.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"63e2be684a220a212b336d2b24f56cf8d298b9ea","unresolved":false,"context_lines":[{"line_number":58,"context_line":"PUT_RP_SCHEMA_V1_11.pop(\u0027required\u0027)"},{"line_number":59,"context_line":"# PUT /resource-providers requires one of either name or"},{"line_number":60,"context_line":"# parent_provider_uuid in microversion 1.11."},{"line_number":61,"context_line":"PUT_RP_SCHEMA_V1_11[\"anyOf\"] \u003d ["},{"line_number":62,"context_line":"    {"},{"line_number":63,"context_line":"        \"required\": [\"name\"],"},{"line_number":64,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_a56bbcee","line":61,"updated":"2017-10-01 16:04:54.000000000","message":"Since name is required in POST, and parent is optional in POST then you need to make name required in PUT and parent optional.\n\nOtherwise the PUT is not actually a PUT (full replace).\n\nBasically you need to set both fields if both are meant to be set in the resulting resource provider and since name was already required, we must have it.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f41e229a3279fda8cff632c618bfc7601a230744","unresolved":false,"context_lines":[{"line_number":58,"context_line":"PUT_RP_SCHEMA_V1_11.pop(\u0027required\u0027)"},{"line_number":59,"context_line":"# PUT /resource-providers requires one of either name or"},{"line_number":60,"context_line":"# parent_provider_uuid in microversion 1.11."},{"line_number":61,"context_line":"PUT_RP_SCHEMA_V1_11[\"anyOf\"] \u003d ["},{"line_number":62,"context_line":"    {"},{"line_number":63,"context_line":"        \"required\": [\"name\"],"},{"line_number":64,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_f28dc37b","line":61,"in_reply_to":"7f515b1d_a56bbcee","updated":"2017-10-10 16:44:08.000000000","message":"Done","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":58,"context_line":"PUT_RP_SCHEMA_V1_11.pop(\u0027required\u0027)"},{"line_number":59,"context_line":"# PUT /resource-providers requires one of either name or"},{"line_number":60,"context_line":"# parent_provider_uuid in microversion 1.11."},{"line_number":61,"context_line":"PUT_RP_SCHEMA_V1_11[\"anyOf\"] \u003d ["},{"line_number":62,"context_line":"    {"},{"line_number":63,"context_line":"        \"required\": [\"name\"],"},{"line_number":64,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_945aed27","line":61,"in_reply_to":"7f515b1d_a56bbcee","updated":"2017-10-04 18:44:31.000000000","message":"OK, fair enough. Will change to name always required.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"d81cffabee97b8bb001035d9760c56244681dcb3","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"# Placement API microversion 1.11 adds support for requesting resource"},{"line_number":103,"context_line":"# providers within a tree of providers. The \u0027tree\u0027 query string parameter"},{"line_number":104,"context_line":"# should be a UUID value indicating the root of the tree of providers to return"},{"line_number":105,"context_line":"GET_RPS_SCHEMA_1_11 \u003d copy.deepcopy(GET_RPS_SCHEMA_1_4)"},{"line_number":106,"context_line":"GET_RPS_SCHEMA_1_11[\u0027properties\u0027][\u0027tree\u0027] \u003d {"},{"line_number":107,"context_line":"    \"type\": \"string\","}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_b877b3d4","line":104,"range":{"start_line":104,"start_character":12,"end_line":104,"end_character":79},"updated":"2017-10-09 07:37:38.000000000","message":"Doesn’t it work with a non-root-rp?","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f41e229a3279fda8cff632c618bfc7601a230744","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"# Placement API microversion 1.11 adds support for requesting resource"},{"line_number":103,"context_line":"# providers within a tree of providers. The \u0027tree\u0027 query string parameter"},{"line_number":104,"context_line":"# should be a UUID value indicating the root of the tree of providers to return"},{"line_number":105,"context_line":"GET_RPS_SCHEMA_1_11 \u003d copy.deepcopy(GET_RPS_SCHEMA_1_4)"},{"line_number":106,"context_line":"GET_RPS_SCHEMA_1_11[\u0027properties\u0027][\u0027tree\u0027] \u003d {"},{"line_number":107,"context_line":"    \"type\": \"string\","}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_12e61f46","line":104,"range":{"start_line":104,"start_character":12,"end_line":104,"end_character":79},"in_reply_to":"7f515b1d_b877b3d4","updated":"2017-10-10 16:44:08.000000000","message":"Yes, it works with a non-root rp. I\u0027ve updated the text above accordingly.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c5ac0c43a9aedc9177e7eef78ea304ede4daa825","unresolved":false,"context_lines":[{"line_number":105,"context_line":"GET_RPS_SCHEMA_1_11 \u003d copy.deepcopy(GET_RPS_SCHEMA_1_4)"},{"line_number":106,"context_line":"GET_RPS_SCHEMA_1_11[\u0027properties\u0027][\u0027tree\u0027] \u003d {"},{"line_number":107,"context_line":"    \"type\": \"string\","},{"line_number":108,"context_line":"    \"format\": \"uuid\","},{"line_number":109,"context_line":"}"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_a43ffab3","line":108,"range":{"start_line":108,"start_character":15,"end_line":108,"end_character":19},"updated":"2017-10-04 17:07:24.000000000","message":"No support for doing this by name?","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3a5122710329f7be6a72fb51ab227724cba5f39b","unresolved":false,"context_lines":[{"line_number":105,"context_line":"GET_RPS_SCHEMA_1_11 \u003d copy.deepcopy(GET_RPS_SCHEMA_1_4)"},{"line_number":106,"context_line":"GET_RPS_SCHEMA_1_11[\u0027properties\u0027][\u0027tree\u0027] \u003d {"},{"line_number":107,"context_line":"    \"type\": \"string\","},{"line_number":108,"context_line":"    \"format\": \"uuid\","},{"line_number":109,"context_line":"}"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_c73435fe","line":108,"range":{"start_line":108,"start_character":15,"end_line":108,"end_character":19},"in_reply_to":"7f515b1d_1446fd50","updated":"2017-10-04 20:01:13.000000000","message":"Guess my point is it may be worth thinking about what that would look like if we ever did implement it, so we don\u0027t have an awkward naming situation.  If it\u0027s gonna be `tree\u003d{root_rp_name_or_uuid}`, then fine.  But if it should be `tree_by_uuid\u003d{root_rp_uuid}` and `tree_bu_name\u003d{root_rp_name}`...","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":105,"context_line":"GET_RPS_SCHEMA_1_11 \u003d copy.deepcopy(GET_RPS_SCHEMA_1_4)"},{"line_number":106,"context_line":"GET_RPS_SCHEMA_1_11[\u0027properties\u0027][\u0027tree\u0027] \u003d {"},{"line_number":107,"context_line":"    \"type\": \"string\","},{"line_number":108,"context_line":"    \"format\": \"uuid\","},{"line_number":109,"context_line":"}"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_1446fd50","line":108,"range":{"start_line":108,"start_character":15,"end_line":108,"end_character":19},"in_reply_to":"7f515b1d_a43ffab3","updated":"2017-10-04 18:44:31.000000000","message":"Not at this time, no.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2b71b59e2f1624318d9f2c507ac416f623b8460c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"GET_RPS_SCHEMA_1_11 \u003d copy.deepcopy(GET_RPS_SCHEMA_1_4)"},{"line_number":106,"context_line":"GET_RPS_SCHEMA_1_11[\u0027properties\u0027][\u0027tree\u0027] \u003d {"},{"line_number":107,"context_line":"    \"type\": \"string\","},{"line_number":108,"context_line":"    \"format\": \"uuid\","},{"line_number":109,"context_line":"}"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_c5a9cd90","line":108,"range":{"start_line":108,"start_character":15,"end_line":108,"end_character":19},"in_reply_to":"7f515b1d_aa97c03a","updated":"2017-10-04 20:35:43.000000000","message":"FWIW, I like the `tree\u003d{name_or_uuid}` option, particularly in light of https://review.openstack.org/#/c/470575/8/nova/compute/provider_tree.py@154\n\nIn fact, I believe that\u0027ll Just Happen if you implement the above.  So may as well change this type to \"string\" and the comments/docs accordingly.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"57548c1fdf89a0345670446b3a42b83bb718b6a7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"GET_RPS_SCHEMA_1_11 \u003d copy.deepcopy(GET_RPS_SCHEMA_1_4)"},{"line_number":106,"context_line":"GET_RPS_SCHEMA_1_11[\u0027properties\u0027][\u0027tree\u0027] \u003d {"},{"line_number":107,"context_line":"    \"type\": \"string\","},{"line_number":108,"context_line":"    \"format\": \"uuid\","},{"line_number":109,"context_line":"}"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_aa97c03a","line":108,"range":{"start_line":108,"start_character":15,"end_line":108,"end_character":19},"in_reply_to":"7f515b1d_c73435fe","updated":"2017-10-04 20:10:24.000000000","message":"ack, good point. will do in the next revision since it\u0027s minimal additional change.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c5ac0c43a9aedc9177e7eef78ea304ede4daa825","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \u0027links\u0027: _serialize_links(environ, resource_provider)"},{"line_number":132,"context_line":"    }"},{"line_number":133,"context_line":"    if want_version.matches((1, 11)):"},{"line_number":134,"context_line":"        data[\u0027parent_provider_uuid\u0027] \u003d resource_provider.parent_provider_uuid"},{"line_number":135,"context_line":"    return data"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_843cfebf","line":134,"range":{"start_line":134,"start_character":14,"end_line":134,"end_character":34},"updated":"2017-10-04 17:07:24.000000000","message":"Yeah, I want the root_provider_uuid too.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"db52061ed1a918c7180bd26dbccd026fc75b7e32","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \u0027links\u0027: _serialize_links(environ, resource_provider)"},{"line_number":132,"context_line":"    }"},{"line_number":133,"context_line":"    if want_version.matches((1, 11)):"},{"line_number":134,"context_line":"        data[\u0027parent_provider_uuid\u0027] \u003d resource_provider.parent_provider_uuid"},{"line_number":135,"context_line":"    return data"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_9da17bac","line":134,"range":{"start_line":134,"start_character":14,"end_line":134,"end_character":34},"in_reply_to":"7f515b1d_0ac1342f","updated":"2017-10-09 14:19:23.000000000","message":"Discussed in the Nova Scheduler meeting [1].  Decision was to *include* the root_provider_uuid in the response.\n\n[1] http://eavesdrop.openstack.org/irclogs/%23openstack-meeting-alt/latest.log.html#t2017-10-09T14:08:59","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3a5122710329f7be6a72fb51ab227724cba5f39b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \u0027links\u0027: _serialize_links(environ, resource_provider)"},{"line_number":132,"context_line":"    }"},{"line_number":133,"context_line":"    if want_version.matches((1, 11)):"},{"line_number":134,"context_line":"        data[\u0027parent_provider_uuid\u0027] \u003d resource_provider.parent_provider_uuid"},{"line_number":135,"context_line":"    return data"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_ea35b8a9","line":134,"range":{"start_line":134,"start_character":14,"end_line":134,"end_character":34},"in_reply_to":"7f515b1d_549355a4","updated":"2017-10-04 20:01:13.000000000","message":"Can you point me to that comment?  I don\u0027t see it.  I see where the switch was made - between PS14 and PS15 - but no commentary as to why.\n\nIn any case, even if that made sense then, it doesn\u0027t make sense now.  From outer comment earlier: \"As written, if I want to make use of the tree filter, I would need to walk the parent_provider_uuid chain upward until it was null, then assume that guy is the root of the tree.\"  \u003c\u003d\u003d THAT exposes too much implementation detail :)","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \u0027links\u0027: _serialize_links(environ, resource_provider)"},{"line_number":132,"context_line":"    }"},{"line_number":133,"context_line":"    if want_version.matches((1, 11)):"},{"line_number":134,"context_line":"        data[\u0027parent_provider_uuid\u0027] \u003d resource_provider.parent_provider_uuid"},{"line_number":135,"context_line":"    return data"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_549355a4","line":134,"range":{"start_line":134,"start_character":14,"end_line":134,"end_character":34},"in_reply_to":"7f515b1d_843cfebf","updated":"2017-10-04 18:44:31.000000000","message":"Ed had mentioned in a much earlier version of this which DID expose the root_provider_uuid that that was exposing too much implementation detail about the placement DB model, and so I removed the root_provider_uuid in the response.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f41e229a3279fda8cff632c618bfc7601a230744","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \u0027links\u0027: _serialize_links(environ, resource_provider)"},{"line_number":132,"context_line":"    }"},{"line_number":133,"context_line":"    if want_version.matches((1, 11)):"},{"line_number":134,"context_line":"        data[\u0027parent_provider_uuid\u0027] \u003d resource_provider.parent_provider_uuid"},{"line_number":135,"context_line":"    return data"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_d25f67e3","line":134,"range":{"start_line":134,"start_character":14,"end_line":134,"end_character":34},"in_reply_to":"7f515b1d_9da17bac","updated":"2017-10-10 16:44:08.000000000","message":"Done","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"57548c1fdf89a0345670446b3a42b83bb718b6a7","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \u0027links\u0027: _serialize_links(environ, resource_provider)"},{"line_number":132,"context_line":"    }"},{"line_number":133,"context_line":"    if want_version.matches((1, 11)):"},{"line_number":134,"context_line":"        data[\u0027parent_provider_uuid\u0027] \u003d resource_provider.parent_provider_uuid"},{"line_number":135,"context_line":"    return data"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_0ac1342f","line":134,"range":{"start_line":134,"start_character":14,"end_line":134,"end_character":34},"in_reply_to":"7f515b1d_ea35b8a9","updated":"2017-10-04 20:10:24.000000000","message":"THat discussion may have easily been on the spec -- or one of the other specs in this very long epic journey through placement-land. Happy to discuss this particular point on next Monday\u0027s scheduler meeting.\n\n@edleafe: maybe you happen to have a link to something that discusses that old debate about leaking implementation details...","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a76e72c622d3ecc9795c3dd807d4241a4e7f2bd2","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    for field in (\u0027name\u0027, \u0027parent_provider_uuid\u0027):"},{"line_number":317,"context_line":"        if field in data:"},{"line_number":318,"context_line":"            setattr(resource_provider, field, data[field])"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    try:"},{"line_number":321,"context_line":"        resource_provider.save()"}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_b2520b3a","line":318,"updated":"2017-09-28 17:36:50.000000000","message":"As noted before, this is one option for where we can enforce that you\u0027re not reparenting a provider outside of a particular tree (until we actually support re-rooting any children).","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    for field in (\u0027name\u0027, \u0027parent_provider_uuid\u0027):"},{"line_number":317,"context_line":"        if field in data:"},{"line_number":318,"context_line":"            setattr(resource_provider, field, data[field])"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    try:"},{"line_number":321,"context_line":"        resource_provider.save()"}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_94cf8daf","line":318,"in_reply_to":"7f515b1d_b2520b3a","updated":"2017-10-04 18:44:31.000000000","message":"Not entirely sure what the above code has to do with parenting or re-parenting a child, but I hear your concerns about the re-parenting stuff. I\u0027ll address in the next revision on this series.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0cf7f08b2d76af67d65b35e6441ab559ca731876","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# Placement API microversion 1.11 adds an optional parent_provider_uuid field"},{"line_number":52,"context_line":"# to the POST and PUT request schemas"},{"line_number":53,"context_line":"POST_RP_SCHEMA_V1_11 \u003d copy.deepcopy(POST_RESOURCE_PROVIDER_SCHEMA)"},{"line_number":54,"context_line":"POST_RP_SCHEMA_V1_11[\"properties\"][\"parent_provider_uuid\"] \u003d {"},{"line_number":55,"context_line":"    \"type\": \"string\","},{"line_number":56,"context_line":"    \"format\": \"uuid\""}],"source_content_type":"text/x-python","patch_set":55,"id":"3f4b6375_76175553","line":53,"range":{"start_line":53,"start_character":24,"end_line":53,"end_character":67},"updated":"2017-10-20 12:41:16.000000000","message":"This could be a deepcopy of PUT_RESOURCE_PROVIDER_SCHEMA then you don\u0027t have to pop the uuid field again below.","commit_id":"45da258d1d8d5390caec3e1eb82a296ef4734d52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d0efd79684f95b5ac80ba812c70741426bd521f1","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# Placement API microversion 1.11 adds an optional parent_provider_uuid field"},{"line_number":52,"context_line":"# to the POST and PUT request schemas"},{"line_number":53,"context_line":"POST_RP_SCHEMA_V1_11 \u003d copy.deepcopy(POST_RESOURCE_PROVIDER_SCHEMA)"},{"line_number":54,"context_line":"POST_RP_SCHEMA_V1_11[\"properties\"][\"parent_provider_uuid\"] \u003d {"},{"line_number":55,"context_line":"    \"type\": \"string\","},{"line_number":56,"context_line":"    \"format\": \"uuid\""}],"source_content_type":"text/x-python","patch_set":55,"id":"3f4b6375_7f3d7ddb","line":53,"range":{"start_line":53,"start_character":24,"end_line":53,"end_character":67},"in_reply_to":"3f4b6375_38abff89","updated":"2017-10-25 12:10:42.000000000","message":"Sorry. My mistake. Mixed PUT and POST. :)","commit_id":"45da258d1d8d5390caec3e1eb82a296ef4734d52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7cef057038336b264b5223ad7248af4d14a3389d","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# Placement API microversion 1.11 adds an optional parent_provider_uuid field"},{"line_number":52,"context_line":"# to the POST and PUT request schemas"},{"line_number":53,"context_line":"POST_RP_SCHEMA_V1_11 \u003d copy.deepcopy(POST_RESOURCE_PROVIDER_SCHEMA)"},{"line_number":54,"context_line":"POST_RP_SCHEMA_V1_11[\"properties\"][\"parent_provider_uuid\"] \u003d {"},{"line_number":55,"context_line":"    \"type\": \"string\","},{"line_number":56,"context_line":"    \"format\": \"uuid\""}],"source_content_type":"text/x-python","patch_set":55,"id":"3f4b6375_38abff89","line":53,"range":{"start_line":53,"start_character":24,"end_line":53,"end_character":67},"in_reply_to":"3f4b6375_76175553","updated":"2017-10-20 21:16:42.000000000","message":"well, we do want the POST_RP_SCHEMA_V1_11 to be a copy of the POST_RESOURCE_PROVIDER_SCHEMA. Note that we\u0027re pop\u0027ing the uuid properties from a copy of the POST_RP_SCHEMA_V1_11.","commit_id":"45da258d1d8d5390caec3e1eb82a296ef4734d52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d0efd79684f95b5ac80ba812c70741426bd521f1","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \"type\": \"string\","},{"line_number":56,"context_line":"    \"format\": \"uuid\""},{"line_number":57,"context_line":"}"},{"line_number":58,"context_line":"PUT_RP_SCHEMA_V1_11 \u003d copy.deepcopy(POST_RP_SCHEMA_V1_11)"},{"line_number":59,"context_line":"PUT_RP_SCHEMA_V1_11[\u0027properties\u0027].pop(\u0027uuid\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"# Represents the allowed query string parameters to the GET /resource_providers"}],"source_content_type":"text/x-python","patch_set":55,"id":"3f4b6375_5114f543","line":58,"range":{"start_line":58,"start_character":36,"end_line":58,"end_character":56},"updated":"2017-10-25 12:10:42.000000000","message":"I guess this also intentional to copy POST V1_11 here to PUT_V1_11 to avoid redoing L55-56","commit_id":"45da258d1d8d5390caec3e1eb82a296ef4734d52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0cf7f08b2d76af67d65b35e6441ab559ca731876","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    data \u003d util.extract_json(req.body, schema)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    for field in (\u0027name\u0027, \u0027parent_provider_uuid\u0027):"},{"line_number":310,"context_line":"        if field in data:"},{"line_number":311,"context_line":"            setattr(resource_provider, field, data[field])"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    try:"},{"line_number":314,"context_line":"        resource_provider.save()"}],"source_content_type":"text/x-python","patch_set":55,"id":"3f4b6375_094b6659","line":311,"range":{"start_line":309,"start_character":0,"end_line":311,"end_character":58},"updated":"2017-10-20 12:41:16.000000000","message":"This seems to be handled in the ResourceProvider object by the SETTABLE_ATTRIBUTE construct. So it feels like a duplicate here.","commit_id":"45da258d1d8d5390caec3e1eb82a296ef4734d52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7cef057038336b264b5223ad7248af4d14a3389d","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    data \u003d util.extract_json(req.body, schema)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    for field in (\u0027name\u0027, \u0027parent_provider_uuid\u0027):"},{"line_number":310,"context_line":"        if field in data:"},{"line_number":311,"context_line":"            setattr(resource_provider, field, data[field])"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    try:"},{"line_number":314,"context_line":"        resource_provider.save()"}],"source_content_type":"text/x-python","patch_set":55,"id":"3f4b6375_788a971b","line":311,"range":{"start_line":309,"start_character":0,"end_line":311,"end_character":58},"in_reply_to":"3f4b6375_094b6659","updated":"2017-10-20 21:16:42.000000000","message":"You mean that the \"in (\u0027name\u0027, \u0027parent_provider_uuid\u0027)\" part can just refer to ResourceProvider.SETTABLE_FIELDS, right? We still need to set the fields... :)","commit_id":"45da258d1d8d5390caec3e1eb82a296ef4734d52"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d0efd79684f95b5ac80ba812c70741426bd521f1","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    data \u003d util.extract_json(req.body, schema)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    for field in (\u0027name\u0027, \u0027parent_provider_uuid\u0027):"},{"line_number":310,"context_line":"        if field in data:"},{"line_number":311,"context_line":"            setattr(resource_provider, field, data[field])"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    try:"},{"line_number":314,"context_line":"        resource_provider.save()"}],"source_content_type":"text/x-python","patch_set":55,"id":"3f4b6375_71dff139","line":311,"range":{"start_line":309,"start_character":0,"end_line":311,"end_character":58},"in_reply_to":"3f4b6375_788a971b","updated":"2017-10-25 12:10:42.000000000","message":"Yes, setting the fields are needed. :) You can reuse the SETTABLE_FIELDS that helps avoid some of the duplication here.\n\nAlso it feels a bit duplicated that we have logic to _only_ copy the settable fields in two places (here and in the ovo) but I don\u0027t know if and how can we remove that duplication so I\u0027m OK to with it as is.","commit_id":"45da258d1d8d5390caec3e1eb82a296ef4734d52"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"38b8f6d748ad73a754406d2c32bf35060bd4517c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    url \u003d util.resource_provider_url(environ, resource_provider)"},{"line_number":107,"context_line":"    links \u003d [{\u0027rel\u0027: \u0027self\u0027, \u0027href\u0027: url}]"},{"line_number":108,"context_line":"    rel_types \u003d [\u0027inventories\u0027, \u0027usages\u0027]"},{"line_number":109,"context_line":"    want_version \u003d environ[microversion.MICROVERSION_ENVIRON]"},{"line_number":110,"context_line":"    if want_version \u003e\u003d (1, 1):"},{"line_number":111,"context_line":"        rel_types.append(\u0027aggregates\u0027)"},{"line_number":112,"context_line":"    if want_version \u003e\u003d (1, 6):"}],"source_content_type":"text/x-python","patch_set":60,"id":"3f4b6375_455a962a","line":109,"range":{"start_line":109,"start_character":0,"end_line":109,"end_character":61},"updated":"2017-10-30 00:20:51.000000000","message":"can be deleted if you pass ’want_version’ to the ’_serialize_links’ function, because the other ’_serialize_xxx’ functions now explicitly receive it.","commit_id":"01c24b893115c045322314a04cc27f0c7de2e467"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"38b8f6d748ad73a754406d2c32bf35060bd4517c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    links \u003d [{\u0027rel\u0027: \u0027self\u0027, \u0027href\u0027: url}]"},{"line_number":108,"context_line":"    rel_types \u003d [\u0027inventories\u0027, \u0027usages\u0027]"},{"line_number":109,"context_line":"    want_version \u003d environ[microversion.MICROVERSION_ENVIRON]"},{"line_number":110,"context_line":"    if want_version \u003e\u003d (1, 1):"},{"line_number":111,"context_line":"        rel_types.append(\u0027aggregates\u0027)"},{"line_number":112,"context_line":"    if want_version \u003e\u003d (1, 6):"},{"line_number":113,"context_line":"        rel_types.append(\u0027traits\u0027)"},{"line_number":114,"context_line":"    if want_version \u003e\u003d (1, 11):"},{"line_number":115,"context_line":"        rel_types.append(\u0027allocations\u0027)"},{"line_number":116,"context_line":"    for rel in rel_types:"},{"line_number":117,"context_line":"        links.append({\u0027rel\u0027: rel, \u0027href\u0027: \u0027%s/%s\u0027 % (url, rel)})"},{"line_number":118,"context_line":"    return links"}],"source_content_type":"text/x-python","patch_set":60,"id":"3f4b6375_e5b6223f","line":115,"range":{"start_line":110,"start_character":0,"end_line":115,"end_character":39},"updated":"2017-10-30 00:20:51.000000000","message":"good to substitute with \u0027matches\u0027 methods, because we now use it in the other functions.","commit_id":"01c24b893115c045322314a04cc27f0c7de2e467"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"91686c16653a97baabc6b19c3c9ac3ca7ac03b3c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    links \u003d [{\u0027rel\u0027: \u0027self\u0027, \u0027href\u0027: url}]"},{"line_number":108,"context_line":"    rel_types \u003d [\u0027inventories\u0027, \u0027usages\u0027]"},{"line_number":109,"context_line":"    want_version \u003d environ[microversion.MICROVERSION_ENVIRON]"},{"line_number":110,"context_line":"    if want_version \u003e\u003d (1, 1):"},{"line_number":111,"context_line":"        rel_types.append(\u0027aggregates\u0027)"},{"line_number":112,"context_line":"    if want_version \u003e\u003d (1, 6):"},{"line_number":113,"context_line":"        rel_types.append(\u0027traits\u0027)"},{"line_number":114,"context_line":"    if want_version \u003e\u003d (1, 11):"},{"line_number":115,"context_line":"        rel_types.append(\u0027allocations\u0027)"},{"line_number":116,"context_line":"    for rel in rel_types:"},{"line_number":117,"context_line":"        links.append({\u0027rel\u0027: rel, \u0027href\u0027: \u0027%s/%s\u0027 % (url, rel)})"},{"line_number":118,"context_line":"    return links"}],"source_content_type":"text/x-python","patch_set":60,"id":"3f4b6375_9ed446bf","line":115,"range":{"start_line":110,"start_character":0,"end_line":115,"end_character":39},"in_reply_to":"3f4b6375_e5b6223f","updated":"2017-10-30 16:14:29.000000000","message":"Agree with you, but I\u0027m not changing this part of the code in this patch :)","commit_id":"01c24b893115c045322314a04cc27f0c7de2e467"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5640e62de31a77fb3329eb32b316cdb2c8d7d632","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            {\u0027duplicate\u0027: duplicate})"},{"line_number":177,"context_line":"    except exception.ObjectActionError as exc:"},{"line_number":178,"context_line":"        raise webob.exc.HTTPBadRequest("},{"line_number":179,"context_line":"            _(\u0027Unable to create resource provider %(rp_uuid)s: %(error)s\u0027) %"},{"line_number":180,"context_line":"            {\u0027rp_uuid\u0027: uuid, \u0027error\u0027: exc})"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    req.response.location \u003d util.resource_provider_url("}],"source_content_type":"text/x-python","patch_set":73,"id":"ff82abbf_a9a89a1f","line":179,"updated":"2017-11-27 17:14:11.000000000","message":"I realized while looking through this code that this message isn\u0027t particularly useful if the POSTer hasn\u0027t provided a uuid. Maybe we should include name too (in a separate patch of course).","commit_id":"413042364a583d3dd14839b398e59ca494291619"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ffbd2c227cb2faa37b2331dc162839193adbd510","unresolved":false,"context_lines":[{"line_number":52,"context_line":"# to the POST and PUT request schemas"},{"line_number":53,"context_line":"POST_RP_SCHEMA_V1_14 \u003d copy.deepcopy(POST_RESOURCE_PROVIDER_SCHEMA)"},{"line_number":54,"context_line":"POST_RP_SCHEMA_V1_14[\"properties\"][\"parent_provider_uuid\"] \u003d {"},{"line_number":55,"context_line":"    \"anyOf\": ["},{"line_number":56,"context_line":"        {"},{"line_number":57,"context_line":"            \"type\": \"string\","},{"line_number":58,"context_line":"            \"format\": \"uuid\","}],"source_content_type":"text/x-python","patch_set":75,"id":"ff82abbf_0b2045b0","line":55,"updated":"2017-11-30 12:40:33.000000000","message":"oneOf would be more correct here, as sean mooney mentioned earlier I think","commit_id":"b503772064a5488c67e3c5f255c10d270cd0d27b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c6a463296e51ed4b1764d561eb15020e492054d7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"# to the POST and PUT request schemas"},{"line_number":53,"context_line":"POST_RP_SCHEMA_V1_14 \u003d copy.deepcopy(POST_RESOURCE_PROVIDER_SCHEMA)"},{"line_number":54,"context_line":"POST_RP_SCHEMA_V1_14[\"properties\"][\"parent_provider_uuid\"] \u003d {"},{"line_number":55,"context_line":"    \"anyOf\": ["},{"line_number":56,"context_line":"        {"},{"line_number":57,"context_line":"            \"type\": \"string\","},{"line_number":58,"context_line":"            \"format\": \"uuid\","}],"source_content_type":"text/x-python","patch_set":75,"id":"ff82abbf_b62c20ad","line":55,"in_reply_to":"ff82abbf_0b2045b0","updated":"2017-11-30 13:14:55.000000000","message":"jsonschema doesn\u0027t seem to implement the distinction.\n\nIf it did, it would be moot in this case, since the two options are mutually exclusive to begin with.\n\nBut if they weren\u0027t mutually exclusive, and jsonschema implemented oneOf strictly, we could actually fail validation on a value that satisfied both.\n\nSo IMO, anyOf is \"more\" correct here.","commit_id":"b503772064a5488c67e3c5f255c10d270cd0d27b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"75d74b4fa4c9051fee7a3e8264c53f0c4606fe2f","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    try:"},{"line_number":199,"context_line":"        resource_provider \u003d rp_obj.ResourceProvider.get_by_uuid("},{"line_number":200,"context_line":"            context, uuid)"},{"line_number":201,"context_line":"        resource_provider.destroy()"},{"line_number":202,"context_line":"    except exception.ResourceProviderInUse as exc:"},{"line_number":203,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":204,"context_line":"            _(\u0027Unable to delete resource provider %(rp_uuid)s: %(error)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":79,"id":"df87a7cf_2c8f3f2b","line":201,"updated":"2017-12-04 07:15:28.000000000","message":"we should handle the exception \"CannotDeleteParentResourceProvider\" at here.","commit_id":"f8483be2199300d2d71510219eeba9cedb9b8c36"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"226e03afb50f0361c3fe73aab71f7ff95f838aea","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    try:"},{"line_number":199,"context_line":"        resource_provider \u003d rp_obj.ResourceProvider.get_by_uuid("},{"line_number":200,"context_line":"            context, uuid)"},{"line_number":201,"context_line":"        resource_provider.destroy()"},{"line_number":202,"context_line":"    except exception.ResourceProviderInUse as exc:"},{"line_number":203,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":204,"context_line":"            _(\u0027Unable to delete resource provider %(rp_uuid)s: %(error)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":79,"id":"df87a7cf_f0c60517","line":201,"in_reply_to":"df87a7cf_2c8f3f2b","updated":"2017-12-04 13:50:24.000000000","message":"Nice spot, Alex. I\u0027ve updated and added a REST API func test.","commit_id":"f8483be2199300d2d71510219eeba9cedb9b8c36"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bbb83f4a8591d86138ddcd5338730ca853648915","unresolved":false,"context_lines":[{"line_number":103,"context_line":"# include only those resource providers in the same \"provider tree\" as the"},{"line_number":104,"context_line":"# provider with the UUID represented by \u0027tree\u0027"},{"line_number":105,"context_line":"GET_RPS_SCHEMA_1_14 \u003d copy.deepcopy(GET_RPS_SCHEMA_1_4)"},{"line_number":106,"context_line":"GET_RPS_SCHEMA_1_14[\u0027properties\u0027][\u0027tree\u0027] \u003d {"},{"line_number":107,"context_line":"    \"type\": \"string\","},{"line_number":108,"context_line":"    \"format\": \"uuid\","},{"line_number":109,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":82,"id":"df87a7cf_795f2f72","line":106,"range":{"start_line":106,"start_character":35,"end_line":106,"end_character":39},"updated":"2017-12-05 02:32:17.000000000","message":"I think we may want to make this query parameter looks like this: \"tree\u003din:[uuid]\u0027. That is more match its semantic, just as I said in the previous patch. We also can support something like \"tree\u003dout:[uuid]\" in the future.","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"}],"nova/api/openstack/placement/microversion.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"89743b27a0ce181c9c8830a28e0cfa04a737a62b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            # endpoints"},{"line_number":46,"context_line":"    \u00271.7\u0027,  # PUT /resource_classes/{name} is bodiless create or update"},{"line_number":47,"context_line":"    \u00271.8\u0027,  # Adds parent provider UUID on resource provider and \u0027tree\u0027 filter"},{"line_number":48,"context_line":"            # on GET /resource-providers"},{"line_number":49,"context_line":"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7f231b9d_ba45e272","line":48,"updated":"2017-06-12 12:35:35.000000000","message":"It might be more explicit to say that PUT and POST have change too. You can imply that more stringly by saying \"Add parent provider UUID on resource provider representation and...\"","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94d39c886e9c45c0f4bd5a5f40b1e01e804482f4","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            # endpoints"},{"line_number":46,"context_line":"    \u00271.7\u0027,  # PUT /resource_classes/{name} is bodiless create or update"},{"line_number":47,"context_line":"    \u00271.8\u0027,  # Adds parent provider UUID on resource provider and \u0027tree\u0027 filter"},{"line_number":48,"context_line":"            # on GET /resource-providers"},{"line_number":49,"context_line":"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"5f201791_42df9ad5","line":48,"in_reply_to":"7f231b9d_ba45e272","updated":"2017-06-26 10:27:16.000000000","message":"Done","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1fc3224198fd64d3f173e7b6c8526adceac3c8f3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            # PUT /allocations"},{"line_number":49,"context_line":"    \u00271.9\u0027,  # Adds GET /usages"},{"line_number":50,"context_line":"    \u00271.10\u0027,  # Adds GET /allocation_candidates resource endpoint"},{"line_number":51,"context_line":"    \u00271.11\u0027,  # Adds parent provider UUID on resource provider representation"},{"line_number":52,"context_line":"             # and \u0027tree\u0027 filter on GET /resource-providers"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"9f436f4f_38f6a8fb","line":52,"range":{"start_line":51,"start_character":5,"end_line":52,"end_character":59},"updated":"2017-08-17 17:19:32.000000000","message":"should you also mention the changes to PUT /resource-providers also?","commit_id":"61474b934e29eb5054dfba66338749b9fddc4c50"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            # PUT /allocations"},{"line_number":49,"context_line":"    \u00271.9\u0027,  # Adds GET /usages"},{"line_number":50,"context_line":"    \u00271.10\u0027,  # Adds GET /allocation_candidates resource endpoint"},{"line_number":51,"context_line":"    \u00271.11\u0027,  # Adds parent provider UUID on resource provider representation"},{"line_number":52,"context_line":"             # and \u0027tree\u0027 filter on GET /resource-providers"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f515b1d_d166372a","line":52,"range":{"start_line":51,"start_character":5,"end_line":52,"end_character":59},"in_reply_to":"9f436f4f_38f6a8fb","updated":"2017-10-04 18:44:31.000000000","message":"Ack will do.","commit_id":"61474b934e29eb5054dfba66338749b9fddc4c50"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"d81cffabee97b8bb001035d9760c56244681dcb3","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u00271.9\u0027,  # Adds GET /usages"},{"line_number":50,"context_line":"    \u00271.10\u0027,  # Adds GET /allocation_candidates resource endpoint"},{"line_number":51,"context_line":"    \u00271.11\u0027,  # Adds parent provider UUID on resource provider representation"},{"line_number":52,"context_line":"             # and \u0027tree\u0027 filter on GET /resource-providers"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f515b1d_3864e321","line":52,"range":{"start_line":52,"start_character":49,"end_line":52,"end_character":50},"updated":"2017-10-09 07:37:38.000000000","message":"underscore reminder. :)","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f41e229a3279fda8cff632c618bfc7601a230744","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u00271.9\u0027,  # Adds GET /usages"},{"line_number":50,"context_line":"    \u00271.10\u0027,  # Adds GET /allocation_candidates resource endpoint"},{"line_number":51,"context_line":"    \u00271.11\u0027,  # Adds parent provider UUID on resource provider representation"},{"line_number":52,"context_line":"             # and \u0027tree\u0027 filter on GET /resource-providers"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_b2098bde","line":52,"range":{"start_line":52,"start_character":49,"end_line":52,"end_character":50},"in_reply_to":"7f515b1d_3864e321","updated":"2017-10-10 16:44:08.000000000","message":"Done","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"569620c62fd493140f91c13738483dad7a5978ed","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            # PUT /allocations"},{"line_number":49,"context_line":"    \u00271.9\u0027,  # Adds GET /usages"},{"line_number":50,"context_line":"    \u00271.10\u0027,  # Adds GET /allocation_candidates resource endpoint"},{"line_number":51,"context_line":"    \u00271.11\u0027,  # Adds parent provider UUID on resource provider representation"},{"line_number":52,"context_line":"             # and \u0027tree\u0027 filter on GET /resource_providers"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"5f4e5783_254d2f72","line":51,"range":{"start_line":51,"start_character":20,"end_line":51,"end_character":26},"updated":"2017-10-11 14:58:10.000000000","message":"and root","commit_id":"110329fed052a78fa7cf1e0317f55e3c4b49b345"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7ea31724029f9497867238d2e7daba150f19d622","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            # PUT /allocations"},{"line_number":49,"context_line":"    \u00271.9\u0027,  # Adds GET /usages"},{"line_number":50,"context_line":"    \u00271.10\u0027,  # Adds GET /allocation_candidates resource endpoint"},{"line_number":51,"context_line":"    \u00271.11\u0027,  # Adds parent provider UUID on resource provider representation"},{"line_number":52,"context_line":"             # and \u0027tree\u0027 filter on GET /resource_providers"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"5f4e5783_2116f9a9","line":51,"updated":"2017-10-13 18:09:03.000000000","message":"worth mentioning root here?","commit_id":"f157a509cd59d8f4477b1fcc8c56f1dcd06747be"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"de6eed0535b88714e307a97ebdce26487941fb15","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            # PUT /allocations"},{"line_number":49,"context_line":"    \u00271.9\u0027,  # Adds GET /usages"},{"line_number":50,"context_line":"    \u00271.10\u0027,  # Adds GET /allocation_candidates resource endpoint"},{"line_number":51,"context_line":"    \u00271.11\u0027,  # Adds parent provider UUID on resource provider representation"},{"line_number":52,"context_line":"             # and \u0027tree\u0027 filter on GET /resource_providers"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"3f4b6375_3f501b0b","line":51,"updated":"2017-10-25 16:22:32.000000000","message":"It also adds root_provider_uuid","commit_id":"f7c612d1ad6d12d5ba17777fbc6cdf11924cc7e4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0b85dc63a83f0280703b82112b80be7aa52262e4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            # PUT /allocations"},{"line_number":49,"context_line":"    \u00271.9\u0027,  # Adds GET /usages"},{"line_number":50,"context_line":"    \u00271.10\u0027,  # Adds GET /allocation_candidates resource endpoint"},{"line_number":51,"context_line":"    \u00271.11\u0027,  # Adds parent provider UUID on resource provider representation"},{"line_number":52,"context_line":"             # and \u0027tree\u0027 filter on GET /resource_providers"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"3f4b6375_63f6ead9","line":51,"in_reply_to":"3f4b6375_3f501b0b","updated":"2017-10-26 09:19:50.000000000","message":"Done","commit_id":"f7c612d1ad6d12d5ba17777fbc6cdf11924cc7e4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ffbd2c227cb2faa37b2331dc162839193adbd510","unresolved":false,"context_lines":[{"line_number":54,"context_line":"             # as GET. The \u0027allocation_requests\u0027 format in GET"},{"line_number":55,"context_line":"             # /allocation_candidates is updated to be the same as well."},{"line_number":56,"context_line":"    \u00271.13\u0027,  # Adds POST /allocations to set allocations for multiple consumers"},{"line_number":57,"context_line":"             # as GET"},{"line_number":58,"context_line":"    \u00271.14\u0027,  # Adds parent and root provider UUID on resource provider"},{"line_number":59,"context_line":"             # representation and \u0027tree\u0027 filter on GET /resource_providers"},{"line_number":60,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":75,"id":"ff82abbf_762698bd","line":57,"updated":"2017-11-30 12:40:33.000000000","message":"rebase fart, this line needs to be deleted, it\u0027s part of 54 above.\n\n(I only know because I made the same slip the 27x10^56 times I\u0027ve rebased recently)","commit_id":"b503772064a5488c67e3c5f255c10d270cd0d27b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b21fe8436e5959c9766c2dc949423c1314a0ec51","unresolved":false,"context_lines":[{"line_number":54,"context_line":"             # as GET. The \u0027allocation_requests\u0027 format in GET"},{"line_number":55,"context_line":"             # /allocation_candidates is updated to be the same as well."},{"line_number":56,"context_line":"    \u00271.13\u0027,  # Adds POST /allocations to set allocations for multiple consumers"},{"line_number":57,"context_line":"             # as GET"},{"line_number":58,"context_line":"    \u00271.14\u0027,  # Adds parent and root provider UUID on resource provider"},{"line_number":59,"context_line":"             # representation and \u0027tree\u0027 filter on GET /resource_providers"},{"line_number":60,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":75,"id":"ff82abbf_109aa66d","line":57,"in_reply_to":"ff82abbf_762698bd","updated":"2017-12-01 15:30:28.000000000","message":"lol. will fix.","commit_id":"b503772064a5488c67e3c5f255c10d270cd0d27b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f8077523b44eb53a68f8c2970b0bf6cd7a17e31","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    \u00271.13\u0027,  # Adds POST /allocations to set allocations for multiple consumers"},{"line_number":57,"context_line":"             # as GET"},{"line_number":58,"context_line":"    \u00271.14\u0027,  # Adds parent and root provider UUID on resource provider"},{"line_number":59,"context_line":"             # representation and \u0027tree\u0027 filter on GET /resource_providers"},{"line_number":60,"context_line":"]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"df87a7cf_2a135f0f","line":59,"range":{"start_line":59,"start_character":34,"end_line":59,"end_character":40},"updated":"2017-12-06 09:04:51.000000000","message":"see my comment on the bottom change, I think \u0027tree\u0027 can be confusing.","commit_id":"d75df86f5cd797598757683eca1774b54500694e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"51743b07f5e7414975a34ea6e697275a316f4ec7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"             # as GET. The \u0027allocation_requests\u0027 format in GET"},{"line_number":55,"context_line":"             # /allocation_candidates is updated to be the same as well."},{"line_number":56,"context_line":"    \u00271.13\u0027,  # Adds POST /allocations to set allocations for multiple consumers"},{"line_number":57,"context_line":"             # as GET"},{"line_number":58,"context_line":"    \u00271.14\u0027,  # Adds parent and root provider UUID on resource provider"},{"line_number":59,"context_line":"             # representation and \u0027in_tree\u0027 filter on GET /resource_providers"},{"line_number":60,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":86,"id":"df87a7cf_c6e746e4","line":57,"range":{"start_line":57,"start_character":13,"end_line":57,"end_character":21},"updated":"2017-12-06 14:52:48.000000000","message":"Gah","commit_id":"f0d699a2ae1f0101f0011eecf6f00ae3c6752649"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d4cf28cd4f225f7e6295941b4bc7119f87504744","unresolved":false,"context_lines":[{"line_number":54,"context_line":"             # as GET. The \u0027allocation_requests\u0027 format in GET"},{"line_number":55,"context_line":"             # /allocation_candidates is updated to be the same as well."},{"line_number":56,"context_line":"    \u00271.13\u0027,  # Adds POST /allocations to set allocations for multiple consumers"},{"line_number":57,"context_line":"             # as GET"},{"line_number":58,"context_line":"    \u00271.14\u0027,  # Adds parent and root provider UUID on resource provider"},{"line_number":59,"context_line":"             # representation and \u0027in_tree\u0027 filter on GET /resource_providers"},{"line_number":60,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":88,"id":"df87a7cf_9d0e6930","line":57,"updated":"2017-12-06 17:16:10.000000000","message":"this wart has snuck back in, line 57 is not supposed to be there\n\nBut we can fix that later if this is otherwise good to go","commit_id":"109f21f3c82edef720e1ff35da24d574dd004d7f"}],"nova/api/openstack/placement/rest_api_version_history.rst":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"eea6cd92f3dc84f8633bda8d76b2dee456173494","unresolved":false,"context_lines":[{"line_number":56,"context_line":"1.4 Nested resource providers"},{"line_number":57,"context_line":"-----------------------------"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"We introduce the concept of nested resource providers in API version 1.3. The"},{"line_number":60,"context_line":"resource provider resource now contains a `parent_provider_uuid` attribute that"},{"line_number":61,"context_line":"indicates the provider\u0027s direct parent, or null if there is no parent."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"ba5201f7_220b307f","line":59,"updated":"2017-01-09 15:38:47.000000000","message":"1.4","commit_id":"f1819234765b42d6d02483b794841f9a21e483d4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94d39c886e9c45c0f4bd5a5f40b1e01e804482f4","unresolved":false,"context_lines":[{"line_number":124,"context_line":"code will be ``204``. This makes it possible to check or create a resource"},{"line_number":125,"context_line":"class in one request."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"1.8 Nested resource providers"},{"line_number":128,"context_line":"-----------------------------"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"We introduce the concept of nested resource providers in API version 1.8. The"}],"source_content_type":"text/x-rst","patch_set":38,"id":"5f201791_0253e240","line":127,"range":{"start_line":127,"start_character":0,"end_line":127,"end_character":3},"updated":"2017-06-26 10:27:16.000000000","message":"Bumped to 1.10","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1fc3224198fd64d3f173e7b6c8526adceac3c8f3","unresolved":false,"context_lines":[{"line_number":153,"context_line":"allocations against resource providers that can satisfy a particular request"},{"line_number":154,"context_line":"for resources."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"1.10 Add nested resource providers"},{"line_number":157,"context_line":"----------------------------------"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"The 1.11 version introduces the concept of nested resource providers. The"}],"source_content_type":"text/x-rst","patch_set":42,"id":"9f436f4f_d88f9c73","line":156,"range":{"start_line":156,"start_character":0,"end_line":156,"end_character":34},"updated":"2017-08-17 17:19:32.000000000","message":"perhaps you should also mention the new requirement to have name or parent_provider_uuid on put requests also.","commit_id":"61474b934e29eb5054dfba66338749b9fddc4c50"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":153,"context_line":"allocations against resource providers that can satisfy a particular request"},{"line_number":154,"context_line":"for resources."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"1.10 Add nested resource providers"},{"line_number":157,"context_line":"----------------------------------"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"The 1.11 version introduces the concept of nested resource providers. The"}],"source_content_type":"text/x-rst","patch_set":42,"id":"7f515b1d_b144db75","line":156,"range":{"start_line":156,"start_character":0,"end_line":156,"end_character":34},"in_reply_to":"9f436f4f_d88f9c73","updated":"2017-10-04 18:44:31.000000000","message":"Well, the old requirement was the name field. Now it\u0027s either name or parent_provider_uuid or both. It\u0027s a forward-compatible change so I\u0027m not entirely sure if it\u0027s worth mentioning, really.","commit_id":"61474b934e29eb5054dfba66338749b9fddc4c50"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3324fa90af135e4d59a4b32f0ca6c6a5109274c6","unresolved":false,"context_lines":[{"line_number":167,"context_line":"resource provider resource now contains two new attributes:"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"* ``parent_provider_uuid`` indicates the provider\u0027s direct parent, or null if"},{"line_number":170,"context_line":"  there is no parent. This attribute can be set in the call to"},{"line_number":171,"context_line":"  ``POST /resource_providers`` and ``PUT /resource_providers/{uuid}``"},{"line_number":172,"context_line":"* ``root_provider_uuid`` indicates the UUID of the root resource provider in"},{"line_number":173,"context_line":"  the provider\u0027s tree. This is a read-only attribute"}],"source_content_type":"text/x-rst","patch_set":63,"id":"3f4b6375_cc951542","line":170,"range":{"start_line":170,"start_character":44,"end_line":170,"end_character":47},"updated":"2017-11-02 15:00:52.000000000","message":"if not already set","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"47461bdbef0656c72ee2e7b2d1335deea7d34523","unresolved":false,"context_lines":[{"line_number":167,"context_line":"resource provider resource now contains two new attributes:"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"* ``parent_provider_uuid`` indicates the provider\u0027s direct parent, or null if"},{"line_number":170,"context_line":"  there is no parent. This attribute can be set in the call to"},{"line_number":171,"context_line":"  ``POST /resource_providers`` and ``PUT /resource_providers/{uuid}``"},{"line_number":172,"context_line":"* ``root_provider_uuid`` indicates the UUID of the root resource provider in"},{"line_number":173,"context_line":"  the provider\u0027s tree. This is a read-only attribute"}],"source_content_type":"text/x-rst","patch_set":63,"id":"3f4b6375_b5e7b812","line":170,"range":{"start_line":170,"start_character":44,"end_line":170,"end_character":47},"in_reply_to":"3f4b6375_cc951542","updated":"2017-11-02 16:45:33.000000000","message":"Done","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"}],"nova/tests/functional/api/openstack/placement/fixtures.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e20d69a5a2134b7d43f825e15c2a6973985780e8","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        os.environ[\u0027CUSTOM_RES_CLASS\u0027] \u003d \u0027CUSTOM_IRON_NFV\u0027"},{"line_number":81,"context_line":"        os.environ[\u0027PROJECT_ID\u0027] \u003d uuidutils.generate_uuid()"},{"line_number":82,"context_line":"        os.environ[\u0027USER_ID\u0027] \u003d uuidutils.generate_uuid()"},{"line_number":83,"context_line":"        os.environ[\u0027PARENT_PROVIDER_UUID\u0027] \u003d uuidutils.generate_uuid()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def stop_fixture(self):"},{"line_number":86,"context_line":"        self.api_db_fixture.cleanup()"}],"source_content_type":"text/x-python","patch_set":44,"id":"7f515b1d_94665429","line":83,"updated":"2017-09-25 14:20:31.000000000","message":"First I thought it is an error to set this to an invalid uuid as I thought this is used as a parent of RP_UUID and in the base case the PARENT_PROVIDER_UUID of the RP is RP_UUID.\n\nBut actually in the test it is used as separate UUID to create the parent of the base RP for the nested case.","commit_id":"e34b6932356f832a43468d8514f2350b4fe9d187"}],"nova/tests/functional/api/openstack/placement/gabbits/microversion.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e20d69a5a2134b7d43f825e15c2a6973985780e8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  response_json_paths:"},{"line_number":40,"context_line":"      $.errors[0].title: Not Acceptable"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- name: latest microversion is 1.10"},{"line_number":43,"context_line":"  GET: /"},{"line_number":44,"context_line":"  request_headers:"},{"line_number":45,"context_line":"      openstack-api-version: placement latest"}],"source_content_type":"text/x-yaml","patch_set":44,"id":"7f515b1d_d47bacbb","line":42,"range":{"start_line":42,"start_character":31,"end_line":42,"end_character":35},"updated":"2017-09-25 14:20:31.000000000","message":"I think the name should reflect 1.11 as well","commit_id":"e34b6932356f832a43468d8514f2350b4fe9d187"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c5ac0c43a9aedc9177e7eef78ea304ede4daa825","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  response_json_paths:"},{"line_number":40,"context_line":"      $.errors[0].title: Not Acceptable"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- name: latest microversion is 1.10"},{"line_number":43,"context_line":"  GET: /"},{"line_number":44,"context_line":"  request_headers:"},{"line_number":45,"context_line":"      openstack-api-version: placement latest"}],"source_content_type":"text/x-yaml","patch_set":45,"id":"7f515b1d_249aeac4","line":42,"range":{"start_line":42,"start_character":34,"end_line":42,"end_character":35},"updated":"2017-10-04 17:07:24.000000000","message":"1","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  response_json_paths:"},{"line_number":40,"context_line":"      $.errors[0].title: Not Acceptable"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- name: latest microversion is 1.10"},{"line_number":43,"context_line":"  GET: /"},{"line_number":44,"context_line":"  request_headers:"},{"line_number":45,"context_line":"      openstack-api-version: placement latest"}],"source_content_type":"text/x-yaml","patch_set":45,"id":"7f515b1d_54c11580","line":42,"range":{"start_line":42,"start_character":34,"end_line":42,"end_character":35},"in_reply_to":"7f515b1d_249aeac4","updated":"2017-10-04 18:44:31.000000000","message":"ack, will fix.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"}],"nova/tests/functional/api/openstack/placement/gabbits/resource-provider.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94d39c886e9c45c0f4bd5a5f40b1e01e804482f4","unresolved":false,"context_lines":[{"line_number":203,"context_line":"- name: test POST microversion limits nested providers"},{"line_number":204,"context_line":"  POST: /resource_providers"},{"line_number":205,"context_line":"  request_headers:"},{"line_number":206,"context_line":"    OpenStack-API-Version: placement 1.4"},{"line_number":207,"context_line":"    content-type: application/json"},{"line_number":208,"context_line":"  data:"},{"line_number":209,"context_line":"      name: parent"}],"source_content_type":"text/x-yaml","patch_set":38,"id":"5f201791_4dba2b0a","line":206,"range":{"start_line":206,"start_character":37,"end_line":206,"end_character":40},"updated":"2017-06-26 10:27:16.000000000","message":"Bumped these to 1.9 (1.10 - 1)","commit_id":"9f4d7803a29cef4a79da2349860961a9091817f8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e20d69a5a2134b7d43f825e15c2a6973985780e8","unresolved":false,"context_lines":[{"line_number":224,"context_line":"  status: 400"},{"line_number":225,"context_line":"  response_strings:"},{"line_number":226,"context_line":"      - \u0027JSON does not validate\u0027"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"- name: fail trying to set a root provider UUID"},{"line_number":229,"context_line":"  PUT: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":230,"context_line":"  request_headers:"}],"source_content_type":"text/x-yaml","patch_set":44,"id":"7f515b1d_f7546acc","line":227,"updated":"2017-09-25 14:20:31.000000000","message":"I think we need a microversion limit test for the tree query parameter as well.","commit_id":"e34b6932356f832a43468d8514f2350b4fe9d187"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e20d69a5a2134b7d43f825e15c2a6973985780e8","unresolved":false,"context_lines":[{"line_number":240,"context_line":"  request_headers:"},{"line_number":241,"context_line":"      content-type: application/json"},{"line_number":242,"context_line":"  data:"},{"line_number":243,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":244,"context_line":"  status: 400"},{"line_number":245,"context_line":"  response_strings:"},{"line_number":246,"context_line":"      - \u0027parent provider UUID does not exist\u0027"}],"source_content_type":"text/x-yaml","patch_set":44,"id":"7f515b1d_f71b4a18","line":243,"range":{"start_line":243,"start_character":28,"end_line":243,"end_character":60},"updated":"2017-09-25 14:20:31.000000000","message":"OK so this is why the fixture has a random uuid generated for PARENT_PROVIDER_UUID.","commit_id":"e34b6932356f832a43468d8514f2350b4fe9d187"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e20d69a5a2134b7d43f825e15c2a6973985780e8","unresolved":false,"context_lines":[{"line_number":266,"context_line":"  GET: /resource_providers?tree\u003d$ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":267,"context_line":"  response_json_paths:"},{"line_number":268,"context_line":"      $.resource_providers.`len`: 2"},{"line_number":269,"context_line":"      $.resource_providers[0].uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":270,"context_line":"      $.resource_providers[1].uuid: $ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"- name: create a new provider"},{"line_number":273,"context_line":"  POST: /resource_providers"}],"source_content_type":"text/x-yaml","patch_set":44,"id":"7f515b1d_57a21e4d","line":270,"range":{"start_line":269,"start_character":1,"end_line":270,"end_character":55},"updated":"2017-09-25 14:20:31.000000000","message":"Is there a stable order or RPs on the APIs? If not then this test could fail due to possible different order.","commit_id":"e34b6932356f832a43468d8514f2350b4fe9d187"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"63e2be684a220a212b336d2b24f56cf8d298b9ea","unresolved":false,"context_lines":[{"line_number":219,"context_line":"  request_headers:"},{"line_number":220,"context_line":"    OpenStack-API-Version: placement 1.10"},{"line_number":221,"context_line":"    content-type: application/json"},{"line_number":222,"context_line":"  data:"},{"line_number":223,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":224,"context_line":"  status: 400"},{"line_number":225,"context_line":"  response_strings:"}],"source_content_type":"text/x-yaml","patch_set":45,"id":"7f515b1d_6562640c","line":222,"updated":"2017-10-01 16:04:54.000000000","message":"you need to include name here if you are wanting to validate just against parent not being okay. You\u0027re violating the schema by not having name too.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":219,"context_line":"  request_headers:"},{"line_number":220,"context_line":"    OpenStack-API-Version: placement 1.10"},{"line_number":221,"context_line":"    content-type: application/json"},{"line_number":222,"context_line":"  data:"},{"line_number":223,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":224,"context_line":"  status: 400"},{"line_number":225,"context_line":"  response_strings:"}],"source_content_type":"text/x-yaml","patch_set":45,"id":"7f515b1d_b43f2986","line":222,"in_reply_to":"7f515b1d_6562640c","updated":"2017-10-04 18:44:31.000000000","message":"No, I\u0027m not violating the *current* schema (where required is anyOf name or parent_provider_uuid). However, I\u0027m going to rework the schema to always require name so this point will be moot.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f41e229a3279fda8cff632c618bfc7601a230744","unresolved":false,"context_lines":[{"line_number":219,"context_line":"  request_headers:"},{"line_number":220,"context_line":"    OpenStack-API-Version: placement 1.10"},{"line_number":221,"context_line":"    content-type: application/json"},{"line_number":222,"context_line":"  data:"},{"line_number":223,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":224,"context_line":"  status: 400"},{"line_number":225,"context_line":"  response_strings:"}],"source_content_type":"text/x-yaml","patch_set":45,"id":"5f4e5783_92aa0f83","line":222,"in_reply_to":"7f515b1d_b43f2986","updated":"2017-10-10 16:44:08.000000000","message":"Done","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"63e2be684a220a212b336d2b24f56cf8d298b9ea","unresolved":false,"context_lines":[{"line_number":258,"context_line":"  PUT: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":259,"context_line":"  request_headers:"},{"line_number":260,"context_line":"      content-type: application/json"},{"line_number":261,"context_line":"  data:"},{"line_number":262,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":263,"context_line":"  status: 200"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":45,"id":"7f515b1d_e533f412","line":261,"updated":"2017-10-01 16:04:54.000000000","message":"Assuming we want to stick with strict put semantics you need name field here too.\n\nWe don\u0027t _have_ to do that, but we probably ought to.","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f41e229a3279fda8cff632c618bfc7601a230744","unresolved":false,"context_lines":[{"line_number":258,"context_line":"  PUT: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":259,"context_line":"  request_headers:"},{"line_number":260,"context_line":"      content-type: application/json"},{"line_number":261,"context_line":"  data:"},{"line_number":262,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":263,"context_line":"  status: 200"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":45,"id":"5f4e5783_32523b69","line":261,"in_reply_to":"7f515b1d_e533f412","updated":"2017-10-10 16:44:08.000000000","message":"Done","commit_id":"fbb8e10440637de08f10d23cc5241938f34426c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7ea31724029f9497867238d2e7daba150f19d622","unresolved":false,"context_lines":[{"line_number":200,"context_line":"# expect a failure. We then create that parent provider record and attempt to"},{"line_number":201,"context_line":"# set the same parent provider UUID without also setting the root provider UUID"},{"line_number":202,"context_line":"# to the same value, with an expected failure. Finally, we set the primary"},{"line_number":203,"context_line":"# provider\u0027s root AND parent to the new provider UUID and verify success."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"- name: test POST microversion limits nested providers"},{"line_number":206,"context_line":"  POST: /resource_providers"}],"source_content_type":"text/x-yaml","patch_set":50,"id":"5f4e5783_0169bd1f","line":203,"updated":"2017-10-13 18:09:03.000000000","message":"If you want to, don\u0027t feel shy about putting big chunks like this one in their own file. Besides the readability benefits, it also increases the opportunities for parallelism when running the tests.","commit_id":"f157a509cd59d8f4477b1fcc8c56f1dcd06747be"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"38b8f6d748ad73a754406d2c32bf35060bd4517c","unresolved":false,"context_lines":[{"line_number":222,"context_line":"- name: test POST microversion limits nested providers"},{"line_number":223,"context_line":"  POST: /resource_providers"},{"line_number":224,"context_line":"  request_headers:"},{"line_number":225,"context_line":"      OpenStack-API-Version: placement 1.10"},{"line_number":226,"context_line":"      content-type: application/json"},{"line_number":227,"context_line":"  data:"},{"line_number":228,"context_line":"      name: child"}],"source_content_type":"text/x-yaml","patch_set":60,"id":"3f4b6375_653fd287","line":225,"range":{"start_line":225,"start_character":39,"end_line":225,"end_character":43},"updated":"2017-10-30 00:20:51.000000000","message":"should be updated here to \u00271.11\u0027, too. It must be confusing.","commit_id":"01c24b893115c045322314a04cc27f0c7de2e467"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"91686c16653a97baabc6b19c3c9ac3ca7ac03b3c","unresolved":false,"context_lines":[{"line_number":222,"context_line":"- name: test POST microversion limits nested providers"},{"line_number":223,"context_line":"  POST: /resource_providers"},{"line_number":224,"context_line":"  request_headers:"},{"line_number":225,"context_line":"      OpenStack-API-Version: placement 1.10"},{"line_number":226,"context_line":"      content-type: application/json"},{"line_number":227,"context_line":"  data:"},{"line_number":228,"context_line":"      name: child"}],"source_content_type":"text/x-yaml","patch_set":60,"id":"3f4b6375_bee8227c","line":225,"range":{"start_line":225,"start_character":39,"end_line":225,"end_character":43},"in_reply_to":"3f4b6375_653fd287","updated":"2017-10-30 16:14:29.000000000","message":"ack. technically, it just needs to be any microversion before 1.12, but sure I can put that in there.","commit_id":"01c24b893115c045322314a04cc27f0c7de2e467"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"ff3c38ad8d148d51457dcd5493b85482484bac2a","unresolved":false,"context_lines":[{"line_number":276,"context_line":"- name: get provider with old microversion no root provider UUID field"},{"line_number":277,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":278,"context_line":"  request_headers:"},{"line_number":279,"context_line":"      OpenStack-API-Version: placement 1.10"},{"line_number":280,"context_line":"      content-type: application/json"},{"line_number":281,"context_line":"  data:"},{"line_number":282,"context_line":"      name: parent"}],"source_content_type":"text/x-yaml","patch_set":63,"id":"3f4b6375_eb200c9e","line":279,"range":{"start_line":279,"start_character":39,"end_line":279,"end_character":43},"updated":"2017-10-31 02:40:42.000000000","message":"The microversion war continues, but we never lose unless we quit.","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"47461bdbef0656c72ee2e7b2d1335deea7d34523","unresolved":false,"context_lines":[{"line_number":276,"context_line":"- name: get provider with old microversion no root provider UUID field"},{"line_number":277,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":278,"context_line":"  request_headers:"},{"line_number":279,"context_line":"      OpenStack-API-Version: placement 1.10"},{"line_number":280,"context_line":"      content-type: application/json"},{"line_number":281,"context_line":"  data:"},{"line_number":282,"context_line":"      name: parent"}],"source_content_type":"text/x-yaml","patch_set":63,"id":"3f4b6375_35a2a8af","line":279,"range":{"start_line":279,"start_character":39,"end_line":279,"end_character":43},"in_reply_to":"3f4b6375_eb200c9e","updated":"2017-11-02 16:45:33.000000000","message":"Done","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"ff3c38ad8d148d51457dcd5493b85482484bac2a","unresolved":false,"context_lines":[{"line_number":285,"context_line":"- name: get provider has root provider UUID field"},{"line_number":286,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":287,"context_line":"  request_headers:"},{"line_number":288,"context_line":"      OpenStack-API-Version: placement 1.10"},{"line_number":289,"context_line":"      content-type: application/json"},{"line_number":290,"context_line":"  data:"},{"line_number":291,"context_line":"      name: parent"}],"source_content_type":"text/x-yaml","patch_set":63,"id":"3f4b6375_6b49bc5e","line":288,"range":{"start_line":288,"start_character":39,"end_line":288,"end_character":43},"updated":"2017-10-31 02:40:42.000000000","message":"ditto, but seems odd because these 2 tests looks the same.\nI _guess_ you intend to do like this.\n\n```\n- name: get provider with old microversion no root provider UUID field\n  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]\n  request_headers:\n      OpenStack-API-Version: placement 1.11\n      content-type: application/json\n  status: 200 \n  response_json_paths:\n      $.`len`: 4\n      $.name: parent\n\n- name: get provider has root provider UUID field\n  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]\n  request_headers:                                                                                                                                                                                                                                                                                                            \n      content-type: application/json\n  status: 200 \n  response_json_paths:\n      $.`len`: 6\n      $.name: parent\n      $.root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]\n```","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3324fa90af135e4d59a4b32f0ca6c6a5109274c6","unresolved":false,"context_lines":[{"line_number":285,"context_line":"- name: get provider has root provider UUID field"},{"line_number":286,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":287,"context_line":"  request_headers:"},{"line_number":288,"context_line":"      OpenStack-API-Version: placement 1.10"},{"line_number":289,"context_line":"      content-type: application/json"},{"line_number":290,"context_line":"  data:"},{"line_number":291,"context_line":"      name: parent"}],"source_content_type":"text/x-yaml","patch_set":63,"id":"3f4b6375_4c07e583","line":288,"range":{"start_line":288,"start_character":39,"end_line":288,"end_character":43},"in_reply_to":"3f4b6375_6b49bc5e","updated":"2017-11-02 15:00:52.000000000","message":"++","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"47461bdbef0656c72ee2e7b2d1335deea7d34523","unresolved":false,"context_lines":[{"line_number":285,"context_line":"- name: get provider has root provider UUID field"},{"line_number":286,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":287,"context_line":"  request_headers:"},{"line_number":288,"context_line":"      OpenStack-API-Version: placement 1.10"},{"line_number":289,"context_line":"      content-type: application/json"},{"line_number":290,"context_line":"  data:"},{"line_number":291,"context_line":"      name: parent"}],"source_content_type":"text/x-yaml","patch_set":63,"id":"3f4b6375_759b8072","line":288,"range":{"start_line":288,"start_character":39,"end_line":288,"end_character":43},"in_reply_to":"3f4b6375_6b49bc5e","updated":"2017-11-02 16:45:33.000000000","message":"Done","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3324fa90af135e4d59a4b32f0ca6c6a5109274c6","unresolved":false,"context_lines":[{"line_number":300,"context_line":"      name: child"},{"line_number":301,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":302,"context_line":"  status: 200"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"- name: list all resource providers in a tree"},{"line_number":305,"context_line":"  GET: /resource_providers?tree\u003d$ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":306,"context_line":"  response_json_paths:"}],"source_content_type":"text/x-yaml","patch_set":63,"id":"3f4b6375_ec369151","line":303,"updated":"2017-11-02 15:00:52.000000000","message":"Failure cases for a) reparenting, b) unparenting","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"47461bdbef0656c72ee2e7b2d1335deea7d34523","unresolved":false,"context_lines":[{"line_number":300,"context_line":"      name: child"},{"line_number":301,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":302,"context_line":"  status: 200"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"- name: list all resource providers in a tree"},{"line_number":305,"context_line":"  GET: /resource_providers?tree\u003d$ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":306,"context_line":"  response_json_paths:"}],"source_content_type":"text/x-yaml","patch_set":63,"id":"3f4b6375_1590cc49","line":303,"in_reply_to":"3f4b6375_ec369151","updated":"2017-11-02 16:45:33.000000000","message":"Done. Also added check for trying to set parent to self.","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3324fa90af135e4d59a4b32f0ca6c6a5109274c6","unresolved":false,"context_lines":[{"line_number":308,"context_line":"      # Verify that we have both the parent and child in the list"},{"line_number":309,"context_line":"      $.resource_providers[?uuid\u003d\"$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]\"].root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":310,"context_line":"      $.resource_providers[?uuid\u003d\"$ENVIRON[\u0027RP_UUID\u0027]\"].root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"- name: create a new provider"},{"line_number":313,"context_line":"  POST: /resource_providers"},{"line_number":314,"context_line":"  request_headers:"}],"source_content_type":"text/x-yaml","patch_set":63,"id":"3f4b6375_cc2875e3","line":311,"updated":"2017-11-02 15:00:52.000000000","message":"Another case for ?tree where there\u0027s just one RP in the tree.\n\nAnd another for ?tree on a UUID that doesn\u0027t exist.","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"47461bdbef0656c72ee2e7b2d1335deea7d34523","unresolved":false,"context_lines":[{"line_number":308,"context_line":"      # Verify that we have both the parent and child in the list"},{"line_number":309,"context_line":"      $.resource_providers[?uuid\u003d\"$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]\"].root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":310,"context_line":"      $.resource_providers[?uuid\u003d\"$ENVIRON[\u0027RP_UUID\u0027]\"].root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"- name: create a new provider"},{"line_number":313,"context_line":"  POST: /resource_providers"},{"line_number":314,"context_line":"  request_headers:"}],"source_content_type":"text/x-yaml","patch_set":63,"id":"3f4b6375_e0ac50a0","line":311,"in_reply_to":"3f4b6375_cc2875e3","updated":"2017-11-02 16:45:33.000000000","message":"Done","commit_id":"4e8df0971bf6316a44467e8ed340d9f985fb4049"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"75b04ed30042dce1f16de952a95b5e2dddf416d0","unresolved":false,"context_lines":[{"line_number":285,"context_line":"      uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":286,"context_line":"  status: 201"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"- name: get provider with old microversion no root provider UUID field"},{"line_number":289,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":290,"context_line":"  request_headers:"},{"line_number":291,"context_line":"      openstack-api-version: placement 1.10"},{"line_number":292,"context_line":"      content-type: application/json"},{"line_number":293,"context_line":"  data:"},{"line_number":294,"context_line":"      name: parent"},{"line_number":295,"context_line":"  status: 200"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"- name: get provider has root provider UUID field"},{"line_number":298,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":299,"context_line":"  request_headers:"},{"line_number":300,"context_line":"      content-type: application/json"},{"line_number":301,"context_line":"  data:"},{"line_number":302,"context_line":"      name: parent"},{"line_number":303,"context_line":"      root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":304,"context_line":"  status: 200"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"- name: update a parent"},{"line_number":307,"context_line":"  PUT: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":308,"context_line":"  request_headers:"},{"line_number":309,"context_line":"      content-type: application/json"},{"line_number":310,"context_line":"  data:"},{"line_number":311,"context_line":"      name: child"},{"line_number":312,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":313,"context_line":"  status: 200"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"3f4b6375_fbc881a8","line":310,"range":{"start_line":288,"start_character":0,"end_line":310,"end_character":7},"updated":"2017-11-02 17:01:47.000000000","message":"Not done (see PS63 comments from Tetsuro)","commit_id":"73a63b6e7db83632bfe35b0b41e7e25d97a06e3a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3efe541522f9333a144a165e28861b7e47ede85b","unresolved":false,"context_lines":[{"line_number":285,"context_line":"      uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":286,"context_line":"  status: 201"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"- name: get provider with old microversion no root provider UUID field"},{"line_number":289,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":290,"context_line":"  request_headers:"},{"line_number":291,"context_line":"      openstack-api-version: placement 1.10"},{"line_number":292,"context_line":"      content-type: application/json"},{"line_number":293,"context_line":"  data:"},{"line_number":294,"context_line":"      name: parent"},{"line_number":295,"context_line":"  status: 200"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"- name: get provider has root provider UUID field"},{"line_number":298,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":299,"context_line":"  request_headers:"},{"line_number":300,"context_line":"      content-type: application/json"},{"line_number":301,"context_line":"  data:"},{"line_number":302,"context_line":"      name: parent"},{"line_number":303,"context_line":"      root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":304,"context_line":"  status: 200"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"- name: update a parent"},{"line_number":307,"context_line":"  PUT: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":308,"context_line":"  request_headers:"},{"line_number":309,"context_line":"      content-type: application/json"},{"line_number":310,"context_line":"  data:"},{"line_number":311,"context_line":"      name: child"},{"line_number":312,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":313,"context_line":"  status: 200"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"3f4b6375_bbcc496a","line":310,"range":{"start_line":288,"start_character":0,"end_line":310,"end_character":7},"in_reply_to":"3f4b6375_fbc881a8","updated":"2017-11-02 17:07:07.000000000","message":"What do you mean not done? placement 1.10 is before 1.12 and I removed the 1.10 in the \"get provider has root provider UUID field\" test.","commit_id":"73a63b6e7db83632bfe35b0b41e7e25d97a06e3a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"75b04ed30042dce1f16de952a95b5e2dddf416d0","unresolved":false,"context_lines":[{"line_number":349,"context_line":"  GET: /resource_providers?tree\u003d$ENVIRON[\u0027ALT_PARENT_PROVIDER_UUID\u0027]"},{"line_number":350,"context_line":"  response_json_paths:"},{"line_number":351,"context_line":"      $.resource_providers.`len`: 1"},{"line_number":352,"context_line":"      # Verify that we have both the parent and child in the list"},{"line_number":353,"context_line":"      $.resource_providers[?uuid\u003d\"$ENVIRON[\u0027ALT_PARENT_PROVIDER_UUID\u0027]\"].root_provider_uuid: $ENVIRON[\u0027ALT_PARENT_PROVIDER_UUID\u0027]"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"- name: fail trying to re-parent to a different provider"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"3f4b6375_bb744969","line":352,"range":{"start_line":352,"start_character":28,"end_line":352,"end_character":53},"updated":"2017-11-02 17:01:47.000000000","message":"nope, just the one, Mrs. Wembley","commit_id":"73a63b6e7db83632bfe35b0b41e7e25d97a06e3a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3efe541522f9333a144a165e28861b7e47ede85b","unresolved":false,"context_lines":[{"line_number":349,"context_line":"  GET: /resource_providers?tree\u003d$ENVIRON[\u0027ALT_PARENT_PROVIDER_UUID\u0027]"},{"line_number":350,"context_line":"  response_json_paths:"},{"line_number":351,"context_line":"      $.resource_providers.`len`: 1"},{"line_number":352,"context_line":"      # Verify that we have both the parent and child in the list"},{"line_number":353,"context_line":"      $.resource_providers[?uuid\u003d\"$ENVIRON[\u0027ALT_PARENT_PROVIDER_UUID\u0027]\"].root_provider_uuid: $ENVIRON[\u0027ALT_PARENT_PROVIDER_UUID\u0027]"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"- name: fail trying to re-parent to a different provider"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"3f4b6375_7bc25136","line":352,"range":{"start_line":352,"start_character":28,"end_line":352,"end_character":53},"in_reply_to":"3f4b6375_bb744969","updated":"2017-11-02 17:07:07.000000000","message":"copy paste. sorry, will remove.","commit_id":"73a63b6e7db83632bfe35b0b41e7e25d97a06e3a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"18d571e8d9ad27272cb185c7b7872042dfa3ef49","unresolved":false,"context_lines":[{"line_number":291,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":292,"context_line":"      content-type: application/json"},{"line_number":293,"context_line":"  data:"},{"line_number":294,"context_line":"      name: parent"},{"line_number":295,"context_line":"  status: 200"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"- name: get provider has root provider UUID field"}],"source_content_type":"text/x-yaml","patch_set":65,"id":"3f4b6375_bb89e9ca","line":294,"range":{"start_line":294,"start_character":12,"end_line":294,"end_character":18},"updated":"2017-11-02 17:15:35.000000000","message":"Tetsuro\u0027s point was that there\u0027s nothing in this test case that proves you *didn\u0027t* get the root_provider_uuid (and parent_provider_uuid) back in the payload.  He suggested adding a len check (should be 4 before 1.12 and 6 after).","commit_id":"933b8db6af106c09360f9c1608dee262401b6a15"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b8fa6193e5304ee13f4d6e2fb1d8c05e5108a400","unresolved":false,"context_lines":[{"line_number":285,"context_line":"      uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":286,"context_line":"  status: 201"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"- name: get provider with old microversion no root provider UUID field"},{"line_number":289,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":290,"context_line":"  request_headers:"},{"line_number":291,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":292,"context_line":"      content-type: application/json"},{"line_number":293,"context_line":"  data:"},{"line_number":294,"context_line":"      name: parent"},{"line_number":295,"context_line":"  status: 200"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"- name: get provider has root provider UUID field"},{"line_number":298,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"}],"source_content_type":"text/x-yaml","patch_set":66,"id":"3f4b6375_b3c8d4a7","line":295,"range":{"start_line":288,"start_character":0,"end_line":295,"end_character":13},"updated":"2017-11-03 15:22:53.000000000","message":"Still not doing anything here to prove that the root/parent UUIDs didn\u0027t show up in this response.","commit_id":"fe41e8d43fcd6151bbcbc9127076b58ad54df044"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"82d29a5a297b7afd50e814f15a7f6f069d9f4b4c","unresolved":false,"context_lines":[{"line_number":285,"context_line":"      uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":286,"context_line":"  status: 201"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"- name: get provider with old microversion no root provider UUID field"},{"line_number":289,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":290,"context_line":"  request_headers:"},{"line_number":291,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":292,"context_line":"      content-type: application/json"},{"line_number":293,"context_line":"  data:"},{"line_number":294,"context_line":"      name: parent"},{"line_number":295,"context_line":"  status: 200"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"- name: get provider has root provider UUID field"},{"line_number":298,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"}],"source_content_type":"text/x-yaml","patch_set":66,"id":"3f4b6375_64ddf46e","line":295,"range":{"start_line":288,"start_character":0,"end_line":295,"end_character":13},"in_reply_to":"3f4b6375_3e7b8b28","updated":"2017-11-03 17:22:40.000000000","message":"Done","commit_id":"fe41e8d43fcd6151bbcbc9127076b58ad54df044"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e9484ded3196297f63d06a1364334c16df700ca7","unresolved":false,"context_lines":[{"line_number":285,"context_line":"      uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":286,"context_line":"  status: 201"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"- name: get provider with old microversion no root provider UUID field"},{"line_number":289,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":290,"context_line":"  request_headers:"},{"line_number":291,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":292,"context_line":"      content-type: application/json"},{"line_number":293,"context_line":"  data:"},{"line_number":294,"context_line":"      name: parent"},{"line_number":295,"context_line":"  status: 200"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"- name: get provider has root provider UUID field"},{"line_number":298,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"}],"source_content_type":"text/x-yaml","patch_set":66,"id":"3f4b6375_be2d3b96","line":295,"range":{"start_line":288,"start_character":0,"end_line":295,"end_character":13},"in_reply_to":"3f4b6375_b3c8d4a7","updated":"2017-11-03 15:56:18.000000000","message":"Yeah, I might need some help from Mr. Gabbi on this. Not sure how to test for the lack of presence of an attribute in the returned response...","commit_id":"fe41e8d43fcd6151bbcbc9127076b58ad54df044"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"80bc86567a4ee26c7f54e0865ee97337e2842141","unresolved":false,"context_lines":[{"line_number":285,"context_line":"      uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":286,"context_line":"  status: 201"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"- name: get provider with old microversion no root provider UUID field"},{"line_number":289,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":290,"context_line":"  request_headers:"},{"line_number":291,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":292,"context_line":"      content-type: application/json"},{"line_number":293,"context_line":"  data:"},{"line_number":294,"context_line":"      name: parent"},{"line_number":295,"context_line":"  status: 200"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"- name: get provider has root provider UUID field"},{"line_number":298,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"}],"source_content_type":"text/x-yaml","patch_set":66,"id":"3f4b6375_3e7b8b28","line":295,"range":{"start_line":288,"start_character":0,"end_line":295,"end_character":13},"in_reply_to":"3f4b6375_be2d3b96","updated":"2017-11-03 16:11:16.000000000","message":"Tetsuro suggested\n\n $.`len`: 4\n\n...meaning there are exactly four fields in the response.  And then in the one below this you can check\n\n $.`len`: 6\n\n...for the addition of root \u0026 parent UUID fields.","commit_id":"fe41e8d43fcd6151bbcbc9127076b58ad54df044"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"8c50bac560d9409b9ea7be275045187f85fce01e","unresolved":false,"context_lines":[{"line_number":290,"context_line":"  request_headers:"},{"line_number":291,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":292,"context_line":"      content-type: application/json"},{"line_number":293,"context_line":"  data:"},{"line_number":294,"context_line":"      $.`len`: 4"},{"line_number":295,"context_line":"      name: parent"},{"line_number":296,"context_line":"  status: 200"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"- name: get provider has root provider UUID field"}],"source_content_type":"text/x-yaml","patch_set":69,"id":"3f4b6375_76c8ffa6","line":295,"range":{"start_line":293,"start_character":0,"end_line":295,"end_character":18},"updated":"2017-11-04 05:41:21.000000000","message":"Seeing the document[1], \u0027data\u0027 is used for a request parameter. IIUC, we should use response expectation parameter here. We can use \u0027response_json_paths\u0027 as I suggested in the previous comment.\n[1]https://github.com/cdent/gabbi/blob/master/docs/source/format.rst","commit_id":"79eb2de3175193a75bb9f9a8baed42d2ae58b9ff"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"2897e9ff54406dcb381bd0bd30b4666f375d60ab","unresolved":false,"context_lines":[{"line_number":290,"context_line":"  request_headers:"},{"line_number":291,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":292,"context_line":"      content-type: application/json"},{"line_number":293,"context_line":"  data:"},{"line_number":294,"context_line":"      $.`len`: 4"},{"line_number":295,"context_line":"      name: parent"},{"line_number":296,"context_line":"  status: 200"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"- name: get provider has root provider UUID field"}],"source_content_type":"text/x-yaml","patch_set":69,"id":"1f485f77_61ac0c34","line":295,"range":{"start_line":293,"start_character":0,"end_line":295,"end_character":18},"in_reply_to":"1f485f77_ec86b6db","updated":"2017-11-15 00:51:49.000000000","message":"Thank you very much. Looks good to me.","commit_id":"79eb2de3175193a75bb9f9a8baed42d2ae58b9ff"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5490b04c845e87505cf8c76f12a590a597cb1692","unresolved":false,"context_lines":[{"line_number":290,"context_line":"  request_headers:"},{"line_number":291,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":292,"context_line":"      content-type: application/json"},{"line_number":293,"context_line":"  data:"},{"line_number":294,"context_line":"      $.`len`: 4"},{"line_number":295,"context_line":"      name: parent"},{"line_number":296,"context_line":"  status: 200"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"- name: get provider has root provider UUID field"}],"source_content_type":"text/x-yaml","patch_set":69,"id":"1f485f77_ec86b6db","line":295,"range":{"start_line":293,"start_character":0,"end_line":295,"end_character":18},"in_reply_to":"3f4b6375_76c8ffa6","updated":"2017-11-14 22:22:27.000000000","message":"Got it.  The \u0027data\u0027 thing is actually sending JSON data in the body of the request (which is getting ignored).  Changing the values doesn\u0027t do anything.\n\nI swapped over to response_json_paths as suggested and toyed with the values to make sure I could get it to fail.  (Then of course changed it back so it\u0027ll pass.)\n\nThanks for the guidance here, Tetsuro.  Done.","commit_id":"79eb2de3175193a75bb9f9a8baed42d2ae58b9ff"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"8c50bac560d9409b9ea7be275045187f85fce01e","unresolved":false,"context_lines":[{"line_number":299,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":300,"context_line":"  request_headers:"},{"line_number":301,"context_line":"      content-type: application/json"},{"line_number":302,"context_line":"  data:"},{"line_number":303,"context_line":"      $.`len`: 6"},{"line_number":304,"context_line":"      name: parent"},{"line_number":305,"context_line":"      root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":306,"context_line":"      parent_provider_uuid: null"},{"line_number":307,"context_line":"  status: 200"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"- name: update a parent"}],"source_content_type":"text/x-yaml","patch_set":69,"id":"3f4b6375_16c30b8b","line":306,"range":{"start_line":302,"start_character":0,"end_line":306,"end_character":32},"updated":"2017-11-04 05:41:21.000000000","message":"ditto","commit_id":"79eb2de3175193a75bb9f9a8baed42d2ae58b9ff"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5490b04c845e87505cf8c76f12a590a597cb1692","unresolved":false,"context_lines":[{"line_number":299,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":300,"context_line":"  request_headers:"},{"line_number":301,"context_line":"      content-type: application/json"},{"line_number":302,"context_line":"  data:"},{"line_number":303,"context_line":"      $.`len`: 6"},{"line_number":304,"context_line":"      name: parent"},{"line_number":305,"context_line":"      root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":306,"context_line":"      parent_provider_uuid: null"},{"line_number":307,"context_line":"  status: 200"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"- name: update a parent"}],"source_content_type":"text/x-yaml","patch_set":69,"id":"1f485f77_cc6d3a33","line":306,"range":{"start_line":302,"start_character":0,"end_line":306,"end_character":32},"in_reply_to":"3f4b6375_16c30b8b","updated":"2017-11-14 22:22:27.000000000","message":"Done","commit_id":"79eb2de3175193a75bb9f9a8baed42d2ae58b9ff"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"8c50bac560d9409b9ea7be275045187f85fce01e","unresolved":false,"context_lines":[{"line_number":319,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":320,"context_line":"  request_headers:"},{"line_number":321,"context_line":"      content-type: application/json"},{"line_number":322,"context_line":"  data:"},{"line_number":323,"context_line":"      name: parent"},{"line_number":324,"context_line":"      root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":325,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":326,"context_line":"  status: 200"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"- name: fail trying to un-parent"}],"source_content_type":"text/x-yaml","patch_set":69,"id":"3f4b6375_b63797b0","line":325,"range":{"start_line":322,"start_character":0,"end_line":325,"end_character":60},"updated":"2017-11-04 05:41:21.000000000","message":"ditto","commit_id":"79eb2de3175193a75bb9f9a8baed42d2ae58b9ff"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5490b04c845e87505cf8c76f12a590a597cb1692","unresolved":false,"context_lines":[{"line_number":319,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]"},{"line_number":320,"context_line":"  request_headers:"},{"line_number":321,"context_line":"      content-type: application/json"},{"line_number":322,"context_line":"  data:"},{"line_number":323,"context_line":"      name: parent"},{"line_number":324,"context_line":"      root_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":325,"context_line":"      parent_provider_uuid: $ENVIRON[\u0027PARENT_PROVIDER_UUID\u0027]"},{"line_number":326,"context_line":"  status: 200"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"- name: fail trying to un-parent"}],"source_content_type":"text/x-yaml","patch_set":69,"id":"1f485f77_0c5d9279","line":325,"range":{"start_line":322,"start_character":0,"end_line":325,"end_character":60},"in_reply_to":"3f4b6375_b63797b0","updated":"2017-11-14 22:22:27.000000000","message":"Done.  (Note that the `name: parent` part was wrong due to the foregoing POST which changed the name to `child`.)","commit_id":"79eb2de3175193a75bb9f9a8baed42d2ae58b9ff"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ffbd2c227cb2faa37b2331dc162839193adbd510","unresolved":false,"context_lines":[{"line_number":211,"context_line":"  response_json_paths:"},{"line_number":212,"context_line":"      $.errors[0].title: Bad Request"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"# This section of tests validate nested resource provider relationships and"},{"line_number":215,"context_line":"# constraints. We attempt to set the parent provider UUID for the primary"},{"line_number":216,"context_line":"# resource provider to a UUID value of a provider we have not yet created and"},{"line_number":217,"context_line":"# expect a failure. We then create that parent provider record and attempt to"}],"source_content_type":"text/x-yaml","patch_set":75,"id":"ff82abbf_d65e8411","line":214,"updated":"2017-11-30 12:40:33.000000000","message":"I continue to think this section would be better in its own file, but not a blocker or anything.","commit_id":"b503772064a5488c67e3c5f255c10d270cd0d27b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b21fe8436e5959c9766c2dc949423c1314a0ec51","unresolved":false,"context_lines":[{"line_number":211,"context_line":"  response_json_paths:"},{"line_number":212,"context_line":"      $.errors[0].title: Bad Request"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"# This section of tests validate nested resource provider relationships and"},{"line_number":215,"context_line":"# constraints. We attempt to set the parent provider UUID for the primary"},{"line_number":216,"context_line":"# resource provider to a UUID value of a provider we have not yet created and"},{"line_number":217,"context_line":"# expect a failure. We then create that parent provider record and attempt to"}],"source_content_type":"text/x-yaml","patch_set":75,"id":"ff82abbf_307c8a1f","line":214,"in_reply_to":"ff82abbf_d65e8411","updated":"2017-12-01 15:30:28.000000000","message":"yeah, prolly. for a future commit I guess.","commit_id":"b503772064a5488c67e3c5f255c10d270cd0d27b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"75d74b4fa4c9051fee7a3e8264c53f0c4606fe2f","unresolved":false,"context_lines":[{"line_number":378,"context_line":"  status: 400"},{"line_number":379,"context_line":"  response_strings:"},{"line_number":380,"context_line":"      - \u0027re-parenting a provider is not currently allowed\u0027"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"- name: create a new provider"},{"line_number":383,"context_line":"  POST: /resource_providers"},{"line_number":384,"context_line":"  request_headers:"}],"source_content_type":"text/x-yaml","patch_set":79,"id":"df87a7cf_ac910f55","line":381,"updated":"2017-12-04 07:15:28.000000000","message":"We should have a testcase for deleting a provider which has child provider.","commit_id":"f8483be2199300d2d71510219eeba9cedb9b8c36"}],"placement-api-ref/source/parameters.yaml":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"203a46fea823d497ef60b726a90b4564c9f860b0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  description: \u003e"},{"line_number":53,"context_line":"    A UUID of a resource provider. The returned resource providers will be in"},{"line_number":54,"context_line":"    the same \"provider tree\" as the specified provider."},{"line_number":55,"context_line":"resource_provider_uuid_query:"},{"line_number":56,"context_line":"  \u003c\u003c: *resource_provider_uuid_path"},{"line_number":57,"context_line":"  in: query"},{"line_number":58,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":68,"id":"3f4b6375_7410ff00","line":55,"updated":"2017-11-03 19:00:29.000000000","message":"Are these supposed to be alphabetical or something??","commit_id":"3a66db052e6b7c77ba300ac527eec41f59170f3c"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"a940584d111c42d022f1fb94f378a4889ed4d1ab","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  required: false"},{"line_number":53,"context_line":"  description: \u003e"},{"line_number":54,"context_line":"    A UUID of a resource provider. The returned resource providers will be in"},{"line_number":55,"context_line":"    the same \"provider tree\" as the specified provider."},{"line_number":56,"context_line":"resource_provider_uuid_query:"},{"line_number":57,"context_line":"  \u003c\u003c: *resource_provider_uuid_path"},{"line_number":58,"context_line":"  in: query"}],"source_content_type":"text/x-yaml","patch_set":72,"id":"1f485f77_ae964d92","line":55,"updated":"2017-11-16 00:16:00.000000000","message":"Add \"min_version: 1.12\".","commit_id":"6c9f6843ba9c9ee12bea6402bc8a09059f57f3a0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5350dbb1ae29ac0b8d4f4a2bdfa3db8ba4cd6c85","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  required: false"},{"line_number":53,"context_line":"  description: \u003e"},{"line_number":54,"context_line":"    A UUID of a resource provider. The returned resource providers will be in"},{"line_number":55,"context_line":"    the same \"provider tree\" as the specified provider."},{"line_number":56,"context_line":"resource_provider_uuid_query:"},{"line_number":57,"context_line":"  \u003c\u003c: *resource_provider_uuid_path"},{"line_number":58,"context_line":"  in: query"}],"source_content_type":"text/x-yaml","patch_set":72,"id":"1f485f77_39804ebf","line":55,"in_reply_to":"1f485f77_ae964d92","updated":"2017-11-16 16:21:47.000000000","message":"Done","commit_id":"6c9f6843ba9c9ee12bea6402bc8a09059f57f3a0"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ed0f596518beae0a84c8210c0a2475c5eaf0e656","unresolved":false,"context_lines":[{"line_number":308,"context_line":"  type: string"},{"line_number":309,"context_line":"  in: body"},{"line_number":310,"context_line":"  required: false"},{"line_number":311,"context_line":"  readonly: true"},{"line_number":312,"context_line":"  description: \u003e"},{"line_number":313,"context_line":"    Read-only UUID of the top-most provider in this provider tree."},{"line_number":314,"context_line":"  min_version: 1.14"}],"source_content_type":"text/x-yaml","patch_set":82,"id":"df87a7cf_68075c1e","line":311,"range":{"start_line":311,"start_character":0,"end_line":311,"end_character":16},"updated":"2017-12-04 23:02:33.000000000","message":"It is not necessary.","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"73556eef1a47a09ba7b19b87409a9c19fc19f868","unresolved":false,"context_lines":[{"line_number":308,"context_line":"  type: string"},{"line_number":309,"context_line":"  in: body"},{"line_number":310,"context_line":"  required: false"},{"line_number":311,"context_line":"  readonly: true"},{"line_number":312,"context_line":"  description: \u003e"},{"line_number":313,"context_line":"    Read-only UUID of the top-most provider in this provider tree."},{"line_number":314,"context_line":"  min_version: 1.14"}],"source_content_type":"text/x-yaml","patch_set":82,"id":"df87a7cf_5cffa300","line":311,"range":{"start_line":311,"start_character":0,"end_line":311,"end_character":16},"in_reply_to":"df87a7cf_68075c1e","updated":"2017-12-05 17:50:13.000000000","message":"Done","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f8077523b44eb53a68f8c2970b0bf6cd7a17e31","unresolved":false,"context_lines":[{"line_number":64,"context_line":"  required: false"},{"line_number":65,"context_line":"  description: \u003e"},{"line_number":66,"context_line":"    A UUID of a resource provider. The returned resource providers will be in"},{"line_number":67,"context_line":"    the same \"provider tree\" as the specified provider."},{"line_number":68,"context_line":"  min_version: 1.14"},{"line_number":69,"context_line":"resource_provider_uuid_query:"},{"line_number":70,"context_line":"  \u003c\u003c: *resource_provider_uuid_path"}],"source_content_type":"text/x-yaml","patch_set":85,"id":"df87a7cf_ca0e733a","line":67,"updated":"2017-12-06 09:04:51.000000000","message":"\u0027tree_member\u0027 could be a possible other naming IMHO","commit_id":"d75df86f5cd797598757683eca1774b54500694e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d4cf28cd4f225f7e6295941b4bc7119f87504744","unresolved":false,"context_lines":[{"line_number":305,"context_line":"  description: \u003e"},{"line_number":306,"context_line":"    The UUID of the immediate parent of the resource provider."},{"line_number":307,"context_line":"  min_version: 1.14"},{"line_number":308,"context_line":"resource_provider_parent_provider_uuid_required:"},{"line_number":309,"context_line":"  type: string"},{"line_number":310,"context_line":"  in: body"},{"line_number":311,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":88,"id":"df87a7cf_7d412539","line":308,"updated":"2017-12-06 17:16:10.000000000","message":"Since this has already been through so many flipperty gibbets, not going to block on this, but for a future tidy consider investigating how yaml anchors (* and \u0026) are used elsewhere in this file to do inheritance and field overrides.","commit_id":"109f21f3c82edef720e1ff35da24d574dd004d7f"}],"placement-api-ref/source/resource_provider.inc":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ed0f596518beae0a84c8210c0a2475c5eaf0e656","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  - uuid: resource_provider_uuid"},{"line_number":35,"context_line":"  - links: resource_provider_links"},{"line_number":36,"context_line":"  - name: resource_provider_name"},{"line_number":37,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":38,"context_line":"  - root_provider_uuid: resource_provider_root_provider_uuid"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_a85fa43f","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":24},"updated":"2017-12-04 23:02:33.000000000","message":"It is \u0027required\u0027 parameter from microversion 1.14.\n(It always appears in the response.)\nSo it should be defined as required instead of optional.","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4db49a0936d8525bf64456452a053118cf4c2676","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  - uuid: resource_provider_uuid"},{"line_number":35,"context_line":"  - links: resource_provider_links"},{"line_number":36,"context_line":"  - name: resource_provider_name"},{"line_number":37,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":38,"context_line":"  - root_provider_uuid: resource_provider_root_provider_uuid"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_218398ce","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":24},"in_reply_to":"df87a7cf_a85fa43f","updated":"2017-12-05 17:32:33.000000000","message":"then why don\u0027t the uuid, name, and links attributes get marked with \"required: true\"?","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ed0f596518beae0a84c8210c0a2475c5eaf0e656","unresolved":false,"context_lines":[{"line_number":35,"context_line":"  - links: resource_provider_links"},{"line_number":36,"context_line":"  - name: resource_provider_name"},{"line_number":37,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":38,"context_line":"  - root_provider_uuid: resource_provider_root_provider_uuid"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Response Example"},{"line_number":41,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_c85c684d","line":38,"range":{"start_line":38,"start_character":4,"end_line":38,"end_character":22},"updated":"2017-12-04 23:02:33.000000000","message":"ditto","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ed0f596518beae0a84c8210c0a2475c5eaf0e656","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  - uuid: resource_provider_uuid"},{"line_number":82,"context_line":"  - links: resource_provider_links"},{"line_number":83,"context_line":"  - name: resource_provider_name"},{"line_number":84,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":85,"context_line":"  - root_provider_uuid: resource_provider_root_provider_uuid"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_88566029","line":84,"range":{"start_line":84,"start_character":4,"end_line":84,"end_character":24},"updated":"2017-12-04 23:02:33.000000000","message":"ditto","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ed0f596518beae0a84c8210c0a2475c5eaf0e656","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  - links: resource_provider_links"},{"line_number":83,"context_line":"  - name: resource_provider_name"},{"line_number":84,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":85,"context_line":"  - root_provider_uuid: resource_provider_root_provider_uuid"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Response Example"},{"line_number":88,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_e83a8ce5","line":85,"range":{"start_line":85,"start_character":4,"end_line":85,"end_character":22},"updated":"2017-12-04 23:02:33.000000000","message":"ditto","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4a745e646e1e8eed8f1f5f5d8a833645919c0fdf","unresolved":false,"context_lines":[{"line_number":65,"context_line":"  - uuid: resource_provider_uuid_path"},{"line_number":66,"context_line":"  - name: resource_provider_name"},{"line_number":67,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":68,"context_line":"    required: true"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Request example"},{"line_number":71,"context_line":"---------------"}],"source_content_type":"text/x-c++src","patch_set":85,"id":"df87a7cf_dec15d82","line":68,"range":{"start_line":68,"start_character":4,"end_line":68,"end_character":18},"updated":"2017-12-06 05:10:09.000000000","message":"It is not a required parameter in this case (the request body for update).","commit_id":"d75df86f5cd797598757683eca1774b54500694e"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4a745e646e1e8eed8f1f5f5d8a833645919c0fdf","unresolved":false,"context_lines":[{"line_number":83,"context_line":"  - links: resource_provider_links"},{"line_number":84,"context_line":"  - name: resource_provider_name"},{"line_number":85,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":86,"context_line":"    required: true"},{"line_number":87,"context_line":"  - root_provider_uuid: resource_provider_root_provider_uuid"},{"line_number":88,"context_line":"    required: true"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":85,"id":"df87a7cf_3e38899e","line":86,"range":{"start_line":86,"start_character":4,"end_line":86,"end_character":18},"updated":"2017-12-06 05:10:09.000000000","message":"It must be defined in parameters.yaml.\nThe check job failed because of it.","commit_id":"d75df86f5cd797598757683eca1774b54500694e"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4a745e646e1e8eed8f1f5f5d8a833645919c0fdf","unresolved":false,"context_lines":[{"line_number":85,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":86,"context_line":"    required: true"},{"line_number":87,"context_line":"  - root_provider_uuid: resource_provider_root_provider_uuid"},{"line_number":88,"context_line":"    required: true"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"Response Example"},{"line_number":91,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":85,"id":"df87a7cf_7ec0517c","line":88,"range":{"start_line":88,"start_character":4,"end_line":88,"end_character":18},"updated":"2017-12-06 05:10:09.000000000","message":"ditto","commit_id":"d75df86f5cd797598757683eca1774b54500694e"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"d1efaf42b4a621773185993dedc566bd84d93258","unresolved":false,"context_lines":[{"line_number":87,"context_line":"Response Example"},{"line_number":88,"context_line":"----------------"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. literalinclude:: update-resource_provider.json"},{"line_number":91,"context_line":"   :language: javascript"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Delete resource provider"}],"source_content_type":"text/x-c++src","patch_set":88,"id":"df87a7cf_65789ec3","line":90,"range":{"start_line":90,"start_character":20,"end_line":90,"end_character":49},"updated":"2017-12-07 06:06:44.000000000","message":"This examples should be updated.\n\u0027parent_provider_uuid\u0027 and \u0027root_provider_uuid\u0027 should be added.","commit_id":"109f21f3c82edef720e1ff35da24d574dd004d7f"}],"placement-api-ref/source/resource_providers.inc":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"a940584d111c42d022f1fb94f378a4889ed4d1ab","unresolved":false,"context_lines":[{"line_number":69,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  - name: resource_provider_name"},{"line_number":72,"context_line":"  - uuid: resource_provider_uuid_opt"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Request example"},{"line_number":75,"context_line":"---------------"}],"source_content_type":"text/x-c++src","patch_set":72,"id":"1f485f77_eece85b2","line":72,"updated":"2017-11-16 00:16:00.000000000","message":"Add \"parent_provider_uuid\".","commit_id":"6c9f6843ba9c9ee12bea6402bc8a09059f57f3a0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5350dbb1ae29ac0b8d4f4a2bdfa3db8ba4cd6c85","unresolved":false,"context_lines":[{"line_number":69,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  - name: resource_provider_name"},{"line_number":72,"context_line":"  - uuid: resource_provider_uuid_opt"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Request example"},{"line_number":75,"context_line":"---------------"}],"source_content_type":"text/x-c++src","patch_set":72,"id":"1f485f77_d48ea177","line":72,"in_reply_to":"1f485f77_eece85b2","updated":"2017-11-16 16:21:47.000000000","message":"Done","commit_id":"6c9f6843ba9c9ee12bea6402bc8a09059f57f3a0"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"8edbe76c625f672607e28399a7b5b075fbc86f7f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  - generation: resource_provider_generation"},{"line_number":40,"context_line":"  - uuid: resource_provider_uuid"},{"line_number":41,"context_line":"  - links: resource_provider_links"},{"line_number":42,"context_line":"  - name: resource_provider_name"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":78,"id":"ff82abbf_21e2ef30","line":42,"updated":"2017-12-01 06:13:18.000000000","message":"nit: add \u0027parent_provider_uuid\u0027 and \u0027root_provider_uuid\u0027.\n\nI overlooked them in old patch sets.","commit_id":"850e5cfd4b0ea2ea05497af7a347c315ffaefd1d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b21fe8436e5959c9766c2dc949423c1314a0ec51","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  - generation: resource_provider_generation"},{"line_number":40,"context_line":"  - uuid: resource_provider_uuid"},{"line_number":41,"context_line":"  - links: resource_provider_links"},{"line_number":42,"context_line":"  - name: resource_provider_name"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":78,"id":"df87a7cf_4a0de735","line":42,"in_reply_to":"ff82abbf_21e2ef30","updated":"2017-12-01 15:30:28.000000000","message":"actually, this is wrong. there should not be a name or uuid element in the response. only resource_providers and links. will fix.","commit_id":"850e5cfd4b0ea2ea05497af7a347c315ffaefd1d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b21fe8436e5959c9766c2dc949423c1314a0ec51","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  - name: resource_provider_name"},{"line_number":72,"context_line":"  - uuid: resource_provider_uuid_opt"},{"line_number":73,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Request example"},{"line_number":76,"context_line":"---------------"}],"source_content_type":"text/x-c++src","patch_set":78,"id":"df87a7cf_aa1b5371","line":73,"updated":"2017-12-01 15:30:28.000000000","message":"and there should be a root_provider_uuid here.","commit_id":"850e5cfd4b0ea2ea05497af7a347c315ffaefd1d"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ed0f596518beae0a84c8210c0a2475c5eaf0e656","unresolved":false,"context_lines":[{"line_number":35,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"  - resource_providers: resource_providers"},{"line_number":38,"context_line":"  - generation: resource_provider_generation"},{"line_number":39,"context_line":"  - uuid: resource_provider_uuid"},{"line_number":40,"context_line":"  - links: resource_provider_links"},{"line_number":41,"context_line":"  - name: resource_provider_name"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_2895d4e4","side":"PARENT","line":39,"range":{"start_line":38,"start_character":0,"end_line":39,"end_character":32},"updated":"2017-12-04 23:02:33.000000000","message":"They should not be removed in api reference.\n\nhttps://review.openstack.org/#/c/384807/82/nova/api/openstack/placement/handlers/resource_provider.py@128","commit_id":"9413660af316f22717d211849c5412da565aa009"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ed0f596518beae0a84c8210c0a2475c5eaf0e656","unresolved":false,"context_lines":[{"line_number":38,"context_line":"  - generation: resource_provider_generation"},{"line_number":39,"context_line":"  - uuid: resource_provider_uuid"},{"line_number":40,"context_line":"  - links: resource_provider_links"},{"line_number":41,"context_line":"  - name: resource_provider_name"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_08a49056","side":"PARENT","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":32},"updated":"2017-12-04 23:02:33.000000000","message":"ditto","commit_id":"9413660af316f22717d211849c5412da565aa009"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"82e6527bc42529b7df253b990068d424c02b4ba7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"  - generation: resource_provider_generation"},{"line_number":39,"context_line":"  - uuid: resource_provider_uuid"},{"line_number":40,"context_line":"  - links: resource_provider_links"},{"line_number":41,"context_line":"  - name: resource_provider_name"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Response Example"}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_a1da4814","side":"PARENT","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":32},"in_reply_to":"df87a7cf_08a49056","updated":"2017-12-05 17:28:48.000000000","message":"yes, they do not belong here. The response from GET /resource_providers does not contain a name, uuid, or generation attribute. It contains a resource_providers and a links attribute.","commit_id":"9413660af316f22717d211849c5412da565aa009"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ed0f596518beae0a84c8210c0a2475c5eaf0e656","unresolved":false,"context_lines":[{"line_number":36,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  - resource_providers: resource_providers"},{"line_number":39,"context_line":"  - links: resource_provider_links"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Response Example"},{"line_number":42,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_2863941c","line":39,"updated":"2017-12-04 23:02:33.000000000","message":"Add \u0027parent_provider_uuid\u0027 and \u0027root_provider_uuid\u0027","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"82e6527bc42529b7df253b990068d424c02b4ba7","unresolved":false,"context_lines":[{"line_number":36,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  - resource_providers: resource_providers"},{"line_number":39,"context_line":"  - links: resource_provider_links"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Response Example"},{"line_number":42,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_c1d50ce7","line":39,"in_reply_to":"df87a7cf_2863941c","updated":"2017-12-05 17:28:48.000000000","message":"No, the only attributes in the response from GET /resource_providers are the resource_providers attribute and the links attribute. That\u0027s it.","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"73556eef1a47a09ba7b19b87409a9c19fc19f868","unresolved":false,"context_lines":[{"line_number":36,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  - resource_providers: resource_providers"},{"line_number":39,"context_line":"  - links: resource_provider_links"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Response Example"},{"line_number":42,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":82,"id":"df87a7cf_1c57db04","line":39,"in_reply_to":"df87a7cf_c1d50ce7","updated":"2017-12-05 17:50:13.000000000","message":"I\u0027ve added these back in.","commit_id":"acc00b8061c4eeb38648190efb6749b0b5313594"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d4cf28cd4f225f7e6295941b4bc7119f87504744","unresolved":false,"context_lines":[{"line_number":41,"context_line":"  - links: resource_provider_links"},{"line_number":42,"context_line":"  - name: resource_provider_name"},{"line_number":43,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":44,"context_line":"  - root_provider_uuid: resource_provider_root_provider_uuid"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Response Example"},{"line_number":47,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":88,"id":"df87a7cf_1d88196f","line":44,"updated":"2017-12-06 17:16:10.000000000","message":"these are both *_required since they will always be in the body, in the microversion that has them\n\nbut a nit, fine to fix later (as long as it actually is)","commit_id":"109f21f3c82edef720e1ff35da24d574dd004d7f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"d1efaf42b4a621773185993dedc566bd84d93258","unresolved":false,"context_lines":[{"line_number":41,"context_line":"  - links: resource_provider_links"},{"line_number":42,"context_line":"  - name: resource_provider_name"},{"line_number":43,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":44,"context_line":"  - root_provider_uuid: resource_provider_root_provider_uuid"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Response Example"},{"line_number":47,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":88,"id":"df87a7cf_8502823c","line":44,"in_reply_to":"df87a7cf_1d88196f","updated":"2017-12-07 06:06:44.000000000","message":"+1","commit_id":"109f21f3c82edef720e1ff35da24d574dd004d7f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"d1efaf42b4a621773185993dedc566bd84d93258","unresolved":false,"context_lines":[{"line_number":72,"context_line":"  - name: resource_provider_name"},{"line_number":73,"context_line":"  - uuid: resource_provider_uuid_opt"},{"line_number":74,"context_line":"  - parent_provider_uuid: resource_provider_parent_provider_uuid"},{"line_number":75,"context_line":"  - root_provider_uuid: resource_provider_root_provider_uuid"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Request example"},{"line_number":78,"context_line":"---------------"}],"source_content_type":"text/x-c++src","patch_set":88,"id":"df87a7cf_a59c660e","line":75,"range":{"start_line":75,"start_character":4,"end_line":75,"end_character":60},"updated":"2017-12-07 06:06:44.000000000","message":"It should be removed.","commit_id":"109f21f3c82edef720e1ff35da24d574dd004d7f"}],"releasenotes/notes/placement-rest-api-nested-resource-providers-552a923a96d7adca.yaml":[{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"7d124effd0da568d4ca5fcd745bee6bf565539dc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - New placement REST API microversion 1.1 is added to support nested resource"},{"line_number":4,"context_line":"    providers. Users of the placement REST API can now pass a tree\u003d\u003cUUID\u003e"},{"line_number":5,"context_line":"    parameter to the GET /resource_providers REST API call. This will trigger"},{"line_number":6,"context_line":"    the placement service to return all resource provider records within the"}],"source_content_type":"text/x-yaml","patch_set":17,"id":"5a74a57a_9d498bd3","line":3,"range":{"start_line":3,"start_character":40,"end_line":3,"end_character":43},"updated":"2016-11-30 17:07:10.000000000","message":"I guess it\u0027s 1.2","commit_id":"fd590fdff50cb8eba6e3d38ca0a17b89519bc8d3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"eea6cd92f3dc84f8633bda8d76b2dee456173494","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - New placement REST API microversion 1.3 is added to support nested resource"},{"line_number":4,"context_line":"    providers. Users of the placement REST API can now pass a tree\u003d\u003cUUID\u003e"},{"line_number":5,"context_line":"    parameter to the GET /resource_providers REST API call. This will trigger"},{"line_number":6,"context_line":"    the placement service to return all resource provider records within the"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"ba5201f7_82d77cbe","line":3,"updated":"2017-01-09 15:38:47.000000000","message":"1.4","commit_id":"f1819234765b42d6d02483b794841f9a21e483d4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1fc3224198fd64d3f173e7b6c8526adceac3c8f3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - New placement REST API microversion 1.11 is added to support nested"},{"line_number":4,"context_line":"    resource providers. Users of the placement REST API can now pass a"},{"line_number":5,"context_line":"    ``tree\u003d\u003cUUID\u003e`` parameter to the ``GET /resource_providers`` REST API call."}],"source_content_type":"text/x-yaml","patch_set":42,"id":"9f436f4f_58ca8ca1","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":9},"updated":"2017-08-17 17:19:32.000000000","message":"do we also need to mention the chages to PUT /resource-providers here also.","commit_id":"61474b934e29eb5054dfba66338749b9fddc4c50"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - New placement REST API microversion 1.11 is added to support nested"},{"line_number":4,"context_line":"    resource providers. Users of the placement REST API can now pass a"},{"line_number":5,"context_line":"    ``tree\u003d\u003cUUID\u003e`` parameter to the ``GET /resource_providers`` REST API call."}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7f515b1d_1155ef1d","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":9},"in_reply_to":"9f436f4f_58ca8ca1","updated":"2017-10-04 18:44:31.000000000","message":"Will do.","commit_id":"61474b934e29eb5054dfba66338749b9fddc4c50"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1fc3224198fd64d3f173e7b6c8526adceac3c8f3","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - New placement REST API microversion 1.11 is added to support nested"},{"line_number":4,"context_line":"    resource providers. Users of the placement REST API can now pass a"},{"line_number":5,"context_line":"    ``tree\u003d\u003cUUID\u003e`` parameter to the ``GET /resource_providers`` REST API call."},{"line_number":6,"context_line":"    This will trigger the placement service to return all resource provider"},{"line_number":7,"context_line":"    records within the \"provider tree\" of the resource provider with the"},{"line_number":8,"context_line":"    supplied UUID value. The resource provider representation now includes a"}],"source_content_type":"text/x-yaml","patch_set":42,"id":"9f436f4f_d8bd5c03","line":5,"range":{"start_line":5,"start_character":39,"end_line":5,"end_character":62},"updated":"2017-08-17 17:19:32.000000000","message":"in the code comment this path is /resource-providers is it a hyphen or an underscore?","commit_id":"61474b934e29eb5054dfba66338749b9fddc4c50"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03851010f248501d07f5049c4be021c2e3442d04","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - New placement REST API microversion 1.11 is added to support nested"},{"line_number":4,"context_line":"    resource providers. Users of the placement REST API can now pass a"},{"line_number":5,"context_line":"    ``tree\u003d\u003cUUID\u003e`` parameter to the ``GET /resource_providers`` REST API call."},{"line_number":6,"context_line":"    This will trigger the placement service to return all resource provider"},{"line_number":7,"context_line":"    records within the \"provider tree\" of the resource provider with the"},{"line_number":8,"context_line":"    supplied UUID value. The resource provider representation now includes a"}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7f515b1d_913e7fd8","line":5,"range":{"start_line":5,"start_character":39,"end_line":5,"end_character":62},"in_reply_to":"9f436f4f_d8bd5c03","updated":"2017-10-04 18:44:31.000000000","message":"It\u0027s underscore. I\u0027ll fix the code comment.","commit_id":"61474b934e29eb5054dfba66338749b9fddc4c50"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"51743b07f5e7414975a34ea6e697275a316f4ec7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - New placement REST API microversion 1.14 is added to support nested"},{"line_number":4,"context_line":"    resource providers. Users of the placement REST API can now pass a"},{"line_number":5,"context_line":"    ``in_tree\u003d\u003cUUID\u003e`` parameter to the ``GET /resource_providers`` REST API"},{"line_number":6,"context_line":"    call.  This will trigger the placement service to return all resource"},{"line_number":7,"context_line":"    provider records within the \"provider tree\" of the resource provider with"}],"source_content_type":"text/x-yaml","patch_set":86,"id":"df87a7cf_067a0ef0","line":4,"range":{"start_line":4,"start_character":69,"end_line":4,"end_character":70},"updated":"2017-12-06 14:52:48.000000000","message":"an","commit_id":"f0d699a2ae1f0101f0011eecf6f00ae3c6752649"}]}
