)]}'
{"specs/queens/approved/request-traits-in-nova.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2195b476756a7d9c3bb9780b8147a8197394d9e5","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like::"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    trait:HW_CPU_X86_AVX2\u003drequire"},{"line_number":45,"context_line":"    trait:STORAGE_DISK_SSD\u003drequire"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The trait in the key of extra spec is for avoiding the length limit of the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_bc52e739","line":44,"range":{"start_line":44,"start_character":26,"end_line":44,"end_character":33},"updated":"2017-09-28 14:13:34.000000000","message":"See, now it makes more sense to call it \"required\".","commit_id":"dfc54baa17802bb43eca805c0fd95e9abc7d9ceb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b0b409e436c82e6088407fb59af2ce0053c2a3b4","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like::"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    trait:HW_CPU_X86_AVX2\u003drequire"},{"line_number":45,"context_line":"    trait:STORAGE_DISK_SSD\u003drequire"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The trait in the key of extra spec is for avoiding the length limit of the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_f99bc66f","line":44,"range":{"start_line":44,"start_character":26,"end_line":44,"end_character":33},"in_reply_to":"7f515b1d_024f5034","updated":"2017-09-28 21:16:15.000000000","message":"We will go with required\u003d Eric\u0027s going to update the spec.","commit_id":"dfc54baa17802bb43eca805c0fd95e9abc7d9ceb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"51a863aff6bbe03c8cad916f94259df9954679d9","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like::"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    trait:HW_CPU_X86_AVX2\u003drequire"},{"line_number":45,"context_line":"    trait:STORAGE_DISK_SSD\u003drequire"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The trait in the key of extra spec is for avoiding the length limit of the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_024f5034","line":44,"range":{"start_line":44,"start_character":26,"end_line":44,"end_character":33},"in_reply_to":"7f515b1d_77dfe839","updated":"2017-09-28 14:51:51.000000000","message":"Yeah; it just reads more naturally.  But Jay should confirm.\n\nEnglish sucks.  In 普通话 you could probably just get away with 需 and be done, 对吧?","commit_id":"dfc54baa17802bb43eca805c0fd95e9abc7d9ceb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"626ac8fdfbc4a5ad72e3b769c73da711fa043c6d","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like::"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    trait:HW_CPU_X86_AVX2\u003drequire"},{"line_number":45,"context_line":"    trait:STORAGE_DISK_SSD\u003drequire"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The trait in the key of extra spec is for avoiding the length limit of the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_77dfe839","line":44,"range":{"start_line":44,"start_character":26,"end_line":44,"end_character":33},"in_reply_to":"7f515b1d_bc52e739","updated":"2017-09-28 14:23:39.000000000","message":"ok...I guess the reason is \" The trait HW_CPU_X86_AVX2 is required\"?","commit_id":"dfc54baa17802bb43eca805c0fd95e9abc7d9ceb"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"44e05982df817367b875549b0e7710957abf670e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like::"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    trait:HW_CPU_X86_AVX2\u003drequired"},{"line_number":45,"context_line":"    trait:STORAGE_DISK_SSD\u003drequired"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The trait in the key of extra spec is for avoiding the length limit of the"},{"line_number":48,"context_line":"value of extra spec. The only valid value is `required`. For any other"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_de234da6","line":45,"updated":"2017-09-28 22:49:45.000000000","message":"I\u0027m not wise in the ways of extra specs, in the dictification of the extra specs this translates to:\n\n   \"trait:HW_CPU_X86_AVX2\": \"required\",\n   \"trait:STORAGE_DISK_SSD\": \"required,\n\nyes? \"trait:\" is effectively namespacing...","commit_id":"2ddde189616d82bf5059c2ac070c8f097960062d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"86e0ead4e2c500f550b732886518519131a84748","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like::"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    trait:HW_CPU_X86_AVX2\u003drequired"},{"line_number":45,"context_line":"    trait:STORAGE_DISK_SSD\u003drequired"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The trait in the key of extra spec is for avoiding the length limit of the"},{"line_number":48,"context_line":"value of extra spec. The only valid value is `required`. For any other"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_ffcc9189","line":45,"in_reply_to":"7f515b1d_2cc34959","updated":"2017-10-02 23:12:17.000000000","message":"so on the commandline you would type \nopenstack flavor set --property trait:HW_CPU_X86_AVX2\u003drequired\n\nbut this would result in a adding akey of \"trait:HW_CPU_X86_AVX2\" and value of \"required\" to the extra spec dictonary.\n\nso trait:HW_CPU_X86_AVX2\u003drequired vs \"trait:HW_CPU_X86_AVX2\": \"required\"\n\ndepend on if your on the cli or in the code.","commit_id":"2ddde189616d82bf5059c2ac070c8f097960062d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"31813a62f5e256ef0d753b2a2abe9f2c93ea2da5","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like::"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    trait:HW_CPU_X86_AVX2\u003drequired"},{"line_number":45,"context_line":"    trait:STORAGE_DISK_SSD\u003drequired"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The trait in the key of extra spec is for avoiding the length limit of the"},{"line_number":48,"context_line":"value of extra spec. The only valid value is `required`. For any other"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_2cc34959","line":45,"in_reply_to":"7f515b1d_de234da6","updated":"2017-09-29 16:48:56.000000000","message":"That looks like what I expected.","commit_id":"2ddde189616d82bf5059c2ac070c8f097960062d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3daae7c5d62cd3f567c4b1ee3a5c4064e00e6ecc","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like::"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    trait:HW_CPU_X86_AVX2\u003drequired"},{"line_number":45,"context_line":"    trait:STORAGE_DISK_SSD\u003drequired"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The trait in the key of extra spec is for avoiding the length limit of the"},{"line_number":48,"context_line":"value of extra spec. The only valid value is `required`. For any other"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_0f03ad75","line":45,"in_reply_to":"7f515b1d_ffcc9189","updated":"2017-10-03 15:15:44.000000000","message":"yup","commit_id":"2ddde189616d82bf5059c2ac070c8f097960062d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"86e0ead4e2c500f550b732886518519131a84748","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    trait:STORAGE_DISK_SSD\u003drequired"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The trait in the key of extra spec is for avoiding the length limit of the"},{"line_number":48,"context_line":"value of extra spec. The only valid value is `required`. For any other"},{"line_number":49,"context_line":"value will be considered as invalid."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Alternatives"},{"line_number":52,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_9fa35db2","line":49,"range":{"start_line":48,"start_character":57,"end_line":49,"end_character":36},"updated":"2017-10-02 23:12:17.000000000","message":"this is leaving the scope open to add preferred and/or supported/allowed at a later date correct.","commit_id":"2ddde189616d82bf5059c2ac070c8f097960062d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3daae7c5d62cd3f567c4b1ee3a5c4064e00e6ecc","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    trait:STORAGE_DISK_SSD\u003drequired"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The trait in the key of extra spec is for avoiding the length limit of the"},{"line_number":48,"context_line":"value of extra spec. The only valid value is `required`. For any other"},{"line_number":49,"context_line":"value will be considered as invalid."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Alternatives"},{"line_number":52,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_2ffe696b","line":49,"range":{"start_line":48,"start_character":57,"end_line":49,"end_character":36},"in_reply_to":"7f515b1d_9fa35db2","updated":"2017-10-03 15:15:44.000000000","message":"yup","commit_id":"2ddde189616d82bf5059c2ac070c8f097960062d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"31813a62f5e256ef0d753b2a2abe9f2c93ea2da5","unresolved":false,"context_lines":[{"line_number":57,"context_line":"avoided."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Considering traits preference, we currently have some ideas about \"Where to"},{"line_number":60,"context_line":"specify preferences\" and \"How to order preferences\", but they may not be"},{"line_number":61,"context_line":"settled in this spec."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Data model impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_6c926159","line":60,"range":{"start_line":60,"start_character":61,"end_line":60,"end_character":66},"updated":"2017-09-29 16:48:56.000000000","message":"micro nit: will","commit_id":"2ddde189616d82bf5059c2ac070c8f097960062d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"86e0ead4e2c500f550b732886518519131a84748","unresolved":false,"context_lines":[{"line_number":71,"context_line":"There is no direct API change. But when invaid traits in the flavor extra spec"},{"line_number":72,"context_line":"or the invalid value in the trait extra spec, the server booting with that"},{"line_number":73,"context_line":"flavor will fail. The server will get into the `error` status, just same as"},{"line_number":74,"context_line":"the scheduling failed. This needn\u0027t new microversion, since it considers as"},{"line_number":75,"context_line":"scheduling failed case which is current API behavior."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_1f976d4a","line":74,"range":{"start_line":74,"start_character":28,"end_line":74,"end_character":35},"updated":"2017-10-02 23:12:17.000000000","message":"need not have a","commit_id":"2ddde189616d82bf5059c2ac070c8f097960062d"}],"specs/queens/approved/request-traits.rst":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"77a0dede6425c9f230a13db278f944fda225aa0f","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Request traits in Nova"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f231b9d_c0e1d600","line":7,"range":{"start_line":7,"start_character":22,"end_line":7,"end_character":42},"updated":"2017-06-12 08:06:21.000000000","message":"remove this","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"77a0dede6425c9f230a13db278f944fda225aa0f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Request traits in Nova"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/request-traits-in-nova"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f231b9d_4018261c","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":42},"updated":"2017-06-12 08:06:21.000000000","message":"remove this","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18f10a1dcaed0de40aa5861480fef4ec2bc93ebd","unresolved":false,"context_lines":[{"line_number":24,"context_line":"qualitative parts of ResourceProviders in Placement[1]. Administrators should"},{"line_number":25,"context_line":"be able to create flavors associated with traits. while booting a instance,"},{"line_number":26,"context_line":"Nova API should be aware of the presence of traits and process them gracefully,"},{"line_number":27,"context_line":"before making request to a generic scheduler."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Use Cases"},{"line_number":30,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_e12b1f92","line":27,"updated":"2017-06-04 18:27:02.000000000","message":"I think you can probably remove the last sentence. It\u0027s not necessary for this blueprint and describes implementation, not a problem description.","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18f10a1dcaed0de40aa5861480fef4ec2bc93ebd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"---------"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"For administrative users:"},{"line_number":33,"context_line":"* Allow nova-api to validate capabilities for administrators when create a"},{"line_number":34,"context_line":"  flavor."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"For end users:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_210fd737","line":33,"updated":"2017-06-04 18:27:02.000000000","message":"Instead of talking about nova-api, I\u0027d prefer to instead just say \"Allow administrators to specify a set of traits that a flavor requires\"","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18f10a1dcaed0de40aa5861480fef4ec2bc93ebd","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"For end users:"},{"line_number":37,"context_line":"* Allow nova to translate traits specified in flavor or image from a boot"},{"line_number":38,"context_line":"  request."},{"line_number":39,"context_line":"* Fail fast in nova-api when a requested trait doesn\u0027t exist or isn\u0027t"},{"line_number":40,"context_line":"  valid in the cloud."},{"line_number":41,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_e1043f1a","line":38,"updated":"2017-06-04 18:27:02.000000000","message":"This isn\u0027t a user case, really. Recommend removing it.","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18f10a1dcaed0de40aa5861480fef4ec2bc93ebd","unresolved":false,"context_lines":[{"line_number":37,"context_line":"* Allow nova to translate traits specified in flavor or image from a boot"},{"line_number":38,"context_line":"  request."},{"line_number":39,"context_line":"* Fail fast in nova-api when a requested trait doesn\u0027t exist or isn\u0027t"},{"line_number":40,"context_line":"  valid in the cloud."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"For developers:"},{"line_number":43,"context_line":"* Standardize how to request traits through request spec."}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_11054411","line":40,"updated":"2017-06-04 18:27:02.000000000","message":"Neither is this :) Recommend removing the end user use cases listed above.","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18f10a1dcaed0de40aa5861480fef4ec2bc93ebd","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"We propose to modify create flavor api to accept and validate associated"},{"line_number":50,"context_line":"traits. And collect traits from flavor and image metadata in a boot request to"},{"line_number":51,"context_line":"generate the qualitative part to the generic scheduler in request spec. The"},{"line_number":52,"context_line":"proposed change adds the following features to Nova:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Traits management in flavors"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_515dfc12","line":51,"range":{"start_line":51,"start_character":30,"end_line":51,"end_character":54},"updated":"2017-06-04 18:27:02.000000000","message":"not entirely sure why you\u0027ve used the term \"the generic scheduler\" here. Are you referring to one of the Nova scheduler managers (like the FilterScheduler?) or are you just referring to the Nova scheduler in general? Or something else?","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"77a0dede6425c9f230a13db278f944fda225aa0f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"proposed change adds the following features to Nova:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Traits management in flavors"},{"line_number":55,"context_line":"----------------------------------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"The flavor would be associated with traits by a many-to-many relationship, and"},{"line_number":58,"context_line":"is persisted to API database."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f231b9d_c0baf6dc","line":55,"range":{"start_line":55,"start_character":28,"end_line":55,"end_character":34},"updated":"2017-06-12 08:06:21.000000000","message":"ditto","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"77a0dede6425c9f230a13db278f944fda225aa0f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"database."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Traits management in image metadata"},{"line_number":65,"context_line":"-----------------------------------------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"When processing a boot request in nova-api, parse `ImageMeta` object to get"},{"line_number":68,"context_line":"associated traits, this could make sure we handle traits in a consistent way"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f231b9d_a0cffa7d","line":65,"range":{"start_line":65,"start_character":35,"end_line":65,"end_character":41},"updated":"2017-06-12 08:06:21.000000000","message":"ditto","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18f10a1dcaed0de40aa5861480fef4ec2bc93ebd","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"When processing a boot request in nova-api, parse `ImageMeta` object to get"},{"line_number":68,"context_line":"associated traits, this could make sure we handle traits in a consistent way"},{"line_number":69,"context_line":"with flavors."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Traits validation in Nova"},{"line_number":72,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_b1b1f849","line":69,"updated":"2017-06-04 18:27:02.000000000","message":"This will likely be much harder to do than the flavor trait association, mostly due to the fact that Glance stores image metadata, not Nova. So, I think to keep the scope of this blueprint limited, I\u0027d recommend sticking to the flavor-related changes only.","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"77a0dede6425c9f230a13db278f944fda225aa0f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"with flavors."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Traits validation in Nova"},{"line_number":72,"context_line":"-------------------------------"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Traits validation happens in flavor creation operations as well as when a boot"},{"line_number":75,"context_line":"request is received by nova-api. The validation implies following checks:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f231b9d_40c6e669","line":72,"range":{"start_line":72,"start_character":25,"end_line":72,"end_character":31},"updated":"2017-06-12 08:06:21.000000000","message":"ditto","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18f10a1dcaed0de40aa5861480fef4ec2bc93ebd","unresolved":false,"context_lines":[{"line_number":84,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":85,"context_line":"A collection of valid traits can be collected from flavor and image metadata,"},{"line_number":86,"context_line":"and be set into a new field in the request_spec. Then the scheduler can make"},{"line_number":87,"context_line":"decisions based on traits specifications in request_spec."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Alternatives"},{"line_number":90,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_d471faa9","line":87,"updated":"2017-06-04 18:27:02.000000000","message":"Technically, it\u0027s not the scheduler that will make decisions based on traits. It\u0027s the placement API that will reduce the number of resource providers returned to the scheduler by filtering out providers that do not have the traits requested.","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18f10a1dcaed0de40aa5861480fef4ec2bc93ebd","unresolved":false,"context_lines":[{"line_number":112,"context_line":"the `instance_extra` table. Flavors can change over time and even be deleted so"},{"line_number":113,"context_line":"we need to ensure that any information we used in the initial request is saved"},{"line_number":114,"context_line":"so that on things like live migration we can be sure to apply the same"},{"line_number":115,"context_line":"placement conditions."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"REST API impact"},{"line_number":118,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_b49a06b6","line":115,"updated":"2017-06-04 18:27:02.000000000","message":"++","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b07edce20a74256358be73cd42ba372b48883ca8","unresolved":false,"context_lines":[{"line_number":117,"context_line":"REST API impact"},{"line_number":118,"context_line":"---------------"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"TODO."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Security impact"},{"line_number":123,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f231b9d_dd6f83c3","line":120,"range":{"start_line":120,"start_character":0,"end_line":120,"end_character":5},"updated":"2017-06-12 07:17:03.000000000","message":"Can you write out the detail about the API change at here?","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f8f4bc2822f9e5d9b4958c87897801f0521cb74","unresolved":false,"context_lines":[{"line_number":132,"context_line":"Other end user impact"},{"line_number":133,"context_line":"---------------------"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"None."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Performance Impact"},{"line_number":138,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f231b9d_fd88ff71","line":135,"range":{"start_line":135,"start_character":0,"end_line":135,"end_character":5},"updated":"2017-06-12 07:25:02.000000000","message":"python-novaclient will support specific traits when create flavor","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9f8f4bc2822f9e5d9b4958c87897801f0521cb74","unresolved":false,"context_lines":[{"line_number":173,"context_line":"Dependencies"},{"line_number":174,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"None."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Testing"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f231b9d_7d474f1f","line":176,"range":{"start_line":176,"start_character":0,"end_line":176,"end_character":5},"updated":"2017-06-12 07:25:02.000000000","message":"We need to implement the query of resource providers based on traits first.","commit_id":"d0de671f7d9f173d0e0e3e4800bce8501d0e8846"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3e14213ff9096abca5600343d5181a838a16949a","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For developers:"},{"line_number":34,"context_line":"* Standardize how to request traits through request spec."},{"line_number":35,"context_line":"* Decouple nova-specific traits handling out of scheduler."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Proposed change"},{"line_number":38,"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":"7f231b9d_726083cf","line":35,"updated":"2017-06-12 17:33:05.000000000","message":"Is there any use case where an end user would like to express a trait independent of a flavor?\n\nJay and Sean K were talking about that near http://p.anticdent.org/32Di\n\nI guess that could be a different spec?","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"008ee63b458e6c0c9aae17d63310a8ef64c25b77","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For developers:"},{"line_number":34,"context_line":"* Standardize how to request traits through request spec."},{"line_number":35,"context_line":"* Decouple nova-specific traits handling out of scheduler."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Proposed change"},{"line_number":38,"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":"ff346bd7_290ad325","line":35,"in_reply_to":"7f231b9d_726083cf","updated":"2017-07-23 06:53:16.000000000","message":"there are certenly usecasese for non nova traits.\n\nas jay mentioned at least currently we can only use the flavor and image metatdata to express these constratins but the interface i would ike to see in the long rune is \n\nnova boot .... --required HW_CPU_X86_SSE42 --prefer HW_CPU_X86_AVX \n\nwhere required is a set of traits (processed by a scheduler filter)that exresses hard constraitns for my appliction to work or meet a spcific sla,and prefer is a set of soft costratints (processed by a weigher) that if ment would enable better performence or more featutres that are not required for my application to fucntion but still nice to have.\n\ntakeing a dpdk applicatoin as an example\ndpdk requires sse3 to compile and run but is designed to\nuse vector instrctions if available\nso i could express that as \n\nnova boot .... --required HW_CPU_X86_SSE3 --prefer HW_CPU_X86_AVX","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0c5f4ebb4297d3923cc7d9b76bef169c779b3778","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For developers:"},{"line_number":34,"context_line":"* Standardize how to request traits through request spec."},{"line_number":35,"context_line":"* Decouple nova-specific traits handling out of scheduler."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Proposed change"},{"line_number":38,"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":"7f287b81_b52030b2","line":35,"in_reply_to":"ff346bd7_290ad325","updated":"2017-09-04 06:34:34.000000000","message":"Sean raised  two things are at here\n\n* express a trait independent of a flavor\n* preferred_traits\n\n\nFor the first one, Sean also mentioned \u0027traits_filter\u0027 and \u0027traits_filter_mode\u0027 in the comment of line 52. I see a requirement the admin can specify a set of traits in the flavor. They are looks like same price for the admin. The user can choice the required traits when booting the new instance. Then the admin needn\u0027t to create a set of flavor for the different trait combination.\n\n\nFor the second, I still not very sure the use-case yet. But yes, it is good to express the end user can get trait A, but if there are more free source for the better trait B, then the user can get it.\n\n\nAnd yes, those can be separated spec. For the prefer traits, I guess it can be implemented at a weigher? But current the placement doesn\u0027t support the weigher yet.","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"008ee63b458e6c0c9aae17d63310a8ef64c25b77","unresolved":false,"context_lines":[{"line_number":49,"context_line":"The flavor would be associated with traits by a many-to-many relationship, and"},{"line_number":50,"context_line":"is persisted to API database."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Create flavor API will be modified to allow administrators to specify traits."},{"line_number":53,"context_line":"Validation of traits from Placement API is also needed before saving flavors to"},{"line_number":54,"context_line":"database."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ff346bd7_146606ef","line":52,"range":{"start_line":52,"start_character":1,"end_line":52,"end_character":77},"updated":"2017-07-23 06:53:16.000000000","message":"while i think traits should be in the flavor i dont necessarily  think adding a trait to a flavor should automatically request that trait. \n\nrather what i would like to see are 4 fields\n\nRequired_traits (default empty)\nprefered_traits (default empty)\ntraits_filter (default empty)\ntraits_filter_mode (one of whitelist/blacklist, default blacklist)\n\nRequired_traits: used by the admin to specify a list of traits that must be statified to scheduler an instance( processed by generic traits filter)\n\nprefered_traits: used by the admin to specify a list of traits in prefence order that should be prefered when selecting hosts after filtering ( processed by generic tratis weigher )\n\ntraits_filter: used by the admin to spefiy addtional traits that the tenant may/may not requrest dynamicaly via nova boot\ntraits_filter_mode: used by the admin to specify how to filter dynamic boot traits.","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"acf2b15ca7087976a90c2572c859e3b8cdc72c57","unresolved":false,"context_lines":[{"line_number":68,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"},{"line_number":69,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":70,"context_line":"A collection of valid traits can be collected from flavor and image metadata,"},{"line_number":71,"context_line":"and be set into a new field in the request_spec. Then the scheduler could pass"},{"line_number":72,"context_line":"the traits to Placement API to filter out providers that do not have traits"},{"line_number":73,"context_line":"required."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Alternatives"},{"line_number":76,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f287b81_4aed90b5","line":73,"range":{"start_line":71,"start_character":49,"end_line":73,"end_character":9},"updated":"2017-09-07 03:56:03.000000000","message":"Another question for clarification\n\nWill placement api perform exact matching of traits between resource provider and flavor?\n\nFor example:\n\nI have created three resource providers and added traits as below:\n\n1. rp1 (traits: \u0027foo\u0027, \u0027bar\u0027)\n2. rp2 (No traits)\n3. rp3 (traits: \u0027foo\u0027)\n\nThen, I have created three flavors and added traits as below:\n1. flavor1 (traits: \u0027foo\u0027, \u0027bar\u0027)\n2. flavor2 (No traits)\n3. flavor3 (traits: \u0027foo\u0027)\n\nBoot instances:\na) Boot instance using flavor1, then placement api will select rp1 only, correct?\n\nb) Boot instance using flavor2, then placement api will select rp2 only, correct?\n\nc) Boot instance using flavor3, then placement api will select rp3 only, correct?","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"16e9b59abbd8aebee07530df8c5bc9b216eaa653","unresolved":false,"context_lines":[{"line_number":68,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"},{"line_number":69,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":70,"context_line":"A collection of valid traits can be collected from flavor and image metadata,"},{"line_number":71,"context_line":"and be set into a new field in the request_spec. Then the scheduler could pass"},{"line_number":72,"context_line":"the traits to Placement API to filter out providers that do not have traits"},{"line_number":73,"context_line":"required."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Alternatives"},{"line_number":76,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f287b81_9f3ef588","line":73,"range":{"start_line":71,"start_character":49,"end_line":73,"end_character":9},"updated":"2017-08-29 09:36:46.000000000","message":"Does it mean that schedule filters like \"TrustedFilter\" , \"ComputeCapabilitiesFilter\", \"AggregateInstanceExtraSpecsFilter\" etc. will be deprecated or removed since the selection of the resource provider  will be handle by traits?","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4fbd85a8ad55338efaf166fec203d17445ce2a8d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"A collection of valid traits can be collected from flavor and image metadata,"},{"line_number":71,"context_line":"and be set into a new field in the request_spec. Then the scheduler could pass"},{"line_number":72,"context_line":"the traits to Placement API to filter out providers that do not have traits"},{"line_number":73,"context_line":"required."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Alternatives"},{"line_number":76,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f287b81_2279e4c6","line":73,"in_reply_to":"","updated":"2017-08-31 10:03:47.000000000","message":"For the current trusted filter eventually yes but not straight away.  The truseded filter is planned to be refactored to use traits on the compute node resource provider to track the trusted . But traits does not eliminate the concept of a host aggregate. We could see the existing host aggregates modled in placement in the future, placement has its own more generic aggregate construct, so the other filters might be removed but only afrer they are moddled with traits and placement.","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0c5f4ebb4297d3923cc7d9b76bef169c779b3778","unresolved":false,"context_lines":[{"line_number":70,"context_line":"A collection of valid traits can be collected from flavor and image metadata,"},{"line_number":71,"context_line":"and be set into a new field in the request_spec. Then the scheduler could pass"},{"line_number":72,"context_line":"the traits to Placement API to filter out providers that do not have traits"},{"line_number":73,"context_line":"required."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Alternatives"},{"line_number":76,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f287b81_67bb3b0e","line":73,"in_reply_to":"7f287b81_2279e4c6","updated":"2017-09-04 06:34:34.000000000","message":"I think Sean already answer the question very well.","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e9545904abac27abefecfafa05c30ba7ea0229b8","unresolved":false,"context_lines":[{"line_number":70,"context_line":"A collection of valid traits can be collected from flavor and image metadata,"},{"line_number":71,"context_line":"and be set into a new field in the request_spec. Then the scheduler could pass"},{"line_number":72,"context_line":"the traits to Placement API to filter out providers that do not have traits"},{"line_number":73,"context_line":"required."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Alternatives"},{"line_number":76,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f287b81_8c4c9c9e","line":73,"in_reply_to":"7f287b81_4aed90b5","updated":"2017-09-07 19:51:14.000000000","message":"The currently modelling is:\n\n* a) true, rp1 will be chosen\n* b) false, all three rps will be considered candidates\n* c) false, rp1 and rp2 will be considered candidates\n\nSee the stack of code near: https://review.openstack.org/#/c/479766/\n\nAs yet there\u0027s no code that says \"does not have trait X\".","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"991bcdbeeb4cf2e2a2724833e22471ac9b241c82","unresolved":false,"context_lines":[{"line_number":70,"context_line":"A collection of valid traits can be collected from flavor and image metadata,"},{"line_number":71,"context_line":"and be set into a new field in the request_spec. Then the scheduler could pass"},{"line_number":72,"context_line":"the traits to Placement API to filter out providers that do not have traits"},{"line_number":73,"context_line":"required."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Alternatives"},{"line_number":76,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_7651e10e","line":73,"in_reply_to":"7f287b81_56f75a8c","updated":"2017-09-08 20:50:22.000000000","message":"Yeah, since no rp has trait foobar, but you\u0027ve said you require it, no results.\n\nIf/when there\u0027s a way to express a preference but not a requirement, that will be different.","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"19c88cf95ab911ececc69eb109e8ce21b2b51d20","unresolved":false,"context_lines":[{"line_number":70,"context_line":"A collection of valid traits can be collected from flavor and image metadata,"},{"line_number":71,"context_line":"and be set into a new field in the request_spec. Then the scheduler could pass"},{"line_number":72,"context_line":"the traits to Placement API to filter out providers that do not have traits"},{"line_number":73,"context_line":"required."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Alternatives"},{"line_number":76,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f287b81_56f75a8c","line":73,"in_reply_to":"7f287b81_8c4c9c9e","updated":"2017-09-08 04:12:44.000000000","message":"Thanks for the information, Chris.\n\nMissed to ask another combination:-\n\nResource provider traits:\nrp4 (traits: \u0027foo\u0027, \u0027bar\u0027)\n\nFlavor traits:\nflavor4 (traits: \u0027foo\u0027, \u0027bar\u0027, \u0027foobar\u0027)\n\n\nBoot instances:\na) Boot instance using flavor4, then placement api will return empty list, correct?","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3e14213ff9096abca5600343d5181a838a16949a","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  CREATE TABLE flavor_trait ("},{"line_number":93,"context_line":"    flavor_id INT NOT NULL,"},{"line_number":94,"context_line":"    trait_name VARCHAR(200) NOT NULL"},{"line_number":95,"context_line":"  );"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"We will also need to store the set of traits that the user requested in"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f231b9d_12f38f0c","line":94,"updated":"2017-06-12 17:33:05.000000000","message":"The Traits model has name as:\n\nname \u003d Column(Unicode(255), nullable\u003dFalse)","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0c5f4ebb4297d3923cc7d9b76bef169c779b3778","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  CREATE TABLE flavor_trait ("},{"line_number":93,"context_line":"    flavor_id INT NOT NULL,"},{"line_number":94,"context_line":"    trait_name VARCHAR(200) NOT NULL"},{"line_number":95,"context_line":"  );"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"We will also need to store the set of traits that the user requested in"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f287b81_273bf39c","line":94,"in_reply_to":"7f231b9d_12f38f0c","updated":"2017-09-04 06:34:34.000000000","message":"I\u0027m thinking using the flavor extra_specs for now, since the resource class is in the extra spec also.","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"628f8d6659f52a09872ef132f297cd1f8b188300","unresolved":false,"context_lines":[{"line_number":103,"context_line":"REST API impact"},{"line_number":104,"context_line":"---------------"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Following changes will be introduced in a new API microversion."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"* POST /flavors"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f231b9d_dbd3e437","line":106,"updated":"2017-06-13 06:21:49.000000000","message":"After check the resource class spec http://specs.openstack.org/openstack/nova-specs/specs/pike/approved/custom-resource-classes-in-flavors.html\n\nIt puts the resource-classes in the extra spec. I\u0027m not sure why we decide to that. Put it in the extra_spec, it means there is no way discover whether the current API support resource class in the extra spec or not.","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"628f8d6659f52a09872ef132f297cd1f8b188300","unresolved":false,"context_lines":[{"line_number":171,"context_line":"Dependencies"},{"line_number":172,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Dependent on implementation of querying resource providers based on traits."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Testing"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f231b9d_51c10c54","line":174,"updated":"2017-06-13 06:21:49.000000000","message":"We can depend on this https://review.openstack.org/471927 now.","commit_id":"8a240ad522d68f10b23400b61d38bee29c0a788a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fff8d071bd56845d9b8450167ddee367594c6d1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"For administrative users:"},{"line_number":31,"context_line":"* Allow administrators to specify a set of traits that a flavor requires."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For developers:"},{"line_number":34,"context_line":"* Standardize how to request traits through request spec."},{"line_number":35,"context_line":"* Decouple nova-specific traits handling out of scheduler."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Proposed change"},{"line_number":38,"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":5,"id":"bf57530f_4883d405","line":35,"range":{"start_line":33,"start_character":0,"end_line":35,"end_character":58},"updated":"2017-09-20 08:00:59.000000000","message":"I think we can remove this, this section is only about the end-user use-case.","commit_id":"9bdb5775f2e6121d51f80a042022543590f5d100"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fff8d071bd56845d9b8450167ddee367594c6d1","unresolved":false,"context_lines":[{"line_number":37,"context_line":"Proposed change"},{"line_number":38,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"We propose to store traits in flavor extra_specs. And collect traits from"},{"line_number":41,"context_line":"flavor in a boot request to generate the qualitative part in request spec."},{"line_number":42,"context_line":"Image metadata association is not in the scope of this blueprint. The proposed"},{"line_number":43,"context_line":"change adds the following features to Nova:"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bf57530f_c876a43f","line":41,"range":{"start_line":40,"start_character":50,"end_line":41,"end_character":74},"updated":"2017-09-20 08:00:59.000000000","message":"Sounds like we needn\u0027t to this. The traits are in the extra spec, and the flavor and extra spec will be stored in the request spec now.","commit_id":"9bdb5775f2e6121d51f80a042022543590f5d100"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fff8d071bd56845d9b8450167ddee367594c6d1","unresolved":false,"context_lines":[{"line_number":49,"context_line":"The validation implies following checks:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"1. Validate traits by querying Placement API."},{"line_number":52,"context_line":"2. Report error when a trait string could not be found in Placement."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Build up qualitative part of request in the request_spec object"},{"line_number":55,"context_line":"---------------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bf57530f_68bc58bb","line":52,"range":{"start_line":52,"start_character":3,"end_line":52,"end_character":68},"updated":"2017-09-20 08:00:59.000000000","message":"The API already returned, probably we just get the instance scheduling failed.","commit_id":"9bdb5775f2e6121d51f80a042022543590f5d100"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fff8d071bd56845d9b8450167ddee367594c6d1","unresolved":false,"context_lines":[{"line_number":76,"context_line":"Data model impact"},{"line_number":77,"context_line":"-----------------"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"We will need to store the set of traits that the user requested in"},{"line_number":80,"context_line":"the `instance_extra` table. Flavors can change over time and even be deleted so"},{"line_number":81,"context_line":"we need to ensure that any information we used in the initial request is saved"},{"line_number":82,"context_line":"so that on things like live migration we can be sure to apply the same"},{"line_number":83,"context_line":"placement conditions."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"REST API impact"},{"line_number":86,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bf57530f_48e634eb","line":83,"range":{"start_line":79,"start_character":0,"end_line":83,"end_character":21},"updated":"2017-09-20 08:00:59.000000000","message":"we needn\u0027t this, since the request spec already includes the flavor","commit_id":"9bdb5775f2e6121d51f80a042022543590f5d100"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0fff8d071bd56845d9b8450167ddee367594c6d1","unresolved":false,"context_lines":[{"line_number":135,"context_line":"Work Items"},{"line_number":136,"context_line":"----------"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"TODO."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bf57530f_a8d6d0f0","line":138,"updated":"2017-09-20 08:00:59.000000000","message":"please fill the real work item","commit_id":"9bdb5775f2e6121d51f80a042022543590f5d100"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"164f6ff3821d98eeb2478000bb622e1b69afbc3b","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/request-traits-in-nova"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint aims at leveraging traits to standardize the way"},{"line_number":14,"context_line":"of requesting qualitative resources in Nova."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_e95934fe","line":14,"range":{"start_line":14,"start_character":14,"end_line":14,"end_character":35},"updated":"2017-09-25 11:18:05.000000000","message":"Resources are not qualitative, they\u0027re quantitative :)\n\nRecommend rewording the above sentence to this:\n\n\"Standardize the request of required qualitative attributes using resource provider traits.\"","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/request-traits-in-nova"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint aims at leveraging traits to standardize the way"},{"line_number":14,"context_line":"of requesting qualitative resources in Nova."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_6600aa02","line":14,"range":{"start_line":14,"start_character":14,"end_line":14,"end_character":35},"in_reply_to":"7f515b1d_e95934fe","updated":"2017-09-26 09:54:11.000000000","message":"Thanks!","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"249f97e58c197a5a6c4a10e134f1b05abc13e3c5","unresolved":false,"context_lines":[{"line_number":21,"context_line":"and image metadata in order to specify capabilities in a launch request."},{"line_number":22,"context_line":"Without standardization of capabilities, there is no possibility of"},{"line_number":23,"context_line":"interoperable OpenStack clouds. We have introduced traits to manage the"},{"line_number":24,"context_line":"qualitative parts of ResourceProviders in Placement[1]. Administrators should"},{"line_number":25,"context_line":"be able to create flavors associated with traits."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_8e2e43f8","line":24,"range":{"start_line":24,"start_character":51,"end_line":24,"end_character":54},"updated":"2017-09-25 12:46:10.000000000","message":"Make this a real RST link.","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"and image metadata in order to specify capabilities in a launch request."},{"line_number":22,"context_line":"Without standardization of capabilities, there is no possibility of"},{"line_number":23,"context_line":"interoperable OpenStack clouds. We have introduced traits to manage the"},{"line_number":24,"context_line":"qualitative parts of ResourceProviders in Placement[1]. Administrators should"},{"line_number":25,"context_line":"be able to create flavors associated with traits."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_260ab220","line":24,"range":{"start_line":24,"start_character":51,"end_line":24,"end_character":54},"in_reply_to":"7f515b1d_8e2e43f8","updated":"2017-09-26 09:54:11.000000000","message":"Done","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"164f6ff3821d98eeb2478000bb622e1b69afbc3b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Without standardization of capabilities, there is no possibility of"},{"line_number":23,"context_line":"interoperable OpenStack clouds. We have introduced traits to manage the"},{"line_number":24,"context_line":"qualitative parts of ResourceProviders in Placement[1]. Administrators should"},{"line_number":25,"context_line":"be able to create flavors associated with traits."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Use Cases"},{"line_number":28,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_c913180d","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":49},"updated":"2017-09-25 11:18:05.000000000","message":"should be \"be able to associate a set of required traits with flavors\"","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"994bc3ea3bcec6139d48b5046ed43ce3a666ff2a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"flavor in a boot request. Image metadata association is not in the scope of"},{"line_number":38,"context_line":"this blueprint. The proposed change adds the following features to Nova:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Build up qualitative part of request in the request_spec object"},{"line_number":41,"context_line":"---------------------------------------------------------------"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_6e3b07eb","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":63},"updated":"2017-09-25 12:51:52.000000000","message":"This section no longer describes how the requested traits wind up in the request_spec object.  That\u0027s really important.","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"flavor in a boot request. Image metadata association is not in the scope of"},{"line_number":38,"context_line":"this blueprint. The proposed change adds the following features to Nova:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Build up qualitative part of request in the request_spec object"},{"line_number":41,"context_line":"---------------------------------------------------------------"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_462c8e98","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":63},"in_reply_to":"7f515b1d_6e3b07eb","updated":"2017-09-26 09:54:11.000000000","message":"Done","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"164f6ff3821d98eeb2478000bb622e1b69afbc3b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"Build up qualitative part of request in the request_spec object"},{"line_number":41,"context_line":"---------------------------------------------------------------"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"},{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_292e2c43","line":44,"range":{"start_line":43,"start_character":0,"end_line":44,"end_character":79},"updated":"2017-09-25 11:18:05.000000000","message":"Remove this first sentence. It\u0027s not needed.","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"Build up qualitative part of request in the request_spec object"},{"line_number":41,"context_line":"---------------------------------------------------------------"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"},{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_062696b8","line":44,"range":{"start_line":43,"start_character":0,"end_line":44,"end_character":79},"in_reply_to":"7f515b1d_292e2c43","updated":"2017-09-26 09:54:11.000000000","message":"Done","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d3f7df7d3d667a7b116df08f8d9e20932df12216","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"},{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_dd306feb","line":46,"range":{"start_line":45,"start_character":73,"end_line":46,"end_character":9},"updated":"2017-09-25 14:44:49.000000000","message":"You state that it is out of the scope in L37","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"164f6ff3821d98eeb2478000bb622e1b69afbc3b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"},{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_e927f463","line":46,"range":{"start_line":46,"start_character":24,"end_line":46,"end_character":29},"updated":"2017-09-25 11:18:05.000000000","message":"s/could/will/","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"164f6ff3821d98eeb2478000bb622e1b69afbc3b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"},{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_29d3cc3a","line":46,"range":{"start_line":46,"start_character":45,"end_line":46,"end_character":66},"updated":"2017-09-25 11:18:05.000000000","message":"the GET /allocation_candidates endpoint","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"},{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_863166ef","line":46,"range":{"start_line":46,"start_character":45,"end_line":46,"end_character":66},"in_reply_to":"7f515b1d_29d3cc3a","updated":"2017-09-26 09:54:11.000000000","message":"Done","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"},{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_26587230","line":46,"range":{"start_line":45,"start_character":73,"end_line":46,"end_character":9},"in_reply_to":"7f515b1d_dd306feb","updated":"2017-09-26 09:54:11.000000000","message":"Done","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"The major goal of this spec is to follow the concept of \"generic scheduler\" and"},{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_46512e0e","line":46,"range":{"start_line":46,"start_character":24,"end_line":46,"end_character":29},"in_reply_to":"7f515b1d_e927f463","updated":"2017-09-26 09:54:11.000000000","message":"Done","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"164f6ff3821d98eeb2478000bb622e1b69afbc3b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Alternatives"},{"line_number":50,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_a9e69c15","line":47,"range":{"start_line":47,"start_character":55,"end_line":47,"end_character":63},"updated":"2017-09-25 11:18:05.000000000","message":"each of the required","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"164f6ff3821d98eeb2478000bb622e1b69afbc3b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Alternatives"},{"line_number":50,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_09d81051","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":9},"updated":"2017-09-25 11:18:05.000000000","message":"the Placement","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Alternatives"},{"line_number":50,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_8646064f","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":9},"in_reply_to":"7f515b1d_09d81051","updated":"2017-09-26 09:54:11.000000000","message":"Done","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"approach the final separation from scheduler, at least in the qualitative part."},{"line_number":45,"context_line":"A collection of valid traits can be collected from flavor extra_specs and image"},{"line_number":46,"context_line":"metadata. The scheduler could pass traits to allocation candidates endpint in"},{"line_number":47,"context_line":"Placement API to filter out resource providers without required traits."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Alternatives"},{"line_number":50,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_66778aa2","line":47,"range":{"start_line":47,"start_character":55,"end_line":47,"end_character":63},"in_reply_to":"7f515b1d_a9e69c15","updated":"2017-09-26 09:54:11.000000000","message":"Done","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"249f97e58c197a5a6c4a10e134f1b05abc13e3c5","unresolved":false,"context_lines":[{"line_number":54,"context_line":"maybe removed from Nova in the future, adding new fields into flavor should be"},{"line_number":55,"context_line":"avoided."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Considering traits preference, we currently have some ideas about \"Where to"},{"line_number":58,"context_line":"specify preferences\" and \"How to order preferences\", but they may not be"},{"line_number":59,"context_line":"settled in this spec."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Data model impact"},{"line_number":62,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_ee76d706","line":59,"range":{"start_line":57,"start_character":66,"end_line":59,"end_character":21},"updated":"2017-09-25 12:46:10.000000000","message":"Huh?  Then what is this spec for?  I really expected to see details about the trait syntax within flavor extra_specs, including examples.","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"maybe removed from Nova in the future, adding new fields into flavor should be"},{"line_number":55,"context_line":"avoided."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Considering traits preference, we currently have some ideas about \"Where to"},{"line_number":58,"context_line":"specify preferences\" and \"How to order preferences\", but they may not be"},{"line_number":59,"context_line":"settled in this spec."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Data model impact"},{"line_number":62,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_a692229d","line":59,"range":{"start_line":57,"start_character":66,"end_line":59,"end_character":21},"in_reply_to":"7f515b1d_ee76d706","updated":"2017-09-26 09:54:11.000000000","message":"This spec is only for required traits associated with flavor. I will add a example of trait syntax in the spec. For traits preference, we need another spec to cover that.","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d3f7df7d3d667a7b116df08f8d9e20932df12216","unresolved":false,"context_lines":[{"line_number":66,"context_line":"REST API impact"},{"line_number":67,"context_line":"---------------"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"None."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Security impact"},{"line_number":72,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_7dccdbbb","line":69,"updated":"2017-09-25 14:44:49.000000000","message":"I think we should add an example how the flavor extra spec will look like when some traits are added.","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7c48667afa7a1b5db9639b9d89553acebc11b83c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"REST API impact"},{"line_number":67,"context_line":"---------------"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"None."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Security impact"},{"line_number":72,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_46edae23","line":69,"in_reply_to":"7f515b1d_7dccdbbb","updated":"2017-09-26 09:54:11.000000000","message":"Thanks, done.","commit_id":"b8e36ebde6b749546af55d74bbf67e7b5d6bdaf6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"96bf0e0fdc75ba61928553f7fc05e5cfa07577e3","unresolved":false,"context_lines":[{"line_number":36,"context_line":"We propose to store traits in flavor extra_specs and collect traits from"},{"line_number":37,"context_line":"flavor in a boot request. Image metadata association is not in the scope of"},{"line_number":38,"context_line":"this blueprint. The scheduler will pass traits to the"},{"line_number":39,"context_line":"GET /allocation_candidates endpint in the Placement API to filter out resource"},{"line_number":40,"context_line":"providers without each of the required traits."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_0c391740","line":39,"range":{"start_line":39,"start_character":27,"end_line":39,"end_character":34},"updated":"2017-09-26 11:57:46.000000000","message":"nit: endpoint","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"96bf0e0fdc75ba61928553f7fc05e5cfa07577e3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"providers without each of the required traits."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like:"},{"line_number":43,"context_line":"``traits\u003dHW_CPU_X86_AVX2,STORAGE_DISK_SSD``, where value is a string of trait"},{"line_number":44,"context_line":"names separated by comma."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_0c4a377f","line":43,"updated":"2017-09-26 11:57:46.000000000","message":"This creates a possible db impact. Currently the length of the extra spec value (and key) is 255 char [1]. As the required trait list could be arbitrary long we either has to change the db model or change how we represent a requested trait in the flavor.\n\n\n[1] https://github.com/openstack/nova/blob/bb32286e9ea844e73722d06d57f015d17fb0e4fa/nova/db/sqlalchemy/models.py#L1068-L1069","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33b7c20201e5aece80f56abf2ae3e873485630ca","unresolved":false,"context_lines":[{"line_number":40,"context_line":"providers without each of the required traits."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like:"},{"line_number":43,"context_line":"``traits\u003dHW_CPU_X86_AVX2,STORAGE_DISK_SSD``, where value is a string of trait"},{"line_number":44,"context_line":"names separated by comma."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_3c8be21f","line":43,"in_reply_to":"7f515b1d_0c4a377f","updated":"2017-09-28 08:13:13.000000000","message":"We spoke at the PTG about going for something like:\n\n* trait:HW_CPU_X86_AVX2\u003drequired\n* trait:STORAGE_DISK_SSD\u003drequired\n\nNow that does mean the largest traits still can\u0027t be stored, but it seems better.","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0cd90b342169680addfab0581f99e7214ef69ea2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"providers without each of the required traits."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like:"},{"line_number":43,"context_line":"``traits\u003dHW_CPU_X86_AVX2,STORAGE_DISK_SSD``, where value is a string of trait"},{"line_number":44,"context_line":"names separated by comma."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_f177689f","line":43,"in_reply_to":"7f515b1d_3c8be21f","updated":"2017-09-28 13:24:41.000000000","message":"Ah, thanks, I didn\u0027t follow that in the PTG, yea, that is better. If put that in one extra spec, in the currently case, we probably only can have 10 traits.","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33b7c20201e5aece80f56abf2ae3e873485630ca","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like:"},{"line_number":43,"context_line":"``traits\u003dHW_CPU_X86_AVX2,STORAGE_DISK_SSD``, where value is a string of trait"},{"line_number":44,"context_line":"names separated by comma."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Alternatives"},{"line_number":47,"context_line":"------------"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_bccc726a","line":45,"updated":"2017-09-28 08:13:13.000000000","message":"I was expecting to see something about which placement APIs were going to be called, I see thats mentioned in the dependencies section below, so that\u0027s OK I guess.","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0cd90b342169680addfab0581f99e7214ef69ea2","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The trait syntax in flavor extra_specs looks like:"},{"line_number":43,"context_line":"``traits\u003dHW_CPU_X86_AVX2,STORAGE_DISK_SSD``, where value is a string of trait"},{"line_number":44,"context_line":"names separated by comma."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Alternatives"},{"line_number":47,"context_line":"------------"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_91803448","line":45,"in_reply_to":"7f515b1d_bccc726a","updated":"2017-09-28 13:24:41.000000000","message":"Probably just call the allocation candidates API with \"requires\" parameter. Initially, I think there is API call for validating the invalid traits, but that seems wasteful now. We can call the allocation candidates API directly, and it will return 400 for invalid traits also.","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"96bf0e0fdc75ba61928553f7fc05e5cfa07577e3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"Data model impact"},{"line_number":59,"context_line":"-----------------"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"None."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"REST API impact"},{"line_number":64,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_8c550720","line":61,"updated":"2017-09-26 11:57:46.000000000","message":"See my comment at L43","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"21814b9b31b6e56d2aae6ec7b7ce48775313ba92","unresolved":false,"context_lines":[{"line_number":58,"context_line":"Data model impact"},{"line_number":59,"context_line":"-----------------"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"None."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"REST API impact"},{"line_number":64,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_1129e499","line":61,"in_reply_to":"7f515b1d_75348b93","updated":"2017-09-28 14:05:55.000000000","message":"I guess that isn\u0027t part of this section, this section is more about DB schema change I think?","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33b7c20201e5aece80f56abf2ae3e873485630ca","unresolved":false,"context_lines":[{"line_number":58,"context_line":"Data model impact"},{"line_number":59,"context_line":"-----------------"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"None."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"REST API impact"},{"line_number":64,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_75348b93","line":61,"in_reply_to":"7f515b1d_8c550720","updated":"2017-09-28 08:13:13.000000000","message":"I would rather we change how we use extra specs.","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"96bf0e0fdc75ba61928553f7fc05e5cfa07577e3","unresolved":false,"context_lines":[{"line_number":127,"context_line":"Testing"},{"line_number":128,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Unit tests and functional tests for building up requests shall be added."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_87184075","line":130,"updated":"2017-09-26 11:57:46.000000000","message":"As this will be the first time we can request traits for a given instance boot this work will first allow us to end-to-end test the trait integration between nova and placement. I think it would be really beneficial to add extensive functional tests that boots and moves VMs with traits requested. At least we have to make sure that the tests derives from ProviderUsageBaseTestCase are modified to include some trait requests and asserts that those traits requests are fulfilled.\n\n[1] https://github.com/openstack/nova/blob/bb32286e9ea844e73722d06d57f015d17fb0e4fa/nova/tests/functional/test_servers.py#L1060","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33b7c20201e5aece80f56abf2ae3e873485630ca","unresolved":false,"context_lines":[{"line_number":127,"context_line":"Testing"},{"line_number":128,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Unit tests and functional tests for building up requests shall be added."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_95d4a721","line":130,"in_reply_to":"7f515b1d_87184075","updated":"2017-09-28 08:13:13.000000000","message":"+1 for a functional test that ensures the correct nova-compute node is selected given the correct flavor and a full boot request flow.","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0cd90b342169680addfab0581f99e7214ef69ea2","unresolved":false,"context_lines":[{"line_number":127,"context_line":"Testing"},{"line_number":128,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Unit tests and functional tests for building up requests shall be added."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_91f5d4ef","line":130,"in_reply_to":"7f515b1d_95d4a721","updated":"2017-09-28 13:24:41.000000000","message":"+1","commit_id":"fce1508f61603a4a80ddb004bcecc601430b12c4"}]}
