)]}'
{"specs/rocky/approved/placement-forbidden-traits.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fc05c69531d83627810f80f34743b574c48a19fd","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Traits can be used to signal that a resource provider is special in some"},{"line_number":26,"context_line":"fashion. In those cases, it is useful to be able to say \"don\u0027t use this special"},{"line_number":27,"context_line":"thing for this non-special workload\". This allows the special resources to be"},{"line_number":28,"context_line":"preserved. In order for clients like the Nova scheduled to express this"},{"line_number":29,"context_line":"requirement, the Placement API needs additional query syntax."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This is considered a generally useful expression in the API, even if the use"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_017ec5e3","line":28,"range":{"start_line":28,"start_character":54,"end_line":28,"end_character":55},"updated":"2018-03-01 11:42:41.000000000","message":"r","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bbe184fc09ec29d6fa2a1c505a4f12524a4ff2af","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Traits can be used to signal that a resource provider is special in some"},{"line_number":26,"context_line":"fashion. In those cases, it is useful to be able to say \"don\u0027t use this special"},{"line_number":27,"context_line":"thing for this non-special workload\". This allows the special resources to be"},{"line_number":28,"context_line":"preserved. In order for clients like the Nova scheduled to express this"},{"line_number":29,"context_line":"requirement, the Placement API needs additional query syntax."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This is considered a generally useful expression in the API, even if the use"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_bc085428","line":28,"range":{"start_line":28,"start_character":54,"end_line":28,"end_character":55},"in_reply_to":"1f9dbf25_017ec5e3","updated":"2018-03-01 11:57:17.000000000","message":"Done","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fc05c69531d83627810f80f34743b574c48a19fd","unresolved":false,"context_lines":[{"line_number":29,"context_line":"requirement, the Placement API needs additional query syntax."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This is considered a generally useful expression in the API, even if the use"},{"line_number":32,"context_line":"cases (below) may be resolvalbe with other tooling."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Use Cases"},{"line_number":35,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_a18271c7","line":32,"range":{"start_line":32,"start_character":28,"end_line":32,"end_character":30},"updated":"2018-03-01 11:42:41.000000000","message":"bl","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bbe184fc09ec29d6fa2a1c505a4f12524a4ff2af","unresolved":false,"context_lines":[{"line_number":29,"context_line":"requirement, the Placement API needs additional query syntax."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This is considered a generally useful expression in the API, even if the use"},{"line_number":32,"context_line":"cases (below) may be resolvalbe with other tooling."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Use Cases"},{"line_number":35,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_7c12cc5a","line":32,"range":{"start_line":32,"start_character":28,"end_line":32,"end_character":30},"in_reply_to":"1f9dbf25_a18271c7","updated":"2018-03-01 11:57:17.000000000","message":"Done","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fc05c69531d83627810f80f34743b574c48a19fd","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Adjust the handling of the ``required`` parameter so that traits can be"},{"line_number":52,"context_line":"expressed as required to be present or required to be *not* present. Traits"},{"line_number":53,"context_line":"which are required to be not present are prefixed with a \u0027!\u0027. In the following"},{"line_number":54,"context_line":"advante we require ``STORAGE_DISK_SSD`` and *not* ``CUSTOM_GOLDEN_RAID``::"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    GET /resource_providers?resources\u003dDISK_GB\u0026required\u003dSTORAGE_DISK_SSD,!CUSTOM_GOLDEN_RAID"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_61554950","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":7},"updated":"2018-03-01 11:42:41.000000000","message":"eh?  example?","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bbe184fc09ec29d6fa2a1c505a4f12524a4ff2af","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Adjust the handling of the ``required`` parameter so that traits can be"},{"line_number":52,"context_line":"expressed as required to be present or required to be *not* present. Traits"},{"line_number":53,"context_line":"which are required to be not present are prefixed with a \u0027!\u0027. In the following"},{"line_number":54,"context_line":"advante we require ``STORAGE_DISK_SSD`` and *not* ``CUSTOM_GOLDEN_RAID``::"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    GET /resource_providers?resources\u003dDISK_GB\u0026required\u003dSTORAGE_DISK_SSD,!CUSTOM_GOLDEN_RAID"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_9c38f8d3","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":7},"in_reply_to":"1f9dbf25_61554950","updated":"2018-03-01 11:57:17.000000000","message":"weird, don\u0027t know what\u0027s up there\n\nbut yeah, example","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fc05c69531d83627810f80f34743b574c48a19fd","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    GET /resource_providers?resources\u003dDISK_GB\u0026required\u003dSTORAGE_DISK_SSD,!CUSTOM_GOLDEN_RAID"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"This syntax has the advantage of not requiring a new query parameter, which"},{"line_number":59,"context_line":"would then cascade to \"left-hand-side\" syntax additions in flavors and image"},{"line_number":60,"context_line":"metadata, at the cost of what might be considered too much encoding and a lack"},{"line_number":61,"context_line":"of visibility. \u0027!\u0027, however, is frequently understood to mean \"not\"."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_01f56557","line":59,"range":{"start_line":59,"start_character":22,"end_line":59,"end_character":66},"updated":"2018-03-01 11:42:41.000000000","message":"Ah, so?  The flavor syntax would have to be\n\ntrait:!CUSTOM_GOLDEN_RAID \u003d \u0027required\u0027\n\nwhich is arguably a \"left-hand side syntax addition\".\n\nAnd is weird, if I may say so.\n\nSee also below.","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bbe184fc09ec29d6fa2a1c505a4f12524a4ff2af","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    GET /resource_providers?resources\u003dDISK_GB\u0026required\u003dSTORAGE_DISK_SSD,!CUSTOM_GOLDEN_RAID"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"This syntax has the advantage of not requiring a new query parameter, which"},{"line_number":59,"context_line":"would then cascade to \"left-hand-side\" syntax additions in flavors and image"},{"line_number":60,"context_line":"metadata, at the cost of what might be considered too much encoding and a lack"},{"line_number":61,"context_line":"of visibility. \u0027!\u0027, however, is frequently understood to mean \"not\"."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_3c3524db","line":59,"range":{"start_line":59,"start_character":22,"end_line":59,"end_character":66},"in_reply_to":"1f9dbf25_01f56557","updated":"2018-03-01 11:57:17.000000000","message":"Oh, I was misremembering the syntax and thought it was the other way. Your argument is compelling.","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fc05c69531d83627810f80f34743b574c48a19fd","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"More specifics below."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":".. note:: This spec does not cover any changes required in nova-scheduler\u0027s"},{"line_number":66,"context_line":"          handling of flavor extra specs or image metadata to pass not-required"},{"line_number":67,"context_line":"          traits to the placement API."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Alternatives"},{"line_number":70,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_a19ef104","line":67,"range":{"start_line":65,"start_character":0,"end_line":67,"end_character":38},"updated":"2018-03-01 11:42:41.000000000","message":"-1.  I mean, I get that it\u0027s nice to limit a placement spec to the placement side of things.  But other specs with nova-driven use cases have included (or at least *considered*) the nova-side changes.  Based on the above weirdness for the arguably-most-obvious flavor syntax that results from this, we should at least discuss the possibilities in more detail here, if not explicitly spec and implement them.","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bbe184fc09ec29d6fa2a1c505a4f12524a4ff2af","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"More specifics below."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":".. note:: This spec does not cover any changes required in nova-scheduler\u0027s"},{"line_number":66,"context_line":"          handling of flavor extra specs or image metadata to pass not-required"},{"line_number":67,"context_line":"          traits to the placement API."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Alternatives"},{"line_number":70,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_7c408c36","line":67,"range":{"start_line":65,"start_character":0,"end_line":67,"end_character":38},"in_reply_to":"1f9dbf25_a19ef104","updated":"2018-03-01 11:57:17.000000000","message":"I\u0027d prefer in that case to leave out the nove-specifics, I\u0027ve included it for the sake of the bikeshedding (which we clearly need to do).","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fc05c69531d83627810f80f34743b574c48a19fd","unresolved":false,"context_lines":[{"line_number":101,"context_line":"Bad Request`` response."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"A malformed trait will result in a ``400 Bad Request`` response (this is"},{"line_number":104,"context_line":"already the case)."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_6176a9db","line":104,"updated":"2018-03-01 11:42:41.000000000","message":"I believe we currently tolerate whitespace around a trait name.  In what ways, if at all, will we tolerate whitespace in the new syntax?  E.g. which of the following are okay, and which are errors?\n\n- \u0027...,!CUSTOM_FOO,...\u0027  \u003c\u003d base case, this one\u0027s good\n- \u0027..., !CUSTOM_FOO,...\u0027  \u003c\u003d space before the !\n- \u0027...,! CUSTOM_FOO,...\u0027  \u003c\u003d space between the ! and trait\n- \u0027...,!CUSTOM_FOO ,...\u0027  \u003c\u003d space after the trait (I imagine this one\u0027s okay, cause it maps directly to existing whitespace tolerance)","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bbe184fc09ec29d6fa2a1c505a4f12524a4ff2af","unresolved":false,"context_lines":[{"line_number":101,"context_line":"Bad Request`` response."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"A malformed trait will result in a ``400 Bad Request`` response (this is"},{"line_number":104,"context_line":"already the case)."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_bccb74a3","line":104,"in_reply_to":"1f9dbf25_6176a9db","updated":"2018-03-01 11:57:17.000000000","message":"Given my misunderstanding above, I reckon the forbidden syntax is more of a goer, but my preference if we go with this syntax would be to ignore whitespace.","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fc05c69531d83627810f80f34743b574c48a19fd","unresolved":false,"context_lines":[{"line_number":162,"context_line":"  a patchset separate and prior to the API changes."},{"line_number":163,"context_line":"* Update the placement API handlers for ``GET /resource_providers`` and ``GET"},{"line_number":164,"context_line":"  /allocation_candidates`` in a new microversion to pass the negative traits to"},{"line_number":165,"context_line":"  the methods changed in the steps above."},{"line_number":166,"context_line":"* Add functional tests of the modified database queries."},{"line_number":167,"context_line":"* Add gabbi tests that express the new queries, both successful queries and"},{"line_number":168,"context_line":"  those that should cause a 400 response."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_812175b7","line":165,"updated":"2018-03-01 11:42:41.000000000","message":"Does this require a schema change?","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bbe184fc09ec29d6fa2a1c505a4f12524a4ff2af","unresolved":false,"context_lines":[{"line_number":162,"context_line":"  a patchset separate and prior to the API changes."},{"line_number":163,"context_line":"* Update the placement API handlers for ``GET /resource_providers`` and ``GET"},{"line_number":164,"context_line":"  /allocation_candidates`` in a new microversion to pass the negative traits to"},{"line_number":165,"context_line":"  the methods changed in the steps above."},{"line_number":166,"context_line":"* Add functional tests of the modified database queries."},{"line_number":167,"context_line":"* Add gabbi tests that express the new queries, both successful queries and"},{"line_number":168,"context_line":"  those that should cause a 400 response."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_fcd1fc58","line":165,"in_reply_to":"1f9dbf25_812175b7","updated":"2018-03-01 11:57:17.000000000","message":"yes, that\u0027s explained in the rest api impact above (re validation), I don\u0027t think we need to list every detail here, especially since any additional syntax will fail tests until we update the schema,","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fc05c69531d83627810f80f34743b574c48a19fd","unresolved":false,"context_lines":[{"line_number":189,"context_line":"Documentation Impact"},{"line_number":190,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"Two areas of documentation change:"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"* The `placement api-ref`_ will be updated to reflect the new syntax."},{"line_number":195,"context_line":"* `Microversion history`_ document will be updated."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_810ad523","line":192,"updated":"2018-03-01 11:42:41.000000000","message":"There are three bullets.  Not two.  (Five is right out.)","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bbe184fc09ec29d6fa2a1c505a4f12524a4ff2af","unresolved":false,"context_lines":[{"line_number":189,"context_line":"Documentation Impact"},{"line_number":190,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"Two areas of documentation change:"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"* The `placement api-ref`_ will be updated to reflect the new syntax."},{"line_number":195,"context_line":"* `Microversion history`_ document will be updated."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_1cd7084e","line":192,"in_reply_to":"1f9dbf25_810ad523","updated":"2018-03-01 11:57:17.000000000","message":"Done","commit_id":"7c60d5e56b0ee656590b901fcb3b33be69ad618d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a1a6e7803a7d23d2369b14f7454b894146949c7a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    \"trait:$TRAIT_NAME\": \"forbidden\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"Whether that syntax should be reflected on the placement side or not is"},{"line_number":91,"context_line":"unclear. The author of this spec feels that two different query parameters for"},{"line_number":92,"context_line":"the same type of thing confusing, but can certainly understand that this"},{"line_number":93,"context_line":"alternative could work well and feelings are often insufficient justification"},{"line_number":94,"context_line":"for syntax."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1f9dbf25_9c523867","line":91,"range":{"start_line":91,"start_character":39,"end_line":91,"end_character":43},"updated":"2018-03-01 12:24:44.000000000","message":"strike this, or...","commit_id":"542b3017fab2f8a67fec4202307a01bd344684d5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a1a6e7803a7d23d2369b14f7454b894146949c7a","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"Whether that syntax should be reflected on the placement side or not is"},{"line_number":91,"context_line":"unclear. The author of this spec feels that two different query parameters for"},{"line_number":92,"context_line":"the same type of thing confusing, but can certainly understand that this"},{"line_number":93,"context_line":"alternative could work well and feelings are often insufficient justification"},{"line_number":94,"context_line":"for syntax."},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1f9dbf25_bc5b7485","line":92,"range":{"start_line":92,"start_character":17,"end_line":92,"end_character":32},"updated":"2018-03-01 12:24:44.000000000","message":"...add a verb","commit_id":"542b3017fab2f8a67fec4202307a01bd344684d5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7dff8f82e4bdecf8ca53d813e04676de5d1dcbf8","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"Whether that syntax should be reflected on the placement side or not is"},{"line_number":91,"context_line":"unclear. The author of this spec feels that two different query parameters for"},{"line_number":92,"context_line":"the same type of thing confusing, but can certainly understand that this"},{"line_number":93,"context_line":"alternative could work well and feelings are often insufficient justification"},{"line_number":94,"context_line":"for syntax."},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1f9dbf25_7c764cdb","line":92,"range":{"start_line":92,"start_character":17,"end_line":92,"end_character":32},"in_reply_to":"1f9dbf25_bc5b7485","updated":"2018-03-07 09:22:01.000000000","message":"Done","commit_id":"542b3017fab2f8a67fec4202307a01bd344684d5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f5ccac2c873273e5a21236b9d04726b8f7d73e94","unresolved":false,"context_lines":[{"line_number":39,"context_line":"hardware in a positive fashion. That is, I want to trait the hardware with"},{"line_number":40,"context_line":"CUSTOM_MASSIVE_GPU and not have to put CUSTOM_NOT_MASSIVE_GPU on everything"},{"line_number":41,"context_line":"else. Instead flavors and other forms of workload request would be able to"},{"line_number":42,"context_line":"express NOT CUSTOM_MASSIVE_GPU."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Similarly some operators, deployers, and toolmakers wish to be able to trait"},{"line_number":45,"context_line":"a branch of a tree of nested resource providers as indicating that the branch"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_d53a8b32","line":42,"updated":"2018-03-12 11:27:19.000000000","message":"We spoke about the want to add a list of \"forbidden if not requested\" traits in configuration, because operators don\u0027t want to forget adding such traits to new flavors that are added for some other specific pool of hardware.\n\nAlthough that is all Nova integration pieces, and I should have read the word \"placement\" in the title of the spec more carefully. So +1 on excluding that discussion here.","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"09c048c0db617308a7c4581dfb48db883f4388bd","unresolved":false,"context_lines":[{"line_number":39,"context_line":"hardware in a positive fashion. That is, I want to trait the hardware with"},{"line_number":40,"context_line":"CUSTOM_MASSIVE_GPU and not have to put CUSTOM_NOT_MASSIVE_GPU on everything"},{"line_number":41,"context_line":"else. Instead flavors and other forms of workload request would be able to"},{"line_number":42,"context_line":"express NOT CUSTOM_MASSIVE_GPU."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Similarly some operators, deployers, and toolmakers wish to be able to trait"},{"line_number":45,"context_line":"a branch of a tree of nested resource providers as indicating that the branch"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_684258ad","line":42,"in_reply_to":"df7087c5_d53a8b32","updated":"2018-03-15 14:22:24.000000000","message":"meh, the baremetal service might not actually be a good use case here, since the deployers of said baremetal service would likely be using custom resource classes to differentiate different classes of hardware.\n\nA more realistic use case would be to prevent requests that do not contain STORAGE_DISK_SSD from consuming that (more valuable) DISK_GB resources on hosts that have SSD vs spinning oxide.","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f8e3e07dd2e3fa25bc71047028f8936b77303d0c","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Similarly some operators, deployers, and toolmakers wish to be able to trait"},{"line_number":45,"context_line":"a branch of a tree of nested resource providers as indicating that the branch"},{"line_number":46,"context_line":"belongs to some group or purpose and then be able to express \"not that group\"."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Proposed change"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_c37083df","line":46,"updated":"2018-03-12 21:52:53.000000000","message":"interesting thoughts. So, we would exclude the child tree of that specific RP node having that trait, right?","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"87cbea0754ff29f795d04214d6229da1d10bb0e6","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Similarly some operators, deployers, and toolmakers wish to be able to trait"},{"line_number":45,"context_line":"a branch of a tree of nested resource providers as indicating that the branch"},{"line_number":46,"context_line":"belongs to some group or purpose and then be able to express \"not that group\"."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Proposed change"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_a7ea040c","line":46,"in_reply_to":"df7087c5_c37083df","updated":"2018-03-14 13:33:39.000000000","message":"Only when we\u0027ve refined this concept of \"same subtree\".  For now, we\u0027re only including/excluding individual providers.","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"09a4662b86e4799a74a4bfda24ad70161456c7af","unresolved":false,"context_lines":[{"line_number":53,"context_line":"which are required to be not present are prefixed with a \u0027!\u0027. In the following"},{"line_number":54,"context_line":"example we require ``STORAGE_DISK_SSD`` and *not* ``CUSTOM_GOLDEN_RAID``::"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    GET /resource_providers?resources\u003dDISK_GB\u0026required\u003dSTORAGE_DISK_SSD,!CUSTOM_GOLDEN_RAID"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"This syntax has the advantage of not requiring a new query parameter, which"},{"line_number":59,"context_line":"might be a good thing. It, however, has the cost of what might be considered"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_7389c024","line":56,"range":{"start_line":56,"start_character":72,"end_line":56,"end_character":73},"updated":"2018-03-07 06:52:43.000000000","message":"Thinking of what happened if we have \u0027preferred\u0027 in the future. Probably use \u0027?\u0027...","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7dff8f82e4bdecf8ca53d813e04676de5d1dcbf8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"which are required to be not present are prefixed with a \u0027!\u0027. In the following"},{"line_number":54,"context_line":"example we require ``STORAGE_DISK_SSD`` and *not* ``CUSTOM_GOLDEN_RAID``::"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    GET /resource_providers?resources\u003dDISK_GB\u0026required\u003dSTORAGE_DISK_SSD,!CUSTOM_GOLDEN_RAID"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"This syntax has the advantage of not requiring a new query parameter, which"},{"line_number":59,"context_line":"might be a good thing. It, however, has the cost of what might be considered"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_c54ebdc0","line":56,"range":{"start_line":56,"start_character":72,"end_line":56,"end_character":73},"in_reply_to":"df7087c5_7389c024","updated":"2018-03-07 09:22:01.000000000","message":"In the preferred case I would think we would have a different query parameter:\n\n* required are situations that must be true: must have this trait, must not have this other trait\n* preferred are situations the it would be nice to be true, but aren\u0027t required: it would be nice to have this trait, it would be nice to not have this other trait","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"11d3436c288377636ba9e2d5502811d3b5a42d84","unresolved":false,"context_lines":[{"line_number":53,"context_line":"which are required to be not present are prefixed with a \u0027!\u0027. In the following"},{"line_number":54,"context_line":"example we require ``STORAGE_DISK_SSD`` and *not* ``CUSTOM_GOLDEN_RAID``::"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    GET /resource_providers?resources\u003dDISK_GB\u0026required\u003dSTORAGE_DISK_SSD,!CUSTOM_GOLDEN_RAID"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"This syntax has the advantage of not requiring a new query parameter, which"},{"line_number":59,"context_line":"might be a good thing. It, however, has the cost of what might be considered"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_51458f6f","line":56,"range":{"start_line":56,"start_character":72,"end_line":56,"end_character":73},"in_reply_to":"df7087c5_c54ebdc0","updated":"2018-03-07 12:03:39.000000000","message":"ah, that make sense a lot","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"09c048c0db617308a7c4581dfb48db883f4388bd","unresolved":false,"context_lines":[{"line_number":58,"context_line":"This syntax has the advantage of not requiring a new query parameter, which"},{"line_number":59,"context_line":"might be a good thing. It, however, has the cost of what might be considered"},{"line_number":60,"context_line":"too much encoding and a lack of visibility. \u0027!\u0027, however, is frequently"},{"line_number":61,"context_line":"understood to mean \"not\"."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"More specifics below."},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_487514f9","line":61,"updated":"2018-03-15 14:22:24.000000000","message":"yeah, I like using ! instead of a completely new query parameter. It is universally understood that ! is the reverse operator, so required\u003d!SOMETHING is pretty well understood as meaning \"I require that SOMETHING not be present\".","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"09c048c0db617308a7c4581dfb48db883f4388bd","unresolved":false,"context_lines":[{"line_number":78,"context_line":"and has the same syntax. It means \"traits listed here should not be in the"},{"line_number":79,"context_line":"results\"."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"This format could be easier to manage and reason about (for *existing* users)"},{"line_number":82,"context_line":"because the existing syntax in flavor extra specs looks like this::"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    \"trait:$TRAIT_NAME\": \"required\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"This suggests that forbidden would work well as::"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    \"trait:$TRAIT_NAME\": \"forbidden\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"Whether that syntax should be reflected on the placement side or not is"},{"line_number":91,"context_line":"unclear. The author of this spec feels that two different query parameters for"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_08987c19","line":88,"range":{"start_line":81,"start_character":0,"end_line":88,"end_character":36},"updated":"2018-03-15 14:22:24.000000000","message":"Well, as you imply, there\u0027s no reason why we can\u0027t use:\n\n \"trait:$TRAIT\": \"forbidden\"\n\nin the extra specs and image properties. Those are tangential to how the placement API\u0027s querystring is constructed.","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f5ccac2c873273e5a21236b9d04726b8f7d73e94","unresolved":false,"context_lines":[{"line_number":91,"context_line":"unclear. The author of this spec feels that two different query parameters for"},{"line_number":92,"context_line":"the same type of thing is confusing, but can certainly understand that this"},{"line_number":93,"context_line":"alternative could work well and feelings are often insufficient justification"},{"line_number":94,"context_line":"for syntax."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Data model impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_d5d60bc4","line":94,"updated":"2018-03-12 11:27:19.000000000","message":"Totally +1 all this and your choice. Should consider the Nova usage of the API separately.","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9c05c35b4fc0afed9365f72d045c3c71ea5067f6","unresolved":false,"context_lines":[{"line_number":146,"context_line":"------------------"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Queries to the database will see a moderate increase in complexity but existing"},{"line_number":149,"context_line":"table indexes should handle this with aplomb."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Other deployer impact"},{"line_number":152,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df7087c5_8663c6dc","line":149,"range":{"start_line":149,"start_character":38,"end_line":149,"end_character":44},"updated":"2018-03-08 16:18:36.000000000","message":"I learnt a new word :)","commit_id":"d321732e1a308930b1cf2f31793394c271c063f6"}]}
