)]}'
{"placement-api-ref/source/parameters.yaml":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"2a5125f582c8d4b0ac66aeb3c062e7a6550818cb","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  required: false"},{"line_number":54,"context_line":"  description: \u003e"},{"line_number":55,"context_line":"     A parameter to query the traits that have been associated with at"},{"line_number":56,"context_line":"     least one resource provider."},{"line_number":57,"context_line":"trait_name_query:"},{"line_number":58,"context_line":"  type: string"},{"line_number":59,"context_line":"  in: query"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"7f231b9d_f5b9d2cb","line":56,"updated":"2017-06-14 16:01:21.000000000","message":"This might work better as something like:\n\nIf this parameter has a true value, the returned traits will be those that are associated with at least one resource provider.","commit_id":"407b5d62f839609b35ac3efa97619ff860042e6d"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e2f8ea0507a905f5cb6da3524f8b482dd4c8c65a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  required: false"},{"line_number":54,"context_line":"  description: \u003e"},{"line_number":55,"context_line":"     A parameter to query the traits that have been associated with at"},{"line_number":56,"context_line":"     least one resource provider."},{"line_number":57,"context_line":"trait_name_query:"},{"line_number":58,"context_line":"  type: string"},{"line_number":59,"context_line":"  in: query"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"7f231b9d_6a170647","line":56,"in_reply_to":"7f231b9d_f5b9d2cb","updated":"2017-06-15 08:46:10.000000000","message":"Done","commit_id":"407b5d62f839609b35ac3efa97619ff860042e6d"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"bd9b036156993fe81227a66eb18d7bfd8bf5f42f","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        resources\u003dVCPU:4,DISK_GB:64,MEMORY_MB:2048"},{"line_number":50,"context_line":"trait_associated:"},{"line_number":51,"context_line":"  type: boolean"},{"line_number":52,"context_line":"  in: query"},{"line_number":53,"context_line":"  required: false"},{"line_number":54,"context_line":"  description: \u003e"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1f1a1f67_5c08dfd7","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":15},"updated":"2017-07-14 05:18:21.000000000","message":"it\u0027s not a boolean? boolean should accept 0 or 1 etc but\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/placement/handlers/trait.py#L179\n\nseems only accept \u0027true\u0027 and \u0027false\u0027 ?","commit_id":"2d900cbbfd665b4a329ba68151366cfc3aa43ee9"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"049e85a85bb3f2ec7cca24c509a7b2c2e5bfe574","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        resources\u003dVCPU:4,DISK_GB:64,MEMORY_MB:2048"},{"line_number":50,"context_line":"trait_associated:"},{"line_number":51,"context_line":"  type: boolean"},{"line_number":52,"context_line":"  in: query"},{"line_number":53,"context_line":"  required: false"},{"line_number":54,"context_line":"  description: \u003e"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1f1a1f67_48267dd0","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":15},"in_reply_to":"1f1a1f67_5c08dfd7","updated":"2017-07-18 09:48:34.000000000","message":"it\u0027s kind of logical boolean ), but yes, updated as string","commit_id":"2d900cbbfd665b4a329ba68151366cfc3aa43ee9"}],"placement-api-ref/source/traits.inc":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"2a5125f582c8d4b0ac66aeb3c062e7a6550818cb","unresolved":false,"context_lines":[{"line_number":7,"context_line":"providers: a user may request 80GB of disk space for an instance"},{"line_number":8,"context_line":"(quantitative), but may also expect that the disk be SSD instead of"},{"line_number":9,"context_line":"spinning disk (qualitative). Traits provide a way to mark that a"},{"line_number":10,"context_line":"storage provide is SSD or spinning."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":".. note:: Traits API requests are availiable starting from version 1.6."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7f231b9d_f5643224","line":10,"updated":"2017-06-14 16:01:21.000000000","message":"provider","commit_id":"407b5d62f839609b35ac3efa97619ff860042e6d"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e2f8ea0507a905f5cb6da3524f8b482dd4c8c65a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"providers: a user may request 80GB of disk space for an instance"},{"line_number":8,"context_line":"(quantitative), but may also expect that the disk be SSD instead of"},{"line_number":9,"context_line":"spinning disk (qualitative). Traits provide a way to mark that a"},{"line_number":10,"context_line":"storage provide is SSD or spinning."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":".. note:: Traits API requests are availiable starting from version 1.6."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7f231b9d_2a2fce8e","line":10,"in_reply_to":"7f231b9d_f5643224","updated":"2017-06-15 08:46:10.000000000","message":"Done","commit_id":"407b5d62f839609b35ac3efa97619ff860042e6d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"2a5125f582c8d4b0ac66aeb3c062e7a6550818cb","unresolved":false,"context_lines":[{"line_number":71,"context_line":"Update traits"},{"line_number":72,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Insert a new custom trait. If traits already exists 204 will be returned."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":".. rest_method:: PUT /traits/{name}"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7f231b9d_b5e7daac","line":74,"updated":"2017-06-14 16:01:21.000000000","message":"You should explain somewhere, either here, or near the top, the difference between and standard and custom trait.","commit_id":"407b5d62f839609b35ac3efa97619ff860042e6d"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e2f8ea0507a905f5cb6da3524f8b482dd4c8c65a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"Update traits"},{"line_number":72,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Insert a new custom trait. If traits already exists 204 will be returned."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":".. rest_method:: PUT /traits/{name}"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"7f231b9d_0a20929a","line":74,"in_reply_to":"7f231b9d_b5e7daac","updated":"2017-06-15 08:46:10.000000000","message":"Done","commit_id":"407b5d62f839609b35ac3efa97619ff860042e6d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f85f15b11dd767e71d680f5cf4c4e80e62a96b38","unresolved":false,"context_lines":[{"line_number":79,"context_line":"library. The standard traits are read-only in the placement API which means"},{"line_number":80,"context_line":"that the user can\u0027t modify any standard traits through API."},{"line_number":81,"context_line":"The custom traits are used by admin users to manage the non-standard"},{"line_number":82,"context_line":"qualitative information of ResourceProviders."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":".. rest_method:: PUT /traits/{name}"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"3f1d235d_8ffb54bf","line":82,"updated":"2017-07-06 15:56:02.000000000","message":"nit: s/ResourceProviders/resource providers/","commit_id":"7c43b1aedb3114cba80fbf2fc932d59e46c5fd57"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"86502e5ff9d4570ff2c6b48e52d40256b185696a","unresolved":false,"context_lines":[{"line_number":79,"context_line":"library. The standard traits are read-only in the placement API which means"},{"line_number":80,"context_line":"that the user can\u0027t modify any standard traits through API."},{"line_number":81,"context_line":"The custom traits are used by admin users to manage the non-standard"},{"line_number":82,"context_line":"qualitative information of ResourceProviders."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":".. rest_method:: PUT /traits/{name}"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":4,"id":"3f1d235d_4ec19e53","line":82,"in_reply_to":"3f1d235d_8ffb54bf","updated":"2017-07-07 11:19:54.000000000","message":"Done","commit_id":"7c43b1aedb3114cba80fbf2fc932d59e46c5fd57"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f85f15b11dd767e71d680f5cf4c4e80e62a96b38","unresolved":false,"context_lines":[{"line_number":88,"context_line":"Error response codes: badRequest(400), conflict(409)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* `400 BadRequest` if trait name is not prefixed with `CUSTOM_` prefix."},{"line_number":91,"context_line":"* `409 Conflict` if trait name conflicts with standard trait name."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Request"},{"line_number":94,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"3f1d235d_efc1a855","line":91,"range":{"start_line":91,"start_character":46,"end_line":91,"end_character":65},"updated":"2017-07-06 15:56:02.000000000","message":"Remove \"standard\" from the above. A 400 will be returned if the name doesn\u0027t begin with CUSTOM_, and all standard traits begin with something other than CUSTOM_, so a 409 is returned when the same custom trait already exists. But regardless, just remove the word \"standard\" from the above and we should be fine.","commit_id":"7c43b1aedb3114cba80fbf2fc932d59e46c5fd57"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"86502e5ff9d4570ff2c6b48e52d40256b185696a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"Error response codes: badRequest(400), conflict(409)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* `400 BadRequest` if trait name is not prefixed with `CUSTOM_` prefix."},{"line_number":91,"context_line":"* `409 Conflict` if trait name conflicts with standard trait name."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Request"},{"line_number":94,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":4,"id":"3f1d235d_0eb726f7","line":91,"range":{"start_line":91,"start_character":46,"end_line":91,"end_character":65},"in_reply_to":"3f1d235d_efc1a855","updated":"2017-07-07 11:19:54.000000000","message":"Done","commit_id":"7c43b1aedb3114cba80fbf2fc932d59e46c5fd57"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"bd9b036156993fe81227a66eb18d7bfd8bf5f42f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"Error response codes: badRequest(400), conflict(409)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* `400 BadRequest` if trait name is not prefixed with `CUSTOM_` prefix."},{"line_number":91,"context_line":"* `409 Conflict` if trait name conflicts with trait name."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Request"},{"line_number":94,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"1f1a1f67_7ce95b18","line":91,"range":{"start_line":91,"start_character":17,"end_line":91,"end_character":57},"updated":"2017-07-14 05:18:21.000000000","message":"don\u0027t fully understand this, and where we return 409?","commit_id":"2d900cbbfd665b4a329ba68151366cfc3aa43ee9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"2d6b6fa0edbdf9655d3824c957a9c2aeb65061de","unresolved":false,"context_lines":[{"line_number":88,"context_line":"Error response codes: badRequest(400), conflict(409)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* `400 BadRequest` if trait name is not prefixed with `CUSTOM_` prefix."},{"line_number":91,"context_line":"* `409 Conflict` if trait name conflicts with trait name."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Request"},{"line_number":94,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"1f1a1f67_7eca5c6d","line":91,"in_reply_to":"1f1a1f67_7ce95b18","updated":"2017-07-14 17:45:27.000000000","message":"Good catch, you\u0027re right we don\u0027t.\n\nThe only commong response is 400 because if it is a custom trait and it already exists, it returns 204. If it is not a custom trait, or it is a poorly formed trait then the schema will be invalid and a 400 will be returned.","commit_id":"2d900cbbfd665b4a329ba68151366cfc3aa43ee9"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"049e85a85bb3f2ec7cca24c509a7b2c2e5bfe574","unresolved":false,"context_lines":[{"line_number":88,"context_line":"Error response codes: badRequest(400), conflict(409)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* `400 BadRequest` if trait name is not prefixed with `CUSTOM_` prefix."},{"line_number":91,"context_line":"* `409 Conflict` if trait name conflicts with trait name."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Request"},{"line_number":94,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"1f1a1f67_4840bda5","line":91,"in_reply_to":"1f1a1f67_7eca5c6d","updated":"2017-07-18 09:48:34.000000000","message":"Yes, indeed, thanks.","commit_id":"2d900cbbfd665b4a329ba68151366cfc3aa43ee9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1991f1d7e1ec7bd1d689b74d85e67bccde742fc0","unresolved":false,"context_lines":[{"line_number":45,"context_line":".. literalinclude:: get-traits.json"},{"line_number":46,"context_line":"   :language: javascript"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Show traits"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Check if a trait name exists in this cloud."}],"source_content_type":"text/x-c++src","patch_set":7,"id":"ff346bd7_ec686722","line":48,"range":{"start_line":48,"start_character":5,"end_line":48,"end_character":11},"updated":"2017-07-21 21:48:49.000000000","message":"nit: s/traits/trait/","commit_id":"67028cb732ccee70bc2094c1111652b9a175e3c8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1991f1d7e1ec7bd1d689b74d85e67bccde742fc0","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"No body content is returned on a successful GET."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Update traits"},{"line_number":72,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Insert a new custom trait. If traits already exists 204 will be returned."}],"source_content_type":"text/x-c++src","patch_set":7,"id":"ff346bd7_ac725f10","line":71,"range":{"start_line":71,"start_character":7,"end_line":71,"end_character":13},"updated":"2017-07-21 21:48:49.000000000","message":"ditto","commit_id":"67028cb732ccee70bc2094c1111652b9a175e3c8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1991f1d7e1ec7bd1d689b74d85e67bccde742fc0","unresolved":false,"context_lines":[{"line_number":74,"context_line":"Insert a new custom trait. If traits already exists 204 will be returned."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"There are two kinds of traits: the standard traits and the custom traits."},{"line_number":77,"context_line":"The standard traits are interoperable across different Openstack cloud"},{"line_number":78,"context_line":"deployments. The definition of standard traits comes from the `os-traits`"},{"line_number":79,"context_line":"library. The standard traits are read-only in the placement API which means"},{"line_number":80,"context_line":"that the user can\u0027t modify any standard traits through API."}],"source_content_type":"text/x-c++src","patch_set":7,"id":"ff346bd7_0c55eb50","line":77,"range":{"start_line":77,"start_character":55,"end_line":77,"end_character":64},"updated":"2017-07-21 21:48:49.000000000","message":"nit: s/Openstack/OpenStack/","commit_id":"67028cb732ccee70bc2094c1111652b9a175e3c8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1991f1d7e1ec7bd1d689b74d85e67bccde742fc0","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"No body content is returned on a successful PUT."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Delete traits"},{"line_number":105,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Delete the trait specified be `{name}`. Note that only custom traits can be"}],"source_content_type":"text/x-c++src","patch_set":7,"id":"ff346bd7_ac4b7fae","line":104,"range":{"start_line":104,"start_character":7,"end_line":104,"end_character":13},"updated":"2017-07-21 21:48:49.000000000","message":"ditto","commit_id":"67028cb732ccee70bc2094c1111652b9a175e3c8"}]}
