)]}'
{"specs/train/approved/flavor-extra-spec-image-property-validation-extended.rst":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"of issues we\u0027d like to address:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"- Lack of documentation for many flavor extra specs and image metadata"},{"line_number":23,"context_line":"  properties [1]_. Yes, we have Glance image metadata definitions but they\u0027re"},{"line_number":24,"context_line":"  generally rather out-of-date, we don\u0027t/can\u0027t consume them in Nova, and"},{"line_number":25,"context_line":"  they\u0027re not aimed towards user-facing documentation."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"- Outdated, incomplete or incorrect Glance metadata definitions."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_98efeb1b","line":25,"range":{"start_line":23,"start_character":19,"end_line":25,"end_character":54},"updated":"2019-04-10 12:14:01.000000000","message":"we dont consume them in nova but they are consumed by heat and by horizon.\nhorizon uses the metadef api to generate the dropdown boxes \nin the falvor/image and volume metadata UIs. \n\nand while they are not targeted at documentation they are intended to be user facing as the decribption field is presented to the enduser in the ui.\n\nheat similarly uses them i belive in theer ui for creating heat templates. althout its polible they have there own reouces they generate that you from instead. i know there template ui will pull images and flavor form the rest apis and generate a drop donw so you can select them but it might not pull the extra spec metadata","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"  generally rather out-of-date, we don\u0027t/can\u0027t consume them in Nova, and"},{"line_number":25,"context_line":"  they\u0027re not aimed towards user-facing documentation."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"- Outdated, incomplete or incorrect Glance metadata definitions."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"- No warnings if there is a typo in your extra spec, resulting in different"},{"line_number":30,"context_line":"  behavior to that expected."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_98a12bfa","line":27,"range":{"start_line":27,"start_character":1,"end_line":27,"end_character":64},"updated":"2019-04-10 12:14:01.000000000","message":"well the correct way to solve that problem is to submit an patch to glance to fix it.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"- No warnings if there is a typo in your extra spec, resulting in different"},{"line_number":30,"context_line":"  behavior to that expected."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- Some flavor extra specs have equivalent image metadata properties, but the"},{"line_number":33,"context_line":"  precedence of these is not specified and varies between options."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"- No defined way to do things like deprecate a flavor extra spec, resulting in"},{"line_number":36,"context_line":"  continued reinvention of the wheel."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_384cb73d","line":33,"range":{"start_line":32,"start_character":0,"end_line":33,"end_character":66},"updated":"2019-04-10 12:14:01.000000000","message":"the precendec is almost always the flavor over the image\n\nwhat varies is how we handel conflicts.\n\nthat said the one example i can think of that does not fully follow this rule is\nhw:mem_page_size when set to \"large\" or \"any\" allow\nthe hw_mem_page_size element to specify a specific page size.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"Use Cases"},{"line_number":39,"context_line":"---------"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* As a deployer, I\u0027d like to know what flavor extra specs and image metadata"},{"line_number":42,"context_line":"  properties are available and why I\u0027d want to use them."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"* As a deployer, I\u0027d like nova to tell me when I\u0027ve used a flavor extra spec"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_b85987fd","line":41,"range":{"start_line":41,"start_character":7,"end_line":41,"end_character":15},"updated":"2019-04-10 12:14:01.000000000","message":"operator or cloud admin\n\nthe deployer is not always the same persone that runs the cloud and configures it.\n\nin some orgs they are the prosong that  manges racking hardware adn installing and updating the software but dont actully configure flavor or otherwise run the openstack env.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"  properties are available and why I\u0027d want to use them."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"* As a deployer, I\u0027d like nova to tell me when I\u0027ve used a flavor extra spec"},{"line_number":45,"context_line":"  that doesn\u0027t exist or has a typo in it."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* As a developer, I\u0027d like an easy way to deprecate flavor extra specs, which"},{"line_number":48,"context_line":"  is something that will only become more common if we do things like move"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_38fa77b9","line":45,"range":{"start_line":45,"start_character":3,"end_line":45,"end_character":20},"updated":"2019-04-10 12:14:01.000000000","message":"so operator are allowed to define any arbitry flaovr extraspec thye like and the same is true of image properties.\n\nthis is to enable them to use the flavor/image properties filters to do think like define a dpdk property that will schdule a vm to the dpdk host aggreate.\n\nso warning about extraspecs that dont exist many not be helpfull","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"  properties are available and why I\u0027d want to use them."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"* As a deployer, I\u0027d like nova to tell me when I\u0027ve used a flavor extra spec"},{"line_number":45,"context_line":"  that doesn\u0027t exist or has a typo in it."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* As a developer, I\u0027d like an easy way to deprecate flavor extra specs, which"},{"line_number":48,"context_line":"  is something that will only become more common if we do things like move"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_78cb1f71","line":45,"range":{"start_line":45,"start_character":30,"end_line":45,"end_character":34},"updated":"2019-04-10 12:14:01.000000000","message":"typos on the other hand are useful\n\nthere are a number of differnt algorithms that can be used to mesure word simularity and determin if something has a high probability fo being a typo.\n\ni think we shoudl be able to support typo detection and warn on that although we may need to allow the operator to extend the dictionay via a config option to be able to add there own extra specs  to the list.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"* As a deployer, I\u0027d like nova to tell me when I\u0027ve used a flavor extra spec"},{"line_number":45,"context_line":"  that doesn\u0027t exist or has a typo in it."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* As a developer, I\u0027d like an easy way to deprecate flavor extra specs, which"},{"line_number":48,"context_line":"  is something that will only become more common if we do things like move"},{"line_number":49,"context_line":"  tracking of dedicated CPUs into placement."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* As a documentation writer, I\u0027d like to be able to cross-reference the various"},{"line_number":52,"context_line":"  flavor extra specs and image metadata properties available."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_d8a1f3aa","line":49,"range":{"start_line":47,"start_character":1,"end_line":49,"end_character":44},"updated":"2019-04-10 12:14:01.000000000","message":"+1","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"The core of this change is a new schema definition file. That file is a"},{"line_number":58,"context_line":"YAML-formatted file, which describes the flavor extra specs and image metadata"},{"line_number":59,"context_line":"properties available. A sample of the file is given at the end of this section."},{"line_number":60,"context_line":"The YAML format is chosen as it allows us to define a specification in a"},{"line_number":61,"context_line":"declarative manner."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_3896f74a","line":58,"range":{"start_line":58,"start_character":43,"end_line":58,"end_character":78},"updated":"2019-04-10 12:14:01.000000000","message":"glance metadef also cover aggreage metadata and volumes\n\nso if we do this we shoudl also cover those as well.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f73e91a2fc97c759a862d7046f5e6b6a7cb4b950","unresolved":false,"context_lines":[{"line_number":63,"context_line":"This file will be used at the earliest possible stage of the instance create,"},{"line_number":64,"context_line":"resize and rebuild operations to alert the user to possible issues. Initially,"},{"line_number":65,"context_line":"warnings will be emitted for things like invalid or conflicting flavor extra"},{"line_number":66,"context_line":"specs and image metadata properties. We may wish to introduce microversions to"},{"line_number":67,"context_line":"the APIs behind commands like :command:`openstack flavor set` and"},{"line_number":68,"context_line":":command:`openstack image set` (the latter being owned by Glance) that will"},{"line_number":69,"context_line":"reject requests to set invalid properties, but that will be a future work item."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Not all extra specs can be known ahead of time and for dynamic extra specs, such"},{"line_number":72,"context_line":"as those proposed in `Support filtering by forbidden aggregate membership"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_f250900c","line":69,"range":{"start_line":66,"start_character":37,"end_line":69,"end_character":79},"updated":"2019-04-10 09:33:36.000000000","message":"I\u0027ve really never understood the whole \"let\u0027s support a microversion in the API so the user can turn off validation and get themselves back into the exact situation that resulted in us adding the microversion to begin with\".","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1e8ba41b4453d1997238369d74607a1f51d51e25","unresolved":false,"context_lines":[{"line_number":63,"context_line":"This file will be used at the earliest possible stage of the instance create,"},{"line_number":64,"context_line":"resize and rebuild operations to alert the user to possible issues. Initially,"},{"line_number":65,"context_line":"warnings will be emitted for things like invalid or conflicting flavor extra"},{"line_number":66,"context_line":"specs and image metadata properties. We may wish to introduce microversions to"},{"line_number":67,"context_line":"the APIs behind commands like :command:`openstack flavor set` and"},{"line_number":68,"context_line":":command:`openstack image set` (the latter being owned by Glance) that will"},{"line_number":69,"context_line":"reject requests to set invalid properties, but that will be a future work item."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Not all extra specs can be known ahead of time and for dynamic extra specs, such"},{"line_number":72,"context_line":"as those proposed in `Support filtering by forbidden aggregate membership"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_fb84e45f","line":69,"range":{"start_line":66,"start_character":37,"end_line":69,"end_character":79},"in_reply_to":"5fc1f717_18a9bb7a","updated":"2019-04-10 16:06:27.000000000","message":"\u003e because if we dont do this we will break users.\n\nOne might argue that it is users that are broken to begin with if they are currently submitting invalid extra specs. My point is that we go through all these hoops with a microversion just to continue supporting the broken user behaviour.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":63,"context_line":"This file will be used at the earliest possible stage of the instance create,"},{"line_number":64,"context_line":"resize and rebuild operations to alert the user to possible issues. Initially,"},{"line_number":65,"context_line":"warnings will be emitted for things like invalid or conflicting flavor extra"},{"line_number":66,"context_line":"specs and image metadata properties. We may wish to introduce microversions to"},{"line_number":67,"context_line":"the APIs behind commands like :command:`openstack flavor set` and"},{"line_number":68,"context_line":":command:`openstack image set` (the latter being owned by Glance) that will"},{"line_number":69,"context_line":"reject requests to set invalid properties, but that will be a future work item."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Not all extra specs can be known ahead of time and for dynamic extra specs, such"},{"line_number":72,"context_line":"as those proposed in `Support filtering by forbidden aggregate membership"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_18a9bb7a","line":69,"range":{"start_line":66,"start_character":37,"end_line":69,"end_character":79},"in_reply_to":"5fc1f717_f250900c","updated":"2019-04-10 12:14:01.000000000","message":"because if we dont do this we will break users.\n\noperator are allowed to define extra specs and image metadata values for there own use.\n\nwe need to contiue to support that or we will break everyone on upgrade.\n\nif we want to remove the ability for arbitary exta spec then instead of this propose we can just make teh extra_specs dictionary an ovo with defined fields.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f73e91a2fc97c759a862d7046f5e6b6a7cb4b950","unresolved":false,"context_lines":[{"line_number":68,"context_line":":command:`openstack image set` (the latter being owned by Glance) that will"},{"line_number":69,"context_line":"reject requests to set invalid properties, but that will be a future work item."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Not all extra specs can be known ahead of time and for dynamic extra specs, such"},{"line_number":72,"context_line":"as those proposed in `Support filtering by forbidden aggregate membership"},{"line_number":73,"context_line":"\u003chttp://specs.openstack.org/openstack/nova-specs/specs/stein/approved/negative-aggregate-membership.html\u003e`,"},{"line_number":74,"context_line":"we will provide an API that allows us to register additional extra spec"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_32de186a","line":71,"updated":"2019-04-10 09:33:36.000000000","message":"AssertionError: False is not true : specs/train/approved/flavor-extra-spec-image-property-validation-extended.rst:71: Line limited to a maximum of 79 characters.\n\nThe horror. The horror.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"reject requests to set invalid properties, but that will be a future work item."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Not all extra specs can be known ahead of time and for dynamic extra specs, such"},{"line_number":72,"context_line":"as those proposed in `Support filtering by forbidden aggregate membership"},{"line_number":73,"context_line":"\u003chttp://specs.openstack.org/openstack/nova-specs/specs/stein/approved/negative-aggregate-membership.html\u003e`,"},{"line_number":74,"context_line":"we will provide an API that allows us to register additional extra spec"},{"line_number":75,"context_line":"specifications on startup."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Note that this change also builds upon `Flavor extra spec image metadata"},{"line_number":78,"context_line":"validation"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_f8e06fce","line":75,"range":{"start_line":72,"start_character":0,"end_line":75,"end_character":26},"updated":"2019-04-10 12:14:01.000000000","message":"api or config option.\n\nalso lets not break people on upgrade. if we do have a mechanium to regeister it we will need an online data migration to populate that table with all currently used extra specs.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":95,"context_line":"      type: extra_spec"},{"line_number":96,"context_line":"      description: \u003e"},{"line_number":97,"context_line":"        The number of NUMA nodes the instance should have."},{"line_number":98,"context_line":"      value:"},{"line_number":99,"context_line":"        type: integer"},{"line_number":100,"context_line":"        description: \u003e"},{"line_number":101,"context_line":"          The number of NUMA nodes the instance should have."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_582503c1","line":98,"range":{"start_line":98,"start_character":6,"end_line":98,"end_character":11},"updated":"2019-04-10 12:14:01.000000000","message":"this should be key\n\ni need to use value later to mean soemthing else","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f73e91a2fc97c759a862d7046f5e6b6a7cb4b950","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        type: integer"},{"line_number":109,"context_line":"        description: \u003e"},{"line_number":110,"context_line":"          The number of NUMA nodes the instance should have."},{"line_number":111,"context_line":"      overrides:"},{"line_number":112,"context_line":"      - hw:numa_nodes"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    - name: hw:numa_cpus.{id}"},{"line_number":115,"context_line":"      type: extra_spec"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_d29b14c6","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":21},"updated":"2019-04-10 09:33:36.000000000","message":"well, at least it\u0027s not confusing....","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1e8ba41b4453d1997238369d74607a1f51d51e25","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        type: integer"},{"line_number":109,"context_line":"        description: \u003e"},{"line_number":110,"context_line":"          The number of NUMA nodes the instance should have."},{"line_number":111,"context_line":"      overrides:"},{"line_number":112,"context_line":"      - hw:numa_nodes"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    - name: hw:numa_cpus.{id}"},{"line_number":115,"context_line":"      type: extra_spec"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_5b89786c","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":21},"in_reply_to":"5fc1f717_384037a2","updated":"2019-04-10 16:06:27.000000000","message":"lol. have I mentioned how much I loathe the NUMA extra specs? :) case in point.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        type: integer"},{"line_number":109,"context_line":"        description: \u003e"},{"line_number":110,"context_line":"          The number of NUMA nodes the instance should have."},{"line_number":111,"context_line":"      overrides:"},{"line_number":112,"context_line":"      - hw:numa_nodes"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    - name: hw:numa_cpus.{id}"},{"line_number":115,"context_line":"      type: extra_spec"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_384037a2","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":21},"in_reply_to":"5fc1f717_d29b14c6","updated":"2019-04-10 12:14:01.000000000","message":"its also inccorect\n\nhw_numa_nodes does not override hw:numa_nodes\n\ni belive we raise an exception if there is a conflict\n\nhw_numa_nodes can be used to set teh numa nodes on a guest if\nhw:numa_nodes is not set in the flavor.\nif hw:numa_nodes\u003d1 is the flavor you can enable a second numa node by setting hw_numa_nodes\u003d2 in the image.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f73e91a2fc97c759a862d7046f5e6b6a7cb4b950","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        description: \u003e"},{"line_number":130,"context_line":"          The guest CPUs, in the form of a CPU map, to allocate to the guest NUMA"},{"line_number":131,"context_line":"          node identified by ``{id}``."},{"line_number":132,"context_line":"      dependencies:"},{"line_number":133,"context_line":"      - type: driver"},{"line_number":134,"context_line":"        value: libvirt.LibvirtDriver"},{"line_number":135,"context_line":"      - anyOf:"},{"line_number":136,"context_line":"        - type: extra_spec"},{"line_number":137,"context_line":"          value: hw:numa_nodes"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_529884be","line":134,"range":{"start_line":132,"start_character":0,"end_line":134,"end_character":36},"updated":"2019-04-10 09:33:36.000000000","message":"Such a shame that this level of implementation detail leaks out of our public API :(\n\nI\u0027m not saying that you shouldn\u0027t model the dependencies in this YAML file. Just saying that our API shouldn\u0027t have leaked this kind of implementation detail to begin with.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        description: \u003e"},{"line_number":130,"context_line":"          The guest CPUs, in the form of a CPU map, to allocate to the guest NUMA"},{"line_number":131,"context_line":"          node identified by ``{id}``."},{"line_number":132,"context_line":"      dependencies:"},{"line_number":133,"context_line":"      - type: driver"},{"line_number":134,"context_line":"        value: libvirt.LibvirtDriver"},{"line_number":135,"context_line":"      - anyOf:"},{"line_number":136,"context_line":"        - type: extra_spec"},{"line_number":137,"context_line":"          value: hw:numa_nodes"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_386ef72b","line":134,"range":{"start_line":132,"start_character":0,"end_line":134,"end_character":36},"in_reply_to":"5fc1f717_529884be","updated":"2019-04-10 12:14:01.000000000","message":"well at opnpoing i think hypervy planned ot support this but the ended up just supprotting hw:numa_nodes and not numa_cpu or numa_mem as they do pinning differently.\n\nbut ya i get your point","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"      - anyOf:"},{"line_number":136,"context_line":"        - type: extra_spec"},{"line_number":137,"context_line":"          value: hw:numa_nodes"},{"line_number":138,"context_line":"        - type: image_meta"},{"line_number":139,"context_line":"          value: hw_numa_nodes"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    - name: hw:numa_mem.{id}"},{"line_number":142,"context_line":"      type: extra_spec"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_f8f38f71","line":139,"range":{"start_line":138,"start_character":8,"end_line":139,"end_character":30},"updated":"2019-04-10 12:14:01.000000000","message":"while it technically could work if you sepcify the numa node in the image i think this is semanticaly invalid\n\nwe should not allow flavor extra spec that only work if you happen to choose the right image.\n\nso i would delete this.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f73e91a2fc97c759a862d7046f5e6b6a7cb4b950","unresolved":false,"context_lines":[{"line_number":143,"context_line":"      description: \u003e"},{"line_number":144,"context_line":"        A mapping of **guest** memory to the **guest** NUMA node identified by"},{"line_number":145,"context_line":"        ``{id}``. This can be used to provide asymmetric CPU-NUMA allocation and is"},{"line_number":146,"context_line":"        necessary where the number of guest NUMA nodes is is not a factor of the"},{"line_number":147,"context_line":"        amount of guest memory."},{"line_number":148,"context_line":"      parameters:"},{"line_number":149,"context_line":"      - name: id"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_92a10cfa","line":146,"range":{"start_line":146,"start_character":55,"end_line":146,"end_character":60},"updated":"2019-04-10 09:33:36.000000000","message":"is","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":161,"context_line":"      - anyOf:"},{"line_number":162,"context_line":"        - type: extra_spec"},{"line_number":163,"context_line":"          value: hw:numa_nodes"},{"line_number":164,"context_line":"        - type: image_meta"},{"line_number":165,"context_line":"          value: hw_numa_nodes"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    - name: hw:cpu_policy"},{"line_number":168,"context_line":"      type: extra_spec"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_98e60bb0","line":165,"range":{"start_line":164,"start_character":2,"end_line":165,"end_character":30},"updated":"2019-04-10 12:14:01.000000000","message":"delete","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        enum:"},{"line_number":194,"context_line":"        - dedicated"},{"line_number":195,"context_line":"        - shared"},{"line_number":196,"context_line":"      overrides:"},{"line_number":197,"context_line":"      - hw:cpu_policy"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    - name: hw:cpu_thread_policy"},{"line_number":200,"context_line":"      type: extra_spec"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_989b6b15","line":197,"range":{"start_line":196,"start_character":6,"end_line":197,"end_character":21},"updated":"2019-04-10 12:14:01.000000000","message":"again this is wrong\nit does not override\nyou can set it in the image if its not set in the flavor but\nif its set in both and the value dont match we raise an exception.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":219,"context_line":"      - anyOf:"},{"line_number":220,"context_line":"        - type: extra_spec"},{"line_number":221,"context_line":"          value: hw:cpu_policy"},{"line_number":222,"context_line":"        - type: image_meta"},{"line_number":223,"context_line":"          value: hw_cpu_policy"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    - name: hw_cpu_thread_policy"},{"line_number":226,"context_line":"      type: image_meta"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_b89e6703","line":223,"range":{"start_line":222,"start_character":7,"end_line":223,"end_character":30},"updated":"2019-04-10 12:14:01.000000000","message":"again i woudl delete this","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":243,"context_line":"      - type: driver"},{"line_number":244,"context_line":"        value: libvirt.LibvirtDriver"},{"line_number":245,"context_line":"      - anyOf:"},{"line_number":246,"context_line":"        - type: extra_spec"},{"line_number":247,"context_line":"          value: hw:cpu_policy"},{"line_number":248,"context_line":"        - type: image_meta"},{"line_number":249,"context_line":"          value: hw_cpu_policy"},{"line_number":250,"context_line":"      overrides:"},{"line_number":251,"context_line":"      - hw:cpu_policy"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_187d3bb1","line":249,"range":{"start_line":246,"start_character":6,"end_line":249,"end_character":30},"updated":"2019-04-10 12:14:01.000000000","message":"in this case i think it may be ok as we are expressing a requirement for what flavor we can use with this image.\nthis is sutely differnet then the flavor case as the flavor\nas i dont think an operator should config a flavor that will be invalide for the majoiry of image but a user shoudl be free to upload an image that work with only a sepcific flaovr if they choose.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":247,"context_line":"          value: hw:cpu_policy"},{"line_number":248,"context_line":"        - type: image_meta"},{"line_number":249,"context_line":"          value: hw_cpu_policy"},{"line_number":250,"context_line":"      overrides:"},{"line_number":251,"context_line":"      - hw:cpu_policy"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"Alternatives"},{"line_number":254,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_98428b67","line":251,"range":{"start_line":250,"start_character":5,"end_line":251,"end_character":21},"updated":"2019-04-10 12:14:01.000000000","message":"again this is inccorect it doe snot overried you can simply\nset if it si not set in teh falvor.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":249,"context_line":"          value: hw_cpu_policy"},{"line_number":250,"context_line":"      overrides:"},{"line_number":251,"context_line":"      - hw:cpu_policy"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"Alternatives"},{"line_number":254,"context_line":"------------"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_4c47844d","line":252,"updated":"2019-04-10 12:14:01.000000000","message":"- name: hw_mempage_size\n      type: image_meta\n      description: \u003e\n       .... \n      value:\n        type: string\n        description: \u003e\n          guest memory backing page size\n          vaild vaules are small|large|any\n          or an integer value with optional\n          unit prefix. e.g. 1G, 2M, 4K, 4096\n      dependencies:\n      - anyOf:\n        - type: extra_spec\n          key: hw:mem_page_size\n          value:\n             anyOF:\n              -large\n              -any\n      overrides:\n      - hw:mem_page_size\n\nthis is the only case i am currently aware of wehre an image property can overide the falvor and it can only do so if the amdin sait it was ok by seting hw:mem_page_size\u003dlarge|any in the flavor.\nif the admin sets hw:mem_page_size\u003dlarge then the image can choose a specifc hugepage size but not small or 4k\n\nif its set to any they can choose whay they want.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9e120ac4a118cc04b3e1df0730f703367cbd688a","unresolved":false,"context_lines":[{"line_number":308,"context_line":"Upgrade impact"},{"line_number":309,"context_line":"--------------"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"None."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5fc1f717_4cb54431","line":311,"range":{"start_line":311,"start_character":0,"end_line":311,"end_character":5},"updated":"2019-04-10 12:14:01.000000000","message":"there will be a significant upgrade impact if we start failing\nrebuilds spawns, migrtaions unshives because fo \"invalid\" extra specs.\n\ni have mentioned this aready in the review but this is one of the few customistaion point we give to operators to allow them to schdule based on things openstack does not know about directly\n\ne.g. schduling to dpdk host based on a custom dpdk extra spec\n\ni could see recjecting the creation or new flavor maybe\nbut i think that will break things like ONAP that like to do not nice things with flavors and images.","commit_id":"9baa886e7a0a01a071fc39f24ef9da3a8dd83836"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8cfd5ddac581652514c7c6c2d7415b2528b33470","unresolved":false,"context_lines":[{"line_number":29,"context_line":"- No warnings if there is a typo in your extra spec, resulting in different"},{"line_number":30,"context_line":"  behavior to that expected."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- Some flavor extra specs have equivalent image metadata properties, but the"},{"line_number":33,"context_line":"  precedence of these is not specified and varies between options."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"- No defined way to do things like deprecate a flavor extra spec, resulting in"},{"line_number":36,"context_line":"  continued reinvention of the wheel."}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfbec78f_0f5e7211","line":33,"range":{"start_line":32,"start_character":2,"end_line":33,"end_character":66},"updated":"2019-05-14 17:52:04.000000000","message":"the precedence was specifed in each spec as they were intoduced.\n\nin all but one case the flavor takes precendecne.\nwe used to allow the flavor to silently override the image property but we decied back in icehouse or juno that this was a bad user expericne and started raising error if they conflict\n\nthe one exception to this is hw:mem_page_size which allows\nthe image to override it if and only if the flavor is set to any or large. in the later case when it is set to large the image can specify any not small page size e.g. 1G or 2MB and when set to any the operator has said explictly(the default is small) that the image is allowed to set any value.\n\nso the precedence is set by convention and at least in the past that convention was coifed in the specs that intoduce the specs where we explcitly called out this behavior.\n\nfor example you can see in the original cpu pinning specs\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/juno/approved/virt-driver-cpu-pinning.html#proposed-change\n\nwhere we call out that the image metadata policy will only be  honored if it is not set in the flavor by the admin.\n\nthe reason we stoped stating this in every spec was the shear amount of precendent that underlay the current convention.","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e7f392fe3971508664def6cee45f42e4b8eff8ae","unresolved":false,"context_lines":[{"line_number":29,"context_line":"- No warnings if there is a typo in your extra spec, resulting in different"},{"line_number":30,"context_line":"  behavior to that expected."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- Some flavor extra specs have equivalent image metadata properties, but the"},{"line_number":33,"context_line":"  precedence of these is not specified and varies between options."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"- No defined way to do things like deprecate a flavor extra spec, resulting in"},{"line_number":36,"context_line":"  continued reinvention of the wheel."}],"source_content_type":"text/x-rst","patch_set":5,"id":"bfb3d3c7_b3cba6a3","line":33,"range":{"start_line":32,"start_character":2,"end_line":33,"end_character":66},"in_reply_to":"dfbec78f_0f5e7211","updated":"2019-05-20 10:12:11.000000000","message":"I\u0027ve stopped caring about image metadata in this spec now so this shouldn\u0027t have still been here. I\u0027ve dropped it now","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8cfd5ddac581652514c7c6c2d7415b2528b33470","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    hw:cpu_policy\u003ddeddddicated"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"To do this, we propose adding a new module, ``nova.compute.extra_specs``, which"},{"line_number":88,"context_line":"will contain definitions of flavor extra specs. These definitions will be based"},{"line_number":89,"context_line":"on an abstract base class and will allow a user to define the following:"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfbec78f_8fcee2b1","line":87,"range":{"start_line":87,"start_character":46,"end_line":87,"end_character":70},"updated":"2019-05-14 17:52:04.000000000","message":"this should not be under the compute module since it will be used form the api.\n\ni would suggest nova.validators.extra_specs","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8e11d01afbe545ab7779d82bb3c426400b6a9691","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    hw:cpu_policy\u003ddeddddicated"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"To do this, we propose adding a new module, ``nova.compute.extra_specs``, which"},{"line_number":88,"context_line":"will contain definitions of flavor extra specs. These definitions will be based"},{"line_number":89,"context_line":"on an abstract base class and will allow a user to define the following:"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfbec78f_c386ce66","line":87,"range":{"start_line":87,"start_character":46,"end_line":87,"end_character":70},"in_reply_to":"dfbec78f_8fcee2b1","updated":"2019-05-16 17:16:39.000000000","message":"by the way the -1 is for  putting this in the compute modeule when its going to be used by the api.\n\nthe other comments and the alternitive suggestion im more neutral on.","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e7f392fe3971508664def6cee45f42e4b8eff8ae","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    hw:cpu_policy\u003ddeddddicated"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"To do this, we propose adding a new module, ``nova.compute.extra_specs``, which"},{"line_number":88,"context_line":"will contain definitions of flavor extra specs. These definitions will be based"},{"line_number":89,"context_line":"on an abstract base class and will allow a user to define the following:"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bfb3d3c7_f336feb4","line":87,"range":{"start_line":87,"start_character":46,"end_line":87,"end_character":70},"in_reply_to":"dfbec78f_c386ce66","updated":"2019-05-20 10:12:11.000000000","message":"Done","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8cfd5ddac581652514c7c6c2d7415b2528b33470","unresolved":false,"context_lines":[{"line_number":106,"context_line":"For example::"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    class CPUPolicy(BaseExtraSpecDef):"},{"line_number":109,"context_line":"        group \u003d \u0027hw\u0027"},{"line_number":110,"context_line":"        name \u003d \u0027cpu_policy\u0027"},{"line_number":111,"context_line":"        description \u003d ("},{"line_number":112,"context_line":"            \u0027The policy to apply when determining what host CPUs the guest \u0027"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfbec78f_0fbaf208","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":13},"updated":"2019-05-14 17:52:04.000000000","message":"this is techncially call the flavor extra_spec \"namespace\" not group\ncan we use namespace here instead.","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e7f392fe3971508664def6cee45f42e4b8eff8ae","unresolved":false,"context_lines":[{"line_number":106,"context_line":"For example::"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    class CPUPolicy(BaseExtraSpecDef):"},{"line_number":109,"context_line":"        group \u003d \u0027hw\u0027"},{"line_number":110,"context_line":"        name \u003d \u0027cpu_policy\u0027"},{"line_number":111,"context_line":"        description \u003d ("},{"line_number":112,"context_line":"            \u0027The policy to apply when determining what host CPUs the guest \u0027"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bfb3d3c7_b35966ff","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":13},"in_reply_to":"dfbec78f_0fbaf208","updated":"2019-05-20 10:12:11.000000000","message":"Done","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8cfd5ddac581652514c7c6c2d7415b2528b33470","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            },"},{"line_number":161,"context_line":"        ]"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"These definitions will be maintained in-tree and will be used by the API behind"},{"line_number":164,"context_line":"the :command:`openstack flavor set` command. A microversion will be introduced"},{"line_number":165,"context_line":"for this command to avoid breaking existing tools that are inadvertently setting"},{"line_number":166,"context_line":"the wrong values."},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfbec78f_cfc29a59","line":164,"range":{"start_line":163,"start_character":1,"end_line":164,"end_character":43},"updated":"2019-05-14 17:52:04.000000000","message":"you will have to do special handeling for some namespaces.\n\nthe traits: namespace is owned and by os-traits and shoudl be validated using os-tratis to check all standard tratis.\n\nthe accel: namespace will be owned by cyborg and addtion of new accel: extra_specs shoudl not requrie updated to nova.\nit might be worth considing having a stevador entry point so that other services can register a validator for there namespace.\n\n// in nova\n\nnova.extra_specs.validators\u003d\n   hw\u003dnova.validators.extra_specs:HWValidator\n   os\u003dnova.validators.extra_specs:OSValidator\n   traits\u003dnova.validators.extra_specs:TraitsValidator\n   resouces\u003dnova.validators.extra_specs:ResouceClassValidator\n   custom\u003dnova.validators.extra_specs:NoopValidator\n   *\u003dnova.validators.extra_specs:YamlValidator\n\nnote that * mataches anything with out a specific validator and can use your yaml format but i think its better to do this in python then ymal by default but allow yaml for operators to config.\n\n// in cyborg\nnova.extra_specs.validators\u003d\n   accel\u003dcyborg.extra_specs.valiator:Validator\n\naddtionaly at the ptg we told intel to enable RMD by adding a custom trait but not modify the compute agent. i suggested using an rmd: namespace\n\nif they followed that advice this would allow them to add a validator for there custom rmd namesapces","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"23e4aa5d68c59f75766bd64b8f2ea98001729fc7","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            },"},{"line_number":161,"context_line":"        ]"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"These definitions will be maintained in-tree and will be used by the API behind"},{"line_number":164,"context_line":"the :command:`openstack flavor set` command. A microversion will be introduced"},{"line_number":165,"context_line":"for this command to avoid breaking existing tools that are inadvertently setting"},{"line_number":166,"context_line":"the wrong values."},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfbec78f_cfc4daf7","line":164,"range":{"start_line":163,"start_character":1,"end_line":164,"end_character":43},"in_reply_to":"dfbec78f_cfc29a59","updated":"2019-05-14 18:34:17.000000000","message":"by the way if it was not clear each of the validators are effectively parsers that know how to accept all well defined extra spec in a given namespaces. the result of parsing the extra spec would be class containing the metadata about the extra spec and the extra_spec name, namespace and value.\n\nif it did not parse it could raise an exception or return None\n\nwe also could make this work in a multi valued way by \nhaving each parser accpet a dict of extra specs and a result list and call it via a reduce over the set of validtors.\ne.g. \n\nclass Validator(object):\n  def validate_all(self,extra_specs,acumulated_results):\n    results \u003d []\n    # loop backwards so that we dont invalidate itorator as we remove validated extra_specs\n    pending \u003d {}\n    for spec , val in extra_specs.items():\n        result \u003d self.validate(spec,val)\n        if result:\n          results.append(result)\n        else:\n          pending[spec]\u003dval\n    return pending, list(results) + acumulated_results\n\n   def validate(self, spec, value):\n        # do something sane here instead\n        # like looking up the spec in a dict of\n        # constutor function like a normal table driven parser\n        return Valid(spec,value)\n\nvalidators \u003d [Validator(),...]\nresult \u003d functools.reduce(({\"hw:cpu_policy\":\"dedicated\"},[]),validators)\n\nif result[0].empty():\n print(\"all were valid\")\n # result[0] is the dict of extra spces that are still pending if it is not empty after we run all the validaort then we had in valid keys of values. if we want to also retrun the error that is relitvly simple by returning a third arg from validate_all which is a dictionary mapping the extraspec to an error. \n\n\ni think this quite an elegenat solution to the usecase\nand provide a framework for validating other things in a similar way in the future.","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8e11d01afbe545ab7779d82bb3c426400b6a9691","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            },"},{"line_number":161,"context_line":"        ]"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"These definitions will be maintained in-tree and will be used by the API behind"},{"line_number":164,"context_line":"the :command:`openstack flavor set` command. A microversion will be introduced"},{"line_number":165,"context_line":"for this command to avoid breaking existing tools that are inadvertently setting"},{"line_number":166,"context_line":"the wrong values."},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfbec78f_e3ee7220","line":164,"range":{"start_line":163,"start_character":1,"end_line":164,"end_character":43},"in_reply_to":"dfbec78f_cfc4daf7","updated":"2019-05-16 17:16:39.000000000","message":"and to clarify again i am not against jsut doing the simpler way with just the yaml file but i do not think we should maintain a yaml file over time. if we did we woudl have ot version it and have a way to merge our standar yaml with operator changes and that is a mess so i would prefer to validate any well known thigs in python and have the yaml file for custom things the operator wants to add.","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e7f392fe3971508664def6cee45f42e4b8eff8ae","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            },"},{"line_number":161,"context_line":"        ]"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"These definitions will be maintained in-tree and will be used by the API behind"},{"line_number":164,"context_line":"the :command:`openstack flavor set` command. A microversion will be introduced"},{"line_number":165,"context_line":"for this command to avoid breaking existing tools that are inadvertently setting"},{"line_number":166,"context_line":"the wrong values."},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bfb3d3c7_b3d086cb","line":164,"range":{"start_line":163,"start_character":1,"end_line":164,"end_character":43},"in_reply_to":"dfbec78f_e3ee7220","updated":"2019-05-20 10:12:11.000000000","message":"Oooh, I like this. Done.","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8cfd5ddac581652514c7c6c2d7415b2528b33470","unresolved":false,"context_lines":[{"line_number":184,"context_line":"Not all extra specs can be known ahead of time and for dynamic extra specs, such"},{"line_number":185,"context_line":"as those proposed in `Support filtering by forbidden aggregate membership"},{"line_number":186,"context_line":"\u003chttp://specs.openstack.org/openstack/nova-specs/specs/stein/approved/negative-aggregate-membership.html\u003e`,"},{"line_number":187,"context_line":"we will provide an API that allows us to register additional extra spec"},{"line_number":188,"context_line":"specifications on startup."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"An example of the YAML file, using actual extra specs:"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfbec78f_afb966cc","line":188,"range":{"start_line":187,"start_character":0,"end_line":188,"end_character":26},"updated":"2019-05-14 17:52:04.000000000","message":"as i mentioned above thinks like validating traits or extra specs in names spaces form other project i think will require a slightly different approach.\n\ni have presented an alternative plugin based approch which i think would be better long term as we have flavor extra specs that are not owned by nova.","commit_id":"efefb374a4c5ca425e88807be01d38b138776128"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"- Enforcement of virt driver dependencies. Unfortunately, while flavor extra"},{"line_number":69,"context_line":"  specs should be generic, this isn\u0027t always the case. As above, we will"},{"line_number":70,"context_line":"  document this dependency but it won\u0027t be enforced."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"This change builds upon `Flavor extra spec image metadata validation"},{"line_number":73,"context_line":"\u003chttp://specs.openstack.org/openstack/nova-specs/specs/stein/approved/flavor-extra-spec-image-property-validation.html`,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_abb97a15","line":70,"updated":"2019-06-25 22:55:57.000000000","message":"- Key validation (see below)","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"- Enforcement of virt driver dependencies. Unfortunately, while flavor extra"},{"line_number":69,"context_line":"  specs should be generic, this isn\u0027t always the case. As above, we will"},{"line_number":70,"context_line":"  document this dependency but it won\u0027t be enforced."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"This change builds upon `Flavor extra spec image metadata validation"},{"line_number":73,"context_line":"\u003chttp://specs.openstack.org/openstack/nova-specs/specs/stein/approved/flavor-extra-spec-image-property-validation.html`,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_b6c3b657","line":70,"in_reply_to":"9fb8cfa7_abb97a15","updated":"2019-07-02 18:09:15.000000000","message":"Done. Note that I\u0027d still like to log some kind of message to the user that a validator hasn\u0027t been provided for an extra spec so they can close that gap if they want but it won\u0027t be a warning or anything. Hopefully that makes sense","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"  document this dependency but it won\u0027t be enforced."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"This change builds upon `Flavor extra spec image metadata validation"},{"line_number":73,"context_line":"\u003chttp://specs.openstack.org/openstack/nova-specs/specs/stein/approved/flavor-extra-spec-image-property-validation.html`,"},{"line_number":74,"context_line":"which covers some of these issues for us."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Value validation"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_6b538218","line":73,"range":{"start_line":73,"start_character":117,"end_line":73,"end_character":119},"updated":"2019-06-25 22:55:57.000000000","message":"l\u003e`","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":70,"context_line":"  document this dependency but it won\u0027t be enforced."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"This change builds upon `Flavor extra spec image metadata validation"},{"line_number":73,"context_line":"\u003chttp://specs.openstack.org/openstack/nova-specs/specs/stein/approved/flavor-extra-spec-image-property-validation.html`,"},{"line_number":74,"context_line":"which covers some of these issues for us."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Value validation"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_9b56db2a","line":73,"range":{"start_line":73,"start_character":117,"end_line":73,"end_character":119},"in_reply_to":"9fb8cfa7_6b538218","updated":"2019-07-02 18:09:15.000000000","message":"Done","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":86,"context_line":"extra specs. These definitions will be based on an abstract base class and will"},{"line_number":87,"context_line":"allow a user to define the following:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- Name of the extra spec (i.e. the *value*)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"- Namespace of the extra spec"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_cb414e3b","line":89,"range":{"start_line":89,"start_character":25,"end_line":89,"end_character":43},"updated":"2019-06-25 22:55:57.000000000","message":"eh?","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"extra specs. These definitions will be based on an abstract base class and will"},{"line_number":87,"context_line":"allow a user to define the following:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- Name of the extra spec (i.e. the *value*)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"- Namespace of the extra spec"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_fb1ef772","line":89,"range":{"start_line":89,"start_character":25,"end_line":89,"end_character":43},"in_reply_to":"9fb8cfa7_cb414e3b","updated":"2019-07-02 18:09:15.000000000","message":"Done","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"extra specs. These definitions will be based on an abstract base class and will"},{"line_number":87,"context_line":"allow a user to define the following:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- Name of the extra spec (i.e. the *value*)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"- Namespace of the extra spec"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_bb539f39","line":89,"range":{"start_line":89,"start_character":25,"end_line":89,"end_character":43},"in_reply_to":"9fb8cfa7_cb414e3b","updated":"2019-07-02 18:09:15.000000000","message":"Value","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b5315c0e9359e85c8d40e22ad5751fee623b4bfe","unresolved":false,"context_lines":[{"line_number":86,"context_line":"extra specs. These definitions will be based on an abstract base class and will"},{"line_number":87,"context_line":"allow a user to define the following:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- Name of the extra spec (i.e. the *value*)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"- Namespace of the extra spec"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_07951240","line":89,"range":{"start_line":89,"start_character":25,"end_line":89,"end_character":43},"in_reply_to":"9fb8cfa7_cb414e3b","updated":"2019-07-03 13:57:28.000000000","message":"i think he ment what is to the right or the : so for hw:cpu_policy it would be cpu_policy would be the name but value is a little confusing considering.","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- Name of the extra spec (i.e. the *value*)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"- Namespace of the extra spec"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"- Description of the extra spec"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_eb3e92b6","line":91,"range":{"start_line":91,"start_character":2,"end_line":91,"end_character":11},"updated":"2019-06-25 22:55:57.000000000","message":"what does this mean?","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- Name of the extra spec (i.e. the *value*)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"- Namespace of the extra spec"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"- Description of the extra spec"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_db21b3b7","line":91,"range":{"start_line":91,"start_character":2,"end_line":91,"end_character":11},"in_reply_to":"9fb8cfa7_eb3e92b6","updated":"2019-07-02 18:09:15.000000000","message":"Done","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b5315c0e9359e85c8d40e22ad5751fee623b4bfe","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- Name of the extra spec (i.e. the *value*)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"- Namespace of the extra spec"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"- Description of the extra spec"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_27929658","line":91,"range":{"start_line":91,"start_character":2,"end_line":91,"end_character":11},"in_reply_to":"9fb8cfa7_eb3e92b6","updated":"2019-07-03 13:57:28.000000000","message":"most extraspecs are namespaces e.g. hw: is the hardware namespace.","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0be15912cb386939884d8d2d3b7972c6d5498572","unresolved":false,"context_lines":[{"line_number":108,"context_line":".. code-block:: python"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    class HWValidator(BaseValidator):"},{"line_number":111,"context_line":"        name \u003d \u0027hw\u0027"},{"line_number":112,"context_line":"        description \u003d ("},{"line_number":113,"context_line":"            \u0027Extra specs that modify behavior of the virtual hardware \u0027"},{"line_number":114,"context_line":"            \u0027associated with instances.\u0027"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_852c4399","line":111,"range":{"start_line":111,"start_character":7,"end_line":111,"end_character":19},"updated":"2019-07-02 11:49:55.000000000","message":"Is it like a namespace?","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":108,"context_line":".. code-block:: python"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    class HWValidator(BaseValidator):"},{"line_number":111,"context_line":"        name \u003d \u0027hw\u0027"},{"line_number":112,"context_line":"        description \u003d ("},{"line_number":113,"context_line":"            \u0027Extra specs that modify behavior of the virtual hardware \u0027"},{"line_number":114,"context_line":"            \u0027associated with instances.\u0027"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_16c962ab","line":111,"range":{"start_line":111,"start_character":7,"end_line":111,"end_character":19},"in_reply_to":"9fb8cfa7_852c4399","updated":"2019-07-02 18:09:15.000000000","message":"Correct. Validators are for namespaces. I\u0027m clarified the wording here","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            \u0027associated with instances.\u0027"},{"line_number":115,"context_line":"        )"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    class CPUPolicy(BaseExtraSpec):"},{"line_number":118,"context_line":"        name \u003d \u0027cpu_policy\u0027"},{"line_number":119,"context_line":"        description \u003d ("},{"line_number":120,"context_line":"            \u0027The policy to apply when determining what host CPUs the guest \u0027"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_0b3e868a","line":117,"updated":"2019-06-25 22:55:57.000000000","message":"Man, these *almost* seem like oslo.config opts. /me wonders if there\u0027s some way we can piggyback on those...","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            \u0027associated with instances.\u0027"},{"line_number":115,"context_line":"        )"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    class CPUPolicy(BaseExtraSpec):"},{"line_number":118,"context_line":"        name \u003d \u0027cpu_policy\u0027"},{"line_number":119,"context_line":"        description \u003d ("},{"line_number":120,"context_line":"            \u0027The policy to apply when determining what host CPUs the guest \u0027"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_36cee6b4","line":117,"in_reply_to":"9fb8cfa7_0b3e868a","updated":"2019-07-02 18:09:15.000000000","message":"I looked. Short answer: no :(","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            \u0027The policy to apply when determining what host CPUs the guest \u0027"},{"line_number":121,"context_line":"            \u0027CPUs can run on. If ``shared`` (default), guest CPUs can be \u0027"},{"line_number":122,"context_line":"            \u0027overallocated but cannot float across host cores. If \u0027"},{"line_number":123,"context_line":"            \u0027``dedicated``, guest CPUS cannot be overallocated but are \u0027"},{"line_number":124,"context_line":"            \u0027individually pinned to their own host core.\u0027"},{"line_number":125,"context_line":"        )"},{"line_number":126,"context_line":"        deprecated \u003d True"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_8b47d64c","line":123,"range":{"start_line":123,"start_character":37,"end_line":123,"end_character":38},"updated":"2019-06-25 22:55:57.000000000","message":"s","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            \u0027The policy to apply when determining what host CPUs the guest \u0027"},{"line_number":121,"context_line":"            \u0027CPUs can run on. If ``shared`` (default), guest CPUs can be \u0027"},{"line_number":122,"context_line":"            \u0027overallocated but cannot float across host cores. If \u0027"},{"line_number":123,"context_line":"            \u0027``dedicated``, guest CPUS cannot be overallocated but are \u0027"},{"line_number":124,"context_line":"            \u0027individually pinned to their own host core.\u0027"},{"line_number":125,"context_line":"        )"},{"line_number":126,"context_line":"        deprecated \u003d True"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_f6bfeef9","line":123,"range":{"start_line":123,"start_character":37,"end_line":123,"end_character":38},"in_reply_to":"9fb8cfa7_8b47d64c","updated":"2019-07-02 18:09:15.000000000","message":"Done","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \u0027The guest CPUs, in the form of a CPU map, to allocate to the \u0027"},{"line_number":155,"context_line":"                \u0027guest NUMA node identified by ``{id}``.\u0027"},{"line_number":156,"context_line":"            ),"},{"line_number":157,"context_line":"            \u0027format\u0027: r\u0027\\d+((-\\d+)?(,\\^?\\d+(-\\d+)?)?)*\u0027,"},{"line_number":158,"context_line":"        }"},{"line_number":159,"context_line":"        dependencies \u003d ["},{"line_number":160,"context_line":"            {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_eb6772e8","line":157,"range":{"start_line":157,"start_character":13,"end_line":157,"end_character":19},"updated":"2019-06-25 22:55:57.000000000","message":"I would call this \u0027pattern\u0027","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \u0027The guest CPUs, in the form of a CPU map, to allocate to the \u0027"},{"line_number":155,"context_line":"                \u0027guest NUMA node identified by ``{id}``.\u0027"},{"line_number":156,"context_line":"            ),"},{"line_number":157,"context_line":"            \u0027format\u0027: r\u0027\\d+((-\\d+)?(,\\^?\\d+(-\\d+)?)?)*\u0027,"},{"line_number":158,"context_line":"        }"},{"line_number":159,"context_line":"        dependencies \u003d ["},{"line_number":160,"context_line":"            {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_165722cd","line":157,"range":{"start_line":157,"start_character":13,"end_line":157,"end_character":19},"in_reply_to":"9fb8cfa7_eb6772e8","updated":"2019-07-02 18:09:15.000000000","message":"I\u0027ve seen pattern used in OpenAPI so I copied that. Makes no difference to me though so changed","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            ),"},{"line_number":157,"context_line":"            \u0027format\u0027: r\u0027\\d+((-\\d+)?(,\\^?\\d+(-\\d+)?)?)*\u0027,"},{"line_number":158,"context_line":"        }"},{"line_number":159,"context_line":"        dependencies \u003d ["},{"line_number":160,"context_line":"            {"},{"line_number":161,"context_line":"                \u0027type\u0027: \u0027driver\u0027,"},{"line_number":162,"context_line":"                \u0027value\u0027: \u0027libvirt.LibvirtDriver\u0027,"},{"line_number":163,"context_line":"            },"},{"line_number":164,"context_line":"            {"},{"line_number":165,"context_line":"                \u0027type\u0027: \u0027extra_spec\u0027,"},{"line_number":166,"context_line":"                \u0027value\u0027: \u0027hw:numa_nodes\u0027,"},{"line_number":167,"context_line":"            },"},{"line_number":168,"context_line":"        ]"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    register(HWValidator, CPUPolicy)"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_8b8ef676","line":167,"range":{"start_line":159,"start_character":0,"end_line":167,"end_character":14},"updated":"2019-06-25 22:55:57.000000000","message":"Not sure I see the value in these being metadata rather than just worded into the \u0027description\u0027. Is there a plan to add enforcement later on? Even if so, it probably makes YAGNI sense to wait until then to start blowing this out.\n\nWe would need to codify valid \u0027type\u0027s and their meanings, etc. Is it \u0027extra_spec\u0027 or \u0027extra_specs\u0027? Who enforces that? Is \u0027driver\u0027 semantically connected to the [DEFAULT]compute_driver config variable somehow?\n\nJust seems like more trouble than it\u0027s worth.","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            ),"},{"line_number":157,"context_line":"            \u0027format\u0027: r\u0027\\d+((-\\d+)?(,\\^?\\d+(-\\d+)?)?)*\u0027,"},{"line_number":158,"context_line":"        }"},{"line_number":159,"context_line":"        dependencies \u003d ["},{"line_number":160,"context_line":"            {"},{"line_number":161,"context_line":"                \u0027type\u0027: \u0027driver\u0027,"},{"line_number":162,"context_line":"                \u0027value\u0027: \u0027libvirt.LibvirtDriver\u0027,"},{"line_number":163,"context_line":"            },"},{"line_number":164,"context_line":"            {"},{"line_number":165,"context_line":"                \u0027type\u0027: \u0027extra_spec\u0027,"},{"line_number":166,"context_line":"                \u0027value\u0027: \u0027hw:numa_nodes\u0027,"},{"line_number":167,"context_line":"            },"},{"line_number":168,"context_line":"        ]"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    register(HWValidator, CPUPolicy)"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_b6b97616","line":167,"range":{"start_line":159,"start_character":0,"end_line":167,"end_character":14},"in_reply_to":"9fb8cfa7_8b8ef676","updated":"2019-07-02 18:09:15.000000000","message":"Yeah, I was trying to provide a standard way to describe this stuff rather than having everyone do it differently. This is similar to how we have a \u0027deprecated_reason\u0027 parameter in oslo.config now (previously everyone was encoding this in the help string). I agree that it\u0027s a lot of effort though and could be done later. Dropped","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":173,"context_line":"Many of the definitions will be maintained in-tree but some namespaces will"},{"line_number":174,"context_line":"require special handling as they\u0027re owned by external services, e.g. the"},{"line_number":175,"context_line":"``traits`` namespace (owned by os-traits) or the ``accel`` namespace (proposed"},{"line_number":176,"context_line":"for use by cyborg). For these, we propose adding using `stevedore`_ to allow"},{"line_number":177,"context_line":"external projects to register custom validators. For example, nova would"},{"line_number":178,"context_line":"provide the following:"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_0bf0c6fc","line":176,"range":{"start_line":176,"start_character":42,"end_line":176,"end_character":48},"updated":"2019-06-25 22:55:57.000000000","message":"x","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":173,"context_line":"Many of the definitions will be maintained in-tree but some namespaces will"},{"line_number":174,"context_line":"require special handling as they\u0027re owned by external services, e.g. the"},{"line_number":175,"context_line":"``traits`` namespace (owned by os-traits) or the ``accel`` namespace (proposed"},{"line_number":176,"context_line":"for use by cyborg). For these, we propose adding using `stevedore`_ to allow"},{"line_number":177,"context_line":"external projects to register custom validators. For example, nova would"},{"line_number":178,"context_line":"provide the following:"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_365ca6ec","line":176,"range":{"start_line":176,"start_character":42,"end_line":176,"end_character":48},"in_reply_to":"9fb8cfa7_0bf0c6fc","updated":"2019-07-02 18:09:15.000000000","message":"Done","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        hw \u003d nova.api.validation.extra_specs:HWValidator"},{"line_number":184,"context_line":"        os \u003d nova.api.validation.extra_specs:OSValidator"},{"line_number":185,"context_line":"        traits \u003d nova.api.validation.extra_specs:TraitsValidator"},{"line_number":186,"context_line":"        resources \u003d nova.api.validation.extra_specs:ResoucesValidator"},{"line_number":187,"context_line":"        custom \u003d nova.validators.extra_specs:NoopValidator"},{"line_number":188,"context_line":"        * \u003d nova.validators.extra_specs:YAMLValidator"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_cbddce70","line":186,"range":{"start_line":186,"start_character":52,"end_line":186,"end_character":60},"updated":"2019-06-25 22:55:57.000000000","message":"Resources","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        hw \u003d nova.api.validation.extra_specs:HWValidator"},{"line_number":184,"context_line":"        os \u003d nova.api.validation.extra_specs:OSValidator"},{"line_number":185,"context_line":"        traits \u003d nova.api.validation.extra_specs:TraitsValidator"},{"line_number":186,"context_line":"        resources \u003d nova.api.validation.extra_specs:ResoucesValidator"},{"line_number":187,"context_line":"        custom \u003d nova.validators.extra_specs:NoopValidator"},{"line_number":188,"context_line":"        * \u003d nova.validators.extra_specs:YAMLValidator"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_d670aa76","line":186,"range":{"start_line":186,"start_character":52,"end_line":186,"end_character":60},"in_reply_to":"9fb8cfa7_cbddce70","updated":"2019-07-02 18:09:15.000000000","message":"Done","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        description: \u003e"},{"line_number":216,"context_line":"          The number of NUMA nodes the instance should have."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    - name: hw:numa_cpus.{id}"},{"line_number":219,"context_line":"      description: \u003e"},{"line_number":220,"context_line":"        A mapping of **guest** CPUs to the **guest** NUMA node identified by"},{"line_number":221,"context_line":"        ``{id}``. This can be used to provide asymmetric CPU-NUMA allocation"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_4bd31e61","line":218,"range":{"start_line":218,"start_character":24,"end_line":218,"end_character":29},"updated":"2019-06-25 22:55:57.000000000","message":"is this a well-known syntax somewhere?","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        description: \u003e"},{"line_number":216,"context_line":"          The number of NUMA nodes the instance should have."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    - name: hw:numa_cpus.{id}"},{"line_number":219,"context_line":"      description: \u003e"},{"line_number":220,"context_line":"        A mapping of **guest** CPUs to the **guest** NUMA node identified by"},{"line_number":221,"context_line":"        ``{id}``. This can be used to provide asymmetric CPU-NUMA allocation"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_76077ecb","line":218,"range":{"start_line":218,"start_character":24,"end_line":218,"end_character":29},"in_reply_to":"9fb8cfa7_4bd31e61","updated":"2019-07-02 18:09:15.000000000","message":"Yup, it\u0027s used in URL modules in the likes of Django and Flask, and I think OpenAPI does this too. Curly braces aren\u0027t commonly used in URLs so it\u0027s a safe character to use here","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":228,"context_line":"          The ID of the **guest** NUMA node."},{"line_number":229,"context_line":"      value:"},{"line_number":230,"context_line":"        type: string"},{"line_number":231,"context_line":"        format: \u0027\\d+((-\\d+)?(,\\^?\\d+(-\\d+)?)?)*\u0027"},{"line_number":232,"context_line":"        description: \u003e"},{"line_number":233,"context_line":"          The guest CPUs, in the form of a CPU map, to allocate to the guest"},{"line_number":234,"context_line":"          NUMA node identified by ``{id}``."}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_2b434a15","line":231,"range":{"start_line":231,"start_character":8,"end_line":231,"end_character":14},"updated":"2019-06-25 22:55:57.000000000","message":"pattern","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":228,"context_line":"          The ID of the **guest** NUMA node."},{"line_number":229,"context_line":"      value:"},{"line_number":230,"context_line":"        type: string"},{"line_number":231,"context_line":"        format: \u0027\\d+((-\\d+)?(,\\^?\\d+(-\\d+)?)?)*\u0027"},{"line_number":232,"context_line":"        description: \u003e"},{"line_number":233,"context_line":"          The guest CPUs, in the form of a CPU map, to allocate to the guest"},{"line_number":234,"context_line":"          NUMA node identified by ``{id}``."}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_96ff92aa","line":231,"range":{"start_line":231,"start_character":8,"end_line":231,"end_character":14},"in_reply_to":"9fb8cfa7_2b434a15","updated":"2019-07-02 18:09:15.000000000","message":"Done","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":".. _stevedore: https://docs.openstack.org/stevedore/latest"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"Keyword validation"},{"line_number":249,"context_line":"------------------"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"We also want to be able to catch invalid extra specs themselves. It will"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_ebc3f287","line":248,"range":{"start_line":248,"start_character":0,"end_line":248,"end_character":7},"updated":"2019-06-25 22:55:57.000000000","message":"Key?","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":".. _stevedore: https://docs.openstack.org/stevedore/latest"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"Keyword validation"},{"line_number":249,"context_line":"------------------"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"We also want to be able to catch invalid extra specs themselves. It will"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_b6fc16b6","line":248,"range":{"start_line":248,"start_character":0,"end_line":248,"end_character":7},"in_reply_to":"9fb8cfa7_ebc3f287","updated":"2019-07-02 18:09:15.000000000","message":"Done","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a70699eae92e0cff0365fd7ef59b97c9eab0617c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"in `Support filtering by forbidden aggregate membership"},{"line_number":259,"context_line":"\u003chttp://specs.openstack.org/openstack/nova-specs/specs/stein/approved/negative-aggregate-membership.html\u003e`."},{"line_number":260,"context_line":"For these, we can rely on a custom namespace validator or YAML specification"},{"line_number":261,"context_line":"provided by the operator."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"Other changes"},{"line_number":264,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_cbc62e9b","line":261,"updated":"2019-06-25 22:55:57.000000000","message":"I didn\u0027t see where it was made clear that this (key validation) is out of scope for Train.","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":258,"context_line":"in `Support filtering by forbidden aggregate membership"},{"line_number":259,"context_line":"\u003chttp://specs.openstack.org/openstack/nova-specs/specs/stein/approved/negative-aggregate-membership.html\u003e`."},{"line_number":260,"context_line":"For these, we can rely on a custom namespace validator or YAML specification"},{"line_number":261,"context_line":"provided by the operator."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"Other changes"},{"line_number":264,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_362a662c","line":261,"in_reply_to":"9fb8cfa7_cbc62e9b","updated":"2019-07-02 18:09:15.000000000","message":"Done","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0be15912cb386939884d8d2d3b7972c6d5498572","unresolved":false,"context_lines":[{"line_number":283,"context_line":"REST API impact"},{"line_number":284,"context_line":"---------------"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"We will add a REST API microversion to the API behind :command:`openstack"},{"line_number":287,"context_line":"flavor set` to catch invalid flavor extra specs."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"Security impact"},{"line_number":290,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_853be399","line":287,"range":{"start_line":286,"start_character":43,"end_line":287,"end_character":10},"updated":"2019-07-02 11:49:55.000000000","message":"POST flavors/{flavor_d}/os-extra_specs","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55c9be409ea5a15aadd29542c92b230b1470a31f","unresolved":false,"context_lines":[{"line_number":283,"context_line":"REST API impact"},{"line_number":284,"context_line":"---------------"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"We will add a REST API microversion to the API behind :command:`openstack"},{"line_number":287,"context_line":"flavor set` to catch invalid flavor extra specs."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"Security impact"},{"line_number":290,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9fb8cfa7_b615f6e7","line":287,"range":{"start_line":286,"start_character":43,"end_line":287,"end_character":10},"in_reply_to":"9fb8cfa7_853be399","updated":"2019-07-02 18:09:15.000000000","message":"Thank you :)","commit_id":"e3e589d64b599c7ab3f9f4ecf304318aa0330492"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8eb2ee0567c313290b7e3c8abd097985bf1b5490","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Different solutions are needed to validate the *value* part of an extra spec"},{"line_number":59,"context_line":"compared to the *key* part. This spec aims to tackle validation of both *key*"},{"line_number":60,"context_line":"and *value*, starting with the latter and then moving onto the former."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"The following are considered out-of-scope for this change:"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"9fb8cfa7_0e6a991a","line":60,"updated":"2019-07-03 15:27:26.000000000","message":"We said at the PTG that the value part was the most important but I\u0027m okay with also checking the key.","commit_id":"74cb610123f72f47424167bddbc0be84dd0debfe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4132eb7aecadca2185e98ad85de906dfda2c8215","unresolved":false,"context_lines":[{"line_number":113,"context_line":"``BaseValidator`` and ``BaseExtraSpec``. ``BaseValidator`` will be subclassed"},{"line_number":114,"context_line":"to represent a namespace while ``BaseExtraSpec`` will be subclassed to"},{"line_number":115,"context_line":"represent an individual extra spec. ``BaseExtraSpec`` subclasses will be"},{"line_number":116,"context_line":"registered again a namespace."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"For example:"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"9fb8cfa7_3396f340","line":116,"range":{"start_line":116,"start_character":11,"end_line":116,"end_character":16},"updated":"2019-07-02 23:03:03.000000000","message":"against","commit_id":"74cb610123f72f47424167bddbc0be84dd0debfe"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8eb2ee0567c313290b7e3c8abd097985bf1b5490","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        }"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    register(HWValidator, CPUPolicy)"},{"line_number":176,"context_line":"    register(HWValdiator, NUMACPUs)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"While many of the definitions will be maintained in-tree, some namespaces will"},{"line_number":179,"context_line":"require special handling as they\u0027re owned by external services, e.g. the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"9fb8cfa7_ee4945b7","line":176,"updated":"2019-07-03 15:27:26.000000000","message":"++\nthe proposal looks good to me.","commit_id":"74cb610123f72f47424167bddbc0be84dd0debfe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4132eb7aecadca2185e98ad85de906dfda2c8215","unresolved":false,"context_lines":[{"line_number":235,"context_line":"          The ID of the **guest** NUMA node."},{"line_number":236,"context_line":"      value:"},{"line_number":237,"context_line":"        type: string"},{"line_number":238,"context_line":"        format: \u0027\\d+((-\\d+)?(,\\^?\\d+(-\\d+)?)?)*\u0027"},{"line_number":239,"context_line":"        description: \u003e"},{"line_number":240,"context_line":"          The guest CPUs, in the form of a CPU map, to allocate to the guest"},{"line_number":241,"context_line":"          NUMA node identified by ``{id}``."}],"source_content_type":"text/x-rst","patch_set":8,"id":"9fb8cfa7_b3a9837d","line":238,"range":{"start_line":238,"start_character":8,"end_line":238,"end_character":14},"updated":"2019-07-02 23:03:03.000000000","message":"pattern","commit_id":"74cb610123f72f47424167bddbc0be84dd0debfe"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8eb2ee0567c313290b7e3c8abd097985bf1b5490","unresolved":false,"context_lines":[{"line_number":262,"context_line":"For these, we can rely on a custom namespace validator or YAML specification"},{"line_number":263,"context_line":"provided by the operator. However, completing this registry both in-tree and"},{"line_number":264,"context_line":"out-of-tree is expected to be a complex endeavour and for this reason we won\u0027t"},{"line_number":265,"context_line":"enforce validation of keys as part of this spec."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Other changes"},{"line_number":268,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"9fb8cfa7_8eed2990","line":265,"updated":"2019-07-03 15:27:26.000000000","message":"++ yeah we basically said that in the PTG IIRC.","commit_id":"74cb610123f72f47424167bddbc0be84dd0debfe"}],"specs/train/approved/flavor-extra-spec-image-property-validation.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"94dc5b9c7f1f4f2f8b4ca36d7e4f00e19c47b586","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Flavor Extra Spec Validation"},{"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"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/flavor-extra-spec-validation"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Introduce a YAML-based schema describing flavor extra specs, image metadata"},{"line_number":14,"context_line":"properties, and the relationship between each."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_96060e86","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":72},"updated":"2019-03-25 23:20:05.000000000","message":"this doesn\u0027t exist yet","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Flavor Extra Spec Validation"},{"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"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/flavor-extra-spec-validation"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Introduce a YAML-based schema describing flavor extra specs, image metadata"},{"line_number":14,"context_line":"properties, and the relationship between each."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_cebce8bc","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":72},"in_reply_to":"5fc1f717_96060e86","updated":"2019-04-09 13:56:45.000000000","message":"Yup, please create the blueprint flavor-extra-spec-validation","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Flavor Extra Spec Validation"},{"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"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/flavor-extra-spec-validation"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Introduce a YAML-based schema describing flavor extra specs, image metadata"},{"line_number":14,"context_line":"properties, and the relationship between each."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_ecf8cc4a","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":72},"in_reply_to":"5fc1f717_cebce8bc","updated":"2019-04-09 14:37:22.000000000","message":"Done","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":20,"context_line":"of issues we\u0027d like to address:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"- Lack of documentation for many flavor extra specs and image metadata"},{"line_number":23,"context_line":"  properties [1]_. Yes, we have Glance image metadata definitions but..."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"- Outdated, incomplete or incorrect Glance metadata definitions."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_cee148d2","line":23,"range":{"start_line":23,"start_character":65,"end_line":23,"end_character":72},"updated":"2019-04-09 13:56:45.000000000","message":"technically, \"but what\" ? (Yeah, I know the whys)","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":20,"context_line":"of issues we\u0027d like to address:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"- Lack of documentation for many flavor extra specs and image metadata"},{"line_number":23,"context_line":"  properties [1]_. Yes, we have Glance image metadata definitions but..."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"- Outdated, incomplete or incorrect Glance metadata definitions."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_4c8560ac","line":23,"range":{"start_line":23,"start_character":65,"end_line":23,"end_character":72},"in_reply_to":"5fc1f717_cee148d2","updated":"2019-04-09 14:37:22.000000000","message":"Done","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"94dc5b9c7f1f4f2f8b4ca36d7e4f00e19c47b586","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"- Outdated, incomplete or incorrect Glance metadata definitions."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"- No warnings if there is a typo in your extra spec, resulting in different"},{"line_number":28,"context_line":"  behavior to that expected."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"- Some flavor extra specs have equivalent image metadata properties, but the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_ea03e240","line":27,"range":{"start_line":27,"start_character":26,"end_line":27,"end_character":51},"updated":"2019-03-25 23:20:05.000000000","message":"We still can\u0027t account for this (see \"exclusive\" comment below).","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"- No defined way to do things like deprecate a flavor extra spec, resulting in"},{"line_number":34,"context_line":"  continued reinvention of the wheel."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Use Cases"},{"line_number":37,"context_line":"---------"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_eed524e7","line":35,"updated":"2019-04-09 13:56:45.000000000","message":"Also API interop issues.\nThat would be nice for users to know whether for example if the extra spec is accepted by this cloud and not by another without wondering why for example the same instance is in ERROR for the first cloud and ACTIVE for the other.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"- No defined way to do things like deprecate a flavor extra spec, resulting in"},{"line_number":34,"context_line":"  continued reinvention of the wheel."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Use Cases"},{"line_number":37,"context_line":"---------"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_8c46e87a","line":35,"in_reply_to":"5fc1f717_eed524e7","updated":"2019-04-09 14:37:22.000000000","message":"This same thing would happen if you requested e.g. \u0027hw_cpu_policy\u003ddedicated\u0027 via image metadata, no? In this particular case, it could fail in some clouds (where the operator has explicitly configured \u0027hw:cpu_policy\u003dshared\u0027 via the flavor) and work in others and the user is none the wiser. Ditto for requesting a libvirt CPU flag when the operator is using Xen.\n\nHow would these kinds of issues be hidden from a user normally?","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":36,"context_line":"Use Cases"},{"line_number":37,"context_line":"---------"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"* As a deployer, I\u0027d like to know what flavor extra specs and image metadata"},{"line_number":40,"context_line":"  properties are available and why I\u0027d want to use them."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* As a deployer, I\u0027d like nova to tell me when I\u0027ve used a flavor extra spec"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_eeee84b3","line":39,"range":{"start_line":39,"start_character":7,"end_line":39,"end_character":15},"updated":"2019-04-09 13:56:45.000000000","message":"I would even say \"as a user\". Flavor extra specs are seen by end-users IIRC.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":36,"context_line":"Use Cases"},{"line_number":37,"context_line":"---------"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"* As a deployer, I\u0027d like to know what flavor extra specs and image metadata"},{"line_number":40,"context_line":"  properties are available and why I\u0027d want to use them."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* As a deployer, I\u0027d like nova to tell me when I\u0027ve used a flavor extra spec"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_ac308408","line":39,"range":{"start_line":39,"start_character":7,"end_line":39,"end_character":15},"in_reply_to":"5fc1f717_eeee84b3","updated":"2019-04-09 14:37:22.000000000","message":"I thought flavors were generally admin-only while images could be configured by the user?","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"* As a developer, I\u0027d like an easy way to deprecate flavor extra specs, which"},{"line_number":46,"context_line":"  is something that will only become more common if we do things like move"},{"line_number":47,"context_line":"  tracking of dedicated CPUs into placement."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a documentation writer, I\u0027d like to be able to cross-reference the various"},{"line_number":50,"context_line":"  flavour extra specs and image metadata properties available."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_6e305456","line":47,"updated":"2019-04-09 13:56:45.000000000","message":"++","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"94dc5b9c7f1f4f2f8b4ca36d7e4f00e19c47b586","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  tracking of dedicated CPUs into placement."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a documentation writer, I\u0027d like to be able to cross-reference the various"},{"line_number":50,"context_line":"  flavour extra specs and image metadata properties available."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Proposed change"},{"line_number":53,"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":2,"id":"5fc1f717_0af74e8d","line":50,"range":{"start_line":50,"start_character":2,"end_line":50,"end_character":9},"updated":"2019-03-25 23:20:05.000000000","message":"flavor (because it\u0027s the name of a thing, not because you\u0027re suddenly American)\n\n-throughout-","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  tracking of dedicated CPUs into placement."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a documentation writer, I\u0027d like to be able to cross-reference the various"},{"line_number":50,"context_line":"  flavour extra specs and image metadata properties available."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Proposed change"},{"line_number":53,"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":2,"id":"5fc1f717_4c21e0b3","line":50,"range":{"start_line":50,"start_character":2,"end_line":50,"end_character":9},"in_reply_to":"5fc1f717_0af74e8d","updated":"2019-04-09 14:37:22.000000000","message":"Done","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":53,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"The core of this change is a new schema definition file. That file is a"},{"line_number":56,"context_line":"YAML-formatted file, which describes the flavour extra specs and image metadata"},{"line_number":57,"context_line":"properties available. A sample of the file is given at the end of this section."},{"line_number":58,"context_line":"The YAML format is chosen as it allows us to define a specification in a"},{"line_number":59,"context_line":"declarative manner. TOML, JSON or XML are also all valid options."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_ae139cb7","line":56,"range":{"start_line":56,"start_character":41,"end_line":56,"end_character":48},"updated":"2019-04-09 13:56:45.000000000","message":"what efried said","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":53,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"The core of this change is a new schema definition file. That file is a"},{"line_number":56,"context_line":"YAML-formatted file, which describes the flavour extra specs and image metadata"},{"line_number":57,"context_line":"properties available. A sample of the file is given at the end of this section."},{"line_number":58,"context_line":"The YAML format is chosen as it allows us to define a specification in a"},{"line_number":59,"context_line":"declarative manner. TOML, JSON or XML are also all valid options."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_8c3b48e8","line":56,"range":{"start_line":56,"start_character":41,"end_line":56,"end_character":48},"in_reply_to":"5fc1f717_ae139cb7","updated":"2019-04-09 14:37:22.000000000","message":"Done","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":56,"context_line":"YAML-formatted file, which describes the flavour extra specs and image metadata"},{"line_number":57,"context_line":"properties available. A sample of the file is given at the end of this section."},{"line_number":58,"context_line":"The YAML format is chosen as it allows us to define a specification in a"},{"line_number":59,"context_line":"declarative manner. TOML, JSON or XML are also all valid options."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"This file will be used at the earliest possible stage of the instance create,"},{"line_number":62,"context_line":"resize and rebuild operations to alert the user to possible issues.  Initially,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_8e0ee089","line":59,"range":{"start_line":59,"start_character":20,"end_line":59,"end_character":65},"updated":"2019-04-09 13:56:45.000000000","message":"Just drop this. You want YAML, fine with me. Don\u0027t ask for a rathole about what descriptive language to use.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":56,"context_line":"YAML-formatted file, which describes the flavour extra specs and image metadata"},{"line_number":57,"context_line":"properties available. A sample of the file is given at the end of this section."},{"line_number":58,"context_line":"The YAML format is chosen as it allows us to define a specification in a"},{"line_number":59,"context_line":"declarative manner. TOML, JSON or XML are also all valid options."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"This file will be used at the earliest possible stage of the instance create,"},{"line_number":62,"context_line":"resize and rebuild operations to alert the user to possible issues.  Initially,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_ac196488","line":59,"range":{"start_line":59,"start_character":20,"end_line":59,"end_character":65},"in_reply_to":"5fc1f717_8e0ee089","updated":"2019-04-09 14:37:22.000000000","message":"Done","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"94dc5b9c7f1f4f2f8b4ca36d7e4f00e19c47b586","unresolved":false,"context_lines":[{"line_number":64,"context_line":"specs and image metadata properties. We may wish to introduce microversions to"},{"line_number":65,"context_line":"the APIs behind commands like :command:`openstack flavor set` and"},{"line_number":66,"context_line":":command:`openstack image set` (the latter being owned by Glance) that will"},{"line_number":67,"context_line":"reject requests to set invalid properties, but that will be a future work item."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Note that this change also builds upon"},{"line_number":70,"context_line":":doc:`../stein/flavor-extra-spec-image-property-validation`, which should cover"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_0a3c2e2d","line":67,"updated":"2019-03-25 23:20:05.000000000","message":"Also consider a \u0027validate\u0027 operation that accepts a flavor and/or image and just runs it through the validator.\n\nThis could also be a future thing, but it might be worth hacking it up (unpublished) immediately so it could be used for testing.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"94dc5b9c7f1f4f2f8b4ca36d7e4f00e19c47b586","unresolved":false,"context_lines":[{"line_number":67,"context_line":"reject requests to set invalid properties, but that will be a future work item."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Note that this change also builds upon"},{"line_number":70,"context_line":":doc:`../stein/flavor-extra-spec-image-property-validation`, which should cover"},{"line_number":71,"context_line":"(or have covered) the flavor extra spec-image metadata property in a generic"},{"line_number":72,"context_line":"manner. If that is the not the case, we may need to attack that issue also."},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_4a36b653","line":70,"range":{"start_line":70,"start_character":6,"end_line":70,"end_character":14},"updated":"2019-03-25 23:20:05.000000000","message":"../../stein/approved ?","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":67,"context_line":"reject requests to set invalid properties, but that will be a future work item."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Note that this change also builds upon"},{"line_number":70,"context_line":":doc:`../stein/flavor-extra-spec-image-property-validation`, which should cover"},{"line_number":71,"context_line":"(or have covered) the flavor extra spec-image metadata property in a generic"},{"line_number":72,"context_line":"manner. If that is the not the case, we may need to attack that issue also."},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_510f3d2d","line":70,"range":{"start_line":70,"start_character":6,"end_line":70,"end_character":14},"in_reply_to":"5fc1f717_4a36b653","updated":"2019-04-09 13:56:45.000000000","message":"/me nods","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":67,"context_line":"reject requests to set invalid properties, but that will be a future work item."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Note that this change also builds upon"},{"line_number":70,"context_line":":doc:`../stein/flavor-extra-spec-image-property-validation`, which should cover"},{"line_number":71,"context_line":"(or have covered) the flavor extra spec-image metadata property in a generic"},{"line_number":72,"context_line":"manner. If that is the not the case, we may need to attack that issue also."},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_2c0d743d","line":70,"range":{"start_line":70,"start_character":6,"end_line":70,"end_character":14},"in_reply_to":"5fc1f717_4a36b653","updated":"2019-04-09 14:37:22.000000000","message":"Done","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ee91cd83844aaae6713835d15b0f230a869dd2c1","unresolved":false,"context_lines":[{"line_number":76,"context_line":"of these tools will live within the nova tree, allowing us to remain the single"},{"line_number":77,"context_line":"source of truth for these things."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":".. code-block:: yaml"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    ---"},{"line_number":82,"context_line":"    extra_specs:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_3112b159","line":79,"range":{"start_line":79,"start_character":0,"end_line":79,"end_character":20},"updated":"2019-04-09 13:08:50.000000000","message":"do we allow the admin modify this file? then they can add some custom extra specs. or maybe I should think about is there any case admin using custom extra specs for now?","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":76,"context_line":"of these tools will live within the nova tree, allowing us to remain the single"},{"line_number":77,"context_line":"source of truth for these things."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":".. code-block:: yaml"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    ---"},{"line_number":82,"context_line":"    extra_specs:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_8709e32b","line":79,"range":{"start_line":79,"start_character":0,"end_line":79,"end_character":20},"in_reply_to":"5fc1f717_3112b159","updated":"2019-04-09 14:37:22.000000000","message":"We do, yes. To the best of my knowledge, image metadata requires object changes and should be standardized, but custom flavor extra specs are the wild west","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"94dc5b9c7f1f4f2f8b4ca36d7e4f00e19c47b586","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":".. code-block:: yaml"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    ---"},{"line_number":82,"context_line":"    extra_specs:"},{"line_number":83,"context_line":"    - name: hw:numa_nodes"},{"line_number":84,"context_line":"      description: \u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_6ac7f213","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":7},"updated":"2019-03-25 23:20:05.000000000","message":"Hate to say it, but... does this file need to be versioned?","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":".. code-block:: yaml"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    ---"},{"line_number":82,"context_line":"    extra_specs:"},{"line_number":83,"context_line":"    - name: hw:numa_nodes"},{"line_number":84,"context_line":"      description: \u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_8c2268a2","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":7},"in_reply_to":"5fc1f717_6ac7f213","updated":"2019-04-09 13:56:45.000000000","message":"I don\u0027t think so, for example policies aren\u0027t versioned.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ee91cd83844aaae6713835d15b0f230a869dd2c1","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":".. code-block:: yaml"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    ---"},{"line_number":82,"context_line":"    extra_specs:"},{"line_number":83,"context_line":"    - name: hw:numa_nodes"},{"line_number":84,"context_line":"      description: \u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_1115353d","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":7},"in_reply_to":"5fc1f717_6ac7f213","updated":"2019-04-09 13:08:50.000000000","message":"good point, but I guess we already have microversion, then we needn\u0027t another one.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":".. code-block:: yaml"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    ---"},{"line_number":82,"context_line":"    extra_specs:"},{"line_number":83,"context_line":"    - name: hw:numa_nodes"},{"line_number":84,"context_line":"      description: \u003e"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_c72ccb9a","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":7},"in_reply_to":"5fc1f717_8c2268a2","updated":"2019-04-09 14:37:22.000000000","message":"Yeah, I was on the fence. It\u0027s easy to stick in a version. I\u0027ll do that.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"94dc5b9c7f1f4f2f8b4ca36d7e4f00e19c47b586","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    ---"},{"line_number":82,"context_line":"    extra_specs:"},{"line_number":83,"context_line":"    - name: hw:numa_nodes"},{"line_number":84,"context_line":"      description: \u003e"},{"line_number":85,"context_line":"        The number of NUMA nodes the guest should have."},{"line_number":86,"context_line":"      type: integer"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_caddc6dd","line":83,"range":{"start_line":83,"start_character":12,"end_line":83,"end_character":25},"updated":"2019-03-25 23:20:05.000000000","message":"Assume anything not in the file is still allowed, i.e. we can\u0027t make this exclusive (yet). Which means we can\u0027t validate \"a typo in your extra spec\" :(","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    ---"},{"line_number":82,"context_line":"    extra_specs:"},{"line_number":83,"context_line":"    - name: hw:numa_nodes"},{"line_number":84,"context_line":"      description: \u003e"},{"line_number":85,"context_line":"        The number of NUMA nodes the guest should have."},{"line_number":86,"context_line":"      type: integer"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_4738dbd1","line":83,"range":{"start_line":83,"start_character":12,"end_line":83,"end_character":25},"in_reply_to":"5fc1f717_caddc6dd","updated":"2019-04-09 14:37:22.000000000","message":"I\u0027d like to simply warn on this initially (to give us time to stabilize) then make it a failing error in a future release. I\u0027ll document this.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"94dc5b9c7f1f4f2f8b4ca36d7e4f00e19c47b586","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        allocation and is necessary where the number of guest NUMA nodes is"},{"line_number":93,"context_line":"        is not a factor of the number of guest CPUs."},{"line_number":94,"context_line":"      parameters:"},{"line_number":95,"context_line":"      - name: id"},{"line_number":96,"context_line":"        type: integer"},{"line_number":97,"context_line":"        description: The ID of the **guest** NUMA node."},{"line_number":98,"context_line":"      value:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_8a681ef5","line":95,"updated":"2019-03-25 23:20:05.000000000","message":"Need to account for the fact that different drivers recognize different extra specs. One file per driver? A \u0027drivers\u0027 list in each section?","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        allocation and is necessary where the number of guest NUMA nodes is"},{"line_number":93,"context_line":"        is not a factor of the number of guest CPUs."},{"line_number":94,"context_line":"      parameters:"},{"line_number":95,"context_line":"      - name: id"},{"line_number":96,"context_line":"        type: integer"},{"line_number":97,"context_line":"        description: The ID of the **guest** NUMA node."},{"line_number":98,"context_line":"      value:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_ec8c4c81","line":95,"in_reply_to":"5fc1f717_8a681ef5","updated":"2019-04-09 13:56:45.000000000","message":"We should really want to avoid specific extra specs for drivers, so no to this IMHO","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        allocation and is necessary where the number of guest NUMA nodes is"},{"line_number":93,"context_line":"        is not a factor of the number of guest CPUs."},{"line_number":94,"context_line":"      parameters:"},{"line_number":95,"context_line":"      - name: id"},{"line_number":96,"context_line":"        type: integer"},{"line_number":97,"context_line":"        description: The ID of the **guest** NUMA node."},{"line_number":98,"context_line":"      value:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_c7bccbbc","line":95,"in_reply_to":"5fc1f717_ec8c4c81","updated":"2019-04-09 14:37:22.000000000","message":"\u003e We should really want to avoid specific extra specs for drivers, so\n \u003e no to this IMHO\n\nAlas, that ship has sailed. We should try correct course going forward but there are some options that a virt-driver specific and we need to record that somewhere","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ee91cd83844aaae6713835d15b0f230a869dd2c1","unresolved":false,"context_lines":[{"line_number":102,"context_line":"          The guest CPUs, in the form of a CPU map, to allocate to the guest"},{"line_number":103,"context_line":"          NUMA node identified by ``{id}``."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    - name: hw:numa_mem.{id}"},{"line_number":106,"context_line":"      description: \u003e"},{"line_number":107,"context_line":"        A mapping of **guest** memory to the **guest** NUMA node identified by"},{"line_number":108,"context_line":"        ``{id}``. This can be used to provide asymmetric CPU-NUMA"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_6e361405","line":105,"range":{"start_line":105,"start_character":4,"end_line":105,"end_character":28},"updated":"2019-04-09 13:08:50.000000000","message":"we also need to support prefix, that is for the AggregateInstanceExtraSpecsFilter","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":102,"context_line":"          The guest CPUs, in the form of a CPU map, to allocate to the guest"},{"line_number":103,"context_line":"          NUMA node identified by ``{id}``."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    - name: hw:numa_mem.{id}"},{"line_number":106,"context_line":"      description: \u003e"},{"line_number":107,"context_line":"        A mapping of **guest** memory to the **guest** NUMA node identified by"},{"line_number":108,"context_line":"        ``{id}``. This can be used to provide asymmetric CPU-NUMA"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_07973347","line":105,"range":{"start_line":105,"start_character":4,"end_line":105,"end_character":28},"in_reply_to":"5fc1f717_6e361405","updated":"2019-04-09 14:37:22.000000000","message":"Yeah, that should be possible using something like:\n\n  - name: {prefix}:my_resource:{num}\n\nright?","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ee91cd83844aaae6713835d15b0f230a869dd2c1","unresolved":false,"context_lines":[{"line_number":136,"context_line":"      requires:"},{"line_number":137,"context_line":"      - hw:numa_nodes"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    - name: hw:cpu_thread_policy"},{"line_number":140,"context_line":"      description: \u003e"},{"line_number":141,"context_line":"        The policy to apply when determining how to treat host CPU thread"},{"line_number":142,"context_line":"        siblings (HyperThreads) when using a CPU policy of ``dedicated``. If"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_0e52f035","line":139,"updated":"2019-04-09 13:08:50.000000000","message":"for the case of https://review.openstack.org/#/c/603352/7/specs/stein/approved/negative-aggregate-membership.rst@204\n\nSome valid extra spec is based on configuration.\n\nSo we need some adding some kind of way to adding schema dynamically based on configure I guess","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":136,"context_line":"      requires:"},{"line_number":137,"context_line":"      - hw:numa_nodes"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    - name: hw:cpu_thread_policy"},{"line_number":140,"context_line":"      description: \u003e"},{"line_number":141,"context_line":"        The policy to apply when determining how to treat host CPU thread"},{"line_number":142,"context_line":"        siblings (HyperThreads) when using a CPU policy of ``dedicated``. If"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_87f32309","line":139,"in_reply_to":"5fc1f717_0e52f035","updated":"2019-04-09 14:37:22.000000000","message":"Good point. Noted.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"94dc5b9c7f1f4f2f8b4ca36d7e4f00e19c47b586","unresolved":false,"context_lines":[{"line_number":154,"context_line":"      requires:"},{"line_number":155,"context_line":"      - hw:numa_nodes"},{"line_number":156,"context_line":"      - hw:cpu_policy"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Alternatives"},{"line_number":159,"context_line":"------------"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_8a9a5e11","line":157,"updated":"2019-03-25 23:20:05.000000000","message":"And an image_props section?\n\nAnd how do you intend (in the future) to define more complex checks like flavor/image interactions? Still in some kind of YAML?","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":154,"context_line":"      requires:"},{"line_number":155,"context_line":"      - hw:numa_nodes"},{"line_number":156,"context_line":"      - hw:cpu_policy"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Alternatives"},{"line_number":159,"context_line":"------------"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_47e3fb05","line":157,"in_reply_to":"5fc1f717_8a9a5e11","updated":"2019-04-09 14:37:22.000000000","message":"This wasn\u0027t up-to-date. Fixed now. I plan to do some very rudimentary checks (requirements on other specs, certain drivers, etc.) but other stuff will have to live in the code. We don\u0027t want to use YAML as a DSL.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"* We could ignore some of the above issues and try to solve others in a"},{"line_number":162,"context_line":"  piecemeal fashion. This will likely be far more tedious and time consuming as"},{"line_number":163,"context_line":"  modifications will be needed in far more places."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Data model impact"},{"line_number":166,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_4cc24087","line":163,"updated":"2019-04-09 13:56:45.000000000","message":"We could have flavor extra specs schema validation done elsewhere, for example in the Compute API.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e43980f765289b0cc0a46a55adbd6d5443d4c920","unresolved":false,"context_lines":[{"line_number":176,"context_line":"to the APIs being the :command:`openstack server create`, :command:`openstack"},{"line_number":177,"context_line":"server resize` and :command:`openstack server rebuild` commands to fail the"},{"line_number":178,"context_line":"request as early as possible if invalid flavor extra spec or image metadata"},{"line_number":179,"context_line":"properties are detected."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"Security impact"},{"line_number":182,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_8c5a68ef","line":179,"updated":"2019-04-09 13:56:45.000000000","message":"Why shouldn\u0027t we do a microversion ? Honestly, this spec is only needed if we can provide a 4xx return number for a wrong extra spec for example.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":176,"context_line":"to the APIs being the :command:`openstack server create`, :command:`openstack"},{"line_number":177,"context_line":"server resize` and :command:`openstack server rebuild` commands to fail the"},{"line_number":178,"context_line":"request as early as possible if invalid flavor extra spec or image metadata"},{"line_number":179,"context_line":"properties are detected."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"Security impact"},{"line_number":182,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_27690fbd","line":179,"in_reply_to":"5fc1f717_8c5a68ef","updated":"2019-04-09 14:37:22.000000000","message":"I\u0027m going off the assumption that flavor extra specs are an admin-only thing and therefore simply raising a warning (without failing the whole request) should be enough to catch their eye initially.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"94dc5b9c7f1f4f2f8b4ca36d7e4f00e19c47b586","unresolved":false,"context_lines":[{"line_number":208,"context_line":"----------------"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Developers will now need to add new flavor extra specs to the YAML schema file"},{"line_number":211,"context_line":"or they will see warnings about unrecognized options."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Upgrade impact"},{"line_number":214,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_4ab9d676","line":211,"updated":"2019-03-25 23:20:05.000000000","message":"orly? You\u0027re thinking we can exhaustively cover every possible extra spec and image prop?\n\nThen never mind what I said above.","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3dbf1fc5206ab260aacb0627ace9b12e96bda57","unresolved":false,"context_lines":[{"line_number":208,"context_line":"----------------"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Developers will now need to add new flavor extra specs to the YAML schema file"},{"line_number":211,"context_line":"or they will see warnings about unrecognized options."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Upgrade impact"},{"line_number":214,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_a79adfc1","line":211,"in_reply_to":"5fc1f717_4ab9d676","updated":"2019-04-09 14:37:22.000000000","message":"With the power of regexes, I hope so :fingerscrossed:","commit_id":"d2c759b6e000e6c9adf9814534275cd390d44aee"}]}
