)]}'
{"specs/ocata/approved/request-standardized-capabilities.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0413f4db726bdafec5c8057b0c967efae8993fcb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Cloud users currently have to deal with free-formed flavor extra_specs and"},{"line_number":21,"context_line":"image metadata in order to specify capabilities in a launch request. It is"},{"line_number":22,"context_line":"error-prone because a string can easily be misspelled and cannot be validated."},{"line_number":23,"context_line":"We also lack a feature to specify preferences of capabilities in flavors and"},{"line_number":24,"context_line":"images. We need a coherent way to objectify capabilities and their"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_26bb5cc6","line":21,"updated":"2016-08-08 19:06:27.000000000","message":"Let\u0027s be explicit above. \"Cloud users\" could mean normal end-users, and normal end-users never have the ability to specify capabilities via extra_specs. Only the cloud administrator does...","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Cloud users currently have to deal with free-formed flavor extra_specs and"},{"line_number":21,"context_line":"image metadata in order to specify capabilities in a launch request. It is"},{"line_number":22,"context_line":"error-prone because a string can easily be misspelled and cannot be validated."},{"line_number":23,"context_line":"We also lack a feature to specify preferences of capabilities in flavors and"},{"line_number":24,"context_line":"images. We need a coherent way to objectify capabilities and their"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_14e58736","line":21,"in_reply_to":"9ad45d7e_26bb5cc6","updated":"2016-08-10 04:32:03.000000000","message":"Yup, done.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0413f4db726bdafec5c8057b0c967efae8993fcb","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Cloud users currently have to deal with free-formed flavor extra_specs and"},{"line_number":21,"context_line":"image metadata in order to specify capabilities in a launch request. It is"},{"line_number":22,"context_line":"error-prone because a string can easily be misspelled and cannot be validated."},{"line_number":23,"context_line":"We also lack a feature to specify preferences of capabilities in flavors and"},{"line_number":24,"context_line":"images. We need a coherent way to objectify capabilities and their"},{"line_number":25,"context_line":"functionalities in flavor, image and request_spec to do validations and"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_86b048df","line":22,"updated":"2016-08-08 19:06:27.000000000","message":"More importantly than these strings not being validated or the possibility of them being misspelled is the issue that without standardization, there is no possibility of interoperable OpenStack clouds. If a request for some specific thing -- for example, the avx2 CPU instruction extensions -- is not representable in the same way across multiple OpenStack clouds, then we cannot have interoperability. Simple as that.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Cloud users currently have to deal with free-formed flavor extra_specs and"},{"line_number":21,"context_line":"image metadata in order to specify capabilities in a launch request. It is"},{"line_number":22,"context_line":"error-prone because a string can easily be misspelled and cannot be validated."},{"line_number":23,"context_line":"We also lack a feature to specify preferences of capabilities in flavors and"},{"line_number":24,"context_line":"images. We need a coherent way to objectify capabilities and their"},{"line_number":25,"context_line":"functionalities in flavor, image and request_spec to do validations and"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_321edb63","line":22,"in_reply_to":"9ad45d7e_86b048df","updated":"2016-08-10 04:32:03.000000000","message":"Done","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0413f4db726bdafec5c8057b0c967efae8993fcb","unresolved":false,"context_lines":[{"line_number":44,"context_line":"Proposed change"},{"line_number":45,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"We propose a new nova object `Capabilities` to deal with capability"},{"line_number":48,"context_line":"specification and validation in flavors and image metadata, as well as the"},{"line_number":49,"context_line":"preprocessing logics to generate qualitative part of request for generic"},{"line_number":50,"context_line":"scheduler in request spec. The proposed change with the new object adds"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_66b554cc","line":47,"updated":"2016-08-08 19:06:27.000000000","message":"How about CapabilityList or CapabilitySet instead of Capabilities? That would match the naming we have for other list-like objects.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":44,"context_line":"Proposed change"},{"line_number":45,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"We propose a new nova object `Capabilities` to deal with capability"},{"line_number":48,"context_line":"specification and validation in flavors and image metadata, as well as the"},{"line_number":49,"context_line":"preprocessing logics to generate qualitative part of request for generic"},{"line_number":50,"context_line":"scheduler in request spec. The proposed change with the new object adds"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_178e2978","line":47,"in_reply_to":"9ad45d7e_66b554cc","updated":"2016-08-10 04:32:03.000000000","message":"CapabilityList sounds good.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0413f4db726bdafec5c8057b0c967efae8993fcb","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"We propose a new nova object `Capabilities` to deal with capability"},{"line_number":48,"context_line":"specification and validation in flavors and image metadata, as well as the"},{"line_number":49,"context_line":"preprocessing logics to generate qualitative part of request for generic"},{"line_number":50,"context_line":"scheduler in request spec. The proposed change with the new object adds"},{"line_number":51,"context_line":"following features to Nova:"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_c6ca404f","line":49,"updated":"2016-08-08 19:06:27.000000000","message":"s/logics/logic/\ns/qualitative part/the qualitative part/\ns/of request for/of the request to the/","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ecded6b76a660b827720ab41312b1578cfb7c700","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"We propose a new nova object `Capabilities` to deal with capability"},{"line_number":48,"context_line":"specification and validation in flavors and image metadata, as well as the"},{"line_number":49,"context_line":"preprocessing logics to generate qualitative part of request for generic"},{"line_number":50,"context_line":"scheduler in request spec. The proposed change with the new object adds"},{"line_number":51,"context_line":"following features to Nova:"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_d628c5e4","line":49,"in_reply_to":"9ad45d7e_5736e103","updated":"2016-08-10 12:58:37.000000000","message":"LOL, no worries, Yingxin! :) I\u0027d hate to think what my Mandarin would look like in a spec ;)","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"We propose a new nova object `Capabilities` to deal with capability"},{"line_number":48,"context_line":"specification and validation in flavors and image metadata, as well as the"},{"line_number":49,"context_line":"preprocessing logics to generate qualitative part of request for generic"},{"line_number":50,"context_line":"scheduler in request spec. The proposed change with the new object adds"},{"line_number":51,"context_line":"following features to Nova:"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_5736e103","line":49,"in_reply_to":"9ad45d7e_c6ca404f","updated":"2016-08-10 04:32:03.000000000","message":"Grammar kills me","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0413f4db726bdafec5c8057b0c967efae8993fcb","unresolved":false,"context_lines":[{"line_number":48,"context_line":"specification and validation in flavors and image metadata, as well as the"},{"line_number":49,"context_line":"preprocessing logics to generate qualitative part of request for generic"},{"line_number":50,"context_line":"scheduler in request spec. The proposed change with the new object adds"},{"line_number":51,"context_line":"following features to Nova:"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"\"Required\" and \"Preferred\" capabilities management in flavors"},{"line_number":54,"context_line":"-------------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_a6c74c44","line":51,"updated":"2016-08-08 19:06:27.000000000","message":"s/following/the following/","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":48,"context_line":"specification and validation in flavors and image metadata, as well as the"},{"line_number":49,"context_line":"preprocessing logics to generate qualitative part of request for generic"},{"line_number":50,"context_line":"scheduler in request spec. The proposed change with the new object adds"},{"line_number":51,"context_line":"following features to Nova:"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"\"Required\" and \"Preferred\" capabilities management in flavors"},{"line_number":54,"context_line":"-------------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_121bd773","line":51,"in_reply_to":"9ad45d7e_a6c74c44","updated":"2016-08-10 04:32:03.000000000","message":"Done","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e85d50b5e15b01445c36235546ba3aa44c40d487","unresolved":false,"context_lines":[{"line_number":53,"context_line":"\"Required\" and \"Preferred\" capabilities management in flavors"},{"line_number":54,"context_line":"-------------------------------------------------------------"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Store capabilities with their preferences in the new `Capabilities` object."},{"line_number":57,"context_line":"Add a new field to `Flavor` object to store capabilities in flavors. The"},{"line_number":58,"context_line":"relationship between flavors and capabilities are then persisted to the API"},{"line_number":59,"context_line":"database."}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_86b68888","line":56,"updated":"2016-08-08 19:23:24.000000000","message":"So is this one object for *all* the capabilities that a resource provider may have? If so, a RP can have many capabilities. How would these be represented? And what do you mean by \"and their preferences\"? A preference is something associated with a request, not a flavor.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0413f4db726bdafec5c8057b0c967efae8993fcb","unresolved":false,"context_lines":[{"line_number":53,"context_line":"\"Required\" and \"Preferred\" capabilities management in flavors"},{"line_number":54,"context_line":"-------------------------------------------------------------"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Store capabilities with their preferences in the new `Capabilities` object."},{"line_number":57,"context_line":"Add a new field to `Flavor` object to store capabilities in flavors. The"},{"line_number":58,"context_line":"relationship between flavors and capabilities are then persisted to the API"},{"line_number":59,"context_line":"database."}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_06c5783b","line":56,"updated":"2016-08-08 19:06:27.000000000","message":"Sorry, what do you mean by \"store capabilities with their preferences\"? Capabilities don\u0027t have preferences. A request to launch an instance contains a list of preferred capabilities, but the capabilities themselves don\u0027t contain preferences.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":53,"context_line":"\"Required\" and \"Preferred\" capabilities management in flavors"},{"line_number":54,"context_line":"-------------------------------------------------------------"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Store capabilities with their preferences in the new `Capabilities` object."},{"line_number":57,"context_line":"Add a new field to `Flavor` object to store capabilities in flavors. The"},{"line_number":58,"context_line":"relationship between flavors and capabilities are then persisted to the API"},{"line_number":59,"context_line":"database."}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_124757bc","line":56,"in_reply_to":"9ad45d7e_86b68888","updated":"2016-08-10 04:32:03.000000000","message":"@Jay: I just mean \"The flavor would have a set of required capabilities and a set of preferred capabilities\". Need rephrase.\n\n@Ed: No, it represents a list of requested capabilities of a flavor or an image. I\u0027ll move the \"preferred capabilities in flavor\" to the \"alternative\" section for further discussion.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0413f4db726bdafec5c8057b0c967efae8993fcb","unresolved":false,"context_lines":[{"line_number":56,"context_line":"Store capabilities with their preferences in the new `Capabilities` object."},{"line_number":57,"context_line":"Add a new field to `Flavor` object to store capabilities in flavors. The"},{"line_number":58,"context_line":"relationship between flavors and capabilities are then persisted to the API"},{"line_number":59,"context_line":"database."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"A RESTful API is proposed that will allow administrative users to specify the"},{"line_number":62,"context_line":"\"Required\" and \"Preferred\" capabilities in flavor."}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_e6c14430","line":59,"updated":"2016-08-08 19:06:27.000000000","message":"I would just rephrase this last part to be \"The flavor would have a set of required capabilities and a set of preferred capabilities.\"","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":56,"context_line":"Store capabilities with their preferences in the new `Capabilities` object."},{"line_number":57,"context_line":"Add a new field to `Flavor` object to store capabilities in flavors. The"},{"line_number":58,"context_line":"relationship between flavors and capabilities are then persisted to the API"},{"line_number":59,"context_line":"database."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"A RESTful API is proposed that will allow administrative users to specify the"},{"line_number":62,"context_line":"\"Required\" and \"Preferred\" capabilities in flavor."}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_d223ff03","line":59,"in_reply_to":"9ad45d7e_e6c14430","updated":"2016-08-10 04:32:03.000000000","message":"Thanks","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e85d50b5e15b01445c36235546ba3aa44c40d487","unresolved":false,"context_lines":[{"line_number":58,"context_line":"relationship between flavors and capabilities are then persisted to the API"},{"line_number":59,"context_line":"database."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"A RESTful API is proposed that will allow administrative users to specify the"},{"line_number":62,"context_line":"\"Required\" and \"Preferred\" capabilities in flavor."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"\"Required\" and \"Preferred\" capabilities management in image metadata"},{"line_number":65,"context_line":"--------------------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_692525aa","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":50},"updated":"2016-08-08 19:23:24.000000000","message":"Flavors can have capabilities, but I don\u0027t like the idea of conflating this with preferences. As long as we tie capabilities to flavors, capabilities are not going to be implemented. When we can separate qualitative aspects of a request from the notion of flavor, we can begin to think about supporting preferences.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"8d0570bc6932dd2efdb34389959ce0e4b51c13bb","unresolved":false,"context_lines":[{"line_number":59,"context_line":"database."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"A RESTful API is proposed that will allow administrative users to specify the"},{"line_number":62,"context_line":"\"Required\" and \"Preferred\" capabilities in flavor."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"\"Required\" and \"Preferred\" capabilities management in image metadata"},{"line_number":65,"context_line":"--------------------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_d5d472be","line":62,"in_reply_to":"9ad45d7e_692525aa","updated":"2016-08-09 15:33:05.000000000","message":"I agree. If a flavor states a capability it should be a statement of requirement.  Consider how one would represent such a thing in a \"flavor selector web ui\":\n\nthis will have all this stuff and will _try_ to have this other stuff, but if it can\u0027t get it, you\u0027ll still get your thing\n\nIn that situation, as someone choosing a flavor, I\u0027d look for the one that requires \"this other stuff\" and remove as much ambiguity[1] as possible.\n\n(of course in this example I\u0027m imagining that the flavor is there for end user reasons not operator reasons, but maybe the rationale still applies?)\n\n[1] the devil of _infinite_ possibilities","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":59,"context_line":"database."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"A RESTful API is proposed that will allow administrative users to specify the"},{"line_number":62,"context_line":"\"Required\" and \"Preferred\" capabilities in flavor."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"\"Required\" and \"Preferred\" capabilities management in image metadata"},{"line_number":65,"context_line":"--------------------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_8048de88","line":62,"in_reply_to":"9ad45d7e_d5d472be","updated":"2016-08-10 04:32:03.000000000","message":"Done","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0413f4db726bdafec5c8057b0c967efae8993fcb","unresolved":false,"context_lines":[{"line_number":65,"context_line":"--------------------------------------------------------------------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Add a new field to `ImageMeta` object to store the parsed capabilities with"},{"line_number":68,"context_line":"their preferences from image metadata into the new `Capabilities` object."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Capabilities validation in Nova"},{"line_number":71,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_46ddb013","line":68,"updated":"2016-08-08 19:06:27.000000000","message":"Hmm, I\u0027m less interested in modifying the existing ImageMeta Nova object, actually. I\u0027d prefer to have a translation @classmethod like Capabilities.from_image_meta() that would take an existing ImageMeta object and construct a list of capability strings (as a new CapabilityList object) from the ImageMeta properties.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e85d50b5e15b01445c36235546ba3aa44c40d487","unresolved":false,"context_lines":[{"line_number":65,"context_line":"--------------------------------------------------------------------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Add a new field to `ImageMeta` object to store the parsed capabilities with"},{"line_number":68,"context_line":"their preferences from image metadata into the new `Capabilities` object."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Capabilities validation in Nova"},{"line_number":71,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_494dc171","line":68,"updated":"2016-08-08 19:23:24.000000000","message":"Same comment applies. Preferences don\u0027t belong in this discussion.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":65,"context_line":"--------------------------------------------------------------------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Add a new field to `ImageMeta` object to store the parsed capabilities with"},{"line_number":68,"context_line":"their preferences from image metadata into the new `Capabilities` object."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Capabilities validation in Nova"},{"line_number":71,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_72ee938c","line":68,"in_reply_to":"9ad45d7e_494dc171","updated":"2016-08-10 04:32:03.000000000","message":"@Jay: Really good idea.\n\n@Ed: It\u0027s about image, not flavors. The number of flavors won\u0027t be affected by allowing administrators to specify preferences in image metadata.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0413f4db726bdafec5c8057b0c967efae8993fcb","unresolved":false,"context_lines":[{"line_number":112,"context_line":"highest priority for capabilities; the \"preferred\" is equal to setting the"},{"line_number":113,"context_line":"other positive priorities. Using priorities, we can also specify capabilities"},{"line_number":114,"context_line":"that we don\u0027t like or don\u0027t want, and improve the flexibility to choose the"},{"line_number":115,"context_line":"best host to place instances."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Data model impact"},{"line_number":118,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_26e23cd6","line":115,"updated":"2016-08-08 19:06:27.000000000","message":"I agree with Chris that it seems inevitable that folks are going to want to assign priority to their set of preferred capabilities. I disagree with Chris that the placement HTTP API is not the thing that should take those preferences and return a set of chosen resource providers that *best matches* the request. I say set of resource providers not because I think the placement engine should return more than one choice of resource provider but because by the nature of resource providers that provide shared resources to multiple compute hosts, we will need to return multiple resource provider records that have been chosen to allocate from for the consumer.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6c910cfcdd78e8010cae8bbddcddf39642be44b5","unresolved":false,"context_lines":[{"line_number":112,"context_line":"highest priority for capabilities; the \"preferred\" is equal to setting the"},{"line_number":113,"context_line":"other positive priorities. Using priorities, we can also specify capabilities"},{"line_number":114,"context_line":"that we don\u0027t like or don\u0027t want, and improve the flexibility to choose the"},{"line_number":115,"context_line":"best host to place instances."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Data model impact"},{"line_number":118,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bacf61ea_7a8d4130","line":115,"updated":"2016-08-05 15:29:37.000000000","message":"It seems inevitable that people, once given the chance to express a preference will want to prioritize those preferences.\n\nIf we are ever going to allow such prioritization then I would prefer that we do it from the start and start out with a numeric indication of priority.\n\nHowever: I\u0027m still not convinced that a generic placement engine should be dealing with preferences. I think perhaps it could just do requirements and preferences could happen elsewhere. One job well.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ecded6b76a660b827720ab41312b1578cfb7c700","unresolved":false,"context_lines":[{"line_number":112,"context_line":"highest priority for capabilities; the \"preferred\" is equal to setting the"},{"line_number":113,"context_line":"other positive priorities. Using priorities, we can also specify capabilities"},{"line_number":114,"context_line":"that we don\u0027t like or don\u0027t want, and improve the flexibility to choose the"},{"line_number":115,"context_line":"best host to place instances."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Data model impact"},{"line_number":118,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_79446a1a","line":115,"in_reply_to":"9ad45d7e_234dbc6c","updated":"2016-08-10 12:58:37.000000000","message":"@Yingxin: Yeah, let\u0027s leave preferences entirely out of this spec and instead focus this spec only on how to add the set of a flavor\u0027s required capabilities to Nova.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"8d0570bc6932dd2efdb34389959ce0e4b51c13bb","unresolved":false,"context_lines":[{"line_number":112,"context_line":"highest priority for capabilities; the \"preferred\" is equal to setting the"},{"line_number":113,"context_line":"other positive priorities. Using priorities, we can also specify capabilities"},{"line_number":114,"context_line":"that we don\u0027t like or don\u0027t want, and improve the flexibility to choose the"},{"line_number":115,"context_line":"best host to place instances."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Data model impact"},{"line_number":118,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_f05a6482","line":115,"in_reply_to":"9ad45d7e_26e23cd6","updated":"2016-08-09 15:33:05.000000000","message":"On multiple schedulers:\n\nI guess a better way of saying what I was trying to say was that maybe there should be multiple placement engines that specialize on different behaviors and a caller would call them in turn, as needed, to resolve their own particular needs. In this case you\u0027d call the requirements scheduler to get some viable results. You\u0027d call the preferences scheduler to _order_ them.\n\nBreak things into smaller parts and services. Use by composition.\n\nOf course the main criticism of such a thing would be the raciness of the whole thing, so I guess that would kill it given our pre-existing constraints.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":112,"context_line":"highest priority for capabilities; the \"preferred\" is equal to setting the"},{"line_number":113,"context_line":"other positive priorities. Using priorities, we can also specify capabilities"},{"line_number":114,"context_line":"that we don\u0027t like or don\u0027t want, and improve the flexibility to choose the"},{"line_number":115,"context_line":"best host to place instances."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Data model impact"},{"line_number":118,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_234dbc6c","line":115,"in_reply_to":"9ad45d7e_f05a6482","updated":"2016-08-10 04:32:03.000000000","message":"@Chris, Jay, Ed: Thanks for all your ideas, I decide not to include \"capability preference\" in this spec to minimize the scope. We need to create another blueprint to settle down design of preference.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e85d50b5e15b01445c36235546ba3aa44c40d487","unresolved":false,"context_lines":[{"line_number":112,"context_line":"highest priority for capabilities; the \"preferred\" is equal to setting the"},{"line_number":113,"context_line":"other positive priorities. Using priorities, we can also specify capabilities"},{"line_number":114,"context_line":"that we don\u0027t like or don\u0027t want, and improve the flexibility to choose the"},{"line_number":115,"context_line":"best host to place instances."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Data model impact"},{"line_number":118,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_46601036","line":115,"in_reply_to":"bacf61ea_7a8d4130","updated":"2016-08-08 19:23:24.000000000","message":"This has come up before: what if I have two servers, A and B, that meet my requirements, and request has two preferences in it. Server A only has the first pref, while Server B only has the second. Which do you choose? So the idea was to express preferences as a list, with the items in decreasing importance.\n\nI think that it certainly is the point of a placement engine to consider preferences. When I go to a hotel, I require a non-smoking room, but prefer an upper-level floor. If the upper levels are all sold out, though, I\u0027m perfectly happy with something on the first or second floor.\n\nHowever, with the decision to tie qualitative aspects to flavors, the discussion about preferences is moot.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"8d0570bc6932dd2efdb34389959ce0e4b51c13bb","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"  CREATE TABLE flavor_capabilities ("},{"line_number":124,"context_line":"    flavor_id INT NOT NULL,"},{"line_number":125,"context_line":"    capability_name VARCHAR(200) NOT NULL,"},{"line_number":126,"context_line":"    is_required INT NOT NULL"},{"line_number":127,"context_line":"  );"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_30035c44","line":125,"updated":"2016-08-09 15:33:05.000000000","message":"I guess we need to consider the name of a capability to be its persistent key, so that it is relevant across not just deployments but between the api database and the placement database?","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"  CREATE TABLE flavor_capabilities ("},{"line_number":124,"context_line":"    flavor_id INT NOT NULL,"},{"line_number":125,"context_line":"    capability_name VARCHAR(200) NOT NULL,"},{"line_number":126,"context_line":"    is_required INT NOT NULL"},{"line_number":127,"context_line":"  );"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_2395bcdd","line":125,"in_reply_to":"9ad45d7e_30035c44","updated":"2016-08-10 04:32:03.000000000","message":"Yup, I think so.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"8d0570bc6932dd2efdb34389959ce0e4b51c13bb","unresolved":false,"context_lines":[{"line_number":123,"context_line":"  CREATE TABLE flavor_capabilities ("},{"line_number":124,"context_line":"    flavor_id INT NOT NULL,"},{"line_number":125,"context_line":"    capability_name VARCHAR(200) NOT NULL,"},{"line_number":126,"context_line":"    is_required INT NOT NULL"},{"line_number":127,"context_line":"  );"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_70fdd439","line":126,"updated":"2016-08-09 15:33:05.000000000","message":"If we can get away with not having this (by making a flavor capability associations be requirements) I think we should.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":123,"context_line":"  CREATE TABLE flavor_capabilities ("},{"line_number":124,"context_line":"    flavor_id INT NOT NULL,"},{"line_number":125,"context_line":"    capability_name VARCHAR(200) NOT NULL,"},{"line_number":126,"context_line":"    is_required INT NOT NULL"},{"line_number":127,"context_line":"  );"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_9e7160e3","line":126,"in_reply_to":"9ad45d7e_70fdd439","updated":"2016-08-10 04:32:03.000000000","message":"Done","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0413f4db726bdafec5c8057b0c967efae8993fcb","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    flavor_id INT NOT NULL,"},{"line_number":125,"context_line":"    capability_name VARCHAR(200) NOT NULL,"},{"line_number":126,"context_line":"    is_required INT NOT NULL"},{"line_number":127,"context_line":"  );"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"REST API impact"},{"line_number":130,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_86e7a8e3","line":127,"updated":"2016-08-08 19:06:27.000000000","message":"We will also need to store the set of required and preferred capabilities that the user requested in the instance_extra table. Flavors can change over time and even be deleted so we need to ensure that any information we used in the initial request is saved so that on things like live migration we can be sure to apply the same placement conditions.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"6e4a07e04e683423c8090743f502c79289c64a88","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    flavor_id INT NOT NULL,"},{"line_number":125,"context_line":"    capability_name VARCHAR(200) NOT NULL,"},{"line_number":126,"context_line":"    is_required INT NOT NULL"},{"line_number":127,"context_line":"  );"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"REST API impact"},{"line_number":130,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9ad45d7e_cd3c0232","line":127,"in_reply_to":"9ad45d7e_86e7a8e3","updated":"2016-08-10 04:32:03.000000000","message":"Thanks for pointing out.","commit_id":"23020d7bcb86ec62c7ab5b31047e0dfba6aafd52"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"35cf0c6e5dbd7407f483c61bbd9f95f6da29bdb4","unresolved":false,"context_lines":[{"line_number":74,"context_line":"-------------------------------"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"When create or modify a `CapabilityList` object, it checks os-capabilities"},{"line_number":77,"context_line":"library and placement engine to do early validation to prevent arbitrary"},{"line_number":78,"context_line":"strings. It enables capability validation during flavor creation and"},{"line_number":79,"context_line":"modification operations. And it also enables early capability validations in"},{"line_number":80,"context_line":"flavors and image metadata when a boot request is received by nova-api. The"},{"line_number":81,"context_line":"validation implies following checks:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9ad45d7e_1e9a34b9","line":78,"range":{"start_line":77,"start_character":63,"end_line":78,"end_character":8},"updated":"2016-08-11 12:52:42.000000000","message":"When we add capabilities to shared storage pool, that is an arbitrary strings. So we can\u0027t validate the capabilities with os-capabilities directly.\n\nI have thought three ways:\n* We didn\u0027t check that, we just pass to placement and for invalid capabilities string, we just return no valid host. That means for valid capabilities string which still can be used across openstack cloud.\n* We cache a set of capabilities in the Nova, maybe we have race problem, but capabilites won\u0027t change too many times, so looks like fine.\n* We proxy API call to placement engine, I think people hate this way.","commit_id":"bd51b48a0f03adfe7c49a64adcdf074f7977d62c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"78b794da30c011541e194a99edae27332041b8a7","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"When create or modify a `CapabilityList` object, it checks os-capabilities"},{"line_number":77,"context_line":"library and placement engine to do early validation to prevent arbitrary"},{"line_number":78,"context_line":"strings. It enables capability validation during flavor creation and"},{"line_number":79,"context_line":"modification operations. And it also enables early capability validations in"},{"line_number":80,"context_line":"flavors and image metadata when a boot request is received by nova-api. The"},{"line_number":81,"context_line":"validation implies following checks:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ac371cc_cdd4efbe","line":78,"in_reply_to":"3ac371cc_2fffa602","updated":"2016-08-16 09:33:57.000000000","message":"This bit here is central to my remaining confusion: Are there _only_ centrally defined capabilities/traits or are there also traits which a deployer or even an end user can create?","commit_id":"bd51b48a0f03adfe7c49a64adcdf074f7977d62c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7bad12cce4b0e71fde3bdd49e5c73977393fa11f","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"When create or modify a `CapabilityList` object, it checks os-capabilities"},{"line_number":77,"context_line":"library and placement engine to do early validation to prevent arbitrary"},{"line_number":78,"context_line":"strings. It enables capability validation during flavor creation and"},{"line_number":79,"context_line":"modification operations. And it also enables early capability validations in"},{"line_number":80,"context_line":"flavors and image metadata when a boot request is received by nova-api. The"},{"line_number":81,"context_line":"validation implies following checks:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ac371cc_453d73ba","line":78,"in_reply_to":"3ac371cc_b8128fb2","updated":"2016-08-16 10:17:07.000000000","message":"@Jay, deployer is responsible for adding inventory record for shared storage pool, so deployer also is responsible for adding traits for shared storage pool. Those traits are user-defined.\n@Chris, yes, just as above, there are user-defined traits, it only for deployer, not for end-user.\n\nYes, if we decided to use placement engine API to hide the os-capabilities, the steps in line 83 need to change.\n\nAnd we probably will have an API in placement engine for user create user-defined traits.","commit_id":"bd51b48a0f03adfe7c49a64adcdf074f7977d62c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"8bd7f973c9361e71f290d19e379b2cf9d2409226","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"When create or modify a `CapabilityList` object, it checks os-capabilities"},{"line_number":77,"context_line":"library and placement engine to do early validation to prevent arbitrary"},{"line_number":78,"context_line":"strings. It enables capability validation during flavor creation and"},{"line_number":79,"context_line":"modification operations. And it also enables early capability validations in"},{"line_number":80,"context_line":"flavors and image metadata when a boot request is received by nova-api. The"},{"line_number":81,"context_line":"validation implies following checks:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ac371cc_b8128fb2","line":78,"in_reply_to":"3ac371cc_cdd4efbe","updated":"2016-08-16 09:52:20.000000000","message":"This spec assumes Administrator can create and use user-defined traits to the placement engine, that\u0027s why the 2nd step exists below. (However the according decision shouldn\u0027t be made in this spec)\n\nAccording to the latest discussion in ML, the os-capabilities/traits library may be hide behind placement engine, so the detailed validation steps are subject to change.","commit_id":"bd51b48a0f03adfe7c49a64adcdf074f7977d62c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5a77a36e6fb3cac7eb109520df1a3208cf7dbf06","unresolved":false,"context_lines":[{"line_number":74,"context_line":"-------------------------------"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"When create or modify a `CapabilityList` object, it checks os-capabilities"},{"line_number":77,"context_line":"library and placement engine to do early validation to prevent arbitrary"},{"line_number":78,"context_line":"strings. It enables capability validation during flavor creation and"},{"line_number":79,"context_line":"modification operations. And it also enables early capability validations in"},{"line_number":80,"context_line":"flavors and image metadata when a boot request is received by nova-api. The"},{"line_number":81,"context_line":"validation implies following checks:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ac371cc_2fffa602","line":78,"range":{"start_line":77,"start_character":63,"end_line":78,"end_character":8},"in_reply_to":"9ad45d7e_1e9a34b9","updated":"2016-08-15 14:24:17.000000000","message":"@alex_xu: Why do you say that \"when we add capabilities to shared storage pool, that is an arbitrary strings\"?","commit_id":"bd51b48a0f03adfe7c49a64adcdf074f7977d62c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3bb72c49584349001547fc26749f6ca7bab319e7","unresolved":false,"context_lines":[{"line_number":83,"context_line":"1. Pass all the standardized capabilities by checking os-capabilities library."},{"line_number":84,"context_line":"2. Pass all the valid capabilities by querying placement engine."},{"line_number":85,"context_line":"3. Report error when a capability string doesn\u0027t represent a standardized nor a"},{"line_number":86,"context_line":"   valid capability."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Build up qualitative part of request in the request_spec object"},{"line_number":89,"context_line":"---------------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9ad45d7e_6ae1bc29","line":86,"updated":"2016-08-12 07:01:04.000000000","message":"I must blind, you already thought about this. This works.","commit_id":"bd51b48a0f03adfe7c49a64adcdf074f7977d62c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a0c35538dde92e3927e525c3973d5ee1ac0475f3","unresolved":false,"context_lines":[{"line_number":140,"context_line":"REST API impact"},{"line_number":141,"context_line":"---------------"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"TODO."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ac371cc_31d6f5c5","line":143,"updated":"2016-08-15 10:42:29.000000000","message":"Due to we can request preference capabilities, so I\u0027m thinking of we should have API for end-user to query the instance get which preference capabilities finally.","commit_id":"bd51b48a0f03adfe7c49a64adcdf074f7977d62c"}]}
