)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d1f74e0d6a2915c2aa00c88edc13df7116be53d4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Note: This work is derived from Jay’s Rocky provider-config-file"},{"line_number":14,"context_line":"proposal [1] and Konstantinos’s device-placement-model spec [2] (which"},{"line_number":15,"context_line":"is derived from Eric’s device-passthrough spec [3]), but differs in"},{"line_number":16,"context_line":"several substantive ways."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Note: This is intended to define a *framework*. Subsequent features can"},{"line_number":19,"context_line":"define the semantics by which the framework can be used to satisfy"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"dfd5e7cf_0be7a3e6","line":16,"updated":"2019-01-10 03:32:11.000000000","message":"it is also similar to the proposal i made in \nhttps://review.openstack.org/#/c/603805/2/specs/stein/approved/device-discovery-policy-lib.rst\n\nwhether any of these proposal are implmeted/address in stein\ni think this is a topic we should schedule a dedicated session on in denver to adress in Train as there is i a usecase that i think a lot of people would like to see adressed in the future.","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"967ba5136955a2575134e1491cdb520cd2486465","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":".. note:: This work is influenced by requirements to Nova to support non"},{"line_number":18,"context_line":"          native compute resources that are managed by Resource Management"},{"line_number":19,"context_line":"\t\t  Daemon for finer grain control. PTG discussion notes available at"},{"line_number":20,"context_line":"\t\t  `Resource Management Daemon_PTG Summary`_"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. note:: We currently limit the ownership and consumption of the provider"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7faddb67_d24bd1ad","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":1},"updated":"2019-07-04 11:19:25.000000000","message":"tabs are going to impact formatting in various settings, so you might make these spaces","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"}],"specs/stein/approved/provider-config-file.rst":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"88215ad5e59261d1cbd054b9afb9587421612c54","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Problem description"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":"In order to facilitate the proper management of resource provider information"},{"line_number":24,"context_line":"in the placement API by external (to Nova) as well as internal agents, we"},{"line_number":25,"context_line":"require a way of expressing various overrides for resource provider"},{"line_number":26,"context_line":"information. While we could continue to use many existing and new configuration"},{"line_number":27,"context_line":"options for expressing this information, having a standardized, versioned"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_fcfc2f72","line":24,"range":{"start_line":24,"start_character":53,"end_line":24,"end_character":69},"updated":"2018-10-24 10:37:24.000000000","message":"nit: you could explain which Nova services could use this. For the moment, I only see the compute service (even only the virt drivers maybe)","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"63ba40f9c8ee9643e15d4f682b30839495bc1c4f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Problem description"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":"In order to facilitate the proper management of resource provider information"},{"line_number":24,"context_line":"in the placement API by external (to Nova) as well as internal agents, we"},{"line_number":25,"context_line":"require a way of expressing various overrides for resource provider"},{"line_number":26,"context_line":"information. While we could continue to use many existing and new configuration"},{"line_number":27,"context_line":"options for expressing this information, having a standardized, versioned"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_3bfe546d","line":24,"range":{"start_line":24,"start_character":53,"end_line":24,"end_character":69},"in_reply_to":"3f79a3b5_9c2e4940","updated":"2018-12-04 23:56:38.000000000","message":"Done","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Problem description"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":"In order to facilitate the proper management of resource provider information"},{"line_number":24,"context_line":"in the placement API by external (to Nova) as well as internal agents, we"},{"line_number":25,"context_line":"require a way of expressing various overrides for resource provider"},{"line_number":26,"context_line":"information. While we could continue to use many existing and new configuration"},{"line_number":27,"context_line":"options for expressing this information, having a standardized, versioned"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9c2e4940","line":24,"range":{"start_line":24,"start_character":53,"end_line":24,"end_character":69},"in_reply_to":"3f79a3b5_fcfc2f72","updated":"2018-10-24 23:03:57.000000000","message":"This was copied from Jay\u0027s spec. But I\u0027m guessing he meant \"agents\" in the generic sense. So yeah, the compute service and/or virt drivers.\n\nBut Chris is also asking for more on this, so I\u0027ll add words.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"88215ad5e59261d1cbd054b9afb9587421612c54","unresolved":false,"context_lines":[{"line_number":39,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":40,"context_line":"**An operator wishes to set allocation ratios for a set of compute nodes by"},{"line_number":41,"context_line":"setting the allocation ratios in a batch operation via an aggregate"},{"line_number":42,"context_line":"association. The operator expects that the ``nova-compute`` worker will not"},{"line_number":43,"context_line":"overwrite the allocation ratio they just set.**"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"The file defined by this spec must allow its author to:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9cf5fb86","line":42,"range":{"start_line":42,"start_character":60,"end_line":42,"end_character":66},"updated":"2018-10-24 10:37:24.000000000","message":"nit: service worker (or just \u0027service\u0027)","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"63ba40f9c8ee9643e15d4f682b30839495bc1c4f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":40,"context_line":"**An operator wishes to set allocation ratios for a set of compute nodes by"},{"line_number":41,"context_line":"setting the allocation ratios in a batch operation via an aggregate"},{"line_number":42,"context_line":"association. The operator expects that the ``nova-compute`` worker will not"},{"line_number":43,"context_line":"overwrite the allocation ratio they just set.**"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"The file defined by this spec must allow its author to:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_5b01d06b","line":42,"range":{"start_line":42,"start_character":60,"end_line":42,"end_character":66},"in_reply_to":"3f79a3b5_5c24315f","updated":"2018-12-04 23:56:38.000000000","message":"Done","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":40,"context_line":"**An operator wishes to set allocation ratios for a set of compute nodes by"},{"line_number":41,"context_line":"setting the allocation ratios in a batch operation via an aggregate"},{"line_number":42,"context_line":"association. The operator expects that the ``nova-compute`` worker will not"},{"line_number":43,"context_line":"overwrite the allocation ratio they just set.**"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"The file defined by this spec must allow its author to:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_5c24315f","line":42,"range":{"start_line":42,"start_character":60,"end_line":42,"end_character":66},"in_reply_to":"3f79a3b5_9cf5fb86","updated":"2018-10-24 23:03:57.000000000","message":"Again copied from Jay\u0027s spec. Guessing he meant \"thread\".","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"88215ad5e59261d1cbd054b9afb9587421612c54","unresolved":false,"context_lines":[{"line_number":48,"context_line":"  placement."},{"line_number":49,"context_line":"* Customize any aspect of the provider\u0027s inventory, including resource classes,"},{"line_number":50,"context_line":"  totals, min/max unit, step size, reserved amounts, and allocation ratios."},{"line_number":51,"context_line":"* Associate a provider with one or more aggregates."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Trait Customization"},{"line_number":54,"context_line":"~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_5cebe3a3","line":51,"updated":"2018-10-24 10:37:24.000000000","message":"we should also define a clear reconciliation mechanism: what if I\u0027m providing some inventory in this YAML file that some virt driver would modify ?","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":48,"context_line":"  placement."},{"line_number":49,"context_line":"* Customize any aspect of the provider\u0027s inventory, including resource classes,"},{"line_number":50,"context_line":"  totals, min/max unit, step size, reserved amounts, and allocation ratios."},{"line_number":51,"context_line":"* Associate a provider with one or more aggregates."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Trait Customization"},{"line_number":54,"context_line":"~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_fc8f3d2c","line":51,"in_reply_to":"3f79a3b5_5cebe3a3","updated":"2018-10-24 23:03:57.000000000","message":"That\u0027s exactly what this file is for: the virt driver (or other \"agent\") collates data gleaned from the system and/or possibly already existing in placement with settings in the file to produce the final picture.\n\nAnd the \"reconciliation mechanism\" - i.e. how that collation happens - is explicitly and deliberately outside the scope of this spec. In the pseudo-schema comments, I have *suggested* some ways in which consumers of the file *might* behave, where they seemed relatively obvious. But it is definitely not the job of this spec to prescribe those behaviors.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"88215ad5e59261d1cbd054b9afb9587421612c54","unresolved":false,"context_lines":[{"line_number":89,"context_line":"* Rely on Placement to select/filter allocation candidates for scheduling"},{"line_number":90,"context_line":"  purposes, thereby realizing improved scheduling performance and allowing us"},{"line_number":91,"context_line":"  to:"},{"line_number":92,"context_line":"* Deprecate and remove the PciPassthroughFilter."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Therefore the file defined by this spec must allow its author to:"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_1c100bab","line":92,"updated":"2018-10-24 10:37:24.000000000","message":"while I understand the objective, the above two points shouldn\u0027t be done by this spec implementation, right?","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"* Rely on Placement to select/filter allocation candidates for scheduling"},{"line_number":90,"context_line":"  purposes, thereby realizing improved scheduling performance and allowing us"},{"line_number":91,"context_line":"  to:"},{"line_number":92,"context_line":"* Deprecate and remove the PciPassthroughFilter."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Therefore the file defined by this spec must allow its author to:"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_bc6ea562","line":92,"in_reply_to":"3f79a3b5_1c100bab","updated":"2018-10-24 23:03:57.000000000","message":"Correct. IMO the wording makes that extremely clear.\n\n \"By building on the design outlined in this spec...\"\n     ^^^^^^^^^^^\n\n \"...we would like to be able to:\"\n        ^^^^^^^^^^^^^^^^^^^^^\n\nI can add more words reinforcing that if you think it\u0027s necessary.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"63ba40f9c8ee9643e15d4f682b30839495bc1c4f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"* Rely on Placement to select/filter allocation candidates for scheduling"},{"line_number":90,"context_line":"  purposes, thereby realizing improved scheduling performance and allowing us"},{"line_number":91,"context_line":"  to:"},{"line_number":92,"context_line":"* Deprecate and remove the PciPassthroughFilter."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Therefore the file defined by this spec must allow its author to:"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_1bfb587a","line":92,"in_reply_to":"3f79a3b5_bc6ea562","updated":"2018-12-04 23:56:38.000000000","message":"Done","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"88215ad5e59261d1cbd054b9afb9587421612c54","unresolved":false,"context_lines":[{"line_number":114,"context_line":"* Describe a child provider, including unambiguously designating its parent"},{"line_number":115,"context_line":"  provider without that parent necessarily yet existing in Placement."},{"line_number":116,"context_line":"* Designate \"ownership\" of a provider, i.e. which service has the"},{"line_number":117,"context_line":"  authority/responsibility to configure it."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Sharing Providers"},{"line_number":120,"context_line":"~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_dc7a93ed","line":117,"updated":"2018-10-24 10:37:24.000000000","message":"we should also think about upgrades and how it would then possibly call a reshape.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":114,"context_line":"* Describe a child provider, including unambiguously designating its parent"},{"line_number":115,"context_line":"  provider without that parent necessarily yet existing in Placement."},{"line_number":116,"context_line":"* Designate \"ownership\" of a provider, i.e. which service has the"},{"line_number":117,"context_line":"  authority/responsibility to configure it."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Sharing Providers"},{"line_number":120,"context_line":"~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_fcc65d4a","line":117,"in_reply_to":"3f79a3b5_dc7a93ed","updated":"2018-10-24 23:03:57.000000000","message":"Agree we should think about that. In the specs for things that consume this file. I don\u0027t mind brainstorming that stuff, but attempting to make it part of this spec is a recipe for neverending discussion and no closure.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"88215ad5e59261d1cbd054b9afb9587421612c54","unresolved":false,"context_lines":[{"line_number":143,"context_line":"* Defining (causing to be created) child/descendant providers representing NUMA"},{"line_number":144,"context_line":"  nodes/affinity and designating their nesting hierarchy, inventories (of those"},{"line_number":145,"context_line":"  resources removed from the compute node provider), traits, and aggregate"},{"line_number":146,"context_line":"  associations."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Proposed change"},{"line_number":149,"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":1,"id":"3f79a3b5_a5a77a09","line":146,"updated":"2018-10-24 10:37:24.000000000","message":"sure, we could do this but I don\u0027t want to trample https://review.openstack.org/#/c/552924/ by creating a dependency on this spec.\n\nWe said multiple times at the PTG and during reviews of https://review.openstack.org/#/c/552924/ and https://review.openstack.org/#/c/602474/ that while we think it would be super good to have a YAML file, it\u0027s not something blocking the specs.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":143,"context_line":"* Defining (causing to be created) child/descendant providers representing NUMA"},{"line_number":144,"context_line":"  nodes/affinity and designating their nesting hierarchy, inventories (of those"},{"line_number":145,"context_line":"  resources removed from the compute node provider), traits, and aggregate"},{"line_number":146,"context_line":"  associations."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Proposed change"},{"line_number":149,"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":1,"id":"3f79a3b5_1cf2399c","line":146,"in_reply_to":"3f79a3b5_a5a77a09","updated":"2018-10-24 23:03:57.000000000","message":"No such dependency intended or implied. The text in this section is very careful to hedge on that:\n\n It\u0027s still very much unknown whether or how we\u0027re going to skin this cat,\n                      ^^^^^^^^^^^^^^^^^^^^^^\n but one possibility using this file format...\n     ^^^^^^^^^^^^^^^","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"52800a549649b310cc9fae615a06f0fb204c0fa2","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    # conforming to ($Major, 0..$minor). Any breaking schema change (e.g."},{"line_number":168,"context_line":"    # removing fields, adding new required fields, imposing a stricter pattern"},{"line_number":169,"context_line":"    # on a value, etc.) must bump $Major."},{"line_number":170,"context_line":"    schema_version: $Major.$minor"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"  providers:"},{"line_number":173,"context_line":"    # List of dicts"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_cd96783e","line":170,"range":{"start_line":170,"start_character":21,"end_line":170,"end_character":33},"updated":"2018-10-23 13:34:45.000000000","message":"Does mean the operator must update this file if major version bumped when upgrade nova to newer version? how many versions nova can support?","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    # conforming to ($Major, 0..$minor). Any breaking schema change (e.g."},{"line_number":168,"context_line":"    # removing fields, adding new required fields, imposing a stricter pattern"},{"line_number":169,"context_line":"    # on a value, etc.) must bump $Major."},{"line_number":170,"context_line":"    schema_version: $Major.$minor"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"  providers:"},{"line_number":173,"context_line":"    # List of dicts"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_dc6a8116","line":170,"range":{"start_line":170,"start_character":21,"end_line":170,"end_character":33},"in_reply_to":"3f79a3b5_65ade2e5","updated":"2018-10-24 23:03:57.000000000","message":"As with microversions, we could support all of them forever. Or we could deprecate old versions and provide some kind of upgrade checker or migrator. I can add words to that effect. But I definitely don\u0027t think it\u0027s necessary to get bogged down in the details. Especially before we have any sense of what kinds of changes would warrant a $Major bump.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"88215ad5e59261d1cbd054b9afb9587421612c54","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    # conforming to ($Major, 0..$minor). Any breaking schema change (e.g."},{"line_number":168,"context_line":"    # removing fields, adding new required fields, imposing a stricter pattern"},{"line_number":169,"context_line":"    # on a value, etc.) must bump $Major."},{"line_number":170,"context_line":"    schema_version: $Major.$minor"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"  providers:"},{"line_number":173,"context_line":"    # List of dicts"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_65ade2e5","line":170,"range":{"start_line":170,"start_character":21,"end_line":170,"end_character":33},"in_reply_to":"3f79a3b5_cd96783e","updated":"2018-10-24 10:37:24.000000000","message":"Yeah that\u0027s my concern too","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"63ba40f9c8ee9643e15d4f682b30839495bc1c4f","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    # conforming to ($Major, 0..$minor). Any breaking schema change (e.g."},{"line_number":168,"context_line":"    # removing fields, adding new required fields, imposing a stricter pattern"},{"line_number":169,"context_line":"    # on a value, etc.) must bump $Major."},{"line_number":170,"context_line":"    schema_version: $Major.$minor"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"  providers:"},{"line_number":173,"context_line":"    # List of dicts"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_db4880b6","line":170,"range":{"start_line":170,"start_character":21,"end_line":170,"end_character":33},"in_reply_to":"3f79a3b5_dc6a8116","updated":"2018-12-04 23:56:38.000000000","message":"Done","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"52800a549649b310cc9fae615a06f0fb204c0fa2","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":185,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":186,"context_line":"        # configuration should probably generate an error."},{"line_number":187,"context_line":"        pci_address: $pci_dbsf_pattern"},{"line_number":188,"context_line":"        drc_index: $hex8_pattern"},{"line_number":189,"context_line":"        drc_name: $string"},{"line_number":190,"context_line":"        sysfs_path: $string"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6dcba44a","line":187,"range":{"start_line":187,"start_character":8,"end_line":187,"end_character":38},"updated":"2018-10-23 13:34:45.000000000","message":"how can we map the resource provider with pci address?","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"63ba40f9c8ee9643e15d4f682b30839495bc1c4f","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":185,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":186,"context_line":"        # configuration should probably generate an error."},{"line_number":187,"context_line":"        pci_address: $pci_dbsf_pattern"},{"line_number":188,"context_line":"        drc_index: $hex8_pattern"},{"line_number":189,"context_line":"        drc_name: $string"},{"line_number":190,"context_line":"        sysfs_path: $string"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_3623c914","line":187,"range":{"start_line":187,"start_character":8,"end_line":187,"end_character":38},"in_reply_to":"3f79a3b5_17d53247","updated":"2018-12-04 23:56:38.000000000","message":"Added this in an `Example` section below this one.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":185,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":186,"context_line":"        # configuration should probably generate an error."},{"line_number":187,"context_line":"        pci_address: $pci_dbsf_pattern"},{"line_number":188,"context_line":"        drc_index: $hex8_pattern"},{"line_number":189,"context_line":"        drc_name: $string"},{"line_number":190,"context_line":"        sysfs_path: $string"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_17d53247","line":187,"range":{"start_line":187,"start_character":8,"end_line":187,"end_character":38},"in_reply_to":"3f79a3b5_6dcba44a","updated":"2018-10-24 23:03:57.000000000","message":"This will be a good spot for an *example* explanation of how a consumer of this file format *might* be implemented. (Emphasis to reinforce the fact that we\u0027re not speccing such an implementation here.)\n\nThe example of pre-cyborg/nova-only device passthrough would go something like this:\n\nThe virt driver, which is by definition platform/hypervisor-specific, is responsible for:\n\n- Discovering devices on the system\n- Constructing resource providers corresponding to those devices\n\nThe author of the providers.yaml file is responsible for knowing what platform/hypervisor it\u0027s going to be deployed on, reading the docs that describe how to use the file on that platform/hypervisor, and thereby understanding which of the addressing mechanisms she should use and how it\u0027s formatted.\n\nFor example, the doc for libvirt might say:\n\n \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nRun lspci -D. The first field is the PCI address in d:b:s.f format. To allow passthrough of a particular device, e.g. one with address \"0000:0d:00.3\", add a stanza in your providers.yaml file that looks like:\n\n ...\n providers:\n     - identification:\n         pci_address: 0000:0d:00.3\n       ownership:\n         service: nova\n       passthrough:\n         allow: true\n ...\n\n \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe virt driver, in update_provider_tree, having discovered devices on the system, and knowing their PCI addresses, parses the providers.yaml file, gathers a list of `pci_address` values from stanzas with `ownership.service\u003d\u003dnova` and `passthrough.allow\u003d\u003dtrue`, filters the list of discovered devices accordingly, and creates resource providers for whatever\u0027s left.\n\nWhatever spec actually designs the above process should also prescribe what those resource providers should look like: the convention for naming them, where they will be in the tree hierarchy, what traits will be automatically generated on them by default, what their inventories will look like by default (based on device type), etc. And the salient subset of that information will *also* be included in the same doc so that the author of providers.yaml will know how to construct the remainder of their stanza if they want to e.g. switch off one of those automatic traits:\n\n ...\n     customization:\n         traits:\n             remove:\n                 # This trait is normally generated by libvirt, but we don\u0027t\n                 # want it in this case because blah blah blah.\n                 - CUSTOM_FOO\n ...","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"52800a549649b310cc9fae615a06f0fb204c0fa2","unresolved":false,"context_lines":[{"line_number":238,"context_line":"          # passed through to instances. This could be accomplished by removing"},{"line_number":239,"context_line":"          # all inventory, but this way you don\u0027t have to know what resource"},{"line_number":240,"context_line":"          # class(es) are provided."},{"line_number":241,"context_line":"          # The owning service may decide to enforce ``allow: false`` by"},{"line_number":242,"context_line":"          # removing the providers entirely, removing their inventories,"},{"line_number":243,"context_line":"          # setting ``reserved \u003d total``, etc."},{"line_number":244,"context_line":"          allow: $bool"},{"line_number":245,"context_line":"      customization:"},{"line_number":246,"context_line":"          # This section allows the admin to edit properties of the identified"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_8d6c0006","line":243,"range":{"start_line":241,"start_character":10,"end_line":243,"end_character":46},"updated":"2018-10-23 13:34:45.000000000","message":"the operator also can use this YAML file to do the same thing, then we can keep this YAML file as a generic resource provider tree editor, keep it isn\u0027t related to any specific type device.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":238,"context_line":"          # passed through to instances. This could be accomplished by removing"},{"line_number":239,"context_line":"          # all inventory, but this way you don\u0027t have to know what resource"},{"line_number":240,"context_line":"          # class(es) are provided."},{"line_number":241,"context_line":"          # The owning service may decide to enforce ``allow: false`` by"},{"line_number":242,"context_line":"          # removing the providers entirely, removing their inventories,"},{"line_number":243,"context_line":"          # setting ``reserved \u003d total``, etc."},{"line_number":244,"context_line":"          allow: $bool"},{"line_number":245,"context_line":"      customization:"},{"line_number":246,"context_line":"          # This section allows the admin to edit properties of the identified"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_1743f212","line":243,"range":{"start_line":241,"start_character":10,"end_line":243,"end_character":46},"in_reply_to":"3f79a3b5_8d6c0006","updated":"2018-10-24 23:03:57.000000000","message":"This file doesn\u0027t dictate a mechanism for *removing* a provider from placement. It only provides a way to say `passthrough.allow\u003dfalse`. What this sentence is saying is that it\u0027ll be up to the consuming implementation to decide how that actually manifests in placement, which may or may not comprise removing the provider.\n\nBut maybe you\u0027re saying we should turn this into a generic mechanism, not device-specific, for dictating that a provider should be unavailable (possibly absent, possibly without inventory, possibly with reserved\u003d\u003dtotal, whatever).\n\nI did consider that, but thought it would be best left for a future version of the file, if and when we decide we need it. The reasoning is:\n\n- We don\u0027t have a use case for blacklisting providers *other* than devices.\n- We want providers *other* than devices to show up by default; but (for compatibility with the behavior of [pci]passthrough_whitelist as well as the VGPU work in progress) we want devices to *not* show up by default; they must be explicitly whitelisted.\n\nThus, devices are getting special treatment anyway. I tried to come up with some generic way to say \"this provider should be visible or not\" while at the same time making it understandable that \"devices are not visible by default, but everything else is\". I felt as though this way made the latter most explicit without compromising the former, since we don\u0027t need \"not visible\" for anything other than devices.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"52800a549649b310cc9fae615a06f0fb204c0fa2","unresolved":false,"context_lines":[{"line_number":265,"context_line":"          inventories:"},{"line_number":266,"context_line":"              add:"},{"line_number":267,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":268,"context_line":"                  # If inventory exists, it is replaced (because this needs to"},{"line_number":269,"context_line":"                  # be repeatable)."},{"line_number":270,"context_line":"                  # This could cause problems for e.g. the \"reserved \u003d total\""},{"line_number":271,"context_line":"                  # trick."},{"line_number":272,"context_line":"                  $resource_class:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_8d1ac07d","line":269,"range":{"start_line":268,"start_character":20,"end_line":269,"end_character":35},"updated":"2018-10-23 13:34:45.000000000","message":"it means I can move an inventory from the parent RP to a child RP?","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":265,"context_line":"          inventories:"},{"line_number":266,"context_line":"              add:"},{"line_number":267,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":268,"context_line":"                  # If inventory exists, it is replaced (because this needs to"},{"line_number":269,"context_line":"                  # be repeatable)."},{"line_number":270,"context_line":"                  # This could cause problems for e.g. the \"reserved \u003d total\""},{"line_number":271,"context_line":"                  # trick."},{"line_number":272,"context_line":"                  $resource_class:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_57d96a52","line":269,"range":{"start_line":268,"start_character":20,"end_line":269,"end_character":35},"in_reply_to":"3f79a3b5_8d1ac07d","updated":"2018-10-24 23:03:57.000000000","message":"Yeah, that\u0027s one use case. Once again, it\u0027ll be up to other specs to describe whether/how that\u0027s going to be supported for specific kinds of providers.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"36f5cd2cf410c89b70744ae0eead84e5a4137f8c","unresolved":false,"context_lines":[{"line_number":359,"context_line":"file per provider, rather than a single file for all providers. A single file"},{"line_number":360,"context_line":"is preferred because:"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"* We can use a single config option to define the path to the file"},{"line_number":363,"context_line":"* We don\u0027t have to worry about file naming/discovery"},{"line_number":364,"context_line":"* It\u0027s easier to manage all providers in one place, particularly if deployment"},{"line_number":365,"context_line":"  tools wish to use a common file across a cloud."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_99751789","line":362,"updated":"2018-10-23 20:00:29.000000000","message":"To be a pedant, but that single config option could also define a directory or a glob. I\u0027m not sure if I have a preference","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"63ba40f9c8ee9643e15d4f682b30839495bc1c4f","unresolved":false,"context_lines":[{"line_number":359,"context_line":"file per provider, rather than a single file for all providers. A single file"},{"line_number":360,"context_line":"is preferred because:"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"* We can use a single config option to define the path to the file"},{"line_number":363,"context_line":"* We don\u0027t have to worry about file naming/discovery"},{"line_number":364,"context_line":"* It\u0027s easier to manage all providers in one place, particularly if deployment"},{"line_number":365,"context_line":"  tools wish to use a common file across a cloud."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_560f6589","line":362,"in_reply_to":"3f79a3b5_99751789","updated":"2018-12-04 23:56:38.000000000","message":"Any of those things are more complicated than a path to a file. I added words.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"36f5cd2cf410c89b70744ae0eead84e5a4137f8c","unresolved":false,"context_lines":[{"line_number":362,"context_line":"* We can use a single config option to define the path to the file"},{"line_number":363,"context_line":"* We don\u0027t have to worry about file naming/discovery"},{"line_number":364,"context_line":"* It\u0027s easier to manage all providers in one place, particularly if deployment"},{"line_number":365,"context_line":"  tools wish to use a common file across a cloud."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"Data model impact"},{"line_number":368,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_f960cba6","line":365,"updated":"2018-10-23 20:00:29.000000000","message":"This stimulates a question that was lurking throughout this: Who/what is reading this file. In my head I\u0027ve been thinking it has to be in all the places where something is going to be writing to the placement api because it is operating as what amounts to a filter between what it thinks it wants to write and what it is allowed/supposed to write.\n\nWhich makes it all start to seem a bit weird as much of the point of having things like the resource tracker talk to the placement API was so that this kind of thing could be automated. If we\u0027re making it \"normal\" to have to filter those things then we\u0027ve gone a bit astray.\n\nSo: this needs to be an edge (pun intended?) case.\n\nWhich is not to dispute the need for the file and format, I agree we do, but I think we need to document that it is special/rare.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"63ba40f9c8ee9643e15d4f682b30839495bc1c4f","unresolved":false,"context_lines":[{"line_number":362,"context_line":"* We can use a single config option to define the path to the file"},{"line_number":363,"context_line":"* We don\u0027t have to worry about file naming/discovery"},{"line_number":364,"context_line":"* It\u0027s easier to manage all providers in one place, particularly if deployment"},{"line_number":365,"context_line":"  tools wish to use a common file across a cloud."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"Data model impact"},{"line_number":368,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_36e18932","line":365,"in_reply_to":"3f79a3b5_57fc0a70","updated":"2018-12-04 23:56:38.000000000","message":"I added a sentence under `Proposed change` analogizing this with oslo.config.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":362,"context_line":"* We can use a single config option to define the path to the file"},{"line_number":363,"context_line":"* We don\u0027t have to worry about file naming/discovery"},{"line_number":364,"context_line":"* It\u0027s easier to manage all providers in one place, particularly if deployment"},{"line_number":365,"context_line":"  tools wish to use a common file across a cloud."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"Data model impact"},{"line_number":368,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_57fc0a70","line":365,"in_reply_to":"3f79a3b5_f960cba6","updated":"2018-10-24 23:03:57.000000000","message":"\u003e Who/what is reading this file. In my head I\u0027ve been thinking it has\n \u003e to be in all the places where something is going to be writing to\n \u003e the placement api because it is operating as what amounts to a\n \u003e filter between what it thinks it wants to write and what it is\n \u003e allowed/supposed to write.\n\nExactly this. (The way the compute service is set up, the composition is done by the virt driver, while the actual \"writing to the placement api\" is done by the resource tracker, but it amounts to the same thing.)\n\n \u003e Which makes it all start to seem a bit weird as much of the point\n \u003e of having things like the resource tracker talk to the placement\n \u003e API was so that this kind of thing could be automated.\n\nWell, yeah, automated as much as possible. I say on L396 that services should strive to behave sanely if the file is absent.\n\n \u003e If we\u0027re\n \u003e making it \"normal\" to have to filter those things then we\u0027ve gone a\n \u003e bit astray.\n\nNot sure I agree with this statement. I\u0027m not saying we should go crazy supporting every possible permutation of this file for every possible provider. It\u0027s really no different than having oslo.config available to us, whereby we can define config options that feed into how things get manifested in placement. We are cautious about adding new config options: we do it when we see a need for it.\n\nI guess the difference is in how directly this file maps to the placement database. That proximity could give one the impression that we\u0027re going to implement some kind of generic placement editor engine that consumes this file and just lets the file\u0027s author rewrite placement willy nilly. That is pretty darn unlikely to happen... but I don\u0027t feel like it\u0027s the place of this spec to dictate that we shouldn\u0027t do that.\n\n \u003e So: this needs to be an edge (pun intended?) case.\n \u003e \n \u003e Which is not to dispute the need for the file and format, I agree\n \u003e we do, but I think we need to document that it is special/rare.\n\nNot sure it\u0027s necessary, as the specs for features that use this file will be given the same scrutiny as any other. But I can add words.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"88215ad5e59261d1cbd054b9afb9587421612c54","unresolved":false,"context_lines":[{"line_number":402,"context_line":"Upgrade impact"},{"line_number":403,"context_line":"--------------"},{"line_number":404,"context_line":"None. (Consumers of this file format will need to address this - e.g. decide"},{"line_number":405,"context_line":"how to deprecate existing config options which are being replaced.)"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"Implementation"},{"line_number":408,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_c575d687","line":405,"updated":"2018-10-24 10:37:24.000000000","message":"no, it would possibly need a reshape","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b83499b3fb9559f5758559d989f302f009b484eb","unresolved":false,"context_lines":[{"line_number":402,"context_line":"Upgrade impact"},{"line_number":403,"context_line":"--------------"},{"line_number":404,"context_line":"None. (Consumers of this file format will need to address this - e.g. decide"},{"line_number":405,"context_line":"how to deprecate existing config options which are being replaced.)"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"Implementation"},{"line_number":408,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_7726e624","line":405,"in_reply_to":"3f79a3b5_c575d687","updated":"2018-10-24 23:03:57.000000000","message":"Implementing the work outlined in this spec (schema, parser, validation, sample file) will not require a reshape. Features *using* the file *may* require a reshape; a thing which would need to be discussed in the specs for those features. Not here.","commit_id":"23f4d90e34f81a997173a2cb7f08a4e220a3ca67"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c471be8170b0e5c2de388459d515bbc1b7f713a7","unresolved":false,"context_lines":[{"line_number":28,"context_line":"in the placement API by agents both within Nova (such as virt drivers and the"},{"line_number":29,"context_line":"PCI passthrough subsystem) and without (including operators as well as other"},{"line_number":30,"context_line":"services such as Neutron and Cyborg), we require a way of expressing various"},{"line_number":31,"context_line":"overrides for resource provider information. While we could continue to use"},{"line_number":32,"context_line":"many existing and new configuration options for expressing this information,"},{"line_number":33,"context_line":"having a standardized, versioned provider descriptor file format allows us to"},{"line_number":34,"context_line":"decouple the management of provider information from the configuration of the"},{"line_number":35,"context_line":"service or daemon that manages said resource providers."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Use Cases"},{"line_number":38,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_3f3f00b4","line":35,"range":{"start_line":31,"start_character":45,"end_line":35,"end_character":55},"updated":"2019-01-10 02:16:28.000000000","message":"amen.","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"be9d0303b22cdf4f4462a1770cc2dfa5239dc973","unresolved":false,"context_lines":[{"line_number":28,"context_line":"in the placement API by agents both within Nova (such as virt drivers and the"},{"line_number":29,"context_line":"PCI passthrough subsystem) and without (including operators as well as other"},{"line_number":30,"context_line":"services such as Neutron and Cyborg), we require a way of expressing various"},{"line_number":31,"context_line":"overrides for resource provider information. While we could continue to use"},{"line_number":32,"context_line":"many existing and new configuration options for expressing this information,"},{"line_number":33,"context_line":"having a standardized, versioned provider descriptor file format allows us to"},{"line_number":34,"context_line":"decouple the management of provider information from the configuration of the"},{"line_number":35,"context_line":"service or daemon that manages said resource providers."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Use Cases"},{"line_number":38,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bfdaf3ff_1bd7234e","line":35,"range":{"start_line":31,"start_character":45,"end_line":35,"end_character":55},"in_reply_to":"3f79a3b5_3f3f00b4","updated":"2019-01-12 21:46:53.000000000","message":"I think you wrote this sentence :)\n\n[Later] Yeah: https://review.openstack.org/#/c/550244/2/specs/rocky/approved/provider-config-file.rst@23","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9e1c94fce7f292889258856ab1ed7eac40451c72","unresolved":false,"context_lines":[{"line_number":28,"context_line":"in the placement API by agents both within Nova (such as virt drivers and the"},{"line_number":29,"context_line":"PCI passthrough subsystem) and without (including operators as well as other"},{"line_number":30,"context_line":"services such as Neutron and Cyborg), we require a way of expressing various"},{"line_number":31,"context_line":"overrides for resource provider information. While we could continue to use"},{"line_number":32,"context_line":"many existing and new configuration options for expressing this information,"},{"line_number":33,"context_line":"having a standardized, versioned provider descriptor file format allows us to"},{"line_number":34,"context_line":"decouple the management of provider information from the configuration of the"},{"line_number":35,"context_line":"service or daemon that manages said resource providers."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Use Cases"},{"line_number":38,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bfdaf3ff_5421e3fa","line":35,"range":{"start_line":31,"start_character":45,"end_line":35,"end_character":55},"in_reply_to":"bfdaf3ff_1bd7234e","updated":"2019-01-14 19:32:24.000000000","message":"LOL. I hate to amen my own words. that\u0027s just embarrassing.","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"04dfab57c6229554bcc4af2be3fb7b3e3e79ab93","unresolved":false,"context_lines":[{"line_number":28,"context_line":"in the placement API by agents both within Nova (such as virt drivers and the"},{"line_number":29,"context_line":"PCI passthrough subsystem) and without (including operators as well as other"},{"line_number":30,"context_line":"services such as Neutron and Cyborg), we require a way of expressing various"},{"line_number":31,"context_line":"overrides for resource provider information. While we could continue to use"},{"line_number":32,"context_line":"many existing and new configuration options for expressing this information,"},{"line_number":33,"context_line":"having a standardized, versioned provider descriptor file format allows us to"},{"line_number":34,"context_line":"decouple the management of provider information from the configuration of the"},{"line_number":35,"context_line":"service or daemon that manages said resource providers."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Use Cases"},{"line_number":38,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fdfeff1_9e121862","line":35,"range":{"start_line":31,"start_character":45,"end_line":35,"end_character":55},"in_reply_to":"bfdaf3ff_5421e3fa","updated":"2019-07-10 15:02:35.000000000","message":"at least it shows you are consistent in your views :)","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c471be8170b0e5c2de388459d515bbc1b7f713a7","unresolved":false,"context_lines":[{"line_number":90,"context_line":"(at some point in the future, and by way of a separate blueprint):"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"* Deprecate and remove the existing ``[pci]passthrough_whitelist`` mechanism."},{"line_number":93,"context_line":"  (However, we do not necessarily intend to provide a 1:1 mapping from that"},{"line_number":94,"context_line":"  mechanism.)"},{"line_number":95,"context_line":"* Rely on Placement to select/filter allocation candidates for scheduling"},{"line_number":96,"context_line":"  purposes, thereby realizing improved scheduling performance and allowing us"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_bf3550a8","line":93,"range":{"start_line":93,"start_character":52,"end_line":93,"end_character":70},"updated":"2019-01-10 02:16:28.000000000","message":"a/a 1:1 mapping from/exact functional parity with/","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c471be8170b0e5c2de388459d515bbc1b7f713a7","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"* Identify devices unambiguously such that consuming services"},{"line_number":103,"context_line":"  (``nova-compute``, including virt drivers; ``cyborg``; etc.) can correlate"},{"line_number":104,"context_line":"  them to what\u0027s discovered by the hypervisor."},{"line_number":105,"context_line":"* Dictate whether a device is exposed - i.e. available for passthrough or not."},{"line_number":106,"context_line":"* Configure/customize the inventory of a device: its resource class(es),"},{"line_number":107,"context_line":"  reserved amounts, allocation ratios, etc."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_3fbe20cf","line":104,"updated":"2019-01-10 02:16:28.000000000","message":"++","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c471be8170b0e5c2de388459d515bbc1b7f713a7","unresolved":false,"context_lines":[{"line_number":102,"context_line":"* Identify devices unambiguously such that consuming services"},{"line_number":103,"context_line":"  (``nova-compute``, including virt drivers; ``cyborg``; etc.) can correlate"},{"line_number":104,"context_line":"  them to what\u0027s discovered by the hypervisor."},{"line_number":105,"context_line":"* Dictate whether a device is exposed - i.e. available for passthrough or not."},{"line_number":106,"context_line":"* Configure/customize the inventory of a device: its resource class(es),"},{"line_number":107,"context_line":"  reserved amounts, allocation ratios, etc."},{"line_number":108,"context_line":"* Configure/customize the traits of a device."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_5f90bc4c","line":105,"updated":"2019-01-10 02:16:28.000000000","message":"Why would the provider config file list devices that are *not* either made available as a passthrough device or are providers with inventory of resources like SRIOV_NET_VF etc?\n\nIn other words, why not just say that the very existence in the provider config file of a device identifier means that device is allowed to be used by guests...","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d1f74e0d6a2915c2aa00c88edc13df7116be53d4","unresolved":false,"context_lines":[{"line_number":102,"context_line":"* Identify devices unambiguously such that consuming services"},{"line_number":103,"context_line":"  (``nova-compute``, including virt drivers; ``cyborg``; etc.) can correlate"},{"line_number":104,"context_line":"  them to what\u0027s discovered by the hypervisor."},{"line_number":105,"context_line":"* Dictate whether a device is exposed - i.e. available for passthrough or not."},{"line_number":106,"context_line":"* Configure/customize the inventory of a device: its resource class(es),"},{"line_number":107,"context_line":"  reserved amounts, allocation ratios, etc."},{"line_number":108,"context_line":"* Configure/customize the traits of a device."}],"source_content_type":"text/x-rst","patch_set":2,"id":"dfd5e7cf_abebf7d9","line":105,"in_reply_to":"3f79a3b5_5f90bc4c","updated":"2019-01-10 03:32:11.000000000","message":"im not entirly sure what eric\u0027s orginal intention was but in a different context unrelated to passthroguh devices you may want to use a generalised concept oncept of consumable or allocateable.\n\nfor example if i have 2 hugepages size on a host i might want to declare that the 1G size is not allocateable to teants e.g. because it reserved for a vswithc on the host but the 2mb hugepages are.\n\nif we declared 2 boot resouces in the config file and mark one as consumable and the other as not then that would be a way to express that intent\n\nthe other would be to set the reserved value equal to total for the 1G page size but perhaps having a consumable attribute may actully be cleaner in some cases.\n\nyou also could take the approch you suggested but that would require all resouce we wanted to contol via this config file to be expcitly even if by default we would want them to be avilable to guest.","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9e1c94fce7f292889258856ab1ed7eac40451c72","unresolved":false,"context_lines":[{"line_number":102,"context_line":"* Identify devices unambiguously such that consuming services"},{"line_number":103,"context_line":"  (``nova-compute``, including virt drivers; ``cyborg``; etc.) can correlate"},{"line_number":104,"context_line":"  them to what\u0027s discovered by the hypervisor."},{"line_number":105,"context_line":"* Dictate whether a device is exposed - i.e. available for passthrough or not."},{"line_number":106,"context_line":"* Configure/customize the inventory of a device: its resource class(es),"},{"line_number":107,"context_line":"  reserved amounts, allocation ratios, etc."},{"line_number":108,"context_line":"* Configure/customize the traits of a device."}],"source_content_type":"text/x-rst","patch_set":2,"id":"bfdaf3ff_f4d577ba","line":105,"in_reply_to":"bfdaf3ff_fbd1ff58","updated":"2019-01-14 19:32:24.000000000","message":"which would be blacklisting versus (or in addition to) whitelisting I guess.\n\nAnd I suppose my point is that instead of going through all that hassle, I\u0027d just leave it up to the deployer to explicitly state all of the resource providers by listing them in the provider configuration YAML file (including the compute node itself).","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"be9d0303b22cdf4f4462a1770cc2dfa5239dc973","unresolved":false,"context_lines":[{"line_number":102,"context_line":"* Identify devices unambiguously such that consuming services"},{"line_number":103,"context_line":"  (``nova-compute``, including virt drivers; ``cyborg``; etc.) can correlate"},{"line_number":104,"context_line":"  them to what\u0027s discovered by the hypervisor."},{"line_number":105,"context_line":"* Dictate whether a device is exposed - i.e. available for passthrough or not."},{"line_number":106,"context_line":"* Configure/customize the inventory of a device: its resource class(es),"},{"line_number":107,"context_line":"  reserved amounts, allocation ratios, etc."},{"line_number":108,"context_line":"* Configure/customize the traits of a device."}],"source_content_type":"text/x-rst","patch_set":2,"id":"bfdaf3ff_fbd1ff58","line":105,"in_reply_to":"dfd5e7cf_abebf7d9","updated":"2019-01-12 21:46:53.000000000","message":"Yeah, I struggled with this and went back and forth on it. What it comes down to is this: some providers/resources should be exposed by default (e.g. compute nodes, eventually their treed components such as NUMA nodes or storage fabrics...); whereas things like devices should be forbidden by default, needing to be explicitly enabled for passthrough.  It sucks, but we\u0027re probably going to have to document that dichotomy somehow. So for example, your file might need one paragraph allowing passthrough of a device, and another that makes a particular storage provider not show up on this node.\n\nThe other case to consider in the future is if I want to say, \"expose all devices of this type, *except* for this one\". Then instead of having N-1 \"allow\" clauses in the file, I could have two: one saying \"allow all of this type\" and the other saying \"don\u0027t expose this one device\".","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c471be8170b0e5c2de388459d515bbc1b7f713a7","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"NUMA"},{"line_number":139,"context_line":"~~~~"},{"line_number":140,"context_line":"**An admin wishes to be able to define a NUMA topology and schedule instances"},{"line_number":141,"context_line":"accordingly.**"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"NUMA gets a special section all of its own. It\u0027s still very much unknown"},{"line_number":144,"context_line":"whether or how we\u0027re going to skin this cat, but one possibility using this"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_f093f5ae","line":141,"range":{"start_line":140,"start_character":2,"end_line":141,"end_character":12},"updated":"2019-01-10 02:16:28.000000000","message":"Not sure this is exactly what you meant to say. Perhaps you meant to say \"An admin wishes to indicate that the host NUMA cells should be taken into account for workloads scheduled to that host\".\n\nAlternately, you might be confusing CPU pinning with NUMA? Maybe you meant to say something to the effect of \"The admin wishes to indicate which host logical processors should be used for dedicated guest CPU resources and which should be used for shared guest CPU resources\"?","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"be9d0303b22cdf4f4462a1770cc2dfa5239dc973","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"NUMA"},{"line_number":139,"context_line":"~~~~"},{"line_number":140,"context_line":"**An admin wishes to be able to define a NUMA topology and schedule instances"},{"line_number":141,"context_line":"accordingly.**"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"NUMA gets a special section all of its own. It\u0027s still very much unknown"},{"line_number":144,"context_line":"whether or how we\u0027re going to skin this cat, but one possibility using this"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bfdaf3ff_5b512bd8","line":141,"range":{"start_line":140,"start_character":2,"end_line":141,"end_character":12},"in_reply_to":"3f79a3b5_f093f5ae","updated":"2019-01-12 21:46:53.000000000","message":"Yeah, \"define\" is a poor word. Perhaps s/define a/describe the system\u0027s/. For example, whenever we figure out how we\u0027re going to do it, perhaps this file is used to set the traits that associate affinitized providers with each other.\n\nSo yes, pinning use cases, but the long-term goal (at least to my understanding) is to be able to say, \"make sure resources A,B,C for this VM have the same NUMA affinity,\" without having to say, \"get the resources for A,B,C from NUMA node X.\"\n\nOpen to suggestions for a better way to word this sentence, BUT I definitely don\u0027t want to try to solve the NUMA problem here. Willing to exchange vagueness for terseness.","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d1f74e0d6a2915c2aa00c88edc13df7116be53d4","unresolved":false,"context_lines":[{"line_number":150,"context_line":"  nodes/affinity and designating their nesting hierarchy, inventories (of those"},{"line_number":151,"context_line":"  resources removed from the compute node provider), traits, and aggregate"},{"line_number":152,"context_line":"  associations."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Proposed change"},{"line_number":155,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dfd5e7cf_2b038775","line":153,"updated":"2019-01-10 03:32:11.000000000","message":"bandwith based schduling should idealy also be move to this config file in the future.\n\nin a similar vane ideally we would be able to cover the usecase descibed in jays spec for modeling cpus in placment as well as the initall allcoation work that is ongoing this cycle. e.g. we shoudl be able to replace the vcpu_pin_set and cpu_shared_set options with modeling of shared and pinnind cpus in this config but we also should be able to replace the cpu/ram/disk_allocation ratios and inital allcoation ratios at some point in the futrue.\n\nim not saying we have to sovle any of these now but if we intoduce this framework i would like it to consider those usecases to be within the scope of topics it should be able to address in the future.","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"be9d0303b22cdf4f4462a1770cc2dfa5239dc973","unresolved":false,"context_lines":[{"line_number":150,"context_line":"  nodes/affinity and designating their nesting hierarchy, inventories (of those"},{"line_number":151,"context_line":"  resources removed from the compute node provider), traits, and aggregate"},{"line_number":152,"context_line":"  associations."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Proposed change"},{"line_number":155,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bfdaf3ff_fb5fbfe2","line":153,"in_reply_to":"dfd5e7cf_2b038775","updated":"2019-01-12 21:46:53.000000000","message":"Agreed. I can add (short!) sections calling out those use cases for potential future consolidation here.","commit_id":"e074c84cd9c7e93a1b8cdd8e9160a0345f2513b2"}],"specs/train/approved/provider-config-file.rst":[{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"cae34baa330f4e06f8026e895aa2ed647d00d93f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"services such as Neutron and Cyborg), we require a way of expressing various"},{"line_number":31,"context_line":"overrides for resource provider information. While we could continue to use"},{"line_number":32,"context_line":"many existing and new configuration options for expressing this information,"},{"line_number":33,"context_line":"having a standardized, versioned provider descriptor file format allows us to"},{"line_number":34,"context_line":"decouple the management of provider information from the configuration of the"},{"line_number":35,"context_line":"service or daemon that manages said resource providers."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_03046f49","line":33,"range":{"start_line":33,"start_character":33,"end_line":33,"end_character":57},"updated":"2019-06-06 12:12:07.000000000","message":"1. Security aspects of this file. Who owns it?\n2. How can we prevent duplicates in creation of resource providers? Sanity check of the file.\n3. Sanity check against exiting parent uuid/ uuids for aggregate rps entered in the file.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eed3f2c2596db3ff7a7d9de99aa3e7dfd828d98f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"services such as Neutron and Cyborg), we require a way of expressing various"},{"line_number":31,"context_line":"overrides for resource provider information. While we could continue to use"},{"line_number":32,"context_line":"many existing and new configuration options for expressing this information,"},{"line_number":33,"context_line":"having a standardized, versioned provider descriptor file format allows us to"},{"line_number":34,"context_line":"decouple the management of provider information from the configuration of the"},{"line_number":35,"context_line":"service or daemon that manages said resource providers."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_25f35276","line":33,"range":{"start_line":33,"start_character":23,"end_line":33,"end_character":32},"updated":"2019-06-12 16:01:22.000000000","message":"Presumably we support only one version of the file at any given point and this is just our sentinel to refuse to load it if it\u0027s not what we expect, right? And the rules for said versioning are? Additive only, otherwise bump the version?\n\nTechnically we\u0027re required to support config files from N-1 in version N as part of our upgrade promise. Meaning, we can\u0027t require operators to roll code and config changes simultaneously. So, I think it\u0027s important that we describe what the situation around revving the version/format would be.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":30,"context_line":"services such as Neutron and Cyborg), we require a way of expressing various"},{"line_number":31,"context_line":"overrides for resource provider information. While we could continue to use"},{"line_number":32,"context_line":"many existing and new configuration options for expressing this information,"},{"line_number":33,"context_line":"having a standardized, versioned provider descriptor file format allows us to"},{"line_number":34,"context_line":"decouple the management of provider information from the configuration of the"},{"line_number":35,"context_line":"service or daemon that manages said resource providers."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_ee5a5bf1","line":33,"range":{"start_line":33,"start_character":33,"end_line":33,"end_character":57},"in_reply_to":"9fb8cfa7_03046f49","updated":"2019-06-06 16:58:05.000000000","message":"For the first pass, we should limit the ownership and consumption of the file to nova only. So it must be readable by the nova process and writable by the same users/groups as nova.conf itself.\n\nI think 2 and 3 are addressed below somewhere, but: Yes, validate, and refuse to start the compute service if we find errors/conflicts/discrepancies.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":30,"context_line":"services such as Neutron and Cyborg), we require a way of expressing various"},{"line_number":31,"context_line":"overrides for resource provider information. While we could continue to use"},{"line_number":32,"context_line":"many existing and new configuration options for expressing this information,"},{"line_number":33,"context_line":"having a standardized, versioned provider descriptor file format allows us to"},{"line_number":34,"context_line":"decouple the management of provider information from the configuration of the"},{"line_number":35,"context_line":"service or daemon that manages said resource providers."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_7ec5e25a","line":33,"range":{"start_line":33,"start_character":23,"end_line":33,"end_character":32},"in_reply_to":"9fb8cfa7_25f35276","updated":"2019-06-19 18:01:11.000000000","message":"IMO at least a major.minor makes sense. Additive bumps minor; compat breaking bumps major. That way a consumer can distinguish between \"can I handle this at all\" and \"new feature X available\".\n\nI suppose that can be done with a monotonic integer as well, but it seems more awkward.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"cae34baa330f4e06f8026e895aa2ed647d00d93f","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Identify a provider unambiguously, even if it does not yet exist in"},{"line_number":59,"context_line":"  placement."},{"line_number":60,"context_line":"* Customize any aspect of the provider\u0027s inventory, including resource classes,"},{"line_number":61,"context_line":"  totals, min/max unit, step size, reserved amounts, and allocation ratios."},{"line_number":62,"context_line":"* Associate a provider with one or more aggregates."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_834cdf9e","line":60,"range":{"start_line":60,"start_character":62,"end_line":60,"end_character":78},"updated":"2019-06-06 12:12:07.000000000","message":"Do we support overrides to standard resource classes or traits, and does the file take the final precedence?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Identify a provider unambiguously, even if it does not yet exist in"},{"line_number":59,"context_line":"  placement."},{"line_number":60,"context_line":"* Customize any aspect of the provider\u0027s inventory, including resource classes,"},{"line_number":61,"context_line":"  totals, min/max unit, step size, reserved amounts, and allocation ratios."},{"line_number":62,"context_line":"* Associate a provider with one or more aggregates."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_ce79972f","line":60,"range":{"start_line":60,"start_character":62,"end_line":60,"end_character":78},"in_reply_to":"9fb8cfa7_834cdf9e","updated":"2019-06-06 16:58:05.000000000","message":"With the caveat that only certain kinds of overrides are supported, yes, they\u0027re allowed, and the file takes precedence. Examples:\n\nIt could be one way to remove DISK_GB inventory from the root provider and create it in a sharing provider, to feed shared disk functionality [1].\n\nIt could be used to manually disable a compute capability that\u0027s otherwise asserted by capabilities_as_traits [2], by removing the capability trait from the compute RP.\n\n[1] https://review.opendev.org/650188\n[2] https://opendev.org/openstack/nova/src/branch/master/nova/virt/driver.py#L1052","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"cae34baa330f4e06f8026e895aa2ed647d00d93f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"Trait Customization"},{"line_number":65,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":66,"context_line":"**An operator wishes to indicate that even if the virt driver on a compute node"},{"line_number":67,"context_line":"discovers a certain CPU feature, it should not report such a trait to the"},{"line_number":68,"context_line":"placement API.**"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"**An operator wishes to associate additional traits with a provider.**"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_433b47ea","line":67,"range":{"start_line":67,"start_character":36,"end_line":67,"end_character":66},"updated":"2019-06-06 12:12:07.000000000","message":"Do we prioritize delete overrides?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":64,"context_line":"Trait Customization"},{"line_number":65,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":66,"context_line":"**An operator wishes to indicate that even if the virt driver on a compute node"},{"line_number":67,"context_line":"discovers a certain CPU feature, it should not report such a trait to the"},{"line_number":68,"context_line":"placement API.**"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"**An operator wishes to associate additional traits with a provider.**"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_2e907343","line":67,"range":{"start_line":67,"start_character":36,"end_line":67,"end_character":66},"in_reply_to":"9fb8cfa7_433b47ea","updated":"2019-06-06 16:58:05.000000000","message":"yup, see above.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"cae34baa330f4e06f8026e895aa2ed647d00d93f","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"* Describe a child provider, including unambiguously designating its parent"},{"line_number":132,"context_line":"  provider without that parent necessarily yet existing in Placement."},{"line_number":133,"context_line":"* Designate \"ownership\" of a provider, i.e. which service has the"},{"line_number":134,"context_line":"  authority/responsibility to configure it."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Sharing Providers"},{"line_number":137,"context_line":"~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_7e4dbe70","line":134,"range":{"start_line":133,"start_character":2,"end_line":134,"end_character":43},"updated":"2019-06-06 12:12:07.000000000","message":"The override information provided for providers will be from multiple owners. We could control ownership of the file to a group of users/services. I\u0027m unsure about doing this for each item.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"* Describe a child provider, including unambiguously designating its parent"},{"line_number":132,"context_line":"  provider without that parent necessarily yet existing in Placement."},{"line_number":133,"context_line":"* Designate \"ownership\" of a provider, i.e. which service has the"},{"line_number":134,"context_line":"  authority/responsibility to configure it."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Sharing Providers"},{"line_number":137,"context_line":"~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_aeaf83e1","line":134,"range":{"start_line":133,"start_character":2,"end_line":134,"end_character":43},"in_reply_to":"9fb8cfa7_7e4dbe70","updated":"2019-06-06 16:58:05.000000000","message":"For each item it\u0027s a contract the consumers of the file have to honor.\n\n for section in file_json:\n     if section.owner !\u003d me\n         continue\n     # Process section\n\nThis is assuming we want to allow multiple consumers to access the same file. Otherwise, the owner is implicit.\n\nBut for the first pass, to keep it simple, I think we should limit the ownership to nova. So we can omit the ownership pieces from the schema and either remove this bullet or note that it\u0027s out of scope for now.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":169,"context_line":"this spec is the schema, code to parse a file into a Python dict, and code to"},{"line_number":170,"context_line":"validate the dict against the schema."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially,"},{"line_number":173,"context_line":"with the goal that it will soon be moved to a separate oslo-ish library."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"While this spec discusses some ways in which the file *could* be used, such"},{"line_number":176,"context_line":"usages are to be defined/described separately."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_e535d1f8","line":173,"range":{"start_line":172,"start_character":1,"end_line":173,"end_character":72},"updated":"2019-06-04 12:11:46.000000000","message":"I guess it would be easier to start it separately as it would not require the nova team to agree on the design.\n\nWhy do we want it to start this in nova? Will nova be the fist consumer of this yaml?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":169,"context_line":"this spec is the schema, code to parse a file into a Python dict, and code to"},{"line_number":170,"context_line":"validate the dict against the schema."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially,"},{"line_number":173,"context_line":"with the goal that it will soon be moved to a separate oslo-ish library."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"While this spec discusses some ways in which the file *could* be used, such"},{"line_number":176,"context_line":"usages are to be defined/described separately."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_ae6a23b0","line":173,"range":{"start_line":172,"start_character":1,"end_line":173,"end_character":72},"in_reply_to":"9fb8cfa7_e535d1f8","updated":"2019-06-06 16:58:05.000000000","message":"Yeah, as I noted previously, we should write nova\u0027s use case into this spec.\n\nAnd the spec should be specifically targeted *and limited* to nova initially.\n\nAnd thinking through what it would mean to put it into an oslo-ish library, I\u0027m not sure it would make much sense long-term anyway, considering how much of the schema would need to be virt-specific. Having some subset of the code in a lib, and then extending it in nova with the nova-isms... seems like it would be pretty tricky, and possibly end up with the stuff in the oslo library being little more than yaml.load().","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":173,"context_line":"with the goal that it will soon be moved to a separate oslo-ish library."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"While this spec discusses some ways in which the file *could* be used, such"},{"line_number":176,"context_line":"usages are to be defined/described separately."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"In other words, think of this spec as akin to setting up the oslo.config"},{"line_number":179,"context_line":"framework. It is up to other specs to define specific config options."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_a0082728","line":176,"updated":"2019-06-04 12:11:46.000000000","message":"I understand the need for scoping. However I would like to see an example where this file is used to solve one of the above listed use cases. Who will write the file, based on what information, who will read the file, how it will end up influencing what is stored in placement, what will be the file content to solve a certain use case.\n\nWithout it I cannot see if the proposed format can be used to solve the above use cases.\n\n//30 minutes later//\n\nI found the example section :D thanks.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eed3f2c2596db3ff7a7d9de99aa3e7dfd828d98f","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    # Version ($Major, $minor) of the schema must successfully parse documents"},{"line_number":187,"context_line":"    # conforming to ($Major, 0..$minor). Any breaking schema change (e.g."},{"line_number":188,"context_line":"    # removing fields, adding new required fields, imposing a stricter pattern"},{"line_number":189,"context_line":"    # on a value, etc.) must bump $Major. The question of whether/how old"},{"line_number":190,"context_line":"    # versions will be deprecated or become unsupported is left for future"},{"line_number":191,"context_line":"    # consideration, as it will depend on how and by whom this file gets"},{"line_number":192,"context_line":"    # consumed."},{"line_number":193,"context_line":"    schema_version: $Major.$minor"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_c574b6d1","line":190,"range":{"start_line":189,"start_character":42,"end_line":190,"end_character":74},"updated":"2019-06-12 16:01:22.000000000","message":"Per above, I don\u0027t think we can or should just punt on this, specifically because this is config.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eed3f2c2596db3ff7a7d9de99aa3e7dfd828d98f","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    # versions will be deprecated or become unsupported is left for future"},{"line_number":191,"context_line":"    # consideration, as it will depend on how and by whom this file gets"},{"line_number":192,"context_line":"    # consumed."},{"line_number":193,"context_line":"    schema_version: $Major.$minor"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"  providers:"},{"line_number":196,"context_line":"    # List of dicts"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_c55d9647","line":193,"updated":"2019-06-12 16:01:22.000000000","message":"Why do we really need to do this? IMHO, just use a single version number and bump it when we make a breaking change. I think that the consumers of such a file really need to depend on the structure and not so much the content when it comes to the version. Like, if we\u0027re not going to define a strict schema we can test against, then we have be to ultra pedantic when reading any value in this file, guarding against fat-fingering things.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eed3f2c2596db3ff7a7d9de99aa3e7dfd828d98f","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        # resource, which may not be the same.)"},{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_681b5f72","line":206,"updated":"2019-06-12 16:01:22.000000000","message":"Do we specify both of these? Or one? I\u0027m confused about why these would both be in here if we\u0027re just trying to identify one provider that we\u0027re going to tweak.\n\nAlso, presumably if we\u0027re making changes to the compute node provider, we have to have run nova-compute once to generate the compute node object, and thus the uuid and provider in placement before we can write this file, right?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        # resource, which may not be the same.)"},{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_a1681fba","line":206,"in_reply_to":"9fb8cfa7_681b5f72","updated":"2019-06-19 18:01:11.000000000","message":"\u003e Do we specify both of these? Or one? I\u0027m confused about why these\n \u003e would both be in here if we\u0027re just trying to identify one provider\n \u003e that we\u0027re going to tweak.\n\nPerhaps we specify neither, initially. Read on.\n\n \u003e Also, presumably if we\u0027re making changes to the compute node\n \u003e provider, we have to have run nova-compute once to generate the\n \u003e compute node object, and thus the uuid and provider in placement\n \u003e before we can write this file, right?\n\nYeah, this chicken/egg is something I struggled with.\n\nLet\u0027s come up with a syntax (some kind of meta-value) that means, \"The root provider for this compute host.\" Then we would always use that to identify the root for customization purposes. And always use that to denote the parent when I\u0027m creating children (once we support that).\n\nI\u0027d like a similar way to identify other providers in the tree without having to know their name/UUID. But I think that\u0027s less important than the root.\n\nSo why don\u0027t we do this:\n- Remove `name`.\n- Make `uuid` required.\n- Allow `uuid` to take a special value `$COMPUTE_HOST` (with the $).\n\nThis way the author of the file can always identify a provider (root or child) by its actual UUID, but they can also use `$COMPUTE_HOST` to identify the root without having to know its UUID.\n\n(BTW, the ability to *set* an existing provider\u0027s name and/or UUID should almost certainly be restricted to the owning service. We should definitely not allow that, at least initially.)","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"df3f40b07498a3eed286c3b75864d6255e72a11b","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        # resource, which may not be the same.)"},{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_b13e37d8","line":206,"in_reply_to":"9fb8cfa7_681b5f72","updated":"2019-06-19 11:15:37.000000000","message":"From the notes in line 363, the identifiers can together identify zero or more providers. This can also help in the case where operator is not aware of the UUID of the resource provider, though caution must be exercised since overrides can apply to all identified providers.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e9cbaa0674f3efc9666e0778caa4c9d0c6647247","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        # resource, which may not be the same.)"},{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_d4012b08","line":206,"in_reply_to":"9fb8cfa7_a1681fba","updated":"2019-06-21 08:43:45.000000000","message":"I feel name is easier, as the admin can provide a unique name and the owning service can autogenerate the uuid.\n\n1. Where is the $COMPUTE_HOST defined?\n2. If I want to establish nested relationship - compute at root with 2 children (while also describe classes/traits in them). Would we expect the owning service to follow the order in which the items or provided so that it first processes the root rp config followed by the child rps.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"47b84576ae6e811aec4db47e3094d082c84dba86","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        # resource, which may not be the same.)"},{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_57951c3f","line":206,"in_reply_to":"9fb8cfa7_d4012b08","updated":"2019-06-24 16:52:20.000000000","message":"\u003e I feel name is easier, as the admin can provide a unique name and\n \u003e the owning service can autogenerate the uuid.\n\nUnfortunately, due to some early architectural decisions, name is not easier.\n\nThe name has to be universally (i.e. across all providers in the whole placement database) unique. And thus, we\u0027ve adopted a convention of including the compute host\u0027s UUID in the name itself. So there\u0027s no readability or discoverability benefit to using the name [1].\n\n \u003e 1. Where is the $COMPUTE_HOST defined?\n\nTo be clear, I\u0027m proposing literally using the string \"$COMPUTE_HOST\" - i.e. a meta-value used as a special indicator to the code, meaning \"go look up the compute host\u0027s UUID and pretend I said that instead.\"\n\n \u003e 2. If I want to establish nested relationship - compute at root\n \u003e with 2 children (while also describe classes/traits in them). Would\n \u003e we expect the owning service to follow the order in which the items\n \u003e or provided so that it first processes the root rp config followed\n \u003e by the child rps.\n\nAs I said elsewhere, I don\u0027t think we should support creating new providers in the current iteration, so this point is moot for now.\n\nHowever, in the future, we will want to take this into account. As currently designed, the providers are in a list of dicts (the hyphen on L197) so order is preserved. If we decide to allow (or even enforce) the providers.d/ directory approach with one provider per file, we ought to specify that the files are processed in a predictable order (lexicographical) to encourage naming with sortable prefixes (have a look at your /etc/grub.d/ for example).\n\n[1] In fact, some feel the name field is pretty worthless in placement in general. Right now the only thing it\u0027s actually being used for is to encode information about e.g. PCI devices - a use which we\u0027ve all agreed is terrible and hacky and brittle. We\u0027re engineering ways - including this file! - to allow us to get rid of that hack.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        # At least one key is required. Multiple keys are ANDed."},{"line_number":200,"context_line":"        # No wildcarding or regexes in values (yet)."},{"line_number":201,"context_line":"        #"},{"line_number":202,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":203,"context_line":"        # resource, which may not be the same.)"},{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."},{"line_number":210,"context_line":"        pci_address: $pci_dbsf_pattern"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_9150a0d6","line":207,"range":{"start_line":202,"start_character":0,"end_line":207,"end_character":1},"updated":"2019-06-06 16:58:05.000000000","message":"If we\u0027re using this to create a new provider, we\u0027ll need to think about:\n- for uuid, ability to have the code generate it\n- for name, how to make sure it\u0027s unique","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e9cbaa0674f3efc9666e0778caa4c9d0c6647247","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        # At least one key is required. Multiple keys are ANDed."},{"line_number":200,"context_line":"        # No wildcarding or regexes in values (yet)."},{"line_number":201,"context_line":"        #"},{"line_number":202,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":203,"context_line":"        # resource, which may not be the same.)"},{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."},{"line_number":210,"context_line":"        pci_address: $pci_dbsf_pattern"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_8f787e8f","line":207,"range":{"start_line":202,"start_character":0,"end_line":207,"end_character":1},"in_reply_to":"9fb8cfa7_522d6fa6","updated":"2019-06-21 08:43:45.000000000","message":"1. For the RMD - LLC usecase, we would expect to first create child providers per numa under the compute resource provider and customize the inventories under them. This is needed, since LLC and cores should belong to the same NUMA and we can account for request from only one. (Instead of allocating on all).\n\nThis means, flavor should request cores and LLC from the same child rp.\n\n2. Can we leave it upto the admin/auto-generate tool to provide a unique name or uuid, name being more intuitive and does not need tracking? I\u0027m seeing this the same way placement api will be used. The consumer can later validate and accept/reject.\n\n3. Also do we look at a new section for creating new rps instead of assuming no match from identification \u003d create new.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        # At least one key is required. Multiple keys are ANDed."},{"line_number":200,"context_line":"        # No wildcarding or regexes in values (yet)."},{"line_number":201,"context_line":"        #"},{"line_number":202,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":203,"context_line":"        # resource, which may not be the same.)"},{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."},{"line_number":210,"context_line":"        pci_address: $pci_dbsf_pattern"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_522d6fa6","line":207,"range":{"start_line":202,"start_character":0,"end_line":207,"end_character":1},"in_reply_to":"9fb8cfa7_557a4688","updated":"2019-06-19 18:01:11.000000000","message":"Following on from the above, let\u0027s not let this file create providers on this pass. I\u0027m not sure we have a use case today where we need providers other than the ones the virt driver already knows how to create; but I\u0027m going to say that if we do, we could consider what it means for the admin to create them manually (whereupon they could be \"maintained\" by this file if necessary).","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"47b84576ae6e811aec4db47e3094d082c84dba86","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        # At least one key is required. Multiple keys are ANDed."},{"line_number":200,"context_line":"        # No wildcarding or regexes in values (yet)."},{"line_number":201,"context_line":"        #"},{"line_number":202,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":203,"context_line":"        # resource, which may not be the same.)"},{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."},{"line_number":210,"context_line":"        pci_address: $pci_dbsf_pattern"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_37718845","line":207,"range":{"start_line":202,"start_character":0,"end_line":207,"end_character":1},"in_reply_to":"9fb8cfa7_8f787e8f","updated":"2019-06-24 16:52:20.000000000","message":"Don\u0027t create child providers for LLC. Put the resources in the root compute node provider. We don\u0027t have NUMA modeling or affinity in placement yet, so it wouldn\u0027t do you any good anyway. We need to defer the NUMA aspect of this until we have proper NUMA modeling of existing (cpu/memory) resources in placement.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"df3f40b07498a3eed286c3b75864d6255e72a11b","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        # At least one key is required. Multiple keys are ANDed."},{"line_number":200,"context_line":"        # No wildcarding or regexes in values (yet)."},{"line_number":201,"context_line":"        #"},{"line_number":202,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":203,"context_line":"        # resource, which may not be the same.)"},{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."},{"line_number":210,"context_line":"        pci_address: $pci_dbsf_pattern"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_557a4688","line":207,"range":{"start_line":202,"start_character":0,"end_line":207,"end_character":1},"in_reply_to":"9fb8cfa7_9150a0d6","updated":"2019-06-19 11:15:37.000000000","message":"The validation results could come from the consumer. If the identifiers do not identify any provider, do we create a new provider with all customization? UUID and parent UUID are optional but can be asserted by the consumer.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."},{"line_number":210,"context_line":"        pci_address: $pci_dbsf_pattern"},{"line_number":211,"context_line":"        drc_index: $hex8_pattern"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_203517db","line":208,"range":{"start_line":207,"start_character":40,"end_line":208,"end_character":51},"updated":"2019-06-04 12:11:46.000000000","message":"what is a \u0027system\u0027 here?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        uuid: $uuid_pattern"},{"line_number":205,"context_line":"        # Name of the provider (likewise)."},{"line_number":206,"context_line":"        name: $string"},{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."},{"line_number":210,"context_line":"        pci_address: $pci_dbsf_pattern"},{"line_number":211,"context_line":"        drc_index: $hex8_pattern"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_2e15d39c","line":208,"range":{"start_line":207,"start_character":40,"end_line":208,"end_character":51},"in_reply_to":"9fb8cfa7_203517db","updated":"2019-06-06 16:58:05.000000000","message":"Whatever is consuming the file. As previously intended, that could be \"anything\". But we should revise the spec to be nova- and virt-specific. So \"system\" \u003d\u003e \"a specific virt driver\u0027s update_provider_tree method\".","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."},{"line_number":210,"context_line":"        pci_address: $pci_dbsf_pattern"},{"line_number":211,"context_line":"        drc_index: $hex8_pattern"},{"line_number":212,"context_line":"        drc_name: $string"},{"line_number":213,"context_line":"        sysfs_path: $string"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_5103080e","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":11},"updated":"2019-06-06 16:58:05.000000000","message":"Given the latest scope/uses for which this spec is being proposed, I\u0027m thinking we should make a subsection of `identification` for this kind of information, which is used by the virt driver to map \"resource provider\" (identified by UUID and/or name per L204-6) to \"real thing on the system\". Each virt driver will have its own notion of what keys and values should be supported, so from a schema perspective, the subsection should be freeform. (We could have each virt driver try to define its own extension to the schema, but that\u0027s probably too much trouble for the first pass.)\n\nAs an example, today we\u0027re using a resource provider naming convention to map GPU providers to mdevs [1]. As noted when that code was written [2], this is brittle. So this section could provide the PCI address of the mdev associated with the resource provider, and the driver code could use that to do the mapping instead.\n\n[1] https://opendev.org/openstack/nova/src/branch/master/nova/virt/libvirt/driver.py#L6466-L6469\n[2] https://review.opendev.org/#/c/636591/5/nova/virt/libvirt/driver.py@6264","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."},{"line_number":210,"context_line":"        pci_address: $pci_dbsf_pattern"},{"line_number":211,"context_line":"        drc_index: $hex8_pattern"},{"line_number":212,"context_line":"        drc_name: $string"},{"line_number":213,"context_line":"        sysfs_path: $string"},{"line_number":214,"context_line":"        # Various PCI fields, allowing identification aligned with"},{"line_number":215,"context_line":"        # ``[pci]passthrough_whitelist`` (except no wildcarding). Values come"},{"line_number":216,"context_line":"        # from ``lspci`` (libvirt), ``pvmctl ioslot list`` (PowerVM), ..."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_4047eb4c","line":213,"range":{"start_line":210,"start_character":0,"end_line":213,"end_character":27},"updated":"2019-06-04 12:11:46.000000000","message":"Will this part of the file become hypervisor dependent? If this file will be read by the nova virt driver then it could be OK to depend on the hypervisor type. Otherwise this dependency could be problematic.\n\n//later//\nI see that there will be cases when nova virt driver will consume this file. There it is OK to provider hypervisor dependent information. Does a single file potentially consumed by different services?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # Various addressing mechanisms. If the mechanism is n/a on a"},{"line_number":208,"context_line":"        # particular system but the key is included, the code processing the"},{"line_number":209,"context_line":"        # configuration should probably generate an error."},{"line_number":210,"context_line":"        pci_address: $pci_dbsf_pattern"},{"line_number":211,"context_line":"        drc_index: $hex8_pattern"},{"line_number":212,"context_line":"        drc_name: $string"},{"line_number":213,"context_line":"        sysfs_path: $string"},{"line_number":214,"context_line":"        # Various PCI fields, allowing identification aligned with"},{"line_number":215,"context_line":"        # ``[pci]passthrough_whitelist`` (except no wildcarding). Values come"},{"line_number":216,"context_line":"        # from ``lspci`` (libvirt), ``pvmctl ioslot list`` (PowerVM), ..."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_ae56a35b","line":213,"range":{"start_line":210,"start_character":0,"end_line":213,"end_character":27},"in_reply_to":"9fb8cfa7_4047eb4c","updated":"2019-06-06 16:58:05.000000000","message":"\u003e Will this part of the file become hypervisor dependent?\n\nYes, completely.\n\n \u003e I see that there will be cases when nova virt driver will consume\n \u003e this file.\n\nFor this pass, we should focus *only* on that case: the file is consumed by update_provider_tree iff the specific virt driver is set up to support that.\n\n \u003e Does a single file potentially consumed by different\n \u003e services?\n\nIn the future, yes, you could envision cyborg reading the accel bits and nova reading the other bits - feeds into the discussion of \"owner\" - but for now we should limit to nova- and virt-only.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        pci_subsys_product_id: $hex4_pattern"},{"line_number":221,"context_line":"        pci_class: $hex4_pattern"},{"line_number":222,"context_line":"        pci_revision_id: $hex2_pattern"},{"line_number":223,"context_line":"        # Identify a provider by traits it has on it. It would be dangerous for"},{"line_number":224,"context_line":"        # there to be overlap between these values and those in"},{"line_number":225,"context_line":"        # ``providers[].customization.traits`` for *any* provider in the file."},{"line_number":226,"context_line":"        # Don\u0027t do that."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_80aba3d4","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":53},"updated":"2019-06-04 12:11:46.000000000","message":"Why this is needed? Which use case will depend on this way of identifying RPs? Do we want to keep this file schema simple first and add support for extra syntax when we see the usage of it?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e9cbaa0674f3efc9666e0778caa4c9d0c6647247","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        pci_subsys_product_id: $hex4_pattern"},{"line_number":221,"context_line":"        pci_class: $hex4_pattern"},{"line_number":222,"context_line":"        pci_revision_id: $hex2_pattern"},{"line_number":223,"context_line":"        # Identify a provider by traits it has on it. It would be dangerous for"},{"line_number":224,"context_line":"        # there to be overlap between these values and those in"},{"line_number":225,"context_line":"        # ``providers[].customization.traits`` for *any* provider in the file."},{"line_number":226,"context_line":"        # Don\u0027t do that."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_cfb2f649","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":53},"in_reply_to":"9fb8cfa7_0d27dab8","updated":"2019-06-21 08:43:45.000000000","message":"Yes uuid is simpler. Or else we would have to first establish RDT traits and also filter RDT nodes using CPU arch traits or aggregates.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"df3f40b07498a3eed286c3b75864d6255e72a11b","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        pci_subsys_product_id: $hex4_pattern"},{"line_number":221,"context_line":"        pci_class: $hex4_pattern"},{"line_number":222,"context_line":"        pci_revision_id: $hex2_pattern"},{"line_number":223,"context_line":"        # Identify a provider by traits it has on it. It would be dangerous for"},{"line_number":224,"context_line":"        # there to be overlap between these values and those in"},{"line_number":225,"context_line":"        # ``providers[].customization.traits`` for *any* provider in the file."},{"line_number":226,"context_line":"        # Don\u0027t do that."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_de689322","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":53},"in_reply_to":"9fb8cfa7_4ecb671d","updated":"2019-06-19 11:15:37.000000000","message":"If we are identifying a collection of rps to update RDT LLC inventory - resource classes, we need to filter the rps by the RDT traits on them. Considering this, I shall retain it, unless we simplify the file to identify only 1 rp, in which case name/uuid will be enough.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        pci_subsys_product_id: $hex4_pattern"},{"line_number":221,"context_line":"        pci_class: $hex4_pattern"},{"line_number":222,"context_line":"        pci_revision_id: $hex2_pattern"},{"line_number":223,"context_line":"        # Identify a provider by traits it has on it. It would be dangerous for"},{"line_number":224,"context_line":"        # there to be overlap between these values and those in"},{"line_number":225,"context_line":"        # ``providers[].customization.traits`` for *any* provider in the file."},{"line_number":226,"context_line":"        # Don\u0027t do that."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_4ecb671d","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":53},"in_reply_to":"9fb8cfa7_80aba3d4","updated":"2019-06-06 16:58:05.000000000","message":"\u003e Why this is needed? Which use case will depend on this way of\n \u003e identifying RPs? Do we want to keep this file schema simple first\n \u003e and add support for extra syntax when we see the usage of it?\n\n++\n\nRemove this unless we can see an immediate need for it.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        pci_subsys_product_id: $hex4_pattern"},{"line_number":221,"context_line":"        pci_class: $hex4_pattern"},{"line_number":222,"context_line":"        pci_revision_id: $hex2_pattern"},{"line_number":223,"context_line":"        # Identify a provider by traits it has on it. It would be dangerous for"},{"line_number":224,"context_line":"        # there to be overlap between these values and those in"},{"line_number":225,"context_line":"        # ``providers[].customization.traits`` for *any* provider in the file."},{"line_number":226,"context_line":"        # Don\u0027t do that."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_0d27dab8","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":53},"in_reply_to":"9fb8cfa7_de689322","updated":"2019-06-19 18:01:11.000000000","message":"For the first pass, aren\u0027t we just creating the LLC inventory on the root provider and/or the (existing) NUMA providers?\n\nIf not, see above, perhaps this is our use case for needing to create providers the virt driver doesn\u0027t know about initially. But in either case, let\u0027s identify those providers by UUID rather than traits. (Where would those traits come from, anyway? Wouldn\u0027t it be either whoever created the providers, or... this file?)","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                # List of trait names"},{"line_number":235,"context_line":"                - $trait_pattern"},{"line_number":236,"context_line":"                - ..."},{"line_number":237,"context_line":"        # Identify a provider by the aggregates to which it belongs. It would"},{"line_number":238,"context_line":"        # be dangerous for there to be overlap between these values and those"},{"line_number":239,"context_line":"        # in ``providers[].customization.aggregates`` for *any* provider in the"},{"line_number":240,"context_line":"        # file. Don\u0027t do that."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_d10e1831","line":237,"range":{"start_line":237,"start_character":10,"end_line":237,"end_character":67},"updated":"2019-06-06 16:58:05.000000000","message":"ditto","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                # List of trait names"},{"line_number":235,"context_line":"                - $trait_pattern"},{"line_number":236,"context_line":"                - ..."},{"line_number":237,"context_line":"        # Identify a provider by the aggregates to which it belongs. It would"},{"line_number":238,"context_line":"        # be dangerous for there to be overlap between these values and those"},{"line_number":239,"context_line":"        # in ``providers[].customization.aggregates`` for *any* provider in the"},{"line_number":240,"context_line":"        # file. Don\u0027t do that."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_cd5542fc","line":237,"range":{"start_line":237,"start_character":10,"end_line":237,"end_character":67},"in_reply_to":"9fb8cfa7_9e4bfbae","updated":"2019-06-19 18:01:11.000000000","message":"Yeah, again, the deployer (human or tool) that creates this file can always determine the UUID based on this information *outside* of the scope of this file. I really want to keep this as minimal as possible for the initial pass.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e9cbaa0674f3efc9666e0778caa4c9d0c6647247","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                # List of trait names"},{"line_number":235,"context_line":"                - $trait_pattern"},{"line_number":236,"context_line":"                - ..."},{"line_number":237,"context_line":"        # Identify a provider by the aggregates to which it belongs. It would"},{"line_number":238,"context_line":"        # be dangerous for there to be overlap between these values and those"},{"line_number":239,"context_line":"        # in ``providers[].customization.aggregates`` for *any* provider in the"},{"line_number":240,"context_line":"        # file. Don\u0027t do that."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_6f366ab7","line":237,"range":{"start_line":237,"start_character":10,"end_line":237,"end_character":67},"in_reply_to":"9fb8cfa7_cd5542fc","updated":"2019-06-21 08:43:45.000000000","message":"Yes, we could stick to uuid/names over advanced features.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"df3f40b07498a3eed286c3b75864d6255e72a11b","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                # List of trait names"},{"line_number":235,"context_line":"                - $trait_pattern"},{"line_number":236,"context_line":"                - ..."},{"line_number":237,"context_line":"        # Identify a provider by the aggregates to which it belongs. It would"},{"line_number":238,"context_line":"        # be dangerous for there to be overlap between these values and those"},{"line_number":239,"context_line":"        # in ``providers[].customization.aggregates`` for *any* provider in the"},{"line_number":240,"context_line":"        # file. Don\u0027t do that."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_9e4bfbae","line":237,"range":{"start_line":237,"start_character":10,"end_line":237,"end_character":67},"in_reply_to":"9fb8cfa7_d10e1831","updated":"2019-06-19 11:15:37.000000000","message":"Similar to RDT trait argument above, RDT resource classes will vary based on the platform. If we do not have a trait today to describe different Intel CPU architectures, we would have to depend on aggregates and narrow down the rps with them","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                # Ditto"},{"line_number":251,"context_line":"                - $uuid_pattern"},{"line_number":252,"context_line":"                - ..."},{"line_number":253,"context_line":"      ownership:"},{"line_number":254,"context_line":"          # Designate the service responsible for managing these providers."},{"line_number":255,"context_line":"          # REVIEWERS: Is this a service type (e.g. \"compute\") or a project"},{"line_number":256,"context_line":"          # name (e.g. \"nova\")?"},{"line_number":257,"context_line":"          service: $string"},{"line_number":258,"context_line":"      passthrough:"},{"line_number":259,"context_line":"          # For providers whose inventories represent devices (physical or"},{"line_number":260,"context_line":"          # virtual), indicate whether they are allowed to be allocated and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_8094038d","line":257,"range":{"start_line":253,"start_character":0,"end_line":257,"end_character":26},"updated":"2019-06-04 12:11:46.000000000","message":"How this fill effect what we store in placement? Btw, is this file intended to influence what we store in placement?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                # Ditto"},{"line_number":251,"context_line":"                - $uuid_pattern"},{"line_number":252,"context_line":"                - ..."},{"line_number":253,"context_line":"      ownership:"},{"line_number":254,"context_line":"          # Designate the service responsible for managing these providers."},{"line_number":255,"context_line":"          # REVIEWERS: Is this a service type (e.g. \"compute\") or a project"},{"line_number":256,"context_line":"          # name (e.g. \"nova\")?"},{"line_number":257,"context_line":"          service: $string"},{"line_number":258,"context_line":"      passthrough:"},{"line_number":259,"context_line":"          # For providers whose inventories represent devices (physical or"},{"line_number":260,"context_line":"          # virtual), indicate whether they are allowed to be allocated and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_b13cc4c8","line":257,"range":{"start_line":253,"start_character":0,"end_line":257,"end_character":26},"in_reply_to":"9fb8cfa7_8094038d","updated":"2019-06-06 16:58:05.000000000","message":"\u003e How this fill effect what we store in placement?\n\nThe intent of this was to allow the same file to be processed by different services. Each service would only pay attention to the providers it owns. (And importantly, leave others alone.) But let\u0027s eliminate this field for the first pass and declare the file as nova-only.\n\n \u003e Btw, is this file\n \u003e intended to influence what we store in placement?\n\nUm. Yes. That\u0027s the entire point of it.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"cae34baa330f4e06f8026e895aa2ed647d00d93f","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                # Ditto"},{"line_number":251,"context_line":"                - $uuid_pattern"},{"line_number":252,"context_line":"                - ..."},{"line_number":253,"context_line":"      ownership:"},{"line_number":254,"context_line":"          # Designate the service responsible for managing these providers."},{"line_number":255,"context_line":"          # REVIEWERS: Is this a service type (e.g. \"compute\") or a project"},{"line_number":256,"context_line":"          # name (e.g. \"nova\")?"},{"line_number":257,"context_line":"          service: $string"},{"line_number":258,"context_line":"      passthrough:"},{"line_number":259,"context_line":"          # For providers whose inventories represent devices (physical or"},{"line_number":260,"context_line":"          # virtual), indicate whether they are allowed to be allocated and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_7e605ea6","line":257,"range":{"start_line":253,"start_character":0,"end_line":257,"end_character":26},"in_reply_to":"9fb8cfa7_8094038d","updated":"2019-06-06 12:12:07.000000000","message":"I believe the file should augment placement values. How we override is something to be decided after necessary sanity check methods.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":257,"context_line":"          service: $string"},{"line_number":258,"context_line":"      passthrough:"},{"line_number":259,"context_line":"          # For providers whose inventories represent devices (physical or"},{"line_number":260,"context_line":"          # virtual), indicate whether they are allowed to be allocated and"},{"line_number":261,"context_line":"          # passed through to instances. This could be accomplished by removing"},{"line_number":262,"context_line":"          # all inventory, but this way you don\u0027t have to know what resource"},{"line_number":263,"context_line":"          # class(es) are provided."},{"line_number":264,"context_line":"          # The owning service may decide to enforce ``allow: false`` by"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_40e36b34","line":261,"range":{"start_line":260,"start_character":21,"end_line":261,"end_character":40},"updated":"2019-06-04 12:11:46.000000000","message":"It is hypervisor and virt driver dependent if a device can be passed through. Are we OK to make this file hypervisor and virt driver dependent?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":257,"context_line":"          service: $string"},{"line_number":258,"context_line":"      passthrough:"},{"line_number":259,"context_line":"          # For providers whose inventories represent devices (physical or"},{"line_number":260,"context_line":"          # virtual), indicate whether they are allowed to be allocated and"},{"line_number":261,"context_line":"          # passed through to instances. This could be accomplished by removing"},{"line_number":262,"context_line":"          # all inventory, but this way you don\u0027t have to know what resource"},{"line_number":263,"context_line":"          # class(es) are provided."},{"line_number":264,"context_line":"          # The owning service may decide to enforce ``allow: false`` by"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_71364ce9","line":261,"range":{"start_line":260,"start_character":21,"end_line":261,"end_character":40},"in_reply_to":"9fb8cfa7_40e36b34","updated":"2019-06-06 16:58:05.000000000","message":"yup, see above","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eed3f2c2596db3ff7a7d9de99aa3e7dfd828d98f","unresolved":false,"context_lines":[{"line_number":270,"context_line":"          # provider(s)."},{"line_number":271,"context_line":"          #"},{"line_number":272,"context_line":"          # Set the provider name and/or UUID. Generally speaking, don\u0027t do"},{"line_number":273,"context_line":"          # this. Not even sure we ought to support it at all."},{"line_number":274,"context_line":"          # Parser should error if any ``provider[].identification`` anywhere"},{"line_number":275,"context_line":"          # in the file has the same name/uuid (because that\u0027d be circular)."},{"line_number":276,"context_line":"          # Consuming service should error if ``identification`` for this"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_c8392bd7","line":273,"range":{"start_line":273,"start_character":17,"end_line":273,"end_character":62},"updated":"2019-06-12 16:01:22.000000000","message":"I have no idea what this would even mean. Wouldn\u0027t it make this file only valid for a single-shot use, and then afterwards, be wrong (if the provider uuid specified in the identification section has been changed by this value)?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":270,"context_line":"          # provider(s)."},{"line_number":271,"context_line":"          #"},{"line_number":272,"context_line":"          # Set the provider name and/or UUID. Generally speaking, don\u0027t do"},{"line_number":273,"context_line":"          # this. Not even sure we ought to support it at all."},{"line_number":274,"context_line":"          # Parser should error if any ``provider[].identification`` anywhere"},{"line_number":275,"context_line":"          # in the file has the same name/uuid (because that\u0027d be circular)."},{"line_number":276,"context_line":"          # Consuming service should error if ``identification`` for this"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_6d469652","line":273,"range":{"start_line":273,"start_character":17,"end_line":273,"end_character":62},"in_reply_to":"9fb8cfa7_1ebaabdd","updated":"2019-06-19 18:01:11.000000000","message":"See above, no customization of name or UUID via this file.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"df3f40b07498a3eed286c3b75864d6255e72a11b","unresolved":false,"context_lines":[{"line_number":270,"context_line":"          # provider(s)."},{"line_number":271,"context_line":"          #"},{"line_number":272,"context_line":"          # Set the provider name and/or UUID. Generally speaking, don\u0027t do"},{"line_number":273,"context_line":"          # this. Not even sure we ought to support it at all."},{"line_number":274,"context_line":"          # Parser should error if any ``provider[].identification`` anywhere"},{"line_number":275,"context_line":"          # in the file has the same name/uuid (because that\u0027d be circular)."},{"line_number":276,"context_line":"          # Consuming service should error if ``identification`` for this"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_1ebaabdd","line":273,"range":{"start_line":273,"start_character":17,"end_line":273,"end_character":62},"in_reply_to":"9fb8cfa7_c8392bd7","updated":"2019-06-19 11:15:37.000000000","message":"Correct, for subsequent updates, the old UUID can not be used after the rename and if the file is read periodically, the rp can no longer be identified. Consumer can ignore this. For new customization, the admin must modify the section.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"df3f40b07498a3eed286c3b75864d6255e72a11b","unresolved":false,"context_lines":[{"line_number":273,"context_line":"          # this. Not even sure we ought to support it at all."},{"line_number":274,"context_line":"          # Parser should error if any ``provider[].identification`` anywhere"},{"line_number":275,"context_line":"          # in the file has the same name/uuid (because that\u0027d be circular)."},{"line_number":276,"context_line":"          # Consuming service should error if ``identification`` for this"},{"line_number":277,"context_line":"          # ``provider[]`` item matches more than one provider (because that"},{"line_number":278,"context_line":"          # would violate UUID/name uniqueness)."},{"line_number":279,"context_line":"          name: $string"},{"line_number":280,"context_line":"          uuid: $uuid_pattern"},{"line_number":281,"context_line":"          # Designate these providers as child providers, parented by the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_3e052f7b","line":278,"range":{"start_line":276,"start_character":9,"end_line":278,"end_character":48},"updated":"2019-06-19 11:15:37.000000000","message":"@Eric Can we simplify the identification to only identify 0 or 1 rps? Other than bulk customization to identified rps, I see that consumer should do a lot of checks - like update name/uuid only for one identified rp or not add inventory or traits to unrelated rps. For instance, having identified rps that have RDT trait, I still can not add the same resource class to all the rp\u0027s if they differ by platform. In this case I should have created an aggregate based on platform to get unique subset of rps or individually create rps and pass uuid.\n\nAlso wouldn\u0027t the same subset be identified by multiple compute provider files?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":273,"context_line":"          # this. Not even sure we ought to support it at all."},{"line_number":274,"context_line":"          # Parser should error if any ``provider[].identification`` anywhere"},{"line_number":275,"context_line":"          # in the file has the same name/uuid (because that\u0027d be circular)."},{"line_number":276,"context_line":"          # Consuming service should error if ``identification`` for this"},{"line_number":277,"context_line":"          # ``provider[]`` item matches more than one provider (because that"},{"line_number":278,"context_line":"          # would violate UUID/name uniqueness)."},{"line_number":279,"context_line":"          name: $string"},{"line_number":280,"context_line":"          uuid: $uuid_pattern"},{"line_number":281,"context_line":"          # Designate these providers as child providers, parented by the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_eda846dc","line":278,"range":{"start_line":276,"start_character":9,"end_line":278,"end_character":48},"in_reply_to":"9fb8cfa7_3e052f7b","updated":"2019-06-19 18:01:11.000000000","message":"Let\u0027s have each paragraph identify exactly one provider, and each provider can only be identified once in the file. Anything else should trigger an error causing the file to be ignored.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e9cbaa0674f3efc9666e0778caa4c9d0c6647247","unresolved":false,"context_lines":[{"line_number":273,"context_line":"          # this. Not even sure we ought to support it at all."},{"line_number":274,"context_line":"          # Parser should error if any ``provider[].identification`` anywhere"},{"line_number":275,"context_line":"          # in the file has the same name/uuid (because that\u0027d be circular)."},{"line_number":276,"context_line":"          # Consuming service should error if ``identification`` for this"},{"line_number":277,"context_line":"          # ``provider[]`` item matches more than one provider (because that"},{"line_number":278,"context_line":"          # would violate UUID/name uniqueness)."},{"line_number":279,"context_line":"          name: $string"},{"line_number":280,"context_line":"          uuid: $uuid_pattern"},{"line_number":281,"context_line":"          # Designate these providers as child providers, parented by the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_8f071eca","line":278,"range":{"start_line":276,"start_character":9,"end_line":278,"end_character":48},"in_reply_to":"9fb8cfa7_eda846dc","updated":"2019-06-21 08:43:45.000000000","message":"Perfect","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":286,"context_line":"              ${include: providers[].identification}"},{"line_number":287,"context_line":"          # Customize the providers\u0027 inventories"},{"line_number":288,"context_line":"          inventories:"},{"line_number":289,"context_line":"              add:"},{"line_number":290,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":291,"context_line":"                  # If inventory exists, it is replaced (because this needs to"},{"line_number":292,"context_line":"                  # be repeatable)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_e004dfc8","line":289,"range":{"start_line":289,"start_character":14,"end_line":289,"end_character":17},"updated":"2019-06-04 12:11:46.000000000","message":"Can we call it \u0027replace\u0027 or \u0027ensure\u0027 or \u0027exists\u0027 as add sound like this is not an idempotent operation but the description below states that the intention is that the change is idempotent.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":286,"context_line":"              ${include: providers[].identification}"},{"line_number":287,"context_line":"          # Customize the providers\u0027 inventories"},{"line_number":288,"context_line":"          inventories:"},{"line_number":289,"context_line":"              add:"},{"line_number":290,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":291,"context_line":"                  # If inventory exists, it is replaced (because this needs to"},{"line_number":292,"context_line":"                  # be repeatable)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_5151c80d","line":289,"range":{"start_line":289,"start_character":14,"end_line":289,"end_character":17},"in_reply_to":"9fb8cfa7_9ed67227","updated":"2019-06-06 16:58:05.000000000","message":"Good call gibi, I like \"ensure\".","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"cae34baa330f4e06f8026e895aa2ed647d00d93f","unresolved":false,"context_lines":[{"line_number":286,"context_line":"              ${include: providers[].identification}"},{"line_number":287,"context_line":"          # Customize the providers\u0027 inventories"},{"line_number":288,"context_line":"          inventories:"},{"line_number":289,"context_line":"              add:"},{"line_number":290,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":291,"context_line":"                  # If inventory exists, it is replaced (because this needs to"},{"line_number":292,"context_line":"                  # be repeatable)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_9ed67227","line":289,"range":{"start_line":289,"start_character":14,"end_line":289,"end_character":17},"in_reply_to":"9fb8cfa7_e004dfc8","updated":"2019-06-06 12:12:07.000000000","message":"We need to introduce sanity checks based on unique identifier to avoid duplicates and allow overrides/updates to values.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"cae34baa330f4e06f8026e895aa2ed647d00d93f","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                  # trick."},{"line_number":295,"context_line":"                  $resource_class:"},{"line_number":296,"context_line":"                      # Fields not specified get defaults and/or are eligible"},{"line_number":297,"context_line":"                      # to be discovered by the owning service."},{"line_number":298,"context_line":"                      total: $int"},{"line_number":299,"context_line":"                      reserved: $int"},{"line_number":300,"context_line":"                      min_unit: $int"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_1ecb6272","line":297,"range":{"start_line":297,"start_character":48,"end_line":297,"end_character":63},"updated":"2019-06-06 12:12:07.000000000","message":"Also unclear about the role of owning service and why it is needed when we talk about updates to placement","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                  # trick."},{"line_number":295,"context_line":"                  $resource_class:"},{"line_number":296,"context_line":"                      # Fields not specified get defaults and/or are eligible"},{"line_number":297,"context_line":"                      # to be discovered by the owning service."},{"line_number":298,"context_line":"                      total: $int"},{"line_number":299,"context_line":"                      reserved: $int"},{"line_number":300,"context_line":"                      min_unit: $int"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_c0e19b00","line":297,"range":{"start_line":297,"start_character":48,"end_line":297,"end_character":62},"updated":"2019-06-04 12:11:46.000000000","message":"I guess this something other than placement but below in \u0027patch\u0027 it feels we talk about placement as the consumer of this info.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                  # trick."},{"line_number":295,"context_line":"                  $resource_class:"},{"line_number":296,"context_line":"                      # Fields not specified get defaults and/or are eligible"},{"line_number":297,"context_line":"                      # to be discovered by the owning service."},{"line_number":298,"context_line":"                      total: $int"},{"line_number":299,"context_line":"                      reserved: $int"},{"line_number":300,"context_line":"                      min_unit: $int"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_1174b098","line":297,"range":{"start_line":297,"start_character":48,"end_line":297,"end_character":63},"in_reply_to":"9fb8cfa7_1ecb6272","updated":"2019-06-06 16:58:05.000000000","message":"See notes above about getting rid of the concept of ownership for this iteration.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                  # trick."},{"line_number":295,"context_line":"                  $resource_class:"},{"line_number":296,"context_line":"                      # Fields not specified get defaults and/or are eligible"},{"line_number":297,"context_line":"                      # to be discovered by the owning service."},{"line_number":298,"context_line":"                      total: $int"},{"line_number":299,"context_line":"                      reserved: $int"},{"line_number":300,"context_line":"                      min_unit: $int"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_517a2888","line":297,"range":{"start_line":297,"start_character":48,"end_line":297,"end_character":62},"in_reply_to":"9fb8cfa7_c0e19b00","updated":"2019-06-06 16:58:05.000000000","message":"\u003e I guess this something other than placement but below in \u0027patch\u0027 it\n \u003e feels we talk about placement as the consumer of this info.\n\nWell, placement gets updated based on this info. But it gets updated by nova-compute (via update_provider_tree).","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eed3f2c2596db3ff7a7d9de99aa3e7dfd828d98f","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                      step_size: $int"},{"line_number":303,"context_line":"                      allocation_ratio: $float"},{"line_number":304,"context_line":"                  ..."},{"line_number":305,"context_line":"              patch:"},{"line_number":306,"context_line":"                  # As above, but fields not specified are left as-is in the"},{"line_number":307,"context_line":"                  # db."},{"line_number":308,"context_line":"                  # Can result in overcommitted situations (which may have been"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_08598333","line":305,"updated":"2019-06-12 16:01:22.000000000","message":"Why (in the eff) are we allowing for this? You want to let people do things like expose a larger disk inventory than they have, instead of changing the allocation ratio, or other mis-guided or ignorance-guided sorts of operations?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                      step_size: $int"},{"line_number":303,"context_line":"                      allocation_ratio: $float"},{"line_number":304,"context_line":"                  ..."},{"line_number":305,"context_line":"              patch:"},{"line_number":306,"context_line":"                  # As above, but fields not specified are left as-is in the"},{"line_number":307,"context_line":"                  # db."},{"line_number":308,"context_line":"                  # Can result in overcommitted situations (which may have been"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_6dfe96af","line":305,"in_reply_to":"9fb8cfa7_08598333","updated":"2019-06-19 18:01:11.000000000","message":"\u003e Why (in the eff) are we allowing for this? You want to let people\n \u003e do things like expose a larger disk inventory than they have,\n \u003e instead of changing the allocation ratio, or other mis-guided or\n \u003e ignorance-guided sorts of operations?\n\nActually this would be exactly for things like overriding the allocation ratio (without touching the total). This would ultimately replace the *_allocation_ratio config values, which is one of the things this file was originally conceived to do.\n\nWe could combine \u0027add\u0027 and \u0027patch\u0027 (and call it \u0027ensure\u0027 as gibi suggests) and simply leave any unspecified values alone. The problem is when that\u0027s used to create a new inventory, not everything has reasonable defaults - like `total`.\n\nSo maybe this:\n\nSupport \u0027ensure\u0027 with all the fields, which you can only use to create inventories of resource classes the virt driver doesn\u0027t know about. If we see a `total` for a resource class we already managed, error.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"df3f40b07498a3eed286c3b75864d6255e72a11b","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                      step_size: $int"},{"line_number":303,"context_line":"                      allocation_ratio: $float"},{"line_number":304,"context_line":"                  ..."},{"line_number":305,"context_line":"              patch:"},{"line_number":306,"context_line":"                  # As above, but fields not specified are left as-is in the"},{"line_number":307,"context_line":"                  # db."},{"line_number":308,"context_line":"                  # Can result in overcommitted situations (which may have been"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_5e67c326","line":305,"in_reply_to":"9fb8cfa7_08598333","updated":"2019-06-19 11:15:37.000000000","message":"This also seems redundant to \"add\" when read again with different values and poses the same risk. Will skip this anyway.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                      allocation_ratio: $float"},{"line_number":304,"context_line":"                  ..."},{"line_number":305,"context_line":"              patch:"},{"line_number":306,"context_line":"                  # As above, but fields not specified are left as-is in the"},{"line_number":307,"context_line":"                  # db."},{"line_number":308,"context_line":"                  # Can result in overcommitted situations (which may have been"},{"line_number":309,"context_line":"                  # the intent, e.g. reserved \u003d total)."},{"line_number":310,"context_line":"                  # Consuming service may wish to ignore or error on"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_003333ad","line":307,"range":{"start_line":306,"start_character":69,"end_line":307,"end_character":23},"updated":"2019-06-04 12:11:46.000000000","message":"placement?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                      allocation_ratio: $float"},{"line_number":304,"context_line":"                  ..."},{"line_number":305,"context_line":"              patch:"},{"line_number":306,"context_line":"                  # As above, but fields not specified are left as-is in the"},{"line_number":307,"context_line":"                  # db."},{"line_number":308,"context_line":"                  # Can result in overcommitted situations (which may have been"},{"line_number":309,"context_line":"                  # the intent, e.g. reserved \u003d total)."},{"line_number":310,"context_line":"                  # Consuming service may wish to ignore or error on"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_d165b8e2","line":307,"range":{"start_line":306,"start_character":69,"end_line":307,"end_character":23},"in_reply_to":"9fb8cfa7_003333ad","updated":"2019-06-06 16:58:05.000000000","message":"\"in the provider tree, by update_provider_tree\"","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                  # db."},{"line_number":308,"context_line":"                  # Can result in overcommitted situations (which may have been"},{"line_number":309,"context_line":"                  # the intent, e.g. reserved \u003d total)."},{"line_number":310,"context_line":"                  # Consuming service may wish to ignore or error on"},{"line_number":311,"context_line":"                  # inventories which are not found."},{"line_number":312,"context_line":"              remove:"},{"line_number":313,"context_line":"                  # List of resource class names."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_6021cf4d","line":310,"range":{"start_line":310,"start_character":20,"end_line":310,"end_character":38},"updated":"2019-06-04 12:11:46.000000000","message":"placement?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                  # db."},{"line_number":308,"context_line":"                  # Can result in overcommitted situations (which may have been"},{"line_number":309,"context_line":"                  # the intent, e.g. reserved \u003d total)."},{"line_number":310,"context_line":"                  # Consuming service may wish to ignore or error on"},{"line_number":311,"context_line":"                  # inventories which are not found."},{"line_number":312,"context_line":"              remove:"},{"line_number":313,"context_line":"                  # List of resource class names."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_519f88b3","line":310,"range":{"start_line":310,"start_character":20,"end_line":310,"end_character":38},"in_reply_to":"9fb8cfa7_6021cf4d","updated":"2019-06-06 16:58:05.000000000","message":"update_provider_tree","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eed3f2c2596db3ff7a7d9de99aa3e7dfd828d98f","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                  # the intent, e.g. reserved \u003d total)."},{"line_number":310,"context_line":"                  # Consuming service may wish to ignore or error on"},{"line_number":311,"context_line":"                  # inventories which are not found."},{"line_number":312,"context_line":"              remove:"},{"line_number":313,"context_line":"                  # List of resource class names."},{"line_number":314,"context_line":"                  # If allocations exist, consuming service should error."},{"line_number":315,"context_line":"                  # Inventories not found should be ignored (because this needs"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_88b25348","line":312,"updated":"2019-06-12 16:01:22.000000000","message":"...and they can specify anything they want here? Like remove VCPU inventory?","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"df3f40b07498a3eed286c3b75864d6255e72a11b","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                  # the intent, e.g. reserved \u003d total)."},{"line_number":310,"context_line":"                  # Consuming service may wish to ignore or error on"},{"line_number":311,"context_line":"                  # inventories which are not found."},{"line_number":312,"context_line":"              remove:"},{"line_number":313,"context_line":"                  # List of resource class names."},{"line_number":314,"context_line":"                  # If allocations exist, consuming service should error."},{"line_number":315,"context_line":"                  # Inventories not found should be ignored (because this needs"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_9e7c5bb6","line":312,"in_reply_to":"9fb8cfa7_88b25348","updated":"2019-06-19 11:15:37.000000000","message":"This flexibility is not needed now. I\u0027m thinking about automated services (like RMD or Cyborg) that can drop this file and work with \"remove\" after detecting hot-plug/remove.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                  # the intent, e.g. reserved \u003d total)."},{"line_number":310,"context_line":"                  # Consuming service may wish to ignore or error on"},{"line_number":311,"context_line":"                  # inventories which are not found."},{"line_number":312,"context_line":"              remove:"},{"line_number":313,"context_line":"                  # List of resource class names."},{"line_number":314,"context_line":"                  # If allocations exist, consuming service should error."},{"line_number":315,"context_line":"                  # Inventories not found should be ignored (because this needs"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_ed2b662d","line":312,"in_reply_to":"9fb8cfa7_9e7c5bb6","updated":"2019-06-19 18:01:11.000000000","message":"Yeah, we can get rid of this. If you want to disable an inventory, you can always set reserved\u003dtotal.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                  # to be repeatable)."},{"line_number":317,"context_line":"                  - $resource_class"},{"line_number":318,"context_line":"                  - ..."},{"line_number":319,"context_line":"              rename:"},{"line_number":320,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":321,"context_line":"                  # original resource class name."},{"line_number":322,"context_line":"                  # If inventory of keyed resource class is found, replace with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_a0aa6782","line":319,"updated":"2019-06-04 12:11:46.000000000","message":"What is the use case behind a resource class rename? I see that reshape is mentioned below. But in my head reshape always involves more reshuffling work than a simple rename.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e9cbaa0674f3efc9666e0778caa4c9d0c6647247","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                  # to be repeatable)."},{"line_number":317,"context_line":"                  - $resource_class"},{"line_number":318,"context_line":"                  - ..."},{"line_number":319,"context_line":"              rename:"},{"line_number":320,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":321,"context_line":"                  # original resource class name."},{"line_number":322,"context_line":"                  # If inventory of keyed resource class is found, replace with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_cfc3d656","line":319,"in_reply_to":"9fb8cfa7_4dc87273","updated":"2019-06-21 08:43:45.000000000","message":"Do we also agree that this file could be periodically read by the consumer - like virt driver. In which case some operations need not be performed unless there was change from old state.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"df3f40b07498a3eed286c3b75864d6255e72a11b","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                  # to be repeatable)."},{"line_number":317,"context_line":"                  - $resource_class"},{"line_number":318,"context_line":"                  - ..."},{"line_number":319,"context_line":"              rename:"},{"line_number":320,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":321,"context_line":"                  # original resource class name."},{"line_number":322,"context_line":"                  # If inventory of keyed resource class is found, replace with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_c9377fe3","line":319,"in_reply_to":"9fb8cfa7_68627fda","updated":"2019-06-19 11:15:37.000000000","message":"One workaround is to ignore resource classes no longer found.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eed3f2c2596db3ff7a7d9de99aa3e7dfd828d98f","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                  # to be repeatable)."},{"line_number":317,"context_line":"                  - $resource_class"},{"line_number":318,"context_line":"                  - ..."},{"line_number":319,"context_line":"              rename:"},{"line_number":320,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":321,"context_line":"                  # original resource class name."},{"line_number":322,"context_line":"                  # If inventory of keyed resource class is found, replace with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_68627fda","line":319,"in_reply_to":"9fb8cfa7_7192cca0","updated":"2019-06-12 16:01:22.000000000","message":"Again, this makes this file only valid (or useful) for a single-shot use? I guess I thought you were going for a more declarative view of things and not using this like a ... script ... or something.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"0e60a79e48d5e4404038d4204fc78daec2115df5","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                  # to be repeatable)."},{"line_number":317,"context_line":"                  - $resource_class"},{"line_number":318,"context_line":"                  - ..."},{"line_number":319,"context_line":"              rename:"},{"line_number":320,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":321,"context_line":"                  # original resource class name."},{"line_number":322,"context_line":"                  # If inventory of keyed resource class is found, replace with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_fc6628ed","line":319,"in_reply_to":"9fb8cfa7_970ab476","updated":"2019-06-28 10:40:31.000000000","message":"How do hotplugs work today - does admin\u0027s restart the compute service?\nIf not, if a hotplug resource is described through this file (using automation), the virt-driver can pick it up in its periodic updates.\n\n\nSecondly, when virt driver fails the file processing (due to version/syntax/logical errors) - do we fail the compute service itself? We should or else we would be dealing with insufficient data in the placement.\n\nIf yes, irrespective of how we do - pickup updates on restart of compute or do periodic, the admin has to intervene to fix the file. In such a case, a period refresh failure can proceed only after the file is fixed for compute service to resume.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                  # to be repeatable)."},{"line_number":317,"context_line":"                  - $resource_class"},{"line_number":318,"context_line":"                  - ..."},{"line_number":319,"context_line":"              rename:"},{"line_number":320,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":321,"context_line":"                  # original resource class name."},{"line_number":322,"context_line":"                  # If inventory of keyed resource class is found, replace with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_7192cca0","line":319,"in_reply_to":"9fb8cfa7_a0aa6782","updated":"2019-06-06 16:58:05.000000000","message":"Here\u0027s an example: let\u0027s say I started off supporting L3 cache via inventory of CUSTOM_L3_CACHE_MB. Then in the next release I managed to get a standard resource class L3_CACHE_MB introduced. I could use this to get the inventory renamed.\n\nBut I think we can get rid of this for now.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                  # to be repeatable)."},{"line_number":317,"context_line":"                  - $resource_class"},{"line_number":318,"context_line":"                  - ..."},{"line_number":319,"context_line":"              rename:"},{"line_number":320,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":321,"context_line":"                  # original resource class name."},{"line_number":322,"context_line":"                  # If inventory of keyed resource class is found, replace with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_4dc87273","line":319,"in_reply_to":"9fb8cfa7_c9377fe3","updated":"2019-06-19 18:01:11.000000000","message":"++ declarative, -- script. Agree we shouldn\u0027t use this for reshape-y things. Nix.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"47b84576ae6e811aec4db47e3094d082c84dba86","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                  # to be repeatable)."},{"line_number":317,"context_line":"                  - $resource_class"},{"line_number":318,"context_line":"                  - ..."},{"line_number":319,"context_line":"              rename:"},{"line_number":320,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":321,"context_line":"                  # original resource class name."},{"line_number":322,"context_line":"                  # If inventory of keyed resource class is found, replace with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_970ab476","line":319,"in_reply_to":"9fb8cfa7_cfc3d656","updated":"2019-06-24 16:52:20.000000000","message":"The contents of the file need to be taken into account every time update_provider_tree runs, which is a) on compute service startup and b) on each periodic task interval.\n\nSo the question is: should the file be read afresh each time, or loaded and cached?\n\nIf the latter, a compute service restart (or the mythical SIGHUP, if that\u0027s ever fixed) would be required to pick up any changes. That would be a fine usage model IMO - but caching is distasteful to some.\n\nIf the former, what happens if the file is broken? It would be draconian to crater the compute service for a typo. But it would be arguably worse to ignore the corrupted file and proceed with... what? The old data (in which case it would need to be cached anyway)? Pretend like the file isn\u0027t there, undoing any customizations?\n\nSo I\u0027m going to say we should load once, on startup, save the (parsed \u0026 validated) data in the compute process (as an instance attribute on the virt driver? in the compute manager? implementation detail), and require a compute service restart to pick up any changes.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3167795cf5ad7847f072808fb4b5d3b22e81f251","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                  # to be repeatable)."},{"line_number":317,"context_line":"                  - $resource_class"},{"line_number":318,"context_line":"                  - ..."},{"line_number":319,"context_line":"              rename:"},{"line_number":320,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":321,"context_line":"                  # original resource class name."},{"line_number":322,"context_line":"                  # If inventory of keyed resource class is found, replace with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_ae47081d","line":319,"in_reply_to":"9fb8cfa7_fc6628ed","updated":"2019-06-28 22:08:15.000000000","message":"\u003e How do hotplugs work today - does admin\u0027s restart the compute\n \u003e service?\n\nYes.\n\n \u003e If not, if a hotplug resource is described through this file (using\n \u003e automation), the virt-driver can pick it up in its periodic\n \u003e updates.\n\nRight, we talked about that elsewhere. It\u0027s going to be too complicated to try to manage hot updates to this file. We\u0027ll process it once, on compute service startup. If the file(s) are in any way invalid, the compute service startup must fail. The admin has to intervene, fix (or remove) the file(s), and try to start the compute service again.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                  ..."},{"line_number":332,"context_line":"          # Add or remove traits"},{"line_number":333,"context_line":"          traits:"},{"line_number":334,"context_line":"              add:"},{"line_number":335,"context_line":"                  - $trait_pattern"},{"line_number":336,"context_line":"                  - ..."},{"line_number":337,"context_line":"              remove:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_c0af5b92","line":334,"range":{"start_line":334,"start_character":14,"end_line":334,"end_character":17},"updated":"2019-06-04 12:11:46.000000000","message":"ensure, exists","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eed3f2c2596db3ff7a7d9de99aa3e7dfd828d98f","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                  ..."},{"line_number":332,"context_line":"          # Add or remove traits"},{"line_number":333,"context_line":"          traits:"},{"line_number":334,"context_line":"              add:"},{"line_number":335,"context_line":"                  - $trait_pattern"},{"line_number":336,"context_line":"                  - ..."},{"line_number":337,"context_line":"              remove:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_2887a764","line":334,"range":{"start_line":334,"start_character":14,"end_line":334,"end_character":17},"in_reply_to":"9fb8cfa7_c0af5b92","updated":"2019-06-12 16:01:22.000000000","message":"++ make this more declarative and less like a procedural translation.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                  - ..."},{"line_number":343,"context_line":"          # Add or remove aggregate associations"},{"line_number":344,"context_line":"          aggregates:"},{"line_number":345,"context_line":"              add:"},{"line_number":346,"context_line":"                  # List of aggregate UUIDs."},{"line_number":347,"context_line":"                  # REVIEWERS: Is there any other way we want to allow"},{"line_number":348,"context_line":"                  # identification of aggregates?"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_2077573d","line":345,"range":{"start_line":345,"start_character":14,"end_line":345,"end_character":17},"updated":"2019-06-04 12:11:46.000000000","message":"(ensure-)member-of","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":361,"context_line":"Miscellaneous notes:"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"* Each item in the ``providers`` list will identify a set of zero or more"},{"line_number":364,"context_line":"  providers. Consuming services should generate an error if these sets are not"},{"line_number":365,"context_line":"  mutually exclusive."},{"line_number":366,"context_line":"* Let\u0027s make all the hex patterns (``$hexN_pattern``, ``$uuid_pattern``,"},{"line_number":367,"context_line":"  ``$pci_dbsf_pattern``) case-insensitive."},{"line_number":368,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_e0b7ffd7","line":365,"range":{"start_line":364,"start_character":66,"end_line":365,"end_character":21},"updated":"2019-06-04 12:11:46.000000000","message":"Is it a technical limitation? I can imaging that I \n* first, identify a set of compute RPs where I want to disable a cpu trait\n* second, identify another (possibly overlapping) set of compute RPs where I want to configure a specific allocation ratio.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":361,"context_line":"Miscellaneous notes:"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"* Each item in the ``providers`` list will identify a set of zero or more"},{"line_number":364,"context_line":"  providers. Consuming services should generate an error if these sets are not"},{"line_number":365,"context_line":"  mutually exclusive."},{"line_number":366,"context_line":"* Let\u0027s make all the hex patterns (``$hexN_pattern``, ``$uuid_pattern``,"},{"line_number":367,"context_line":"  ``$pci_dbsf_pattern``) case-insensitive."},{"line_number":368,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_71788c29","line":365,"range":{"start_line":364,"start_character":66,"end_line":365,"end_character":21},"in_reply_to":"9fb8cfa7_e0b7ffd7","updated":"2019-06-06 16:58:05.000000000","message":"I can see your use case; but then it becomes a lot harder to identify conflicts. I stated it this way for simplicity. I don\u0027t think it\u0027s too onerous to put the burden on the author of the file to consolidate all the tweaks for a given provider into one section.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":366,"context_line":"* Let\u0027s make all the hex patterns (``$hexN_pattern``, ``$uuid_pattern``,"},{"line_number":367,"context_line":"  ``$pci_dbsf_pattern``) case-insensitive."},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"Example"},{"line_number":370,"context_line":"-------"},{"line_number":371,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":372,"context_line":"          file format could be consumed to replace (pieces of) the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_000b338e","line":369,"updated":"2019-06-04 12:11:46.000000000","message":"Please refer to this example from the beginning of the Proposed Change section (or even move it there) as it answers a lot of the questions I had during reading the this doc so far.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":405,"context_line":"The virt driver, in ``update_provider_tree``, having discovered devices on the"},{"line_number":406,"context_line":"system, and knowing their PCI addresses, parses the providers.yaml file,"},{"line_number":407,"context_line":"gathers a list of ``pci_address`` values from stanzas with"},{"line_number":408,"context_line":"``ownership.service\u003d\u003dnova`` and ``passthrough.allow\u003d\u003dtrue``, filters the list"},{"line_number":409,"context_line":"of discovered devices accordingly, and creates resource providers for"},{"line_number":410,"context_line":"whatever\u0027s left."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Whatever spec actually designs the above process should also prescribe what"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_80d723c0","line":409,"range":{"start_line":408,"start_character":61,"end_line":409,"end_character":33},"updated":"2019-06-04 12:11:46.000000000","message":"Does it mean if nothing is in the providers.yaml then every discovered device will be reported? I think the current behavior is to only report what is whitelisted in the config.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":405,"context_line":"The virt driver, in ``update_provider_tree``, having discovered devices on the"},{"line_number":406,"context_line":"system, and knowing their PCI addresses, parses the providers.yaml file,"},{"line_number":407,"context_line":"gathers a list of ``pci_address`` values from stanzas with"},{"line_number":408,"context_line":"``ownership.service\u003d\u003dnova`` and ``passthrough.allow\u003d\u003dtrue``, filters the list"},{"line_number":409,"context_line":"of discovered devices accordingly, and creates resource providers for"},{"line_number":410,"context_line":"whatever\u0027s left."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Whatever spec actually designs the above process should also prescribe what"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_b1ccc46a","line":409,"range":{"start_line":408,"start_character":61,"end_line":409,"end_character":33},"in_reply_to":"9fb8cfa7_80d723c0","updated":"2019-06-06 16:58:05.000000000","message":"IF we started replacing [pci]passthrough_whitelist with this, I would expect we would need to make the default blacklist-all for compatibility.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0ab7b79481dd43557881e439831ba6f396f4aa43","unresolved":false,"context_lines":[{"line_number":417,"context_line":"*also* be included in the same doc so that the author of providers.yaml will"},{"line_number":418,"context_line":"know how to construct the remainder of their stanza if they want to e.g. switch"},{"line_number":419,"context_line":"off one of those automatic traits::"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"  ..."},{"line_number":422,"context_line":"  customization:"},{"line_number":423,"context_line":"    traits:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_a09ee704","line":420,"updated":"2019-06-04 12:11:46.000000000","message":"Hm. the current nova behavior seems to be different case by case how to handle discovered information:\n* in case of pci devices, nothing is reported by default. Devices can be whitelisted in config to allow reporting them.\n* in case of cpu traits, everything is reported by default.\n\nDo we want to support both behaviors in the provider.yaml? If yes then we have to be explicit for every case which is the default behavior so that the deployer can write the yaml accordingly (whitelist, or remove).","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c4ba13f37e52e4a1e19965d8db1493aeaff6348","unresolved":false,"context_lines":[{"line_number":417,"context_line":"*also* be included in the same doc so that the author of providers.yaml will"},{"line_number":418,"context_line":"know how to construct the remainder of their stanza if they want to e.g. switch"},{"line_number":419,"context_line":"off one of those automatic traits::"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"  ..."},{"line_number":422,"context_line":"  customization:"},{"line_number":423,"context_line":"    traits:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_d1513864","line":420,"in_reply_to":"9fb8cfa7_a09ee704","updated":"2019-06-06 16:58:05.000000000","message":"Right, this was something I struggled with quite a bit.\n\nSince we\u0027re refocusing this to be nova- and virt-specific, I think it\u0027s fine for the virt driver to define (via documentation) different behaviors for different areas that are being affected.\n\nSince I\u0027m pretty sure we\u0027re not going to start hacking up the PCI subsystem with this just yet, I think we can remove \u0027passthrough\u0027 entirely; and the rest is explicit ensure/remove/patch.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eed3f2c2596db3ff7a7d9de99aa3e7dfd828d98f","unresolved":false,"context_lines":[{"line_number":440,"context_line":"self-documenting."},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"`Jay\u0027s Rocky provider-config-file proposal`_ suggested that we should use one"},{"line_number":443,"context_line":"file per provider, rather than a single file for all providers. A single file"},{"line_number":444,"context_line":"is preferred because:"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"* We can use a single config option to define the path to the file. It is more"},{"line_number":447,"context_line":"  complicated to define multiple config options, a list config option, or"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_88e01328","line":444,"range":{"start_line":443,"start_character":64,"end_line":444,"end_character":21},"updated":"2019-06-12 16:01:22.000000000","message":"I would tend to assume that people writing deployment tools would not agree here. It means that *all* of your logic for what goes in here has to be in the same place and prepared to make all the decisions at the same time, which .. like .. never happens. A single nova.d directory means we don\u0027t have to worry about naming, we just glob and parse every file in there. It\u0027s massively easier for modular config management to do it that way.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e9cbaa0674f3efc9666e0778caa4c9d0c6647247","unresolved":false,"context_lines":[{"line_number":440,"context_line":"self-documenting."},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"`Jay\u0027s Rocky provider-config-file proposal`_ suggested that we should use one"},{"line_number":443,"context_line":"file per provider, rather than a single file for all providers. A single file"},{"line_number":444,"context_line":"is preferred because:"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"* We can use a single config option to define the path to the file. It is more"},{"line_number":447,"context_line":"  complicated to define multiple config options, a list config option, or"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_8f915e49","line":444,"range":{"start_line":443,"start_character":64,"end_line":444,"end_character":21},"in_reply_to":"9fb8cfa7_4d763241","updated":"2019-06-21 08:43:45.000000000","message":"Folder can also help tools that auto generate and drop the file (like RMD) to only provide sections it cares instead of patching to the file.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"89c22cfebcfda20a47bb2603d0b1bff16dc13c66","unresolved":false,"context_lines":[{"line_number":440,"context_line":"self-documenting."},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"`Jay\u0027s Rocky provider-config-file proposal`_ suggested that we should use one"},{"line_number":443,"context_line":"file per provider, rather than a single file for all providers. A single file"},{"line_number":444,"context_line":"is preferred because:"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"* We can use a single config option to define the path to the file. It is more"},{"line_number":447,"context_line":"  complicated to define multiple config options, a list config option, or"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_4d763241","line":444,"range":{"start_line":443,"start_character":64,"end_line":444,"end_character":21},"in_reply_to":"9fb8cfa7_88e01328","updated":"2019-06-19 18:01:11.000000000","message":"I\u0027m okay with providers.d/*.yaml (though not sure it makes sense for it to be anywhere *nova*), as long as you\u0027re only allowed to identify a given provider once across all the configs.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"47b84576ae6e811aec4db47e3094d082c84dba86","unresolved":false,"context_lines":[{"line_number":440,"context_line":"self-documenting."},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"`Jay\u0027s Rocky provider-config-file proposal`_ suggested that we should use one"},{"line_number":443,"context_line":"file per provider, rather than a single file for all providers. A single file"},{"line_number":444,"context_line":"is preferred because:"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"* We can use a single config option to define the path to the file. It is more"},{"line_number":447,"context_line":"  complicated to define multiple config options, a list config option, or"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_f77e90e2","line":444,"range":{"start_line":443,"start_character":64,"end_line":444,"end_character":21},"in_reply_to":"9fb8cfa7_8f915e49","updated":"2019-06-24 16:52:20.000000000","message":"Yup, good with me. But see above about stating that the files are processed in lexicographical order.","commit_id":"b94a93be05967343364932726897e62b96272410"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":16,"context_line":".. note:: This work is derived from `Jay\u0027s Rocky provider-config-file"},{"line_number":17,"context_line":"          proposal`_ and `Konstantinos\u0027s device-placement-model spec`_ (which"},{"line_number":18,"context_line":"          is derived from `Eric\u0027s device-passthrough spec`_), but differs in"},{"line_number":19,"context_line":"          several substantive ways."},{"line_number":20,"context_line":"\t\t  "},{"line_number":21,"context_line":".. note:: We currently limit the ownership and consumption of the YAML"},{"line_number":22,"context_line":"\t\t  as described by the file format to Nova only.\t\t  "}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_0ed41447","line":19,"updated":"2019-06-28 22:04:59.000000000","message":"This should also reference the PTG discussion, as that\u0027s what\u0027s influencing the current rescoping etc.\n\nhttp://lists.openstack.org/pipermail/openstack-discuss/2019-May/thread.html#5809","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":17,"context_line":"          proposal`_ and `Konstantinos\u0027s device-placement-model spec`_ (which"},{"line_number":18,"context_line":"          is derived from `Eric\u0027s device-passthrough spec`_), but differs in"},{"line_number":19,"context_line":"          several substantive ways."},{"line_number":20,"context_line":"\t\t  "},{"line_number":21,"context_line":".. note:: We currently limit the ownership and consumption of the YAML"},{"line_number":22,"context_line":"\t\t  as described by the file format to Nova only.\t\t  "},{"line_number":23,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_a0115e5f","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":4},"updated":"2019-06-28 22:04:59.000000000","message":"Please eliminate tabs and trailing whitespace throughout.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":21,"context_line":".. note:: We currently limit the ownership and consumption of the YAML"},{"line_number":22,"context_line":"\t\t  as described by the file format to Nova only.\t\t  "},{"line_number":23,"context_line":""},{"line_number":24,"context_line":".. note:: This is intended to define a *framework* for currently active"},{"line_number":25,"context_line":"\t\t  usecases. Subsequent features can define the semantics by which the"},{"line_number":26,"context_line":"\t\t  framework can be used or enhanced to satisfy particular use cases."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_0b52cb13","line":26,"range":{"start_line":24,"start_character":0,"end_line":26,"end_character":70},"updated":"2019-06-28 22:04:59.000000000","message":"Nope, at this point we also need this spec to describe how the file is consumed by nova-compute. Something involving update_provider_tree. Which almost certainly means support needs to be implemented per virt driver (and thus needs a support matrix entry).","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":29,"context_line":"Problem description"},{"line_number":30,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":31,"context_line":"In order to facilitate the proper management of resource provider information"},{"line_number":32,"context_line":"in the placement API by agents both within Nova (such as virt drivers and the"},{"line_number":33,"context_line":"PCI passthrough subsystem) and without (including operators as well as other"},{"line_number":34,"context_line":"services such as Neutron and Cyborg), we require a way of expressing various"},{"line_number":35,"context_line":"overrides for resource provider information. While we could continue to use"},{"line_number":36,"context_line":"many existing and new configuration options for expressing this information,"},{"line_number":37,"context_line":"having a standardized, versioned provider descriptor file format allows us to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_ab6dbfcc","line":34,"range":{"start_line":32,"start_character":31,"end_line":34,"end_character":36},"updated":"2019-06-28 22:04:59.000000000","message":"Let\u0027s trim this to \"within Nova\" to represent the current scope.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":41,"context_line":"Use Cases"},{"line_number":42,"context_line":"---------"},{"line_number":43,"context_line":"Note that the file format/schema defined here is designed to accomodate the"},{"line_number":44,"context_line":"following use cases, but actually enabling the use cases is outside the scope"},{"line_number":45,"context_line":"of this blueprint and will be the subject of separate specs. The file"},{"line_number":46,"context_line":"format/schema currently addresses few usecases that require changes to"},{"line_number":47,"context_line":"resource provider information, that is consumed by virt driver in Nova but it"},{"line_number":48,"context_line":"should allow options for extensions to be consumed by Nova or other services"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_4b5c4318","line":45,"range":{"start_line":44,"start_character":25,"end_line":45,"end_character":59},"updated":"2019-06-28 22:04:59.000000000","message":"nope","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":43,"context_line":"Note that the file format/schema defined here is designed to accomodate the"},{"line_number":44,"context_line":"following use cases, but actually enabling the use cases is outside the scope"},{"line_number":45,"context_line":"of this blueprint and will be the subject of separate specs. The file"},{"line_number":46,"context_line":"format/schema currently addresses few usecases that require changes to"},{"line_number":47,"context_line":"resource provider information, that is consumed by virt driver in Nova but it"},{"line_number":48,"context_line":"should allow options for extensions to be consumed by Nova or other services"},{"line_number":49,"context_line":"as described in the problem statement."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_eb9c17c1","line":46,"range":{"start_line":46,"start_character":34,"end_line":46,"end_character":37},"updated":"2019-06-28 22:04:59.000000000","message":"a few","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":44,"context_line":"following use cases, but actually enabling the use cases is outside the scope"},{"line_number":45,"context_line":"of this blueprint and will be the subject of separate specs. The file"},{"line_number":46,"context_line":"format/schema currently addresses few usecases that require changes to"},{"line_number":47,"context_line":"resource provider information, that is consumed by virt driver in Nova but it"},{"line_number":48,"context_line":"should allow options for extensions to be consumed by Nova or other services"},{"line_number":49,"context_line":"as described in the problem statement."},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_2bb6af3f","line":47,"range":{"start_line":47,"start_character":29,"end_line":47,"end_character":38},"updated":"2019-06-28 22:04:59.000000000","message":"as","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":44,"context_line":"following use cases, but actually enabling the use cases is outside the scope"},{"line_number":45,"context_line":"of this blueprint and will be the subject of separate specs. The file"},{"line_number":46,"context_line":"format/schema currently addresses few usecases that require changes to"},{"line_number":47,"context_line":"resource provider information, that is consumed by virt driver in Nova but it"},{"line_number":48,"context_line":"should allow options for extensions to be consumed by Nova or other services"},{"line_number":49,"context_line":"as described in the problem statement."},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_eb85f75a","line":47,"range":{"start_line":47,"start_character":56,"end_line":47,"end_character":62},"updated":"2019-06-28 22:04:59.000000000","message":"drivers","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":46,"context_line":"format/schema currently addresses few usecases that require changes to"},{"line_number":47,"context_line":"resource provider information, that is consumed by virt driver in Nova but it"},{"line_number":48,"context_line":"should allow options for extensions to be consumed by Nova or other services"},{"line_number":49,"context_line":"as described in the problem statement."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Inventory Customization"},{"line_number":52,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_ab7b7f78","line":49,"range":{"start_line":49,"start_character":0,"end_line":49,"end_character":38},"updated":"2019-06-28 22:04:59.000000000","message":"in the future.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* Identify a provider unambiguously, even if it does not yet exist in"},{"line_number":64,"context_line":"  placement."},{"line_number":65,"context_line":"* Customize any aspect of the provider\u0027s inventory, including resource classes"},{"line_number":66,"context_line":"  , totals, min/max unit, step size, reserved amounts, and allocation ratios."},{"line_number":67,"context_line":"* Associate a provider with one or more aggregates. This feature can be"},{"line_number":68,"context_line":"  reserved until a valid use case can be identified."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_73a5799e","line":65,"range":{"start_line":65,"start_character":12,"end_line":65,"end_character":22},"updated":"2019-06-28 22:04:59.000000000","message":"We can probably narrow this down for the current iteration. Something like:\n\nCreate and manage inventories for resource classes not natively managed by the virt driver (VCPU, MEMORY_MB, DISK_GB, VGPU, etc.)\n\nI know I said earlier that we want to be able to manage e.g. reserved and allocation_ratio for native inventories, but let\u0027s worry about adding that later.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":63,"context_line":"* Identify a provider unambiguously, even if it does not yet exist in"},{"line_number":64,"context_line":"  placement."},{"line_number":65,"context_line":"* Customize any aspect of the provider\u0027s inventory, including resource classes"},{"line_number":66,"context_line":"  , totals, min/max unit, step size, reserved amounts, and allocation ratios."},{"line_number":67,"context_line":"* Associate a provider with one or more aggregates. This feature can be"},{"line_number":68,"context_line":"  reserved until a valid use case can be identified."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_d396a53e","line":66,"range":{"start_line":66,"start_character":2,"end_line":66,"end_character":3},"updated":"2019-06-28 22:04:59.000000000","message":"comma should be on previous line","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":64,"context_line":"  placement."},{"line_number":65,"context_line":"* Customize any aspect of the provider\u0027s inventory, including resource classes"},{"line_number":66,"context_line":"  , totals, min/max unit, step size, reserved amounts, and allocation ratios."},{"line_number":67,"context_line":"* Associate a provider with one or more aggregates. This feature can be"},{"line_number":68,"context_line":"  reserved until a valid use case can be identified."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Trait Customization"},{"line_number":71,"context_line":"~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_f399696c","line":68,"range":{"start_line":67,"start_character":0,"end_line":68,"end_character":52},"updated":"2019-06-28 22:04:59.000000000","message":"yeah, we can just take it out of the spec for now.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Trait Customization"},{"line_number":71,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":72,"context_line":"**An operator wishes to indicate that remove some traits with a provider** "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"For instance, when the virt driver on a compute node discovers a certain CPU"},{"line_number":75,"context_line":"feature and does not want report such a trait to the placement API."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_b3c8d154","line":72,"range":{"start_line":72,"start_character":24,"end_line":72,"end_character":63},"updated":"2019-06-28 22:04:59.000000000","message":"remove an automatic trait from","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Trait Customization"},{"line_number":71,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":72,"context_line":"**An operator wishes to indicate that remove some traits with a provider** "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"For instance, when the virt driver on a compute node discovers a certain CPU"},{"line_number":75,"context_line":"feature and does not want report such a trait to the placement API."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_b3be56d2","line":72,"range":{"start_line":72,"start_character":24,"end_line":72,"end_character":63},"in_reply_to":"9fb8cfa7_3971eddf","updated":"2019-07-03 19:55:43.000000000","message":"In that case the operator can remove the trait manually.\n\nEventually we\u0027ll want this for completeness, but it\u0027s a small corner case with an easy workaround, so let\u0027s take it out to minimize scope.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"aea7e0d2c9ef2c5f4c9e5ff80f410425c36cc199","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Trait Customization"},{"line_number":71,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":72,"context_line":"**An operator wishes to indicate that remove some traits with a provider** "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"For instance, when the virt driver on a compute node discovers a certain CPU"},{"line_number":75,"context_line":"feature and does not want report such a trait to the placement API."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_3971eddf","line":72,"range":{"start_line":72,"start_character":24,"end_line":72,"end_character":63},"in_reply_to":"9fb8cfa7_b3c8d154","updated":"2019-07-03 13:50:23.000000000","message":"Couldn\u0027t this also be a trait created by provider file before a compute restart - for instance CUSTOM_P_STATE if no longer supported from RMD","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Trait Customization"},{"line_number":71,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":72,"context_line":"**An operator wishes to indicate that remove some traits with a provider** "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"For instance, when the virt driver on a compute node discovers a certain CPU"},{"line_number":75,"context_line":"feature and does not want report such a trait to the placement API."},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_330b818e","line":73,"updated":"2019-06-28 22:04:59.000000000","message":"I\u0027m actually not sure we need this use case for the first pass.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":72,"context_line":"**An operator wishes to indicate that remove some traits with a provider** "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"For instance, when the virt driver on a compute node discovers a certain CPU"},{"line_number":75,"context_line":"feature and does not want report such a trait to the placement API."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"**An operator wishes to override traits with a provider.**"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_73bed9ae","line":75,"range":{"start_line":75,"start_character":12,"end_line":75,"end_character":32},"updated":"2019-06-28 22:04:59.000000000","message":"the admin does not want to report","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":74,"context_line":"For instance, when the virt driver on a compute node discovers a certain CPU"},{"line_number":75,"context_line":"feature and does not want report such a trait to the placement API."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"**An operator wishes to override traits with a provider.**"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This is important if an operator wants to override a set of compute node\u0027s"},{"line_number":80,"context_line":"traits and not have the virt driver overwrite that information."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"**An operator wishes to associate new traits with a provider.**"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_f3008968","line":80,"range":{"start_line":77,"start_character":0,"end_line":80,"end_character":63},"updated":"2019-06-28 22:04:59.000000000","message":"I\u0027m not sure we want this, ever.\n\nThe previous case covers where we want to *avoid* reporting an automatic trait that\u0027s otherwise *on*. And the following one allows reporting arbitrary (non-automatic) traits.\n\nBut I don\u0027t think we should allow reporting an automatic trait that\u0027s otherwise *off*. Under what circumstance would it make sense to e.g. pretend my host has CPUs with AVX2 when it doesn\u0027t?\n\nIn any case, we certainly don\u0027t need this for the first pass.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"aea7e0d2c9ef2c5f4c9e5ff80f410425c36cc199","unresolved":false,"context_lines":[{"line_number":74,"context_line":"For instance, when the virt driver on a compute node discovers a certain CPU"},{"line_number":75,"context_line":"feature and does not want report such a trait to the placement API."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"**An operator wishes to override traits with a provider.**"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This is important if an operator wants to override a set of compute node\u0027s"},{"line_number":80,"context_line":"traits and not have the virt driver overwrite that information."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"**An operator wishes to associate new traits with a provider.**"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_f9011508","line":80,"range":{"start_line":77,"start_character":0,"end_line":80,"end_character":63},"in_reply_to":"9fb8cfa7_f3008968","updated":"2019-07-03 13:50:23.000000000","message":"Makes sense, I\u0027m not able to think of any use-case that requires overriding. It should be remove or add new non-automatic trait.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":79,"context_line":"This is important if an operator wants to override a set of compute node\u0027s"},{"line_number":80,"context_line":"traits and not have the virt driver overwrite that information."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"**An operator wishes to associate new traits with a provider.**"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"These features could be experimental or not yet completely supported by Nova."},{"line_number":85,"context_line":"The expectation is that Nova can manage these traits and help schedule"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_534635c2","line":82,"range":{"start_line":82,"start_character":0,"end_line":82,"end_character":63},"updated":"2019-06-28 22:04:59.000000000","message":"Note that you can do this today simply by invoking placement (API or CLI) directly.\n\nHowever, I think it makes sense to include it in this file, even on the first pass, because the known use cases will involve both inventories and traits, and it makes sense to have a one-stop shop for provider customization.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":84,"context_line":"These features could be experimental or not yet completely supported by Nova."},{"line_number":85,"context_line":"The expectation is that Nova can manage these traits and help schedule"},{"line_number":86,"context_line":"workloads with support to new platform features against their traits."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"The file defined by this spec must allow its author to:"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* Identify a provider unambiguously, even if it does not yet exist in"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_b324510e","line":87,"updated":"2019-06-28 22:04:59.000000000","message":"So summarizing comments on \"Trait Customization\", I think we only need one use case: Add (non-automatic) traits to a provider.\n\nIn practical terms, this will be `ensure-traits (list)`.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":92,"context_line":"* Specify arbitrary traits which are to be to be associated with the provider."},{"line_number":93,"context_line":"* Specify automatic traits which are to be removed from the provider."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"NUMA"},{"line_number":96,"context_line":"~~~~"},{"line_number":97,"context_line":"**An admin wishes to be able to define a NUMA topology and schedule instances"},{"line_number":98,"context_line":"accordingly.**"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"NUMA gets a special section all of its own. It\u0027s still very much unknown"},{"line_number":101,"context_line":"whether or how we\u0027re going to skin this cat, but one possibility using this"},{"line_number":102,"context_line":"file format would entail:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"* Identifying the compute node root provider and removing its inventory of"},{"line_number":105,"context_line":"  ``VCPU``, ``MEMORY_MB``, ``LLC`` and possibly other things like devices."},{"line_number":106,"context_line":"* Defining (causing to be created) child/descendant providers representing"},{"line_number":107,"context_line":"  NUMA nodes/affinity and designating their nesting hierarchy, inventories"},{"line_number":108,"context_line":"  (of those resources removed from the compute node provider), traits, and"},{"line_number":109,"context_line":"  aggregate associations."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Proposed change"},{"line_number":112,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_936eed2c","line":109,"range":{"start_line":95,"start_character":0,"end_line":109,"end_character":25},"updated":"2019-06-28 22:04:59.000000000","message":"Remove this section.\n\nAny NUMA modeling at this level will be done by the virt driver itself, involving reshapes and other shenanigans.\n\nIf this file is going to dork with NUMA providers at all, it\u0027ll be in the same capacity as noted above: adding non-native inventories and traits.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d7516c7d7c77df05fe0aa39fa79e911b1a2c32ac","unresolved":false,"context_lines":[{"line_number":92,"context_line":"* Specify arbitrary traits which are to be to be associated with the provider."},{"line_number":93,"context_line":"* Specify automatic traits which are to be removed from the provider."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"NUMA"},{"line_number":96,"context_line":"~~~~"},{"line_number":97,"context_line":"**An admin wishes to be able to define a NUMA topology and schedule instances"},{"line_number":98,"context_line":"accordingly.**"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"NUMA gets a special section all of its own. It\u0027s still very much unknown"},{"line_number":101,"context_line":"whether or how we\u0027re going to skin this cat, but one possibility using this"},{"line_number":102,"context_line":"file format would entail:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"* Identifying the compute node root provider and removing its inventory of"},{"line_number":105,"context_line":"  ``VCPU``, ``MEMORY_MB``, ``LLC`` and possibly other things like devices."},{"line_number":106,"context_line":"* Defining (causing to be created) child/descendant providers representing"},{"line_number":107,"context_line":"  NUMA nodes/affinity and designating their nesting hierarchy, inventories"},{"line_number":108,"context_line":"  (of those resources removed from the compute node provider), traits, and"},{"line_number":109,"context_line":"  aggregate associations."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Proposed change"},{"line_number":112,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_21263cb9","line":109,"range":{"start_line":95,"start_character":0,"end_line":109,"end_character":25},"in_reply_to":"9fb8cfa7_4e8091c0","updated":"2019-07-10 15:57:41.000000000","message":"Moving this conversation back from top-level to inline, so we can keep the thread sane.\n\n\u003e 1. Support flavor to extend to numa_llc? Can you clarify how NUMA based CPUs and memory is modeled in placement today?\n\nIt isn\u0027t. That\u0027s been my whole point from the start. VCPU and MEMORY_MB are all lumped together on the root provider.\n\n\u003e $ openstack flavor set m1.large --property hw:numa_nodes\u003d2\n\u003e $ openstack flavor set m1.large \\  # configure guest node 0\n\u003e   --property hw:numa_cpus.0\u003d0,1 \\\n\u003e   --property hw:numa_mem.0\u003d2048\n\u003e $ openstack flavor set m1.large \\  # configure guest node 1\n\u003e   --property hw:numa_cpus.1\u003d2,3,4,5 \\\n\u003e   --property hw:numa_mem.1\u003d4096\n\nThis results in a call to placement for VCPU:6,MEMORY_MB:6144. Then the NUMATopologyFilter tries to satisfy the split to real NUMA nodes. If it can\u0027t do that, it fails, resulting in a reschedule. Three such failures in a row, we bounce the whole request.\n\nThis is why it is important for us to *start* modeling NUMA nodes in placement. The placement features to support this, including [1] as of yesterday, are now available. But significant work needs to be done on the nova side, and making that a dependency of this spec is likely to delay it beyond Train.\n\n\u003e 2. If we create child rps for LLC, they should still be associated with cores that can use them.\n\nAnd as things stand today, you can\u0027t guarantee that. You have to choose between two poor alternatives:\n\n(A) Model your LLC all together in the root provider. That way you get to pick which cacheways to assign to the VM, so you have the possibility of satisfying affinity -- BUT there\u0027s no guarantee the allocation you\u0027ve been given will be able to be satisfied completely from the correct NUMA node(s).\n\n(B) Model your LLC in child providers split along NUMA lines. Then you\u0027re guaranteed each allocation will all come from a single NUMA node. But placement plus the NUMATopologyFilter is only going to guarantee that your VCPU and MEMORY_MB are affined appropriately to each other. It *is* still possible that, once those filters have passed and the instance has started to spawn, your VCPU/MEMORY_MB will be allocated from one NUMA node and your LLC from another. And there\u0027s absolutely nothing you can do about it. You can\u0027t even late-fail the spawn.\n\n[1] https://docs.openstack.org/placement/latest/placement-api-microversion-history.html#support-same-subtree-queryparam-on-get-allocation-candidates","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"aea7e0d2c9ef2c5f4c9e5ff80f410425c36cc199","unresolved":false,"context_lines":[{"line_number":92,"context_line":"* Specify arbitrary traits which are to be to be associated with the provider."},{"line_number":93,"context_line":"* Specify automatic traits which are to be removed from the provider."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"NUMA"},{"line_number":96,"context_line":"~~~~"},{"line_number":97,"context_line":"**An admin wishes to be able to define a NUMA topology and schedule instances"},{"line_number":98,"context_line":"accordingly.**"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"NUMA gets a special section all of its own. It\u0027s still very much unknown"},{"line_number":101,"context_line":"whether or how we\u0027re going to skin this cat, but one possibility using this"},{"line_number":102,"context_line":"file format would entail:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"* Identifying the compute node root provider and removing its inventory of"},{"line_number":105,"context_line":"  ``VCPU``, ``MEMORY_MB``, ``LLC`` and possibly other things like devices."},{"line_number":106,"context_line":"* Defining (causing to be created) child/descendant providers representing"},{"line_number":107,"context_line":"  NUMA nodes/affinity and designating their nesting hierarchy, inventories"},{"line_number":108,"context_line":"  (of those resources removed from the compute node provider), traits, and"},{"line_number":109,"context_line":"  aggregate associations."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Proposed change"},{"line_number":112,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_9c87a713","line":109,"range":{"start_line":95,"start_character":0,"end_line":109,"end_character":25},"in_reply_to":"9fb8cfa7_936eed2c","updated":"2019-07-03 13:50:23.000000000","message":"@Eric, we might have reviewed this question before, but would like to try my luck for some clarity.\n\nThe LLC usecase in RMD - We can expect an LLC per NUMA - which means \n\n1. the scheduler can account for cache ways from each the NUMA bound LLC. \n\nConsidering that all the LLC have the same size, one workaround is to report it as max\u003d\u003csize of single LLC\u003e, total\u003d\u003csum of sizes of all LLC\u003e). \n\nFor e.g. on 2 node NUMA system, if size of LLC\u003d10, we can report as max\u003d10, total\u003d20. So user can request upto 10 so that we can apply it against one of the LLCs.\n\n2. The user must co-locate cores and LLC to same NUMA or request LLC allocation from all NUMA nodes (for floating CPUs).\n\nTo keep things simple, we can expect user to start with requesting dedicated CPU cores, but there is no way to guarantee that CPU cores will belong to same NUMA as LLC.\n\nFor e.g. max\u003d10, total\u003d20\nLLC0 - 1 cache way free\nLLC1- 3 cache way free\n\na request for 2 cache ways, for cores 0,2,4 might select this node, since total LLC available\u003d4, but we actually do not have 2 cache ways to give from LLC0.\n\nIt is hard to move root provider inventories to NUMA based child provider inventories, but until then we can expect incorrect scheduling. Please let me know your thoughts.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":92,"context_line":"* Specify arbitrary traits which are to be to be associated with the provider."},{"line_number":93,"context_line":"* Specify automatic traits which are to be removed from the provider."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"NUMA"},{"line_number":96,"context_line":"~~~~"},{"line_number":97,"context_line":"**An admin wishes to be able to define a NUMA topology and schedule instances"},{"line_number":98,"context_line":"accordingly.**"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"NUMA gets a special section all of its own. It\u0027s still very much unknown"},{"line_number":101,"context_line":"whether or how we\u0027re going to skin this cat, but one possibility using this"},{"line_number":102,"context_line":"file format would entail:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"* Identifying the compute node root provider and removing its inventory of"},{"line_number":105,"context_line":"  ``VCPU``, ``MEMORY_MB``, ``LLC`` and possibly other things like devices."},{"line_number":106,"context_line":"* Defining (causing to be created) child/descendant providers representing"},{"line_number":107,"context_line":"  NUMA nodes/affinity and designating their nesting hierarchy, inventories"},{"line_number":108,"context_line":"  (of those resources removed from the compute node provider), traits, and"},{"line_number":109,"context_line":"  aggregate associations."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Proposed change"},{"line_number":112,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_4e8091c0","line":109,"range":{"start_line":95,"start_character":0,"end_line":109,"end_character":25},"in_reply_to":"9fb8cfa7_9c87a713","updated":"2019-07-03 19:55:43.000000000","message":"I sympathize with the problem here. I\u0027m trying to find every possible way to reduce the scope of this work for the current release.\n\nThe max_unit trick is clever, but a) it still won\u0027t prevent you from getting allocations that can only be satisfied by spanning multiple NUMA nodes; and b) it easily breaks when more than one isolated guest NUMA node is requested. (The max_unit is enforced for the whole allocation, not per request group.)\n\nWe\u0027re going to have to deal with reshaping regardless of whether the resources start off on the compute node RP or nested RPs, so that aspect is moot.\n\nRejecting a scheduling request because we can\u0027t allocate the requested amount of LLC from a single NUMA node is an improvement (though far from a complete solution since it\u0027s still possible to allocate from the *wrong* NUMA node(s)). So it\u0027s really just a question of whether that improvement is worth the added complexity of supporting creation of new providers at this time.\n\nIf we decide the answer is yes, the use case should be phrased in terms of the ability to group/split resources to reflect how they exist on the host, *not* in terms of topology/affinity, because we absolutely have no way to affect that yet.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"A versioned YAML file format with a formal schema is proposed. The scope of"},{"line_number":115,"context_line":"this spec is the schema, code to parse a file into a Python dict, and code to"},{"line_number":116,"context_line":"validate the dict against the schema."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially and"},{"line_number":119,"context_line":"consumed by virt-driver, with the goal that it will soon be moved to a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_736fb927","line":116,"updated":"2019-06-28 22:04:59.000000000","message":"This spec must also encompass the protocol by which Nova will consume the file.\n\nSuggest creating two subsections under Proposed change: one for the file format/schema; one for the usage by Nova.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":116,"context_line":"validate the dict against the schema."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially and"},{"line_number":119,"context_line":"consumed by virt-driver, with the goal that it will soon be moved to a"},{"line_number":120,"context_line":"separate oslo-ish library."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"While this spec discusses some ways in which the file *could* be used, such"},{"line_number":123,"context_line":"usages are to be defined/described separately."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_33f5c157","line":120,"range":{"start_line":119,"start_character":23,"end_line":120,"end_character":25},"updated":"2019-06-28 22:04:59.000000000","message":"May want to soften this. Might possibly someday get moved to an oslo-ish library if we decide it\u0027s useful outside of Nova.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":119,"context_line":"consumed by virt-driver, with the goal that it will soon be moved to a"},{"line_number":120,"context_line":"separate oslo-ish library."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"While this spec discusses some ways in which the file *could* be used, such"},{"line_number":123,"context_line":"usages are to be defined/described separately."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"In other words, think of this spec as akin to setting up the oslo.config"},{"line_number":126,"context_line":"framework. It is up to other specs to define specific config options."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"The following is a simplified pseudo-schema for the file format."},{"line_number":129,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_d359c58d","line":126,"range":{"start_line":122,"start_character":0,"end_line":126,"end_character":69},"updated":"2019-06-28 22:04:59.000000000","message":"Nope.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    # removing fields, adding new required fields, imposing a stricter pattern"},{"line_number":136,"context_line":"    # on a value, etc.) must bump $Major. The question of whether/how old"},{"line_number":137,"context_line":"    # versions will be deprecated or become unsupported is left for future"},{"line_number":138,"context_line":"    # consideration, as it will depend on how and by whom this file gets"},{"line_number":139,"context_line":"    # consumed."},{"line_number":140,"context_line":"    schema_version: $Major.$minor"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"  providers:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_9357cd58","line":139,"range":{"start_line":138,"start_character":19,"end_line":139,"end_character":14},"updated":"2019-06-28 22:04:59.000000000","message":"strike","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    # List of dicts"},{"line_number":144,"context_line":"    - identification:"},{"line_number":145,"context_line":"        # Identify a single provider to configure."},{"line_number":146,"context_line":"        # At least one key is required. Multiple keys are ANDed."},{"line_number":147,"context_line":"        # No wildcarding or regexes in values (yet)."},{"line_number":148,"context_line":"\t\t# If multiple providers are identified, the consuming service should"},{"line_number":149,"context_line":"\t\t# error."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_534dd5c1","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":64},"updated":"2019-06-28 22:04:59.000000000","message":"strike","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        # Identify a single provider to configure."},{"line_number":146,"context_line":"        # At least one key is required. Multiple keys are ANDed."},{"line_number":147,"context_line":"        # No wildcarding or regexes in values (yet)."},{"line_number":148,"context_line":"\t\t# If multiple providers are identified, the consuming service should"},{"line_number":149,"context_line":"\t\t# error."},{"line_number":150,"context_line":"        #"},{"line_number":151,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":152,"context_line":"        # resource, which may not be the same.) UUID is mandatory. When not"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_d3cea52b","line":149,"range":{"start_line":148,"start_character":0,"end_line":149,"end_character":10},"updated":"2019-06-28 22:04:59.000000000","message":"this shouldn\u0027t be possible, since we\u0027re in a dict, so the `uuid` key is unique, and since it\u0027s the only key in the `identification` section...","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":149,"context_line":"\t\t# error."},{"line_number":150,"context_line":"        #"},{"line_number":151,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":152,"context_line":"        # resource, which may not be the same.) UUID is mandatory. When not"},{"line_number":153,"context_line":"\t\t# provided it defaults to string `$COMPUTE_HOST` for consumer to"},{"line_number":154,"context_line":"\t\t# lookup compute host UUID and identify the root provider."},{"line_number":155,"context_line":"        uuid: $uuid_pattern"},{"line_number":156,"context_line":"      passthrough:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_93dcade4","line":153,"range":{"start_line":152,"start_character":67,"end_line":153,"end_character":12},"updated":"2019-06-28 22:04:59.000000000","message":"This is contradictory.\n\nIt\u0027s mandatory, but may be set to the special value \u0027$COMPUTE_HOST\u0027.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":153,"context_line":"\t\t# provided it defaults to string `$COMPUTE_HOST` for consumer to"},{"line_number":154,"context_line":"\t\t# lookup compute host UUID and identify the root provider."},{"line_number":155,"context_line":"        uuid: $uuid_pattern"},{"line_number":156,"context_line":"      passthrough:"},{"line_number":157,"context_line":"          # For providers whose inventories represent devices (physical or"},{"line_number":158,"context_line":"          # virtual), indicate whether they are allowed to be allocated and"},{"line_number":159,"context_line":"          # passed through to instances. This could be accomplished by removing"},{"line_number":160,"context_line":"          # all inventory, but this way you don\u0027t have to know what resource"},{"line_number":161,"context_line":"          # class(es) are provided."},{"line_number":162,"context_line":"          # The owning service may decide to enforce ``allow: false`` by"},{"line_number":163,"context_line":"          # removing the providers entirely, removing their inventories,"},{"line_number":164,"context_line":"          # setting ``reserved \u003d total``, etc."},{"line_number":165,"context_line":"          allow: $bool"},{"line_number":166,"context_line":"      customization:"},{"line_number":167,"context_line":"          # This section allows the admin to edit properties of the identified"},{"line_number":168,"context_line":"          # provider(s)."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_73dd79db","line":165,"range":{"start_line":156,"start_character":0,"end_line":165,"end_character":22},"updated":"2019-06-28 22:04:59.000000000","message":"Strike. We decided we don\u0027t need this yet.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":167,"context_line":"          # This section allows the admin to edit properties of the identified"},{"line_number":168,"context_line":"          # provider(s)."},{"line_number":169,"context_line":"          #"},{"line_number":170,"context_line":"          # Designate these providers as child providers, parented by the"},{"line_number":171,"context_line":"          # identified provider. Error if this does not identify exactly one"},{"line_number":172,"context_line":"          # provider. Error if the providers already have a parent that isn\u0027t"},{"line_number":173,"context_line":"          # the one identified (because reparenting is currently not allowed)."},{"line_number":174,"context_line":"          parent_identification:"},{"line_number":175,"context_line":"              ${include: providers[].identification}"},{"line_number":176,"context_line":"          # Customize the providers\u0027 inventories"},{"line_number":177,"context_line":"          inventories:"},{"line_number":178,"context_line":"              ensure:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_93058d48","line":175,"range":{"start_line":170,"start_character":0,"end_line":175,"end_character":52},"updated":"2019-06-28 22:04:59.000000000","message":"Remove. We\u0027re not allowing creation of providers via this file yet.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":178,"context_line":"              ensure:"},{"line_number":179,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":180,"context_line":"                  # If inventory exists, it is replaced (because this needs to"},{"line_number":181,"context_line":"                  # be repeatable), except when new `total` value is provided"},{"line_number":182,"context_line":"\t\t\t\t  # for an inventory already managed, the consuming service"},{"line_number":183,"context_line":"\t\t\t\t  # must fail."},{"line_number":184,"context_line":"                  # This could cause problems for e.g. the \"reserved \u003d total\""},{"line_number":185,"context_line":"                  # trick."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_13c0bde0","line":182,"range":{"start_line":181,"start_character":34,"end_line":182,"end_character":40},"updated":"2019-06-28 22:04:59.000000000","message":". Inventories of resource classes natively managed by the virt driver are illegal and will cause compute driver init to fail.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                  # be repeatable), except when new `total` value is provided"},{"line_number":182,"context_line":"\t\t\t\t  # for an inventory already managed, the consuming service"},{"line_number":183,"context_line":"\t\t\t\t  # must fail."},{"line_number":184,"context_line":"                  # This could cause problems for e.g. the \"reserved \u003d total\""},{"line_number":185,"context_line":"                  # trick."},{"line_number":186,"context_line":"                  $resource_class:"},{"line_number":187,"context_line":"                      # Fields not specified get defaults and/or are eligible"},{"line_number":188,"context_line":"                      # to be discovered by the owning service."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_53a95521","line":185,"range":{"start_line":184,"start_character":18,"end_line":185,"end_character":26},"updated":"2019-06-28 22:04:59.000000000","message":"Strike. We\u0027re not going to use this for dynamic editing of inventories.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                  # This could cause problems for e.g. the \"reserved \u003d total\""},{"line_number":185,"context_line":"                  # trick."},{"line_number":186,"context_line":"                  $resource_class:"},{"line_number":187,"context_line":"                      # Fields not specified get defaults and/or are eligible"},{"line_number":188,"context_line":"                      # to be discovered by the owning service."},{"line_number":189,"context_line":"                      total: $int"},{"line_number":190,"context_line":"                      reserved: $int"},{"line_number":191,"context_line":"                      min_unit: $int"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_13651d1e","line":188,"range":{"start_line":187,"start_character":57,"end_line":188,"end_character":63},"updated":"2019-06-28 22:04:59.000000000","message":"strike","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                  $resource_class:"},{"line_number":187,"context_line":"                      # Fields not specified get defaults and/or are eligible"},{"line_number":188,"context_line":"                      # to be discovered by the owning service."},{"line_number":189,"context_line":"                      total: $int"},{"line_number":190,"context_line":"                      reserved: $int"},{"line_number":191,"context_line":"                      min_unit: $int"},{"line_number":192,"context_line":"                      max_unit: $int"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_33514137","line":189,"range":{"start_line":189,"start_character":22,"end_line":189,"end_character":27},"updated":"2019-06-28 22:04:59.000000000","message":"`total` is required. The others are optional; if unset, they default as follows:\n\n reserved: 0\n min_unit: 1\n max_unit: $MAXINT\n step_size: 1\n allocation_ratio: 1.0","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                      min_unit: $int"},{"line_number":192,"context_line":"                      max_unit: $int"},{"line_number":193,"context_line":"                      step_size: $int"},{"line_number":194,"context_line":"                      allocation_ratio: $float"},{"line_number":195,"context_line":"                  ..."},{"line_number":196,"context_line":"              rename:"},{"line_number":197,"context_line":"                  # Dict of string (desired resource class name) keyed by"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_ee574000","line":194,"updated":"2019-06-28 22:04:59.000000000","message":"Somewhere in here there needs to be a connection to \"things on the platform that this inventory corresponds to\".\n\nBut, since we\u0027re not dealing with NUMA or devices or anything yet, maybe it\u0027s trivial to figure that out dynamically at this point.\n\nPerhaps that\u0027ll become clearer when the Nova consumption model is more fleshed out.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"04dfab57c6229554bcc4af2be3fb7b3e3e79ab93","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                      min_unit: $int"},{"line_number":192,"context_line":"                      max_unit: $int"},{"line_number":193,"context_line":"                      step_size: $int"},{"line_number":194,"context_line":"                      allocation_ratio: $float"},{"line_number":195,"context_line":"                  ..."},{"line_number":196,"context_line":"              rename:"},{"line_number":197,"context_line":"                  # Dict of string (desired resource class name) keyed by"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_db3abb32","line":194,"in_reply_to":"7faddb67_0cb71b89","updated":"2019-07-10 15:02:35.000000000","message":"placement does not do asignment it does a tally count and allocats a quota to be assigned form the physical resouces\non the host by the virtdriver/resouce tracker.\n\nassignment of individual cores, pci divice, nics exctra is out of scope of placmenet.\n\nbut you are right aht we need a way to corralate host device to RP in a way the virt driver can understand. without that this spec is not useful.\n\nif we are manaing VFs PCPUs or HUGEPAGES then yes we need this mapping\n\nfor VFs we need to be able to corralate PF RP to the PF PCI device on the host.\n\nfor HUGEPAGES we will need to corralate the hugepages to a host numa node since hugepages can only be used with numa a numa toplogy and are pinned to host numa nodes when allocated.\n\nfor PCPU in the future we will need to map them to cache regions or numa nodes if we dont track cache in placment.\n\nso i expect that we will need to pass some kind of host/hypervior specific identifer that is used to correalate to a placmeent RP.\n\nfor  cpus this coudl be a core mask or host numa node.\nfor VF i would exepct it to be a pci whitelist of some kind\nfor hugepage it would be the host numa node this inventory is mapped to.\n\nin general it would be an opaque sting that is understood by a hypervior of a given resouce class.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d7516c7d7c77df05fe0aa39fa79e911b1a2c32ac","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                      min_unit: $int"},{"line_number":192,"context_line":"                      max_unit: $int"},{"line_number":193,"context_line":"                      step_size: $int"},{"line_number":194,"context_line":"                      allocation_ratio: $float"},{"line_number":195,"context_line":"                  ..."},{"line_number":196,"context_line":"              rename:"},{"line_number":197,"context_line":"                  # Dict of string (desired resource class name) keyed by"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_e66fda8f","line":194,"in_reply_to":"7faddb67_db3abb32","updated":"2019-07-10 15:57:41.000000000","message":"Right, all of that.\n\nBut we don\u0027t need it *yet*.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                      min_unit: $int"},{"line_number":192,"context_line":"                      max_unit: $int"},{"line_number":193,"context_line":"                      step_size: $int"},{"line_number":194,"context_line":"                      allocation_ratio: $float"},{"line_number":195,"context_line":"                  ..."},{"line_number":196,"context_line":"              rename:"},{"line_number":197,"context_line":"                  # Dict of string (desired resource class name) keyed by"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_0cb71b89","line":194,"in_reply_to":"9fb8cfa7_3f6ead96","updated":"2019-07-03 19:55:43.000000000","message":"No, I mean something so that whatever agent is doing the assignment of *physical* resources can know which physical resource to use based on the placement allocation.\n\nFor example if we were managing PCI devices, we need some way to tie the placement resources in a provider inventory to the real devices on the system. That\u0027s what the PCI address business was about in previous revs of this spec.\n\nWe\u0027re not trying to manage PCI devices specifically right now - but on the other hand we\u0027re not explicitly restricting what can be supported either. The question is: do our known use cases require the ability to map specific *physical* resources from a specific resource provider inventory? And if so, does that mapping require any kind of special affordance in this file?\n\nFor now, I\u0027m going to say no, because you can do this association with custom traits -- which we\u0027re already supporting via this file.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"aea7e0d2c9ef2c5f4c9e5ff80f410425c36cc199","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                      min_unit: $int"},{"line_number":192,"context_line":"                      max_unit: $int"},{"line_number":193,"context_line":"                      step_size: $int"},{"line_number":194,"context_line":"                      allocation_ratio: $float"},{"line_number":195,"context_line":"                  ..."},{"line_number":196,"context_line":"              rename:"},{"line_number":197,"context_line":"                  # Dict of string (desired resource class name) keyed by"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_3f6ead96","line":194,"in_reply_to":"9fb8cfa7_ee574000","updated":"2019-07-03 13:50:23.000000000","message":"Do you mean to say, who serves requests for the resources represented here, once placement is updated?","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                      step_size: $int"},{"line_number":194,"context_line":"                      allocation_ratio: $float"},{"line_number":195,"context_line":"                  ..."},{"line_number":196,"context_line":"              rename:"},{"line_number":197,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":198,"context_line":"                  # original resource class name."},{"line_number":199,"context_line":"                  # If inventory of keyed resource class is found, replace with"},{"line_number":200,"context_line":"                  # inventory of value."},{"line_number":201,"context_line":"                  # Why is this better than add+remove? Because here you don\u0027t"},{"line_number":202,"context_line":"                  # have to know the inventory values."},{"line_number":203,"context_line":"                  # Inventories not found should be ignored (because this needs"},{"line_number":204,"context_line":"                  # to be repeatable)."},{"line_number":205,"context_line":"                  # If allocations on the original resource class exist, the"},{"line_number":206,"context_line":"                  # consuming service may wish to ignore, error, or reshape."},{"line_number":207,"context_line":"                  $resource_class_orig: $rc_name_pattern"},{"line_number":208,"context_line":"                  ..."},{"line_number":209,"context_line":"          # Add or remove traits"},{"line_number":210,"context_line":"          traits:"},{"line_number":211,"context_line":"              ensure:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_1333dd15","line":208,"range":{"start_line":196,"start_character":0,"end_line":208,"end_character":21},"updated":"2019-06-28 22:04:59.000000000","message":"remove this","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"aea7e0d2c9ef2c5f4c9e5ff80f410425c36cc199","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                      step_size: $int"},{"line_number":194,"context_line":"                      allocation_ratio: $float"},{"line_number":195,"context_line":"                  ..."},{"line_number":196,"context_line":"              rename:"},{"line_number":197,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":198,"context_line":"                  # original resource class name."},{"line_number":199,"context_line":"                  # If inventory of keyed resource class is found, replace with"},{"line_number":200,"context_line":"                  # inventory of value."},{"line_number":201,"context_line":"                  # Why is this better than add+remove? Because here you don\u0027t"},{"line_number":202,"context_line":"                  # have to know the inventory values."},{"line_number":203,"context_line":"                  # Inventories not found should be ignored (because this needs"},{"line_number":204,"context_line":"                  # to be repeatable)."},{"line_number":205,"context_line":"                  # If allocations on the original resource class exist, the"},{"line_number":206,"context_line":"                  # consuming service may wish to ignore, error, or reshape."},{"line_number":207,"context_line":"                  $resource_class_orig: $rc_name_pattern"},{"line_number":208,"context_line":"                  ..."},{"line_number":209,"context_line":"          # Add or remove traits"},{"line_number":210,"context_line":"          traits:"},{"line_number":211,"context_line":"              ensure:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_1fc3a98c","line":208,"range":{"start_line":196,"start_character":0,"end_line":208,"end_character":21},"in_reply_to":"9fb8cfa7_1333dd15","updated":"2019-07-03 13:50:23.000000000","message":"I assumed, rename can let us rename custom resource classes to native resource classes (as long as not managed by virt driver). E.g. CUSTOM_LLC to LLC","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                      step_size: $int"},{"line_number":194,"context_line":"                      allocation_ratio: $float"},{"line_number":195,"context_line":"                  ..."},{"line_number":196,"context_line":"              rename:"},{"line_number":197,"context_line":"                  # Dict of string (desired resource class name) keyed by"},{"line_number":198,"context_line":"                  # original resource class name."},{"line_number":199,"context_line":"                  # If inventory of keyed resource class is found, replace with"},{"line_number":200,"context_line":"                  # inventory of value."},{"line_number":201,"context_line":"                  # Why is this better than add+remove? Because here you don\u0027t"},{"line_number":202,"context_line":"                  # have to know the inventory values."},{"line_number":203,"context_line":"                  # Inventories not found should be ignored (because this needs"},{"line_number":204,"context_line":"                  # to be repeatable)."},{"line_number":205,"context_line":"                  # If allocations on the original resource class exist, the"},{"line_number":206,"context_line":"                  # consuming service may wish to ignore, error, or reshape."},{"line_number":207,"context_line":"                  $resource_class_orig: $rc_name_pattern"},{"line_number":208,"context_line":"                  ..."},{"line_number":209,"context_line":"          # Add or remove traits"},{"line_number":210,"context_line":"          traits:"},{"line_number":211,"context_line":"              ensure:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_6c67af27","line":208,"range":{"start_line":196,"start_character":0,"end_line":208,"end_character":21},"in_reply_to":"9fb8cfa7_1fc3a98c","updated":"2019-07-03 19:55:43.000000000","message":"Yes, we will need that eventually, but\n\n- it\u0027s going to entail a reshape operation, which is a big complexity jump that we should avoid if we can; and we can, for now, because\n- we won\u0027t have to do it during the first release where this exists anyway.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"aea7e0d2c9ef2c5f4c9e5ff80f410425c36cc199","unresolved":false,"context_lines":[{"line_number":211,"context_line":"              ensure:"},{"line_number":212,"context_line":"                  - $trait_pattern"},{"line_number":213,"context_line":"                  - ..."},{"line_number":214,"context_line":"              remove:"},{"line_number":215,"context_line":"                  # Remove otherwise-auto-generated traits from the provider."},{"line_number":216,"context_line":"                  # Traits not found should be ignored (because this needs to"},{"line_number":217,"context_line":"                  # be repeatable)."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_dfed11f1","line":214,"range":{"start_line":214,"start_character":14,"end_line":214,"end_character":20},"updated":"2019-07-03 13:50:23.000000000","message":"If we are only allowing addition of non-native inventory and traits, it is ok to have remove?","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":211,"context_line":"              ensure:"},{"line_number":212,"context_line":"                  - $trait_pattern"},{"line_number":213,"context_line":"                  - ..."},{"line_number":214,"context_line":"              remove:"},{"line_number":215,"context_line":"                  # Remove otherwise-auto-generated traits from the provider."},{"line_number":216,"context_line":"                  # Traits not found should be ignored (because this needs to"},{"line_number":217,"context_line":"                  # be repeatable)."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_2c71b7e1","line":214,"range":{"start_line":214,"start_character":14,"end_line":214,"end_character":20},"in_reply_to":"9fb8cfa7_dfed11f1","updated":"2019-07-03 19:55:43.000000000","message":"Ditto above, we don\u0027t need it yet, so let\u0027s defer the complexity.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":211,"context_line":"              ensure:"},{"line_number":212,"context_line":"                  - $trait_pattern"},{"line_number":213,"context_line":"                  - ..."},{"line_number":214,"context_line":"              remove:"},{"line_number":215,"context_line":"                  # Remove otherwise-auto-generated traits from the provider."},{"line_number":216,"context_line":"                  # Traits not found should be ignored (because this needs to"},{"line_number":217,"context_line":"                  # be repeatable)."},{"line_number":218,"context_line":"                  - $trait_pattern"},{"line_number":219,"context_line":"                  - ..."},{"line_number":220,"context_line":"          # Add or remove aggregate associations"},{"line_number":221,"context_line":"          aggregates:"},{"line_number":222,"context_line":"              ensure:"},{"line_number":223,"context_line":"                  # List of aggregate UUIDs."},{"line_number":224,"context_line":"                  # REVIEWERS: Is there any other way we want to allow"},{"line_number":225,"context_line":"                  # identification of aggregates?"},{"line_number":226,"context_line":"                  - $uuid_pattern"},{"line_number":227,"context_line":"                  - ..."},{"line_number":228,"context_line":"              remove:"},{"line_number":229,"context_line":"                  # Ditto."},{"line_number":230,"context_line":"                  # Aggregates not found should be ignored (because this needs"},{"line_number":231,"context_line":"                  # to be repeatable)."},{"line_number":232,"context_line":"                  - $uuid_pattern"},{"line_number":233,"context_line":"                  - ..."},{"line_number":234,"context_line":"    # Next provider..."},{"line_number":235,"context_line":"    - identification:"},{"line_number":236,"context_line":"      ..."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_33362105","line":233,"range":{"start_line":214,"start_character":0,"end_line":233,"end_character":23},"updated":"2019-06-28 22:04:59.000000000","message":"kill all of this","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Miscellaneous notes:"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"* Each item in the ``providers`` list will identify zero or a single provider."},{"line_number":241,"context_line":"  Consuming services should generate an error if these providers are not"},{"line_number":242,"context_line":"  mutually exclusive."},{"line_number":243,"context_line":"* Let\u0027s make all the hex patterns (``$hexN_pattern``, ``$uuid_pattern``,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_9326edcd","line":240,"range":{"start_line":240,"start_character":52,"end_line":240,"end_character":59},"updated":"2019-06-28 22:04:59.000000000","message":"strike","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":248,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":249,"context_line":"          file format could be consumed to provide RDT LLC inventory"},{"line_number":250,"context_line":"\t\t  information. Since LLC is a NUMA bound resource, we also define and"},{"line_number":251,"context_line":"\t\t  describe it as part of a child resource provider that is nested"},{"line_number":252,"context_line":"\t\t  below the compute resource provider (root). "},{"line_number":253,"context_line":"\t\t  "},{"line_number":254,"context_line":".. note:: To uniquely identify the root compute resource provider, we can"},{"line_number":255,"context_line":"\t\t  either provide its identified uuid or provide the default string"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_7327b9c8","line":252,"range":{"start_line":251,"start_character":29,"end_line":252,"end_character":46},"updated":"2019-06-28 22:04:59.000000000","message":"Nope.\n\nUnless you\u0027re showing an example of a hypothetical future where the NUMA providers are *already created by Nova*.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":252,"context_line":"\t\t  below the compute resource provider (root). "},{"line_number":253,"context_line":"\t\t  "},{"line_number":254,"context_line":".. note:: To uniquely identify the root compute resource provider, we can"},{"line_number":255,"context_line":"\t\t  either provide its identified uuid or provide the default string"},{"line_number":256,"context_line":"\t\t  `$COMPUTE_HOST` for the consuming compute service to locate. "},{"line_number":257,"context_line":"\t\t  "},{"line_number":258,"context_line":".. note:: The details and implementation are not in the scope of this spec."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_131c3d76","line":255,"range":{"start_line":255,"start_character":54,"end_line":255,"end_character":61},"updated":"2019-06-28 22:04:59.000000000","message":"strike","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":255,"context_line":"\t\t  either provide its identified uuid or provide the default string"},{"line_number":256,"context_line":"\t\t  `$COMPUTE_HOST` for the consuming compute service to locate. "},{"line_number":257,"context_line":"\t\t  "},{"line_number":258,"context_line":".. note:: The details and implementation are not in the scope of this spec."},{"line_number":259,"context_line":"          We are just trying to help the reader understand the file format in"},{"line_number":260,"context_line":"\t\t  context."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"The virt driver, which is by definition platform/hypervisor-specific, is"},{"line_number":263,"context_line":"responsible for:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_930fcd35","line":260,"range":{"start_line":258,"start_character":10,"end_line":260,"end_character":12},"updated":"2019-06-28 22:04:59.000000000","message":"They need to be in the scope of this spec.\n\nThat is, how Nova consumes the file is in scope.\n\nHow the deployment/orchestration layer lays down the file, or what RMD/RDT does with the VM once it\u0027s spawned with the new resources allocated - *that* is what\u0027s out of scope.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":262,"context_line":"The virt driver, which is by definition platform/hypervisor-specific, is"},{"line_number":263,"context_line":"responsible for:"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"* Discovering devices on the system"},{"line_number":266,"context_line":"* Constructing resource providers corresponding to those devices"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"The author of the ``providers.yaml`` file (the operator) is responsible for"},{"line_number":269,"context_line":"knowing what platform/hypervisor it\u0027s going to be deployed on, reading the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_ce06fc1c","line":266,"range":{"start_line":265,"start_character":0,"end_line":266,"end_character":64},"updated":"2019-06-28 22:04:59.000000000","message":"Remove all references to devices for now. At least, devices discovered by the virt driver.\n\nIt\u0027ll be important to note (somewhere) that this file/mechanism is only good for managing resources that *do not* require modifications to the VM\u0027s configuration as managed by Nova (e.g. domain XML for the libvirt driver).","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":274,"context_line":"which could have been provided by the admin or modified in part by an external"},{"line_number":275,"context_line":"process, identifies a set of resource providers for items marked as"},{"line_number":276,"context_line":"``ownership.service\u003d\u003dnova`` and creates or updates them based on"},{"line_number":277,"context_line":"customizations requested for each set from the file."},{"line_number":278,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_4e48cc5a","line":275,"range":{"start_line":275,"start_character":20,"end_line":275,"end_character":21},"updated":"2019-06-28 22:04:59.000000000","message":"the","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":273,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":274,"context_line":"which could have been provided by the admin or modified in part by an external"},{"line_number":275,"context_line":"process, identifies a set of resource providers for items marked as"},{"line_number":276,"context_line":"``ownership.service\u003d\u003dnova`` and creates or updates them based on"},{"line_number":277,"context_line":"customizations requested for each set from the file."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Whatever spec actually designs the above process should also prescribe what"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_0e78948d","line":276,"range":{"start_line":276,"start_character":32,"end_line":276,"end_character":43},"updated":"2019-06-28 22:04:59.000000000","message":"strike","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":274,"context_line":"which could have been provided by the admin or modified in part by an external"},{"line_number":275,"context_line":"process, identifies a set of resource providers for items marked as"},{"line_number":276,"context_line":"``ownership.service\u003d\u003dnova`` and creates or updates them based on"},{"line_number":277,"context_line":"customizations requested for each set from the file."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Whatever spec actually designs the above process should also prescribe what"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_6e435040","line":276,"range":{"start_line":275,"start_character":48,"end_line":276,"end_character":27},"updated":"2019-06-28 22:04:59.000000000","message":"strike","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":276,"context_line":"``ownership.service\u003d\u003dnova`` and creates or updates them based on"},{"line_number":277,"context_line":"customizations requested for each set from the file."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Whatever spec actually designs the above process should also prescribe what"},{"line_number":280,"context_line":"those resource providers should look like: the convention for naming them,"},{"line_number":281,"context_line":"where they will be in the tree hierarchy, what traits will be automatically"},{"line_number":282,"context_line":"generated on them by default, what their inventories will look like by default"},{"line_number":283,"context_line":"(based on device type), etc. "},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"Alternatives"},{"line_number":286,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_ce6d9ccc","line":283,"range":{"start_line":279,"start_character":0,"end_line":283,"end_character":29},"updated":"2019-06-28 22:04:59.000000000","message":"strike","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":294,"context_line":"clearly, with minimal noisy punctuation. In addition, the schema is"},{"line_number":295,"context_line":"self-documenting."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"`Jay\u0027s Rocky provider-config-file proposal`_ suggested that we should use one"},{"line_number":298,"context_line":"file per provider, rather than a single file for all providers. A single file"},{"line_number":299,"context_line":"is preferred because:"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"* We can use a single config option to define the path to the file. It is more"},{"line_number":302,"context_line":"  complicated to define multiple config options, a list config option, or"},{"line_number":303,"context_line":"  semantics for specifying a directory or glob."},{"line_number":304,"context_line":"* We don\u0027t have to worry about file naming/discovery."},{"line_number":305,"context_line":"* It\u0027s easier to manage all providers in one place, particularly if deployment"},{"line_number":306,"context_line":"  tools wish to use a common file across a cloud."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"Data model impact"},{"line_number":309,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_8eb00445","line":306,"range":{"start_line":297,"start_character":0,"end_line":306,"end_character":49},"updated":"2019-06-28 22:04:59.000000000","message":"Move this from alternatives to reality. We decided to make a .d/ directory with files processed in lexicographical order.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"Upgrade impact"},{"line_number":344,"context_line":"--------------"},{"line_number":345,"context_line":"None. (Consumers of this file format will need to address this - e.g. decide"},{"line_number":346,"context_line":"how to deprecate existing config options which are being replaced.)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"Implementation"},{"line_number":349,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_4eb68c40","line":346,"range":{"start_line":345,"start_character":0,"end_line":346,"end_character":67},"updated":"2019-06-28 22:04:59.000000000","message":"this will need to be rethought","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":351,"context_line":"Assignee(s)"},{"line_number":352,"context_line":"-----------"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"Primary assignee:"},{"line_number":355,"context_line":"  efried dakshinai"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"Other contributors:"},{"line_number":358,"context_line":"  kosamara? jaypipes?"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"Work Items"},{"line_number":361,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_8073fae6","line":358,"range":{"start_line":354,"start_character":0,"end_line":358,"end_character":21},"updated":"2019-06-28 22:04:59.000000000","message":"This is for the implementation. So I think it should be:\n\n Primary assignee:\n   dustinc\n\n Other contributors:\n   efried\n\nJay is no longer working in OpenStack. Not sure about kosamara.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":363,"context_line":"* Construct a formal schema"},{"line_number":364,"context_line":"* Implement parsing and schema validation"},{"line_number":365,"context_line":"* Compose a self-documenting sample file"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"Dependencies"},{"line_number":368,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":369,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_6eb11044","line":366,"updated":"2019-06-28 22:04:59.000000000","message":"and the nova work","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":372,"context_line":"Testing"},{"line_number":373,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":374,"context_line":"Schema validation will be unit tested."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Documentation Impact"},{"line_number":377,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":378,"context_line":"The formal schema file and a self-documenting sample file are sufficient"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_2e89d873","line":375,"updated":"2019-06-28 22:04:59.000000000","message":"functional testing\n\nintegration testing","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5c39f389021c30f7048dc6e8dffe24faaafb475","unresolved":false,"context_lines":[{"line_number":377,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":378,"context_line":"The formal schema file and a self-documenting sample file are sufficient"},{"line_number":379,"context_line":"documentation for this spec. User-facing documentation (including release"},{"line_number":380,"context_line":"notes) will be the responsibility of consuming blueprints."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"References"},{"line_number":383,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fb8cfa7_eef3c007","line":380,"updated":"2019-06-28 22:04:59.000000000","message":"Update the admin guide, in light of the fact that the scope will now include nova consuming the file.","commit_id":"bdecd6774cb9c7834b6afde7eebad5baea515bbb"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":".. note:: This work is influenced by requirements to Nova to support non"},{"line_number":22,"context_line":"          native compute resources that are managed by Resource Management"},{"line_number":23,"context_line":"\t\t  Daemon for finer grain control. PTG discussion notes available at"},{"line_number":24,"context_line":"\t\t  `Resource Management Daemon_PTG Summary`_"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. note:: We currently limit the ownership and consumption of the provider"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9fb8cfa7_2e50bd5e","line":23,"updated":"2019-07-03 19:55:43.000000000","message":"and trailing whitespace needs to be eliminated (shows up in red here in the gerrit review)","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"75e652326143c9b159b362e0d21aeeb30fde217d","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":".. note:: This work is influenced by requirements to Nova to support non"},{"line_number":22,"context_line":"          native compute resources that are managed by Resource Management"},{"line_number":23,"context_line":"\t\t  Daemon for finer grain control. PTG discussion notes available at"},{"line_number":24,"context_line":"\t\t  `Resource Management Daemon_PTG Summary`_"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. note:: We currently limit the ownership and consumption of the provider"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_06985a68","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":2},"updated":"2019-07-03 16:34:29.000000000","message":"tabs should be replaced by spaces","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. note:: The provider config will currently only accept placement overrides"},{"line_number":30,"context_line":"          to create and manage inventories and traits for resources not"},{"line_number":31,"context_line":"\t\t  natively managed by the Nova virt driver."},{"line_number":32,"context_line":"\t\t  "},{"line_number":33,"context_line":".. note:: This is intended to define a *framework* for currently active"},{"line_number":34,"context_line":"\t\t  usecases. Subsequent features can define the semantics by which the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9fb8cfa7_ce4c81ca","line":31,"updated":"2019-07-03 19:55:43.000000000","message":"✔","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"75e652326143c9b159b362e0d21aeeb30fde217d","unresolved":false,"context_lines":[{"line_number":29,"context_line":".. note:: The provider config will currently only accept placement overrides"},{"line_number":30,"context_line":"          to create and manage inventories and traits for resources not"},{"line_number":31,"context_line":"\t\t  natively managed by the Nova virt driver."},{"line_number":32,"context_line":"\t\t  "},{"line_number":33,"context_line":".. note:: This is intended to define a *framework* for currently active"},{"line_number":34,"context_line":"\t\t  usecases. Subsequent features can define the semantics by which the"},{"line_number":35,"context_line":"\t\t  framework can be used by consumers(besides Nova) or enhanced to"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_869d2a68","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":4},"updated":"2019-07-03 16:34:29.000000000","message":"still a fair bit of whitespace on empty lines and trailing throughout\nIf you install Python and tox, you can run `tox -e pep8 specs/train/approved/provider-config-file.rst` in the repo to check it locally.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":63,"context_line":"These features could be experimental or not yet completely supported by Nova."},{"line_number":64,"context_line":"The expectation is that Nova can manage these inventories and help schedule"},{"line_number":65,"context_line":"workloads requesting support to new platform features against their"},{"line_number":66,"context_line":"capacities. For instance, to report Custom_RDT_LLC inventories."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"The file defined by this spec must allow its author to:"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_cc2343be","line":66,"range":{"start_line":66,"start_character":36,"end_line":66,"end_character":42},"updated":"2019-07-03 19:55:43.000000000","message":"nit: CUSTOM","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"967ba5136955a2575134e1491cdb520cd2486465","unresolved":false,"context_lines":[{"line_number":68,"context_line":"The file defined by this spec must allow its author to:"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Identify a provider unambiguously."},{"line_number":71,"context_line":"* Create and manage inventories for resource classes not natively managed by"},{"line_number":72,"context_line":"  Nova virt driver (LLC, MEMORY_MB, DISK_GB, VGPU e.t.c.)"},{"line_number":73,"context_line":"* Customize some aspects of the provider\u0027s inventory for existing resource"},{"line_number":74,"context_line":"  classes, currently excluding reserved, allocation_ratio and total."}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_1273a9e9","line":71,"updated":"2019-07-04 11:19:25.000000000","message":"This sentence confuses me. It may just be a phrasing issue but I stumble when seeing examples of resources classes that _are_ managed by the virt driver after the phrase \"not natively managed\".\n\nI would expect to see examples of other classes OR something like (e.g., not MEMORY_MB, DISK_GB, VCPU)\n\n-\u003d-\u003d-\n\nI assume I\u0027ll find this later on in the file, but when we say \"create and manage inventories\"  we are being additive: If a resource provider already has inventory for VCPU we can add CUSTOM_FOO inventory on top.\n\nI think that\u0027s the case, but want to be clear.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2d6097ab887072d56eae82aed00bb69778df6349","unresolved":false,"context_lines":[{"line_number":68,"context_line":"The file defined by this spec must allow its author to:"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Identify a provider unambiguously."},{"line_number":71,"context_line":"* Create and manage inventories for resource classes not natively managed by"},{"line_number":72,"context_line":"  Nova virt driver (LLC, MEMORY_MB, DISK_GB, VGPU e.t.c.)"},{"line_number":73,"context_line":"* Customize some aspects of the provider\u0027s inventory for existing resource"},{"line_number":74,"context_line":"  classes, currently excluding reserved, allocation_ratio and total."}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_380bfc8e","line":71,"in_reply_to":"7faddb67_1273a9e9","updated":"2019-07-08 16:33:11.000000000","message":"\u003e I assume I\u0027ll find this later on in the file, but when we say\n \u003e \"create and manage inventories\"  we are being additive: If a\n \u003e resource provider already has inventory for VCPU we can add\n \u003e CUSTOM_FOO inventory on top.\n \u003e \n \u003e I think that\u0027s the case, but want to be clear.\n\nCorrect","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Identify a provider unambiguously."},{"line_number":71,"context_line":"* Create and manage inventories for resource classes not natively managed by"},{"line_number":72,"context_line":"  Nova virt driver (LLC, MEMORY_MB, DISK_GB, VGPU e.t.c.)"},{"line_number":73,"context_line":"* Customize some aspects of the provider\u0027s inventory for existing resource"},{"line_number":74,"context_line":"  classes, currently excluding reserved, allocation_ratio and total."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9fb8cfa7_4ece512e","line":72,"range":{"start_line":72,"start_character":20,"end_line":72,"end_character":23},"updated":"2019-07-03 19:55:43.000000000","message":"VCPU","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":70,"context_line":"* Identify a provider unambiguously."},{"line_number":71,"context_line":"* Create and manage inventories for resource classes not natively managed by"},{"line_number":72,"context_line":"  Nova virt driver (LLC, MEMORY_MB, DISK_GB, VGPU e.t.c.)"},{"line_number":73,"context_line":"* Customize some aspects of the provider\u0027s inventory for existing resource"},{"line_number":74,"context_line":"  classes, currently excluding reserved, allocation_ratio and total."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Trait Customization"},{"line_number":77,"context_line":"~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9fb8cfa7_cee1e19d","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":68},"updated":"2019-07-03 19:55:43.000000000","message":"Sorry I wasn\u0027t clear last time: let\u0027s remove this.\n\nEventually we\u0027ll want to manage *at least* reserved and allocation_ratio for existing resource classes via this file, but not now.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7172f020080586458fc7004943901a9c560572a8","unresolved":false,"context_lines":[{"line_number":70,"context_line":"* Identify a provider unambiguously."},{"line_number":71,"context_line":"* Create and manage inventories for resource classes not natively managed by"},{"line_number":72,"context_line":"  Nova virt driver (LLC, MEMORY_MB, DISK_GB, VGPU e.t.c.)"},{"line_number":73,"context_line":"* Customize some aspects of the provider\u0027s inventory for existing resource"},{"line_number":74,"context_line":"  classes, currently excluding reserved, allocation_ratio and total."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Trait Customization"},{"line_number":77,"context_line":"~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_db68d7bb","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":68},"in_reply_to":"9fb8cfa7_cee1e19d","updated":"2019-07-10 14:02:51.000000000","message":"Yes makes sense, now that we do not want to support existing resource classes.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Trait Customization"},{"line_number":77,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":78,"context_line":"**An operator wishes to remove some traits with a provider**"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"For instance, when the virt driver on a compute node discovers a certain CPU"},{"line_number":81,"context_line":"feature and the admin does not want report such a trait to the placement API."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"**An operator wishes to associate new traits with a provider.**"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_4c4bd386","line":81,"range":{"start_line":78,"start_character":0,"end_line":81,"end_character":77},"updated":"2019-07-03 19:55:43.000000000","message":"remove (see continuation of discussion in PS4)","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"967ba5136955a2575134e1491cdb520cd2486465","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Trait Customization"},{"line_number":77,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":78,"context_line":"**An operator wishes to remove some traits with a provider**"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"For instance, when the virt driver on a compute node discovers a certain CPU"},{"line_number":81,"context_line":"feature and the admin does not want report such a trait to the placement API."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"**An operator wishes to associate new traits with a provider.**"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_923559fa","line":81,"range":{"start_line":78,"start_character":0,"end_line":81,"end_character":77},"in_reply_to":"7faddb67_4c4bd386","updated":"2019-07-04 11:19:25.000000000","message":"I agree this is not something the format has to address in a first pass, and there are workarounds, but, to me, this is one of the most valuable promises held out by a declarative format: overriding, by an easy to manage (via ansible or whatever) config file, an overenthusiastic virt driver.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"967ba5136955a2575134e1491cdb520cd2486465","unresolved":false,"context_lines":[{"line_number":89,"context_line":"The file defined by this spec must allow its author to:"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"* Identify a provider unambiguously."},{"line_number":92,"context_line":"* Specify arbitrary traits which are to be to be associated with the provider."},{"line_number":93,"context_line":"* Specify automatic traits which are to be removed from the provider."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_122169b5","line":92,"range":{"start_line":92,"start_character":37,"end_line":92,"end_character":48},"updated":"2019-07-04 11:19:25.000000000","message":"to be","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"* Identify a provider unambiguously."},{"line_number":92,"context_line":"* Specify arbitrary traits which are to be to be associated with the provider."},{"line_number":93,"context_line":"* Specify automatic traits which are to be removed from the provider."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Proposed change"},{"line_number":96,"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":6,"id":"7faddb67_6c1ecf71","line":93,"range":{"start_line":93,"start_character":0,"end_line":93,"end_character":69},"updated":"2019-07-03 19:55:43.000000000","message":"strike","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"967ba5136955a2575134e1491cdb520cd2486465","unresolved":false,"context_lines":[{"line_number":130,"context_line":"\t\t# The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":131,"context_line":"\t\t# across the provider config file."},{"line_number":132,"context_line":"\t\t"},{"line_number":133,"context_line":"        uuid: $uuid_pattern     "},{"line_number":134,"context_line":"      customization:"},{"line_number":135,"context_line":"          # This section allows the admin to edit properties of the identified"},{"line_number":136,"context_line":"          # provider(s)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_745bea2d","line":133,"updated":"2019-07-04 11:19:25.000000000","message":"I guess there\u0027s some future expansion plans here to allow other modes of identification, otherwise why nest?","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2d6097ab887072d56eae82aed00bb69778df6349","unresolved":false,"context_lines":[{"line_number":130,"context_line":"\t\t# The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":131,"context_line":"\t\t# across the provider config file."},{"line_number":132,"context_line":"\t\t"},{"line_number":133,"context_line":"        uuid: $uuid_pattern     "},{"line_number":134,"context_line":"      customization:"},{"line_number":135,"context_line":"          # This section allows the admin to edit properties of the identified"},{"line_number":136,"context_line":"          # provider(s)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_d882e8c8","line":133,"in_reply_to":"7faddb67_745bea2d","updated":"2019-07-08 16:33:11.000000000","message":"Good point Chris. Both this case of nesting and the one below (@140) were from earlier revisions when we actually had more than one key at this level. The other one (@140) is definitely being kept for future expansion as noted there. The argument for this one is less strong. But it\u0027s still probably worth keeping for that reason.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        uuid: $uuid_pattern     "},{"line_number":134,"context_line":"      customization:"},{"line_number":135,"context_line":"          # This section allows the admin to edit properties of the identified"},{"line_number":136,"context_line":"          # provider(s)."},{"line_number":137,"context_line":"          #"},{"line_number":138,"context_line":"          # Customize the providers\u0027 inventories"},{"line_number":139,"context_line":"          inventories:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_0fcb8da5","line":136,"range":{"start_line":136,"start_character":20,"end_line":136,"end_character":23},"updated":"2019-07-03 19:55:43.000000000","message":"strike","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":137,"context_line":"          #"},{"line_number":138,"context_line":"          # Customize the providers\u0027 inventories"},{"line_number":139,"context_line":"          inventories:"},{"line_number":140,"context_line":"              ensure:"},{"line_number":141,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":142,"context_line":"\t\t\t\t  # Inventories of resource classes natively managed by Nova"},{"line_number":143,"context_line":"\t\t\t\t  # virt driver are illegal and will cause the compute driver"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_8fbe9dfd","line":140,"range":{"start_line":140,"start_character":14,"end_line":140,"end_character":20},"updated":"2019-07-03 19:55:43.000000000","message":"worth adding a comment here that this layer of nesting is unnecessary since there\u0027s only one key, but is here for future expansion where other keys (like \"remove\") may be added.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":143,"context_line":"\t\t\t\t  # virt driver are illegal and will cause the compute driver"},{"line_number":144,"context_line":"\t\t\t\t  # init to fail."},{"line_number":145,"context_line":"\t\t\t\t  # If inventory exists, it is replaced (because this needs to"},{"line_number":146,"context_line":"                  # be repeatable)."},{"line_number":147,"context_line":"                  $resource_class:"},{"line_number":148,"context_line":"                      # `total` is required. Other optional fields not"},{"line_number":149,"context_line":"\t\t\t\t\t  # specified get defaults."}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_4f3665b7","line":146,"range":{"start_line":146,"start_character":23,"end_line":146,"end_character":33},"updated":"2019-07-03 19:55:43.000000000","message":"\"idempotent\" would be a better word","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":156,"context_line":"\t\t\t\t\t  ...             "},{"line_number":157,"context_line":"          # Add or remove traits"},{"line_number":158,"context_line":"          traits:"},{"line_number":159,"context_line":"              ensure:"},{"line_number":160,"context_line":"                  - $trait_pattern"},{"line_number":161,"context_line":"                  - ..."},{"line_number":162,"context_line":"    # Next provider..."}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_afbb590c","line":159,"range":{"start_line":159,"start_character":14,"end_line":159,"end_character":20},"updated":"2019-07-03 19:55:43.000000000","message":"ditto","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    # Next provider..."},{"line_number":163,"context_line":"    - identification:"},{"line_number":164,"context_line":"      ..."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Example"},{"line_number":167,"context_line":"-------"},{"line_number":168,"context_line":".. note:: This section is intended to describe at a very high level how this"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_cfca554e","line":165,"updated":"2019-07-03 19:55:43.000000000","message":"I think this schema is ready to rock now. I can fit this whole section on my screen at once :)","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7172f020080586458fc7004943901a9c560572a8","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    # Next provider..."},{"line_number":163,"context_line":"    - identification:"},{"line_number":164,"context_line":"      ..."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Example"},{"line_number":167,"context_line":"-------"},{"line_number":168,"context_line":".. note:: This section is intended to describe at a very high level how this"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_3ba32b52","line":165,"in_reply_to":"7faddb67_cfca554e","updated":"2019-07-10 14:02:51.000000000","message":"Hopefully it meets the requirements of all open use cases :)","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"967ba5136955a2575134e1491cdb520cd2486465","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    # Next provider..."},{"line_number":163,"context_line":"    - identification:"},{"line_number":164,"context_line":"      ..."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Example"},{"line_number":167,"context_line":"-------"},{"line_number":168,"context_line":".. note:: This section is intended to describe at a very high level how this"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_74744a9a","line":165,"in_reply_to":"7faddb67_cfca554e","updated":"2019-07-04 11:19:25.000000000","message":"yeah, this is reasonably concise but also mostly complete","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"967ba5136955a2575134e1491cdb520cd2486465","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    - identification:"},{"line_number":164,"context_line":"      ..."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Example"},{"line_number":167,"context_line":"-------"},{"line_number":168,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":169,"context_line":"          file format could be consumed to provide RDT LLC inventory"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_d4909e98","line":166,"updated":"2019-07-04 11:19:25.000000000","message":"I think until we see the examples, it\u0027s going to be hard to fully judge this, so looking forward to that.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Example"},{"line_number":167,"context_line":"-------"},{"line_number":168,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":169,"context_line":"          file format could be consumed to provide RDT LLC inventory"},{"line_number":170,"context_line":"\t\t  information."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":173,"context_line":"          file format could be consumed to provide P-state compute trait"},{"line_number":174,"context_line":"\t\t  information."},{"line_number":175,"context_line":"\t\t  "},{"line_number":176,"context_line":"Provider config consumption from Nova"},{"line_number":177,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_cf49f532","line":174,"range":{"start_line":168,"start_character":0,"end_line":174,"end_character":16},"updated":"2019-07-03 19:55:43.000000000","message":"assume these examples are forthcoming","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"967ba5136955a2575134e1491cdb520cd2486465","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"::"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"  provider_config_path \u003d /etc/nova/provider_config"},{"line_number":199,"context_line":"  provider_config_version \u003d 1.0\t"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_b49f22b3","line":198,"updated":"2019-07-04 11:19:25.000000000","message":"make sure in the implementation that this has a reasonable default of some kind. people shouldn\u0027t have to set config if they put the fine in a well-known location","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2d6097ab887072d56eae82aed00bb69778df6349","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"::"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"  provider_config_path \u003d /etc/nova/provider_config"},{"line_number":199,"context_line":"  provider_config_version \u003d 1.0\t"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_38677c50","line":198,"in_reply_to":"7faddb67_b49f22b3","updated":"2019-07-08 16:33:11.000000000","message":"++","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":196,"context_line":"::"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"  provider_config_path \u003d /etc/nova/provider_config"},{"line_number":199,"context_line":"  provider_config_version \u003d 1.0\t"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Nova virt-driver looks for a list of provider config files under"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_af17d9ed","line":199,"range":{"start_line":199,"start_character":2,"end_line":199,"end_character":32},"updated":"2019-07-03 19:55:43.000000000","message":"This shouldn\u0027t be necessary. The schema version is discoverable from the file (meta\u003d\u003eschema_version).","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"75e652326143c9b159b362e0d21aeeb30fde217d","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Once the file is read, it is validated against the appropriate schema file as"},{"line_number":211,"context_line":"dictated by provider_config_version. Failure due to schema validation or other"},{"line_number":212,"context_line":"sanity checks like duplication/cyclic resoruce provider erros will fail the"},{"line_number":213,"context_line":"compute service."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"Period reads from virt driver (for update_provider_tree) will not reflect any"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_66182ed3","line":212,"range":{"start_line":212,"start_character":19,"end_line":212,"end_character":30},"updated":"2019-07-03 16:34:29.000000000","message":"In the case of duplicate resource providers with differing values, should they be merged with/overridden by later entries, or do we want to error on any instance of same provider?","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"75e652326143c9b159b362e0d21aeeb30fde217d","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Once the file is read, it is validated against the appropriate schema file as"},{"line_number":211,"context_line":"dictated by provider_config_version. Failure due to schema validation or other"},{"line_number":212,"context_line":"sanity checks like duplication/cyclic resoruce provider erros will fail the"},{"line_number":213,"context_line":"compute service."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"Period reads from virt driver (for update_provider_tree) will not reflect any"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_4613b2b9","line":212,"range":{"start_line":212,"start_character":38,"end_line":212,"end_character":61},"updated":"2019-07-03 16:34:29.000000000","message":"resource provider errors","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Once the file is read, it is validated against the appropriate schema file as"},{"line_number":211,"context_line":"dictated by provider_config_version. Failure due to schema validation or other"},{"line_number":212,"context_line":"sanity checks like duplication/cyclic resoruce provider erros will fail the"},{"line_number":213,"context_line":"compute service."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"Period reads from virt driver (for update_provider_tree) will not reflect any"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_ac55a71f","line":212,"range":{"start_line":212,"start_character":19,"end_line":212,"end_character":30},"in_reply_to":"7faddb67_66182ed3","updated":"2019-07-03 19:55:43.000000000","message":"error","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":212,"context_line":"sanity checks like duplication/cyclic resoruce provider erros will fail the"},{"line_number":213,"context_line":"compute service."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"Period reads from virt driver (for update_provider_tree) will not reflect any"},{"line_number":216,"context_line":"changes introduced to the file. New changes to the provider config file (e.g."},{"line_number":217,"context_line":"due to hot-plug) will require restart of the compute service."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_cfced582","line":216,"range":{"start_line":215,"start_character":0,"end_line":216,"end_character":31},"updated":"2019-07-03 19:55:43.000000000","message":"Rephrase: The file is processed only at compute startup.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2c2181b4f5f702334873fe9e5f82e123aba1274","unresolved":false,"context_lines":[{"line_number":215,"context_line":"Period reads from virt driver (for update_provider_tree) will not reflect any"},{"line_number":216,"context_line":"changes introduced to the file. New changes to the provider config file (e.g."},{"line_number":217,"context_line":"due to hot-plug) will require restart of the compute service."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Alternatives"},{"line_number":220,"context_line":"------------"},{"line_number":221,"context_line":"Ad hoc provider configuration is being performed today through an amalgam of"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_4f898524","line":218,"updated":"2019-07-03 19:55:43.000000000","message":"We\u0027ll need to think through whether the file loading, parsing, and schema validation should be done by the resource tracker and then the object passed through to update_provider_tree (or even init_host?). But we can worry about that at impl time; this is probably enough for the spec.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7172f020080586458fc7004943901a9c560572a8","unresolved":false,"context_lines":[{"line_number":215,"context_line":"Period reads from virt driver (for update_provider_tree) will not reflect any"},{"line_number":216,"context_line":"changes introduced to the file. New changes to the provider config file (e.g."},{"line_number":217,"context_line":"due to hot-plug) will require restart of the compute service."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Alternatives"},{"line_number":220,"context_line":"------------"},{"line_number":221,"context_line":"Ad hoc provider configuration is being performed today through an amalgam of"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_fb2033b3","line":218,"in_reply_to":"7faddb67_4f898524","updated":"2019-07-10 14:02:51.000000000","message":"Since the file reports resources not managed by the virt_driver (and in future adds overrides to virt driver resource inventory/traits), this could be in resource tracker.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d7516c7d7c77df05fe0aa39fa79e911b1a2c32ac","unresolved":false,"context_lines":[{"line_number":215,"context_line":"Period reads from virt driver (for update_provider_tree) will not reflect any"},{"line_number":216,"context_line":"changes introduced to the file. New changes to the provider config file (e.g."},{"line_number":217,"context_line":"due to hot-plug) will require restart of the compute service."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Alternatives"},{"line_number":220,"context_line":"------------"},{"line_number":221,"context_line":"Ad hoc provider configuration is being performed today through an amalgam of"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_46ea6e0f","line":218,"in_reply_to":"7faddb67_fb2033b3","updated":"2019-07-10 15:57:41.000000000","message":"Yes, I agree it *could*. I\u0027m just not sure if it *should*.\n\nPerhaps we want to make the processing a private method in the ComputeDriver base class which update_provider_tree must call explicitly. That way each driver can decide a) whether it supports providers.yaml at all; b) when to process the file, so that it could c) potentially perform post-processing of some variety.\n\nThis is in roughly the same spirit as what we do for automatic driver capability-based traits today.","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"75e652326143c9b159b362e0d21aeeb30fde217d","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"* Construct a formal schema"},{"line_number":287,"context_line":"* Implement parsing and schema validation"},{"line_number":288,"context_line":"* Implement update_provider_tree``"},{"line_number":289,"context_line":"* Compose a self-documenting sample file"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_86752afd","line":288,"range":{"start_line":288,"start_character":12,"end_line":288,"end_character":34},"updated":"2019-07-03 16:34:29.000000000","message":"missing opening ticks","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"75e652326143c9b159b362e0d21aeeb30fde217d","unresolved":false,"context_lines":[{"line_number":303,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":304,"context_line":"* The formal schema file and a self-documenting sample file for provider"},{"line_number":305,"context_line":"  config file."},{"line_number":306,"context_line":"* Admi-facing documentation on guide to update the file and how Nova processes"},{"line_number":307,"context_line":"  the updates."},{"line_number":308,"context_line":"* User-facing documentation (including release notes)."},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7faddb67_06829ac9","line":306,"range":{"start_line":306,"start_character":2,"end_line":306,"end_character":13},"updated":"2019-07-03 16:34:29.000000000","message":"Admin-facing","commit_id":"33cceee453da4c8e5f957dc0bde418cd82e1d34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d7516c7d7c77df05fe0aa39fa79e911b1a2c32ac","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    # List of dicts"},{"line_number":115,"context_line":"    - identification:"},{"line_number":116,"context_line":"        # Identify a single provider to configure."},{"line_number":117,"context_line":"\t\t#"},{"line_number":118,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"        # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"\t\t# set to a specialized string `$COMPUTE_HOST` for consumer to lookup"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_e6d83a80","line":117,"updated":"2019-07-10 15:57:41.000000000","message":"still need to convert tabs throughout.","commit_id":"c8b4735d4ec19784100f97913f4431da2ec9ed25"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d7516c7d7c77df05fe0aa39fa79e911b1a2c32ac","unresolved":false,"context_lines":[{"line_number":163,"context_line":"      ..."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Example"},{"line_number":166,"context_line":"~~~~~~~"},{"line_number":167,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":168,"context_line":"          file format could be consumed to provide RDT LLC inventory"},{"line_number":169,"context_line":"          information."}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_c6c65e9b","line":166,"updated":"2019-07-10 15:57:41.000000000","message":"Still need to fill out these examples.","commit_id":"c8b4735d4ec19784100f97913f4431da2ec9ed25"},{"author":{"_account_id":30001,"name":"Ivens Zambrano","email":"ivens.zambrano@intel.com","username":"IvensZambrano"},"change_message_id":"5c8679433939b3c96c684a6e9d6e41d1ff34bbea","unresolved":false,"context_lines":[{"line_number":168,"context_line":"          file format could be consumed to provide RDT LLC inventory"},{"line_number":169,"context_line":"          information."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":172,"context_line":"          file format could be consumed to provide P-state compute trait"},{"line_number":173,"context_line":"          information."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Provider config consumption from Nova"},{"line_number":176,"context_line":"-------------------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7faddb67_fe15cce5","line":173,"range":{"start_line":171,"start_character":0,"end_line":173,"end_character":22},"updated":"2019-07-16 17:58:43.000000000","message":"The example may focus on the exposure of the core frequency boundaries rather than the \"capable/non-capable\". On a power efficient CPU all the cores will be able to enable or disable the P-State kernel handling. The exposure in placement is interesting when used in combination with SST-BF as you can describe the cores in terms of high/low tier under their respective NUMA node.\nIn this particular case, once the resource are described in placement, it should be possible to get core resources from multiple NUMA nodes under a single VM.","commit_id":"fa8143d5c672291605de47a7ec0c0b118dba6014"},{"author":{"_account_id":30001,"name":"Ivens Zambrano","email":"ivens.zambrano@intel.com","username":"IvensZambrano"},"change_message_id":"5621ac05a7fbc4314d66bea8eb97c29b3f7d65b2","unresolved":false,"context_lines":[{"line_number":168,"context_line":"          file format could be consumed to provide RDT LLC inventory"},{"line_number":169,"context_line":"          information."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":172,"context_line":"          file format could be consumed to provide P-state compute trait"},{"line_number":173,"context_line":"          information."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Provider config consumption from Nova"},{"line_number":176,"context_line":"-------------------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7faddb67_4a63e8b2","line":173,"range":{"start_line":171,"start_character":0,"end_line":173,"end_character":22},"in_reply_to":"7faddb67_af44ee47","updated":"2019-07-17 17:52:36.000000000","message":"\u003e \u003e The example may focus on the exposure of the core frequency\n \u003e \u003e boundaries rather than the \"capable/non-capable\". On a power\n \u003e \u003e efficient CPU all the cores will be able to enable or disable the\n \u003e \u003e P-State kernel handling.\n \u003e \n \u003e Right, but I thought you couldn\u0027t enable or disable on the fly. So\n \u003e you have to preconfigure which are enabled and tell nova which CPU\n \u003e IDs are which by piggybacking on the PCPU/VCPU split.\n\nThat step is for SST-BF to split the cores into high and low and then \"enumerate\" them using the PCPU/VCPU implementation. \nThe P-States control can be done even without enabling SST-BF. All the cores will have the same maximum[1] frequency and you can set them not to fluctuate, to be fixed on the min or on the maximum frequency. That provides a more deterministic behavior.\n\n[1]In this case \"maximum\" is lower than the \"maximum\" you\u0027ll get on a group of cores when using SST-BF.\n\n \u003e However (I\u0027ll say this more than once in this review) anything out\n \u003e of band that\u0027s RMD or BF or P-State related WILL NOT be able to\n \u003e late-fail the spawn. You have to take what you get from the\n \u003e NUMATopologyFilter.\n\nYep, we have changed the RMD flow design to not expect late failures as agreed in the PTG. We are looking for other options to verify policy compatibility before spawning the VM.","commit_id":"fa8143d5c672291605de47a7ec0c0b118dba6014"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6ee4df44517788fb58a93ebb6ce27f9260d15736","unresolved":false,"context_lines":[{"line_number":168,"context_line":"          file format could be consumed to provide RDT LLC inventory"},{"line_number":169,"context_line":"          information."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":172,"context_line":"          file format could be consumed to provide P-state compute trait"},{"line_number":173,"context_line":"          information."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Provider config consumption from Nova"},{"line_number":176,"context_line":"-------------------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7faddb67_af44ee47","line":173,"range":{"start_line":171,"start_character":0,"end_line":173,"end_character":22},"in_reply_to":"7faddb67_fe15cce5","updated":"2019-07-17 16:14:24.000000000","message":"\u003e The example may focus on the exposure of the core frequency\n \u003e boundaries rather than the \"capable/non-capable\". On a power\n \u003e efficient CPU all the cores will be able to enable or disable the\n \u003e P-State kernel handling.\n\nRight, but I thought you couldn\u0027t enable or disable on the fly. So you have to preconfigure which are enabled and tell nova which CPU IDs are which by piggybacking on the PCPU/VCPU split.\n\n \u003e The exposure in placement is interesting\n \u003e when used in combination with SST-BF as you can describe the cores\n \u003e in terms of high/low tier under their respective NUMA node.\n\nNoting that \"under their respective NUMA node\" is still hypothetical at this time.\n\n \u003e In this particular case, once the resource are described in\n \u003e placement, it should be possible to get core resources from\n \u003e multiple NUMA nodes under a single VM.\n\nYes, that\u0027s possible today even though all the resources are in the same provider, because the NUMATopologyFilter processes the hw:*.$N extra_specs to ensure resources from NUMA node $N -- and late-fails if it can\u0027t find enough from NUMA node $N.\n\nHowever (I\u0027ll say this more than once in this review) anything out of band that\u0027s RMD or BF or P-State related WILL NOT be able to late-fail the spawn. You have to take what you get from the NUMATopologyFilter.","commit_id":"fa8143d5c672291605de47a7ec0c0b118dba6014"},{"author":{"_account_id":30001,"name":"Ivens Zambrano","email":"ivens.zambrano@intel.com","username":"IvensZambrano"},"change_message_id":"5c8679433939b3c96c684a6e9d6e41d1ff34bbea","unresolved":false,"context_lines":[{"line_number":280,"context_line":"Work Items"},{"line_number":281,"context_line":"----------"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"* Construct a formal schema"},{"line_number":284,"context_line":"* Implement parsing and schema validation"},{"line_number":285,"context_line":"* Create objects to update placement"},{"line_number":286,"context_line":"* Compose a self-documenting sample file"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7faddb67_5e8180fa","line":283,"range":{"start_line":283,"start_character":0,"end_line":283,"end_character":27},"updated":"2019-07-16 17:58:43.000000000","message":"is the schema format an implementation detail or should it be specified as part of this spec? Rx? openapi? ...?","commit_id":"fa8143d5c672291605de47a7ec0c0b118dba6014"},{"author":{"_account_id":30001,"name":"Ivens Zambrano","email":"ivens.zambrano@intel.com","username":"IvensZambrano"},"change_message_id":"5621ac05a7fbc4314d66bea8eb97c29b3f7d65b2","unresolved":false,"context_lines":[{"line_number":280,"context_line":"Work Items"},{"line_number":281,"context_line":"----------"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"* Construct a formal schema"},{"line_number":284,"context_line":"* Implement parsing and schema validation"},{"line_number":285,"context_line":"* Create objects to update placement"},{"line_number":286,"context_line":"* Compose a self-documenting sample file"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7faddb67_2a3d4cdc","line":283,"range":{"start_line":283,"start_character":0,"end_line":283,"end_character":27},"in_reply_to":"7faddb67_2fa79e0d","updated":"2019-07-17 17:52:36.000000000","message":"I saw that on line L102 but it says is a pseudo-schema, I was wondering what the final/formal schema format would be. [1] will do. thanks.","commit_id":"fa8143d5c672291605de47a7ec0c0b118dba6014"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6ee4df44517788fb58a93ebb6ce27f9260d15736","unresolved":false,"context_lines":[{"line_number":280,"context_line":"Work Items"},{"line_number":281,"context_line":"----------"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"* Construct a formal schema"},{"line_number":284,"context_line":"* Implement parsing and schema validation"},{"line_number":285,"context_line":"* Create objects to update placement"},{"line_number":286,"context_line":"* Compose a self-documenting sample file"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7faddb67_2fa79e0d","line":283,"range":{"start_line":283,"start_character":0,"end_line":283,"end_character":27},"in_reply_to":"7faddb67_5e8180fa","updated":"2019-07-17 16:14:24.000000000","message":"The schema format is definitely part of this spec; it\u0027s described in the code block starting at L102.\n\nI don\u0027t know what Rx or openapi are, but here are examples of defining the schema in a yaml file [1] loaded via yaml.safe_load() [2]. The target yaml file is loaded the same way (yaml.safe_load()) and validated via jsonschema.validate().\n\n(Note that those examples predate this spec, so the schema is different from what\u0027s proposed here.)\n\n[1] https://review.opendev.org/#/c/622622/1/nova/provider_config/schema.yaml\n[2] https://review.opendev.org/#/c/622622/1/nova/provider_config/loading.py","commit_id":"fa8143d5c672291605de47a7ec0c0b118dba6014"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  meta:"},{"line_number":105,"context_line":"    # Version ($Major, $minor) of the schema must successfully parse documents"},{"line_number":106,"context_line":"    # conforming to ($Major, 0..$minor). Any breaking schema change (e.g."},{"line_number":107,"context_line":"    # removing fields, adding new required fields, imposing a stricter pattern"},{"line_number":108,"context_line":"    # on a value, etc.) must bump $Major. The question of whether/how old"},{"line_number":109,"context_line":"    # versions will be deprecated or become unsupported is left for future"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_2aceacb3","line":106,"range":{"start_line":106,"start_character":21,"end_line":106,"end_character":38},"updated":"2019-07-17 17:19:22.000000000","message":"Don\u0027t you mean $Major, 0..N ? Presumably you want any minor version changes to be backwards and forwards compatible. Meaning, I can put extra stuff in the config file which corresponds to a newer version of the schema, but since it\u0027s all additive, it won\u0027t break older code not yet ready to see it.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  meta:"},{"line_number":105,"context_line":"    # Version ($Major, $minor) of the schema must successfully parse documents"},{"line_number":106,"context_line":"    # conforming to ($Major, 0..$minor). Any breaking schema change (e.g."},{"line_number":107,"context_line":"    # removing fields, adding new required fields, imposing a stricter pattern"},{"line_number":108,"context_line":"    # on a value, etc.) must bump $Major. The question of whether/how old"},{"line_number":109,"context_line":"    # versions will be deprecated or become unsupported is left for future"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_d25b0ef3","line":106,"range":{"start_line":106,"start_character":21,"end_line":106,"end_character":38},"in_reply_to":"7faddb67_2aceacb3","updated":"2019-07-17 21:32:43.000000000","message":"If that were the case, we wouldn\u0027t need $minor at all (which I think is a point you\u0027ve made before).\n\nThe idea is for optional additions to bump $minor; and anything else to bump $Major.\n\nSo let\u0027s say I\u0027m at 1.2 and then I add an optional identification.name. I bump to 1.3 because a 1.2 schema won\u0027t validate any document with an identification.name in it (because additionalProperties: false), but 1.3 will still validate any 1.2 document.\n\nBut if I make identification.name required, now I have to bump to 2.0, because *all* 1.x documents will fail validation under 2.0, because all 1.x documents are missing the identification.name field.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"  providers:"},{"line_number":114,"context_line":"    # List of dicts"},{"line_number":115,"context_line":"    - identification:"},{"line_number":116,"context_line":"        # Identify a single provider to configure."},{"line_number":117,"context_line":"        #"},{"line_number":118,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_aab93c15","line":115,"updated":"2019-07-17 17:19:22.000000000","message":"This looks to have no children? When I first looked at this, it seemed like \"uuid\" was under \"identification\" but then also \"customization\" as well? Not sure that makes sense, but also, this seems to how have anything under it.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"  providers:"},{"line_number":114,"context_line":"    # List of dicts"},{"line_number":115,"context_line":"    - identification:"},{"line_number":116,"context_line":"        # Identify a single provider to configure."},{"line_number":117,"context_line":"        #"},{"line_number":118,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_d271cea9","line":115,"in_reply_to":"7faddb67_aab93c15","updated":"2019-07-17 21:32:43.000000000","message":"Oh, yeah, the indent is off. It\u0027s supposed to be\n\n - identification:\n      uuid:\n   customization:\n      inventories:\n          ensure:","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"  providers:"},{"line_number":114,"context_line":"    # List of dicts"},{"line_number":115,"context_line":"    - identification:"},{"line_number":116,"context_line":"        # Identify a single provider to configure."},{"line_number":117,"context_line":"        #"},{"line_number":118,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_203488dd","line":115,"in_reply_to":"7faddb67_d271cea9","updated":"2019-07-18 02:17:52.000000000","message":"Fixed this.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        #"},{"line_number":118,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"        # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"        # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"        # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"        # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"        # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_ea717477","line":120,"range":{"start_line":120,"start_character":39,"end_line":120,"end_character":52},"updated":"2019-07-17 17:19:22.000000000","message":"Should this be COMPUTE_NODE? Because on an ironic host, you\u0027re going to be wanting to add inventory to those nodes, not to the service host itself right?\n\nAnd, in the ironic case, will we take any such provider description and consider it a template to be applied to any current and future nodes that this compute host manages?\n\nPresumably multiple provider items in this top-level list that specify $COMPUTE_HOST (or whatever) would be an error akin to multiple specifications of the same uuid right?","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"046c0f656deba3af92609389d4726b637da4f6be","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        #"},{"line_number":118,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"        # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"        # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"        # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"        # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"        # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_6871fb75","line":120,"range":{"start_line":120,"start_character":39,"end_line":120,"end_character":52},"in_reply_to":"7faddb67_12344692","updated":"2019-07-18 15:32:04.000000000","message":"I think you\u0027re missing my point. The compute host is the thing that runs the compute *service*. That service and machine are not the thing(s) that provide the resource, and that\u0027s why the uuid of the *node* is what goes into placement. Further, in an ironic case, there are multiple nodes being managed by the compute service, and those nodes change without warning when the hash ring rebalances. So trying to pin all the UUIDs of the nodes in here is just futile.\n\nIf we call this $COMPUTE_NODE, then (a) you\u0027re using the right terminology and (b) it becomes natural to apply anything under that point to any compute node managed by the compute service, including ironic nodes. No fancy templating needed, just apply that to any node.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        #"},{"line_number":118,"context_line":"        # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"        # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"        # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"        # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"        # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"        # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_12344692","line":120,"range":{"start_line":120,"start_character":39,"end_line":120,"end_character":52},"in_reply_to":"7faddb67_ea717477","updated":"2019-07-17 21:32:43.000000000","message":"\u003e Should this be COMPUTE_NODE?\n\nI\u0027m going to say no.\n\n \u003e Because on an ironic host, you\u0027re\n \u003e going to be wanting to add inventory to those nodes, not to the\n \u003e service host itself right?\n\nCorrect. So for ironic hosts, you can\u0027t use the $COMPUTE_HOST meta-value; you have to use the literal ironic node UUIDs.\n\nWhich makes\n\n \u003e And, in the ironic case, will we take any such provider description\n \u003e and consider it a template to be applied to any current and future\n \u003e nodes that this compute host manages?\n\nmoot.\n\n \u003e Presumably multiple provider items in this top-level list that\n \u003e specify $COMPUTE_HOST (or whatever) would be an error akin to\n \u003e multiple specifications of the same uuid right?\n\nYes.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"        # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"        # across the provider config file."},{"line_number":124,"context_line":"      uuid: $uuid_pattern"},{"line_number":125,"context_line":"      customization:"},{"line_number":126,"context_line":"          # This section allows the admin to edit properties of the identified"},{"line_number":127,"context_line":"          # provider."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_2a430c15","line":124,"updated":"2019-07-17 17:19:22.000000000","message":"Perhaps this is supposed to be the one and only child under identification? If so, I think you could probably just avoid the two levels of hierarchy, unless you\u0027re really planning other ways to identify a thing.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"        # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"        # across the provider config file."},{"line_number":124,"context_line":"      uuid: $uuid_pattern"},{"line_number":125,"context_line":"      customization:"},{"line_number":126,"context_line":"          # This section allows the admin to edit properties of the identified"},{"line_number":127,"context_line":"          # provider."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_72801af6","line":124,"in_reply_to":"7faddb67_2a430c15","updated":"2019-07-17 21:32:43.000000000","message":"\u003e Perhaps this is supposed to be the one and only child under\n \u003e identification?\n\nCorrect, see above.\n\n \u003e If so, I think you could probably just avoid the\n \u003e two levels of hierarchy, unless you\u0027re really planning other ways\n \u003e to identify a thing.\n\nYeah, we\u0027ve discussed this a few times over the course of the review (not that I would expect you to read the megabytes of commentary thus far). The extra levels (here and below) are for future expansion, and the choices there are derived from earlier revisions where the schema was a lot richer, trying to solve more scenarios.\n\nIt goes back to the schema versioning: Yes, if we remove these extra levels now, 1.0 looks really terse and simple. But then we would need a $Major schema bump if we decided we need, say, identification by name. Whereas if we leave the extra levels in place now, such a change would be an \"optional add\" and therefore only require a $minor bump.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":132,"context_line":"              # actions to create and manage providers\u0027 inventories."},{"line_number":133,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":134,"context_line":"              # schema evolves to meet new usecases."},{"line_number":135,"context_line":"              ensure:"},{"line_number":136,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":137,"context_line":"                  # Inventories of resource classes natively managed by Nova"},{"line_number":138,"context_line":"                  # virt driver are illegal and will cause the compute driver"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_2a11cc04","line":135,"range":{"start_line":135,"start_character":14,"end_line":135,"end_character":20},"updated":"2019-07-17 17:19:22.000000000","message":"Do you expect to have other elements here in the future? I feel like since this is a declarative description of what things look like, having a verb in the hierarchy seems kinda weird.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":132,"context_line":"              # actions to create and manage providers\u0027 inventories."},{"line_number":133,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":134,"context_line":"              # schema evolves to meet new usecases."},{"line_number":135,"context_line":"              ensure:"},{"line_number":136,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":137,"context_line":"                  # Inventories of resource classes natively managed by Nova"},{"line_number":138,"context_line":"                  # virt driver are illegal and will cause the compute driver"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_d29a2e60","line":135,"range":{"start_line":135,"start_character":14,"end_line":135,"end_character":20},"in_reply_to":"7faddb67_2a11cc04","updated":"2019-07-17 21:32:43.000000000","message":"Yes. The first example that comes to mind would be whatever the opposite of \"ensure\" is (\"ensure-not\"? \"unensure\"? \"!ensure\"?). Like if you wanted to use this to set up shared storage, you could use it to remove the DISK_GB inventory from the root provider. (/me hand-waves the details.)","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"046c0f656deba3af92609389d4726b637da4f6be","unresolved":false,"context_lines":[{"line_number":132,"context_line":"              # actions to create and manage providers\u0027 inventories."},{"line_number":133,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":134,"context_line":"              # schema evolves to meet new usecases."},{"line_number":135,"context_line":"              ensure:"},{"line_number":136,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":137,"context_line":"                  # Inventories of resource classes natively managed by Nova"},{"line_number":138,"context_line":"                  # virt driver are illegal and will cause the compute driver"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_081ac715","line":135,"range":{"start_line":135,"start_character":14,"end_line":135,"end_character":20},"in_reply_to":"7faddb67_d29a2e60","updated":"2019-07-18 15:32:04.000000000","message":"I grasp the need for the traits, but I don\u0027t grasp the need for removing inventory like that. The virt driver should be the thing that knows whether or not it is providing any disk. I worry that allowing for the operator to effectively override any inventory with their own notion just provides them a way to not understand the model and break it. Like, I expect people will do this to expose fewer VPCUs by exposing a different total count instead of properly telling the driver to reserve two.\n\nI think your DISK_GB for shared example is not legit. Can you come up with some other example where it makes sense to allow subtracting or changing inventory like this?","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                      step_size: $int"},{"line_number":150,"context_line":"                      allocation_ratio: $float"},{"line_number":151,"context_line":"                      ..."},{"line_number":152,"context_line":"          # Add or remove traits"},{"line_number":153,"context_line":"          traits:"},{"line_number":154,"context_line":"              # This section allows the admin to specify various override"},{"line_number":155,"context_line":"              # actions to create and manage providers\u0027 traits."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_aafcdcb4","line":152,"updated":"2019-07-17 17:19:22.000000000","message":"Is this correct now? It looks like all this can do is *add* traits (which I think is good)","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                      step_size: $int"},{"line_number":150,"context_line":"                      allocation_ratio: $float"},{"line_number":151,"context_line":"                      ..."},{"line_number":152,"context_line":"          # Add or remove traits"},{"line_number":153,"context_line":"          traits:"},{"line_number":154,"context_line":"              # This section allows the admin to specify various override"},{"line_number":155,"context_line":"              # actions to create and manage providers\u0027 traits."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_c0a6d40f","line":152,"in_reply_to":"7faddb67_72a57aa1","updated":"2019-07-18 02:17:52.000000000","message":"Fixed this.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                      step_size: $int"},{"line_number":150,"context_line":"                      allocation_ratio: $float"},{"line_number":151,"context_line":"                      ..."},{"line_number":152,"context_line":"          # Add or remove traits"},{"line_number":153,"context_line":"          traits:"},{"line_number":154,"context_line":"              # This section allows the admin to specify various override"},{"line_number":155,"context_line":"              # actions to create and manage providers\u0027 traits."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_72a57aa1","line":152,"in_reply_to":"7faddb67_aafcdcb4","updated":"2019-07-17 21:32:43.000000000","message":"Agree, the comment can now just say \"add\".","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":155,"context_line":"              # actions to create and manage providers\u0027 traits."},{"line_number":156,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":157,"context_line":"              # schema evolves to meet new usecases."},{"line_number":158,"context_line":"              ensure:"},{"line_number":159,"context_line":"                  - $trait_pattern"},{"line_number":160,"context_line":"                  - ..."},{"line_number":161,"context_line":"    # Next provider..."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_0a273066","line":158,"updated":"2019-07-17 17:19:22.000000000","message":"Same thing here. I again think that allowing them to remove traits from the provider that are set by something else is asking for trouble.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":155,"context_line":"              # actions to create and manage providers\u0027 traits."},{"line_number":156,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":157,"context_line":"              # schema evolves to meet new usecases."},{"line_number":158,"context_line":"              ensure:"},{"line_number":159,"context_line":"                  - $trait_pattern"},{"line_number":160,"context_line":"                  - ..."},{"line_number":161,"context_line":"    # Next provider..."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_52bf1ea9","line":158,"in_reply_to":"7faddb67_0a273066","updated":"2019-07-17 21:32:43.000000000","message":"Maybe they find a floating point bug in AVX2 and CERN wants to stop allowing workloads that use that, so they don\u0027t accelerate particles into your face by accident. But AVX2 is set automatically by the virt driver. So until they get new chips, or the code change that removes it, or whatever, they could \"unensure\" AVX2.\n\nRather have it and not need it than need it and not have it.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    # List of dicts"},{"line_number":182,"context_line":"    - identification:"},{"line_number":183,"context_line":"      uuid: $COMPUTE_HOST"},{"line_number":184,"context_line":"      customization:"},{"line_number":185,"context_line":"          inventories:"},{"line_number":186,"context_line":"              ensure:"},{"line_number":187,"context_line":"                  $resource_class:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_8a1a4014","line":184,"updated":"2019-07-17 17:19:22.000000000","message":"This seems unnecessary as all of this is for customization right? Are you just trying to be overly accommodating of potential future things by having a lot of degrees of freedom in this hierarchy? It just seems like it\u0027s somewhat intentionally confusing to have all of these levels that can only ever be one thing.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    # List of dicts"},{"line_number":182,"context_line":"    - identification:"},{"line_number":183,"context_line":"      uuid: $COMPUTE_HOST"},{"line_number":184,"context_line":"      customization:"},{"line_number":185,"context_line":"          inventories:"},{"line_number":186,"context_line":"              ensure:"},{"line_number":187,"context_line":"                  $resource_class:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_d2e8eeb3","line":184,"in_reply_to":"7faddb67_8a1a4014","updated":"2019-07-17 21:32:43.000000000","message":"does it make more sense when \u0027uuid\u0027 is under \u0027identification\u0027 and \u0027inventories\u0027/\u0027traits\u0027 are under \u0027customization\u0027?","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"046c0f656deba3af92609389d4726b637da4f6be","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    # List of dicts"},{"line_number":182,"context_line":"    - identification:"},{"line_number":183,"context_line":"      uuid: $COMPUTE_HOST"},{"line_number":184,"context_line":"      customization:"},{"line_number":185,"context_line":"          inventories:"},{"line_number":186,"context_line":"              ensure:"},{"line_number":187,"context_line":"                  $resource_class:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_48e99fe3","line":184,"in_reply_to":"7faddb67_d2e8eeb3","updated":"2019-07-18 15:32:04.000000000","message":"\u003e does it make more sense when \u0027uuid\u0027 is under \u0027identification\u0027 and\n \u003e \u0027inventories\u0027/\u0027traits\u0027 are under \u0027customization\u0027?\n\nNot really, I would think inventories and traits are fine top-levels to have, peer to identification.\n\nI\u0027m just thinking about the python code I have to write and how gross it is to see:\n\n data[i][\u0027customization\u0027][\u0027inventories\u0027][\u0027ensure\u0027][\u0027DISK_GB\u0027][\u0027total\u0027]\n\nIt just seems overly verbose to me.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    # List of dicts"},{"line_number":182,"context_line":"    - identification:"},{"line_number":183,"context_line":"      uuid: $COMPUTE_HOST"},{"line_number":184,"context_line":"      customization:"},{"line_number":185,"context_line":"          inventories:"},{"line_number":186,"context_line":"              ensure:"},{"line_number":187,"context_line":"                  $resource_class:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_205328e4","line":184,"in_reply_to":"7faddb67_d2e8eeb3","updated":"2019-07-18 02:17:52.000000000","message":"I think the indentation should clarify this and supporting comments at L124.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2c92d9683e037a0715dfd55fa83fc1c60634de54","unresolved":false,"context_lines":[{"line_number":184,"context_line":"      customization:"},{"line_number":185,"context_line":"          inventories:"},{"line_number":186,"context_line":"              ensure:"},{"line_number":187,"context_line":"                  $resource_class:"},{"line_number":188,"context_line":"                      # Describing LLC on this compute node"},{"line_number":189,"context_line":"                      # max_unit indicates maximum size of single LLC"},{"line_number":190,"context_line":"                      # total indicates sum of sizes of all LLC"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_af986e74","line":187,"range":{"start_line":187,"start_character":18,"end_line":187,"end_character":33},"updated":"2019-07-17 16:18:23.000000000","message":"This should be literally the resource class you want to use, like\n\n CUSTOM_LLC\n\nWill it be the responsibility of the deployer or the implementation to ensure this resource class exists in placement?","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"bf7b239289c9e034f549a77948b74b663ef638d2","unresolved":false,"context_lines":[{"line_number":184,"context_line":"      customization:"},{"line_number":185,"context_line":"          inventories:"},{"line_number":186,"context_line":"              ensure:"},{"line_number":187,"context_line":"                  $resource_class:"},{"line_number":188,"context_line":"                      # Describing LLC on this compute node"},{"line_number":189,"context_line":"                      # max_unit indicates maximum size of single LLC"},{"line_number":190,"context_line":"                      # total indicates sum of sizes of all LLC"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_ea1f3405","line":187,"range":{"start_line":187,"start_character":18,"end_line":187,"end_character":33},"in_reply_to":"7faddb67_af986e74","updated":"2019-07-17 17:26:06.000000000","message":"My bad, fixing it.\n\nThis should be the responsibility of the sys-admin. Any updates to this custom resource class would be triggered on compute restart.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2c92d9683e037a0715dfd55fa83fc1c60634de54","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                      total: 22"},{"line_number":192,"context_line":"                      reserved: 2"},{"line_number":193,"context_line":"                      min_unit: 1"},{"line_number":194,"context_line":"                      max_unit: 11"},{"line_number":195,"context_line":"                      step_size: 1"},{"line_number":196,"context_line":"                      allocation_ratio: 1"},{"line_number":197,"context_line":"          traits:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_6f90364b","line":194,"range":{"start_line":194,"start_character":22,"end_line":194,"end_character":34},"updated":"2019-07-17 16:18:23.000000000","message":"As mentioned previously, I don\u0027t think this is a good idea. But it\u0027s fine for the sake of the example.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"bf7b239289c9e034f549a77948b74b663ef638d2","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                      total: 22"},{"line_number":192,"context_line":"                      reserved: 2"},{"line_number":193,"context_line":"                      min_unit: 1"},{"line_number":194,"context_line":"                      max_unit: 11"},{"line_number":195,"context_line":"                      step_size: 1"},{"line_number":196,"context_line":"                      allocation_ratio: 1"},{"line_number":197,"context_line":"          traits:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_aac37c56","line":194,"range":{"start_line":194,"start_character":22,"end_line":194,"end_character":34},"in_reply_to":"7faddb67_6f90364b","updated":"2019-07-17 17:26:06.000000000","message":"Yes it is not fool proof. It would have been clean if there was a single NUMA and single LLC per NUMA, but we cannot control how numa topology is presented. Presenting only 1 LLC, will cause more late failures if cores are from different NUMA.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Provider config consumption from Nova"},{"line_number":204,"context_line":"-------------------------------------"},{"line_number":205,"context_line":"The virt driver, which is by definition platform/hypervisor-specific, is"},{"line_number":206,"context_line":"responsible for:"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* Discovering resources on the system"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_eacdf484","line":205,"updated":"2019-07-17 17:19:22.000000000","message":"I almost called this out above, but here seems like a better place:\n\nThe consumer of the file is the compute service in a generic place, but the consumer of the *content* is kinda split between the virt driver and u-p-t to some degree, right? I would assume that just random adding traits fo the node provider is not something that each driver needs to implement right?","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"63b13a6d728d7665be8091b466e40711ebdca094","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Provider config consumption from Nova"},{"line_number":204,"context_line":"-------------------------------------"},{"line_number":205,"context_line":"The virt driver, which is by definition platform/hypervisor-specific, is"},{"line_number":206,"context_line":"responsible for:"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* Discovering resources on the system"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_9be5b1de","line":205,"in_reply_to":"7faddb67_80da1c75","updated":"2019-07-18 02:36:19.000000000","message":"In many cases - probably all cases for the initial uses - pre/post processing will not be necessary. I\u0027d like to do it this way because it\u0027s not appreciably more complicated than any other way, but it is very flexible for future expansion.\n\nAlso, I\u0027m suggesting a single method that does it all. Not like separate methods to do inventories vs traits vs...","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"046c0f656deba3af92609389d4726b637da4f6be","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Provider config consumption from Nova"},{"line_number":204,"context_line":"-------------------------------------"},{"line_number":205,"context_line":"The virt driver, which is by definition platform/hypervisor-specific, is"},{"line_number":206,"context_line":"responsible for:"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* Discovering resources on the system"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_c8910f49","line":205,"in_reply_to":"7faddb67_9be5b1de","updated":"2019-07-18 15:32:04.000000000","message":"I just think conflating u-p-t and the virt driver is confusing, at least to me. The virt driver calls lots of compute code, but I would not call all of that \"the virt driver\".","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Provider config consumption from Nova"},{"line_number":204,"context_line":"-------------------------------------"},{"line_number":205,"context_line":"The virt driver, which is by definition platform/hypervisor-specific, is"},{"line_number":206,"context_line":"responsible for:"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* Discovering resources on the system"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_f27baaf1","line":205,"in_reply_to":"7faddb67_eacdf484","updated":"2019-07-17 21:32:43.000000000","message":"\u003e The consumer of the file is the compute service in a generic place,\n \u003e but the consumer of the *content* is kinda split between the virt\n \u003e driver and u-p-t to some degree, right?\n\nu-p-t *is* the virt driver. Did you mean rt\u0027s update flow in general?\n\n \u003e I would assume that just\n \u003e random adding traits fo the node provider is not something that\n \u003e each driver needs to implement right?\n\nRight, so this goes into implementation detail a bit, but we\u0027ve talked about doing it like this:\n\n- Generic compute service does file loading and schema validation, resulting in a JSON blob.\n- We provide a ComputeDriver._update_provider_tree_from_parsed_providers_yaml_blob() implementation, because as you say, understanding how to edit the provider tree based on the strictly-defined generalized schema defined here is something we should only need to write once.\n- The virt driver\u0027s update_provider_tree is responsible for calling self._update_provider_tree_from_parsed_providers_yaml_blob(), if it wants to support providers.yaml, at whatever point in update_provider_tree makes the most sense for it.\n- We would not expect (though I suppose not forbid) virt drivers to override the method. Rather, we would expect them to pre-/post-process the json blob if necessary before/after calling the method.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Provider config consumption from Nova"},{"line_number":204,"context_line":"-------------------------------------"},{"line_number":205,"context_line":"The virt driver, which is by definition platform/hypervisor-specific, is"},{"line_number":206,"context_line":"responsible for:"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* Discovering resources on the system"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_80da1c75","line":205,"in_reply_to":"7faddb67_f27baaf1","updated":"2019-07-18 02:17:52.000000000","message":"On the same lines, for \"add\" uses, can\u0027t we just augment the provider tree returned from u-p-t in resource tracker? In some-cases virt-driver pre/post process may not be needed.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":211,"context_line":"The author of the ``providers.yaml`` file (the operator) is responsible for"},{"line_number":212,"context_line":"knowing what platform/hypervisor it\u0027s going to be deployed on, reading the"},{"line_number":213,"context_line":"docs that describe how to use the file on that platform/hypervisor, and"},{"line_number":214,"context_line":"thereby understanding how to provide values to fields defined in the format."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":217,"context_line":"which could have been provided by the admin or modified in part by an external"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_0a83b005","line":214,"updated":"2019-07-17 17:19:22.000000000","message":"This is maybe a little silly, but...I agree with this statement that the operator needs to \"know what platform\" this is for, and in support of that, I wonder if it would be a good idea to put something in the schema as a test for the operator. Somewhere in metadata maybe, a key that says \"platform: libvirt\" or something like that that we can just check and confirm the operator has at least claimed to have written this specifically for a libvirty machine? Am I making sense?","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":211,"context_line":"The author of the ``providers.yaml`` file (the operator) is responsible for"},{"line_number":212,"context_line":"knowing what platform/hypervisor it\u0027s going to be deployed on, reading the"},{"line_number":213,"context_line":"docs that describe how to use the file on that platform/hypervisor, and"},{"line_number":214,"context_line":"thereby understanding how to provide values to fields defined in the format."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":217,"context_line":"which could have been provided by the admin or modified in part by an external"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_1268c61a","line":214,"in_reply_to":"7faddb67_0a83b005","updated":"2019-07-17 21:32:43.000000000","message":"Yeah, I get it.\n\nI wouldn\u0027t block the idea, but IMO it\u0027s overkill and will wind up just being annoying to the operator.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":213,"context_line":"docs that describe how to use the file on that platform/hypervisor, and"},{"line_number":214,"context_line":"thereby understanding how to provide values to fields defined in the format."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":217,"context_line":"which could have been provided by the admin or modified in part by an external"},{"line_number":218,"context_line":"process, identifies the set of resource providers and updates them based on"},{"line_number":219,"context_line":"customizations requested for each set from the file."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_ea7bb424","line":216,"range":{"start_line":216,"start_character":57,"end_line":216,"end_character":71},"updated":"2019-07-17 17:19:22.000000000","message":"`providers.yaml`","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":213,"context_line":"docs that describe how to use the file on that platform/hypervisor, and"},{"line_number":214,"context_line":"thereby understanding how to provide values to fields defined in the format."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":217,"context_line":"which could have been provided by the admin or modified in part by an external"},{"line_number":218,"context_line":"process, identifies the set of resource providers and updates them based on"},{"line_number":219,"context_line":"customizations requested for each set from the file."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_40e0a426","line":216,"range":{"start_line":216,"start_character":57,"end_line":216,"end_character":71},"in_reply_to":"7faddb67_ea7bb424","updated":"2019-07-18 02:17:52.000000000","message":"Fixed.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":229,"context_line":"identifies the contents as having originated from a single file."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Each file in the folder can represent a set of providers. The files in the"},{"line_number":232,"context_line":"folder are processed in lexicographic order and together should identify a"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_2a9b0c66","line":229,"updated":"2019-07-17 17:19:22.000000000","message":"Again, I think the compute service should be reading/parsing this file and handing the parsed data to the virt driver.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"63b13a6d728d7665be8091b466e40711ebdca094","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":229,"context_line":"identifies the contents as having originated from a single file."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Each file in the folder can represent a set of providers. The files in the"},{"line_number":232,"context_line":"folder are processed in lexicographic order and together should identify a"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_bbe8adb2","line":229,"in_reply_to":"7faddb67_20bec8fe","updated":"2019-07-18 02:36:19.000000000","message":"Or if you like you can inject my flow from above. But let\u0027s not get too embroiled in the implementation details here, lest we bikeshed this spec to death.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":229,"context_line":"identifies the contents as having originated from a single file."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Each file in the folder can represent a set of providers. The files in the"},{"line_number":232,"context_line":"folder are processed in lexicographic order and together should identify a"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_b25a1280","line":229,"in_reply_to":"7faddb67_2a9b0c66","updated":"2019-07-17 21:32:43.000000000","message":"yup, see above.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":229,"context_line":"identifies the contents as having originated from a single file."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Each file in the folder can represent a set of providers. The files in the"},{"line_number":232,"context_line":"folder are processed in lexicographic order and together should identify a"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_20bec8fe","line":229,"in_reply_to":"7faddb67_b25a1280","updated":"2019-07-18 02:17:52.000000000","message":"To make it general, shall I instead say \"resource tracker\"?","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644525e772632d48e2d606b8eefc16eab2012180","unresolved":false,"context_lines":[{"line_number":282,"context_line":"Other deployer impact"},{"line_number":283,"context_line":"---------------------"},{"line_number":284,"context_line":"Admins *may* need to understand this file in order to use it appropriately."},{"line_number":285,"context_line":"However, services should strive to behave sanely if the file is absent."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Developer impact"},{"line_number":288,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_6abee4b4","line":285,"updated":"2019-07-17 17:19:22.000000000","message":"This file is entirely optional, right? ... RIGHT? This last sentence should be removed, IMHO, and just say something like \"Understanding this file and its implications is only required in the case where provider customization is desired by the operator\". To me, this reads like \"meh, this will prolly work if they do nothing\".","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":282,"context_line":"Other deployer impact"},{"line_number":283,"context_line":"---------------------"},{"line_number":284,"context_line":"Admins *may* need to understand this file in order to use it appropriately."},{"line_number":285,"context_line":"However, services should strive to behave sanely if the file is absent."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Developer impact"},{"line_number":288,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_72581a87","line":285,"in_reply_to":"7faddb67_6abee4b4","updated":"2019-07-17 21:32:43.000000000","message":"Agree","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":282,"context_line":"Other deployer impact"},{"line_number":283,"context_line":"---------------------"},{"line_number":284,"context_line":"Admins *may* need to understand this file in order to use it appropriately."},{"line_number":285,"context_line":"However, services should strive to behave sanely if the file is absent."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Developer impact"},{"line_number":288,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_c042540f","line":285,"in_reply_to":"7faddb67_72581a87","updated":"2019-07-18 02:17:52.000000000","message":"Rephrased it.","commit_id":"082ad365ad5fb1318851963ae55a0d0caefe9955"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c72e880ec8642e8c3aa75a5c00c75e79f0031b78","unresolved":false,"context_lines":[{"line_number":23,"context_line":"          Daemon for finer grain control. PTG discussion notes available at"},{"line_number":24,"context_line":"          `Resource Management Daemon_PTG Summary`_"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. note:: We currently limit the ownership and consumption of the provider"},{"line_number":27,"context_line":"          config YAML as described by the file format to Nova only."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. note:: The provider config will currently only accept placement overrides"},{"line_number":30,"context_line":"          to create and manage inventories and traits for resources not"},{"line_number":31,"context_line":"          natively managed by the Nova virt driver."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":".. note:: This is intended to define a *framework* for currently active"},{"line_number":34,"context_line":"          usecases. Subsequent features can define the semantics by which the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_a0db984c","line":31,"range":{"start_line":26,"start_character":0,"end_line":31,"end_character":51},"updated":"2019-07-18 01:03:38.000000000","message":"ok with these two note combindine this file can only be used to descib resoce managed by external agents\nthat dont need to modify the vm definition.\n\ni.e. in the case of libvirt this can only be used for resouce that can be asigned to instnace that dont requrie the xml to be modified which effectivly limits the usecs to plathform level qos polices like cache assignment, memory bandiwithd, termal or power budgets per vm that kind of thing.\n\nthis cannot be used to track pmem, fpgas, devices in general or any other resouce that would requrie the way the vm is virtualise to be changed.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":23,"context_line":"          Daemon for finer grain control. PTG discussion notes available at"},{"line_number":24,"context_line":"          `Resource Management Daemon_PTG Summary`_"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. note:: We currently limit the ownership and consumption of the provider"},{"line_number":27,"context_line":"          config YAML as described by the file format to Nova only."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. note:: The provider config will currently only accept placement overrides"},{"line_number":30,"context_line":"          to create and manage inventories and traits for resources not"},{"line_number":31,"context_line":"          natively managed by the Nova virt driver."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":".. note:: This is intended to define a *framework* for currently active"},{"line_number":34,"context_line":"          usecases. Subsequent features can define the semantics by which the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_80745cd0","line":31,"range":{"start_line":26,"start_character":0,"end_line":31,"end_character":51},"in_reply_to":"7faddb67_a0db984c","updated":"2019-07-18 02:17:52.000000000","message":"As first pass, we are simplifying the file to just provide \"add\" operations for inventory and traits not managed by the virt driver. But we can extend the schema to add support for patch/remove (overrides). Do you think there is an open usecase that should let us introduce patch/remove or create new resource providers?","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c72e880ec8642e8c3aa75a5c00c75e79f0031b78","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"        # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"        # across the provider config file."},{"line_number":124,"context_line":"      uuid: $uuid_pattern"},{"line_number":125,"context_line":"      customization:"},{"line_number":126,"context_line":"          # This section allows the admin to edit properties of the identified"},{"line_number":127,"context_line":"          # provider."}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_80cd3c86","line":124,"range":{"start_line":124,"start_character":6,"end_line":124,"end_character":25},"updated":"2019-07-18 01:03:38.000000000","message":"you need to also allow specifying a parent RP to account for nesting resouces under numa nodes or whatever node of the RP tree makes sense on this compute host.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"        # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"        # across the provider config file."},{"line_number":124,"context_line":"      uuid: $uuid_pattern"},{"line_number":125,"context_line":"      customization:"},{"line_number":126,"context_line":"          # This section allows the admin to edit properties of the identified"},{"line_number":127,"context_line":"          # provider."}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_e04e7095","line":124,"range":{"start_line":124,"start_character":6,"end_line":124,"end_character":25},"in_reply_to":"7faddb67_80cd3c86","updated":"2019-07-18 02:17:52.000000000","message":"We decided not to allow creation of new resource providers (that can be nested using parent uuid) or any other reshaping at this point, without a use-case.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f7388c7a5138998e3538bea1ee0092b92add9be3","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"        # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"        # across the provider config file."},{"line_number":124,"context_line":"      uuid: $uuid_pattern"},{"line_number":125,"context_line":"      customization:"},{"line_number":126,"context_line":"          # This section allows the admin to edit properties of the identified"},{"line_number":127,"context_line":"          # provider."}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_5b973949","line":124,"range":{"start_line":124,"start_character":6,"end_line":124,"end_character":25},"in_reply_to":"7faddb67_80cd3c86","updated":"2019-07-18 02:22:38.000000000","message":"Yes. But not yet. Not until we actually have nrp in nova. Previous revisions of this spec had affordance for nrp but we took it out for that reason and to KISS.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":30001,"name":"Ivens Zambrano","email":"ivens.zambrano@intel.com","username":"IvensZambrano"},"change_message_id":"9a8d40f399b72f0b1d33dfb9febea79295396f15","unresolved":false,"context_lines":[{"line_number":168,"context_line":"          file format could be consumed to provide RDT LLC inventory"},{"line_number":169,"context_line":"          information."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":172,"context_line":"          file format could be consumed to provide P-state compute trait"},{"line_number":173,"context_line":"          information."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":".. code-block:: yaml"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_4c6785b8","line":173,"range":{"start_line":171,"start_character":0,"end_line":173,"end_character":22},"updated":"2019-07-17 18:06:51.000000000","message":"For this iteration we may skip the P-State example as it will be a trait at the root provider level.\nOnce the NUMA structure is in placement, this example will make more sense.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cee0bb892aaf98cb17ecbb80e22bbaa0cf53f8","unresolved":false,"context_lines":[{"line_number":168,"context_line":"          file format could be consumed to provide RDT LLC inventory"},{"line_number":169,"context_line":"          information."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":172,"context_line":"          file format could be consumed to provide P-state compute trait"},{"line_number":173,"context_line":"          information."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":".. code-block:: yaml"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_cfb7e7f4","line":173,"range":{"start_line":171,"start_character":0,"end_line":173,"end_character":22},"in_reply_to":"7faddb67_4c6785b8","updated":"2019-07-17 21:32:43.000000000","message":"I\u0027d like to keep the trait section for the sake of demonstrating how the file works, even if it\u0027s not exactly how it\u0027s going to be used right away in real life.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e21692d7c1919e785b4b65c789bbe8e3ddf43ced","unresolved":false,"context_lines":[{"line_number":168,"context_line":"          file format could be consumed to provide RDT LLC inventory"},{"line_number":169,"context_line":"          information."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":172,"context_line":"          file format could be consumed to provide P-state compute trait"},{"line_number":173,"context_line":"          information."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":".. code-block:: yaml"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_49ef6ce8","line":173,"range":{"start_line":171,"start_character":0,"end_line":173,"end_character":22},"in_reply_to":"7faddb67_56e5cb36","updated":"2019-07-18 10:13:18.000000000","message":"This is unrelated to LLC. For P-state, as discussed earlier without NUMA rp, this is one possible use-case (if node is p-state enabled/disabled) where we want to expose root rp trait. It is upto capability teams to decide to use this option.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":30001,"name":"Ivens Zambrano","email":"ivens.zambrano@intel.com","username":"IvensZambrano"},"change_message_id":"277a800025ce3c9540d3ae393c7cd45db19d8632","unresolved":false,"context_lines":[{"line_number":168,"context_line":"          file format could be consumed to provide RDT LLC inventory"},{"line_number":169,"context_line":"          information."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":".. note:: This section is intended to describe at a very high level how this"},{"line_number":172,"context_line":"          file format could be consumed to provide P-state compute trait"},{"line_number":173,"context_line":"          information."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":".. code-block:: yaml"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_56e5cb36","line":173,"range":{"start_line":171,"start_character":0,"end_line":173,"end_character":22},"in_reply_to":"7faddb67_cfb7e7f4","updated":"2019-07-18 07:59:04.000000000","message":"cool, thought it was referring to a full tree example rather than complementing the LLC example using the traits section.\nI\u0027m ok with the Latter.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c72e880ec8642e8c3aa75a5c00c75e79f0031b78","unresolved":false,"context_lines":[{"line_number":198,"context_line":"              ensure:"},{"line_number":199,"context_line":"                  # Describing that this compute node enables support for"},{"line_number":200,"context_line":"                  # P-state control"},{"line_number":201,"context_line":"                  - CUSTOM_P_STATE_ENABLED"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Provider config consumption from Nova"},{"line_number":204,"context_line":"-------------------------------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_604da03c","line":201,"range":{"start_line":201,"start_character":20,"end_line":201,"end_character":42},"updated":"2019-07-18 01:03:38.000000000","message":"CUSTOM_P_STATE_ENABLED would technically imply speed shift\n\nnot any of the speed select technologies. so we would want a diffferent tratis for the speed select technologis like teh configurable base frequence or tuorbo bost polices.\n\nthis is just illistrative however so its not really a big deal.\n\ngiven that pstates have been a thing sicne pentium 4 im not sure that this partcalar trait would be that useful.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":198,"context_line":"              ensure:"},{"line_number":199,"context_line":"                  # Describing that this compute node enables support for"},{"line_number":200,"context_line":"                  # P-state control"},{"line_number":201,"context_line":"                  - CUSTOM_P_STATE_ENABLED"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Provider config consumption from Nova"},{"line_number":204,"context_line":"-------------------------------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_20580854","line":201,"range":{"start_line":201,"start_character":20,"end_line":201,"end_character":42},"in_reply_to":"7faddb67_604da03c","updated":"2019-07-18 02:17:52.000000000","message":"The objective is to indicate P_State is supported. But later, extra specs string could indicate which cores need to be P state enabled (meaning turn on the hardware controller to fluctuate from max (the max can be defined with SST-BF).","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c72e880ec8642e8c3aa75a5c00c75e79f0031b78","unresolved":false,"context_lines":[{"line_number":208,"context_line":"* Discovering resources on the system"},{"line_number":209,"context_line":"* Constructing resource providers corresponding to those resources."},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"The author of the ``providers.yaml`` file (the operator) is responsible for"},{"line_number":212,"context_line":"knowing what platform/hypervisor it\u0027s going to be deployed on, reading the"},{"line_number":213,"context_line":"docs that describe how to use the file on that platform/hypervisor, and"},{"line_number":214,"context_line":"thereby understanding how to provide values to fields defined in the format."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":217,"context_line":"which could have been provided by the admin or modified in part by an external"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_000b8cd5","line":214,"range":{"start_line":211,"start_character":0,"end_line":214,"end_character":76},"updated":"2019-07-18 01:03:38.000000000","message":"well this will only be hyperviors sepcfic in the sense that you need to understand why resouces are not managed by the hyperviors.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":208,"context_line":"* Discovering resources on the system"},{"line_number":209,"context_line":"* Constructing resource providers corresponding to those resources."},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"The author of the ``providers.yaml`` file (the operator) is responsible for"},{"line_number":212,"context_line":"knowing what platform/hypervisor it\u0027s going to be deployed on, reading the"},{"line_number":213,"context_line":"docs that describe how to use the file on that platform/hypervisor, and"},{"line_number":214,"context_line":"thereby understanding how to provide values to fields defined in the format."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":217,"context_line":"which could have been provided by the admin or modified in part by an external"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_4053c439","line":214,"range":{"start_line":211,"start_character":0,"end_line":214,"end_character":76},"in_reply_to":"7faddb67_000b8cd5","updated":"2019-07-18 02:17:52.000000000","message":"Without overrides, this need not be hypervisor specific.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c72e880ec8642e8c3aa75a5c00c75e79f0031b78","unresolved":false,"context_lines":[{"line_number":213,"context_line":"docs that describe how to use the file on that platform/hypervisor, and"},{"line_number":214,"context_line":"thereby understanding how to provide values to fields defined in the format."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":217,"context_line":"which could have been provided by the admin or modified in part by an external"},{"line_number":218,"context_line":"process, identifies the set of resource providers and updates them based on"},{"line_number":219,"context_line":"customizations requested for each set from the file."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Nova is configured as follows"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_60d2802a","line":219,"range":{"start_line":216,"start_character":0,"end_line":219,"end_character":51},"updated":"2019-07-18 01:03:38.000000000","message":"do we need to do this in the virt driver.\ngiven that we are not going to be modifying the virt drivers\nto allow generating arbary xml to passthough reouces defiend in this provider yaml to the vms the virt dirver really does not need to know about the content of this file.\n\nthe resouce tracker should be able to parse the files and genericaly merge the addtional resouces as seperate child providers of the compute node rp.\n\nthe limitation implied by the note on line 29 implies\nwe do not want to allow the provider yaml to modify and RP or inventory created by the virt driver as such it makes sense to have the RPs created form this file be childern of the compute node rp unless we allow specifying a parent rp.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f7388c7a5138998e3538bea1ee0092b92add9be3","unresolved":false,"context_lines":[{"line_number":213,"context_line":"docs that describe how to use the file on that platform/hypervisor, and"},{"line_number":214,"context_line":"thereby understanding how to provide values to fields defined in the format."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":217,"context_line":"which could have been provided by the admin or modified in part by an external"},{"line_number":218,"context_line":"process, identifies the set of resource providers and updates them based on"},{"line_number":219,"context_line":"customizations requested for each set from the file."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Nova is configured as follows"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_3b983d73","line":219,"range":{"start_line":216,"start_character":0,"end_line":219,"end_character":51},"in_reply_to":"7faddb67_60d2802a","updated":"2019-07-18 02:22:38.000000000","message":"See [1] for a deeper dive into this implementation detail. TDLR the code will be generic, but it\u0027s up to the driver to invoke it. This satisfies your concerns (here and below) but is still flexible enough to accommodate future expansion.\n\n[1] https://review.opendev.org/#/c/612497/10/specs/train/approved/provider-config-file.rst@205","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":213,"context_line":"docs that describe how to use the file on that platform/hypervisor, and"},{"line_number":214,"context_line":"thereby understanding how to provide values to fields defined in the format."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"The virt driver, in ``update_provider_tree``, parses the providers.yaml file"},{"line_number":217,"context_line":"which could have been provided by the admin or modified in part by an external"},{"line_number":218,"context_line":"process, identifies the set of resource providers and updates them based on"},{"line_number":219,"context_line":"customizations requested for each set from the file."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Nova is configured as follows"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_c03c94e2","line":219,"range":{"start_line":216,"start_character":0,"end_line":219,"end_character":51},"in_reply_to":"7faddb67_60d2802a","updated":"2019-07-18 02:17:52.000000000","message":"The current schema does not allow creation of rps, and given that it currently only talks about \"add\" inventory/traits for non-native resources, this can be in resource tracker.\n\nWhether it is part of resource tracker or virt-driver (overrides) we felt its an implementation detail.\n\n@Eric, do you think we can simplify and just say resource tracker?","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c72e880ec8642e8c3aa75a5c00c75e79f0031b78","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"::"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"  provider_config_path \u003d /etc/nova/provider_config"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_00a70cbf","line":225,"range":{"start_line":225,"start_character":2,"end_line":225,"end_character":50},"updated":"2019-07-18 01:03:38.000000000","message":"i take it this is in the compute section of the nova.conf","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f7388c7a5138998e3538bea1ee0092b92add9be3","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"::"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"  provider_config_path \u003d /etc/nova/provider_config"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_db8c8937","line":225,"range":{"start_line":225,"start_character":2,"end_line":225,"end_character":50},"in_reply_to":"7faddb67_00a70cbf","updated":"2019-07-18 02:22:38.000000000","message":"Good point, that should be specified.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"::"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"  provider_config_path \u003d /etc/nova/provider_config"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_7bf6b5d9","line":225,"range":{"start_line":225,"start_character":2,"end_line":225,"end_character":50},"in_reply_to":"7faddb67_00a70cbf","updated":"2019-07-18 02:17:52.000000000","message":"yup, will mention that too","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c72e880ec8642e8c3aa75a5c00c75e79f0031b78","unresolved":false,"context_lines":[{"line_number":225,"context_line":"  provider_config_path \u003d /etc/nova/provider_config"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":229,"context_line":"identifies the contents as having originated from a single file."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Each file in the folder can represent a set of providers. The files in the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_6097e049","line":228,"range":{"start_line":228,"start_character":0,"end_line":228,"end_character":20},"updated":"2019-07-18 01:03:38.000000000","message":"we should call it provider_config_dir in that case.\n\"path\" usually implies a single file","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":225,"context_line":"  provider_config_path \u003d /etc/nova/provider_config"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":229,"context_line":"identifies the contents as having originated from a single file."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Each file in the folder can represent a set of providers. The files in the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_1b01c1af","line":228,"range":{"start_line":228,"start_character":0,"end_line":228,"end_character":20},"in_reply_to":"7faddb67_6097e049","updated":"2019-07-18 02:17:52.000000000","message":"sure","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c72e880ec8642e8c3aa75a5c00c75e79f0031b78","unresolved":false,"context_lines":[{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":229,"context_line":"identifies the contents as having originated from a single file."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Each file in the folder can represent a set of providers. The files in the"},{"line_number":232,"context_line":"folder are processed in lexicographic order and together should identify a"},{"line_number":233,"context_line":"unique set of resource providers."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Once the file is read, it is validated against the appropriate schema file as"},{"line_number":236,"context_line":"dictated by schema_version field in the file\u0027s meta-data. Failure due to"},{"line_number":237,"context_line":"schema validation or other sanity checks like duplication/cyclic resource"},{"line_number":238,"context_line":"provider errors will fail the compute service."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"The virt driver will process the provider config file only on startup of the"},{"line_number":241,"context_line":"compute service. New changes to the provider config file (e.g. due to"},{"line_number":242,"context_line":"hot-plug) will require restart of the compute service."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"Alternatives"},{"line_number":245,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_40718443","line":242,"range":{"start_line":231,"start_character":0,"end_line":242,"end_character":54},"updated":"2019-07-18 01:03:38.000000000","message":"so i think this is being over complicated.\ni would sugges only suporting a single file initally since we allow mulptiple RP to be defiend in one file.\n\nsecond as i said above with the limitation imposed already i dont see any reason to do this processing in the virt driver.\n\nthe resouce track is what calls update provider tree and passes it in to the the dirver\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L989-L996\n\nwe modify the modify the provider tree anyway\nto inject traits\nhttps://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L1025-L1027\n\nso i really dont see wy we would not simply either add the tratis to the prov_tree before calling update_provider_tree\nor add them after just after we update the tratis.\n\nor since we need to handel both branches add the file based rps here https://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L1049 just before we fush the update back assumeing we dont do it before calling update_provider_tree.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"7191018677ee7e8c3aa831eb1314cf225de07732","unresolved":false,"context_lines":[{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":229,"context_line":"identifies the contents as having originated from a single file."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Each file in the folder can represent a set of providers. The files in the"},{"line_number":232,"context_line":"folder are processed in lexicographic order and together should identify a"},{"line_number":233,"context_line":"unique set of resource providers."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Once the file is read, it is validated against the appropriate schema file as"},{"line_number":236,"context_line":"dictated by schema_version field in the file\u0027s meta-data. Failure due to"},{"line_number":237,"context_line":"schema validation or other sanity checks like duplication/cyclic resource"},{"line_number":238,"context_line":"provider errors will fail the compute service."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"The virt driver will process the provider config file only on startup of the"},{"line_number":241,"context_line":"compute service. New changes to the provider config file (e.g. due to"},{"line_number":242,"context_line":"hot-plug) will require restart of the compute service."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"Alternatives"},{"line_number":245,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_fbc14555","line":242,"range":{"start_line":231,"start_character":0,"end_line":242,"end_character":54},"in_reply_to":"7faddb67_40718443","updated":"2019-07-18 02:17:52.000000000","message":"I feel, if multiple agents want to touch this file - e.g. Sys-admin and node agent like RMD, they could focus on rps they like to work on instead of having to append.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f7388c7a5138998e3538bea1ee0092b92add9be3","unresolved":false,"context_lines":[{"line_number":228,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":229,"context_line":"identifies the contents as having originated from a single file."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Each file in the folder can represent a set of providers. The files in the"},{"line_number":232,"context_line":"folder are processed in lexicographic order and together should identify a"},{"line_number":233,"context_line":"unique set of resource providers."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Once the file is read, it is validated against the appropriate schema file as"},{"line_number":236,"context_line":"dictated by schema_version field in the file\u0027s meta-data. Failure due to"},{"line_number":237,"context_line":"schema validation or other sanity checks like duplication/cyclic resource"},{"line_number":238,"context_line":"provider errors will fail the compute service."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"The virt driver will process the provider config file only on startup of the"},{"line_number":241,"context_line":"compute service. New changes to the provider config file (e.g. due to"},{"line_number":242,"context_line":"hot-plug) will require restart of the compute service."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"Alternatives"},{"line_number":245,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_bb850d09","line":242,"range":{"start_line":231,"start_character":0,"end_line":242,"end_character":54},"in_reply_to":"7faddb67_40718443","updated":"2019-07-18 02:22:38.000000000","message":"See above.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c72e880ec8642e8c3aa75a5c00c75e79f0031b78","unresolved":false,"context_lines":[{"line_number":246,"context_line":"Ad hoc provider configuration is being performed today through an amalgam of"},{"line_number":247,"context_line":"oslo.config options, more of which are being proposed or considered to deal"},{"line_number":248,"context_line":"with VGPUs, NUMA, bandwidth resources, etc. The awkwardness of expressing"},{"line_number":249,"context_line":"hierarchical data structures has led to such travesties as"},{"line_number":250,"context_line":"``[pci]passthrough_whitelist`` and \"dynamic config\" mechanisms where config"},{"line_number":251,"context_line":"groups and their options are created on the fly. YAML is natively suited for"},{"line_number":252,"context_line":"this purpose as it is designed to express arbitrarily nested data structures"},{"line_number":253,"context_line":"clearly, with minimal noisy punctuation. In addition, the schema is"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7faddb67_c0e814b4","line":250,"range":{"start_line":249,"start_character":45,"end_line":250,"end_character":52},"updated":"2019-07-18 01:03:38.000000000","message":"honestly this is overly dramatic.\n\nwe have not really had many bugs related to either of these that would not have been pressent if we used yaml\n\npersonally i see 0 difference between yaml and dynamic config. we are just swaping configparser for a yaml parser.\n\n\nthe pci whilist isuess have always been unrelated to the config and rather limitation in how hyperviroes expose devices.\n\nthe pci whitelist is a muti line json data structure\nand the pci alaise goes one step future and use json schema\n\nhttps://github.com/openstack/nova/blob/15e082a2a87c87d2d30d13936bbda06489b4edcc/nova/pci/request.py#L66-L99\n\nto do full schema validation in the content of its config value.\n\ni am personally exepcting to see either  ebnf grammer or jsonschema defintion of this yaml format to do schma validation as part of intoduceing this provider.yaml file.\n\nwe have not versioned the pci whiltelist or pci alisa but we also have never mad a backward incompatible chagne to either in the 10+ release we have had them.","commit_id":"1f45515e205467ff53e3422854096f1351c4633a"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"5bcd1a0a8c12964ddf00736d7b987c594ed378e3","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Provider Config File Schema"},{"line_number":91,"context_line":"---------------------------"},{"line_number":92,"context_line":"A versioned YAML file format with a formal schema is proposed. The scope of"},{"line_number":93,"context_line":"this spec is the schema, code to parse a file into a Python dict and code to"},{"line_number":94,"context_line":"validate the dict against the schema."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially and"},{"line_number":97,"context_line":"consumed by the virt-driver. It may also be likely moved to a separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_d6077b17","line":94,"range":{"start_line":93,"start_character":25,"end_line":94,"end_character":36},"updated":"2019-07-18 07:45:12.000000000","message":"@Eric\nDo we need to include reference code or shall I skip this line?","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"57198dc9a503b455fbea37641827d87325e6ec76","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Provider Config File Schema"},{"line_number":91,"context_line":"---------------------------"},{"line_number":92,"context_line":"A versioned YAML file format with a formal schema is proposed. The scope of"},{"line_number":93,"context_line":"this spec is the schema, code to parse a file into a Python dict and code to"},{"line_number":94,"context_line":"validate the dict against the schema."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially and"},{"line_number":97,"context_line":"consumed by the virt-driver. It may also be likely moved to a separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_8297763a","line":94,"range":{"start_line":93,"start_character":25,"end_line":94,"end_character":36},"in_reply_to":"7faddb67_d6077b17","updated":"2019-07-18 15:08:34.000000000","message":"The sentence is saying that the work encompassed by this spec will include... not that the spec itself needs to contain those things. If you want to reword to clarify (maybe s/spec/blueprint/ ?) that would be okay, but I think it\u0027s fine as is.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a01cf6771d8fc28347483b2d96ffbd97e78cf5d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"validate the dict against the schema."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially and"},{"line_number":97,"context_line":"consumed by the virt-driver. It may also be likely moved to a separate"},{"line_number":98,"context_line":"oslo-ish library if it can be standardized for consumption outside of Nova."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The following is a simplified pseudo-schema for the file format."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_09ec1428","line":97,"range":{"start_line":97,"start_character":9,"end_line":97,"end_character":27},"updated":"2019-07-18 09:31:02.000000000","message":"I guess it will be supported by the libvirt driver first.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e21692d7c1919e785b4b65c789bbe8e3ddf43ced","unresolved":false,"context_lines":[{"line_number":94,"context_line":"validate the dict against the schema."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially and"},{"line_number":97,"context_line":"consumed by the virt-driver. It may also be likely moved to a separate"},{"line_number":98,"context_line":"oslo-ish library if it can be standardized for consumption outside of Nova."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The following is a simplified pseudo-schema for the file format."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_698ca8d6","line":97,"range":{"start_line":97,"start_character":9,"end_line":97,"end_character":27},"in_reply_to":"7faddb67_09ec1428","updated":"2019-07-18 10:13:18.000000000","message":"Most likely, but the current spec schema supports inventory/traits not supported by virt-driver (so no overrides), hence the implementation would augment the provider tree returned from virt driver.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":94,"context_line":"validate the dict against the schema."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially and"},{"line_number":97,"context_line":"consumed by the virt-driver. It may also be likely moved to a separate"},{"line_number":98,"context_line":"oslo-ish library if it can be standardized for consumption outside of Nova."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The following is a simplified pseudo-schema for the file format."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_37bfdeaa","line":97,"range":{"start_line":97,"start_character":9,"end_line":97,"end_character":27},"in_reply_to":"7faddb67_31a5ae47","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f8c948ee742dedb2e5ec662268d31aa190f95980","unresolved":false,"context_lines":[{"line_number":94,"context_line":"validate the dict against the schema."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially and"},{"line_number":97,"context_line":"consumed by the virt-driver. It may also be likely moved to a separate"},{"line_number":98,"context_line":"oslo-ish library if it can be standardized for consumption outside of Nova."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The following is a simplified pseudo-schema for the file format."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_31a5ae47","line":97,"range":{"start_line":97,"start_character":9,"end_line":97,"end_character":27},"in_reply_to":"7faddb67_4562e80b","updated":"2019-07-18 19:14:43.000000000","message":"We decided to cut the virt driver out of the flow entirely for now, and allow only CUSTOM_ resource classes and traits in the file, and process it last (after upt and automatic traits) but still fail if we discover any inventory conflicts (which, because CUSTOM_, should be rare, but still possible). (Trait conflicts are not possible - see below.)\n\nThis spec should describe the flow, but below, in \"Provider config consumption from Nova\".","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"57198dc9a503b455fbea37641827d87325e6ec76","unresolved":false,"context_lines":[{"line_number":94,"context_line":"validate the dict against the schema."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The code shall be introduced into the ``openstack/nova`` project initially and"},{"line_number":97,"context_line":"consumed by the virt-driver. It may also be likely moved to a separate"},{"line_number":98,"context_line":"oslo-ish library if it can be standardized for consumption outside of Nova."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The following is a simplified pseudo-schema for the file format."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_4562e80b","line":97,"range":{"start_line":97,"start_character":9,"end_line":97,"end_character":27},"in_reply_to":"7faddb67_698ca8d6","updated":"2019-07-18 15:08:34.000000000","message":"The code to do the processing will live in a generic spot. If we decide the virt driver is responsible for invoking that code as suggested at [1], then individual virt drivers must \"implement support\" explicitly by doing that (+1LOC in update_provider_tree). But we could decide to do it such that the virt driver doesn\u0027t get a say -- it\u0027s always invoked from the RT -- in which case it would automatically be supported by all virt drivers.\n\nWe can settle this at implementation time, unless you think it\u0027s essential to resolve it here.\n\n[1] https://review.opendev.org/#/c/612497/10/specs/train/approved/provider-config-file.rst@205","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f8c948ee742dedb2e5ec662268d31aa190f95980","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  meta:"},{"line_number":105,"context_line":"    # Version ($Major, $minor) of the schema must successfully parse documents"},{"line_number":106,"context_line":"    # conforming to ($Major, 0..$minor). Any breaking schema change (e.g."},{"line_number":107,"context_line":"    # removing fields, adding new required fields, imposing a stricter pattern"},{"line_number":108,"context_line":"    # on a value, etc.) must bump $Major. The question of whether/how old"},{"line_number":109,"context_line":"    # versions will be deprecated or become unsupported is left for future"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_bc7f3564","line":106,"range":{"start_line":106,"start_character":32,"end_line":106,"end_character":38},"updated":"2019-07-18 19:14:43.000000000","message":"N\n\nAgreed to make $minor forward-compatible (e.g. 1.4 schema and code must be able to parse a 1.5 document - it just ignores the 1.5-isms) to facilitate upgrades. This allows you to update configs before computes rather than having to lockstep the changes (which would require awareness in deployment tools) and/or do extra compute restarts.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  meta:"},{"line_number":105,"context_line":"    # Version ($Major, $minor) of the schema must successfully parse documents"},{"line_number":106,"context_line":"    # conforming to ($Major, 0..$minor). Any breaking schema change (e.g."},{"line_number":107,"context_line":"    # removing fields, adding new required fields, imposing a stricter pattern"},{"line_number":108,"context_line":"    # on a value, etc.) must bump $Major. The question of whether/how old"},{"line_number":109,"context_line":"    # versions will be deprecated or become unsupported is left for future"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_d7df6a0a","line":106,"range":{"start_line":106,"start_character":32,"end_line":106,"end_character":38},"in_reply_to":"7faddb67_bc7f3564","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a01cf6771d8fc28347483b2d96ffbd97e78cf5d","unresolved":false,"context_lines":[{"line_number":117,"context_line":"          #"},{"line_number":118,"context_line":"          # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_e9b3b8e7","line":120,"range":{"start_line":120,"start_character":40,"end_line":120,"end_character":55},"updated":"2019-07-18 09:31:02.000000000","message":"could this special casing be removed if we allow identifying providers by name? The name is unique in the provider in placement so it would not be ambiguous. In the other hand it would allow other special cases to handle like identifying the network agent and network device providers as well by name.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"57198dc9a503b455fbea37641827d87325e6ec76","unresolved":false,"context_lines":[{"line_number":117,"context_line":"          #"},{"line_number":118,"context_line":"          # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_62a03a91","line":120,"range":{"start_line":120,"start_character":40,"end_line":120,"end_character":55},"in_reply_to":"7faddb67_07ecfb27","updated":"2019-07-18 15:08:34.000000000","message":"It also allows you to lay down the file before the compute service is started for the first time (i.e. before the provider exists in placement, before it has a name or UUID).","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"69224985f6d8e4e8a024023ba3187fb965c5af9b","unresolved":false,"context_lines":[{"line_number":117,"context_line":"          #"},{"line_number":118,"context_line":"          # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_68e49b0d","line":120,"range":{"start_line":120,"start_character":40,"end_line":120,"end_character":55},"in_reply_to":"7faddb67_62a03a91","updated":"2019-07-18 15:47:35.000000000","message":"What I\u0027m after is to allow identifying RPs by name as well. This way you don\u0027t need to handle the `$COMPUTE_HOST` special case. \n\nRegarding distribution of the same file to different computes. If it is done with a config manager (e.g. ansible) then the same config manager can insert the \u0027hostname\u0027 to the file as well.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f8c948ee742dedb2e5ec662268d31aa190f95980","unresolved":false,"context_lines":[{"line_number":117,"context_line":"          #"},{"line_number":118,"context_line":"          # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_d133fa12","line":120,"range":{"start_line":120,"start_character":40,"end_line":120,"end_character":55},"in_reply_to":"7faddb67_68e49b0d","updated":"2019-07-18 19:14:43.000000000","message":"Agreed to call this $COMPUTE_NODE, as that\u0027s more technically correct (inventories are on the node that is managed by the compute service on the compute host), and declare that it causes this section to apply to \"all nodes managed by this compute service\" (which is \u003e1 for ironic).\n\nWe could add `name` back in, though I\u0027m still not sure what it gains you. Do you know the compute RP name any earlier than you know the UUID?","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":117,"context_line":"          #"},{"line_number":118,"context_line":"          # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_b7e8aeb2","line":120,"range":{"start_line":120,"start_character":40,"end_line":120,"end_character":55},"in_reply_to":"7faddb67_d133fa12","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ba5de56748697f88afd63e2d8800f7dcf5e5fe80","unresolved":false,"context_lines":[{"line_number":117,"context_line":"          #"},{"line_number":118,"context_line":"          # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_73e800b2","line":120,"range":{"start_line":120,"start_character":40,"end_line":120,"end_character":55},"in_reply_to":"7faddb67_d133fa12","updated":"2019-07-19 13:11:58.000000000","message":"The name of the compute node RP is the hypervisor host name. So yes you can know that before you start (or even deploy) the openstack services.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f14b7c40dcf8fee0cf026cc67c454957042c49a1","unresolved":false,"context_lines":[{"line_number":117,"context_line":"          #"},{"line_number":118,"context_line":"          # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_07ecfb27","line":120,"range":{"start_line":120,"start_character":40,"end_line":120,"end_character":55},"in_reply_to":"7faddb67_e9b3b8e7","updated":"2019-07-18 11:17:59.000000000","message":"Using $COMPUTE_HOST can allow the same file (or templated file) to be distributed to multiple hosts that have identical custom inventory.\n\n$COMPUTE_HOST says \"attach some inventory to this compute node\" without needing special information about \"this compute node\".","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e21692d7c1919e785b4b65c789bbe8e3ddf43ced","unresolved":false,"context_lines":[{"line_number":117,"context_line":"          #"},{"line_number":118,"context_line":"          # UUID of the provider (as opposed to e.g. the UUID of the backing"},{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_69a58846","line":120,"range":{"start_line":120,"start_character":40,"end_line":120,"end_character":55},"in_reply_to":"7faddb67_e9b3b8e7","updated":"2019-07-18 10:13:18.000000000","message":"We felt its tricky to give a unique name that is valid across all rps in the placement.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a01cf6771d8fc28347483b2d96ffbd97e78cf5d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."},{"line_number":124,"context_line":"          uuid: $uuid_pattern"},{"line_number":125,"context_line":"      customization:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_49768c40","line":122,"range":{"start_line":122,"start_character":16,"end_line":122,"end_character":39},"updated":"2019-07-18 09:31:02.000000000","message":"~ the parser of the file","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."},{"line_number":124,"context_line":"          uuid: $uuid_pattern"},{"line_number":125,"context_line":"      customization:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_77ceb65a","line":122,"range":{"start_line":122,"start_character":16,"end_line":122,"end_character":39},"in_reply_to":"7faddb67_1c068921","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"57198dc9a503b455fbea37641827d87325e6ec76","unresolved":false,"context_lines":[{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."},{"line_number":124,"context_line":"          uuid: $uuid_pattern"},{"line_number":125,"context_line":"      customization:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_85122061","line":122,"range":{"start_line":122,"start_character":16,"end_line":122,"end_character":39},"in_reply_to":"7faddb67_29379001","updated":"2019-07-18 15:08:34.000000000","message":"In the current iteration we\u0027re only supporting this from nova. But yeah, if this comment is copied into the corresponding part of the schema def, it should be made more general.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e21692d7c1919e785b4b65c789bbe8e3ddf43ced","unresolved":false,"context_lines":[{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."},{"line_number":124,"context_line":"          uuid: $uuid_pattern"},{"line_number":125,"context_line":"      customization:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_29379001","line":122,"range":{"start_line":122,"start_character":16,"end_line":122,"end_character":39},"in_reply_to":"7faddb67_49768c40","updated":"2019-07-18 10:13:18.000000000","message":"Will add the specific","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"91f259fd49915d6a65889b2256e911b83d648399","unresolved":false,"context_lines":[{"line_number":119,"context_line":"          # resource, which may not be the same.) UUID is mandatory. It can be"},{"line_number":120,"context_line":"          # set to a specialized string `$COMPUTE_HOST` for consumer to lookup"},{"line_number":121,"context_line":"          # compute host UUID and identify the root provider."},{"line_number":122,"context_line":"          # The consuming Nova service must fail if duplicate UUIDs are provided"},{"line_number":123,"context_line":"          # across the provider config file."},{"line_number":124,"context_line":"          uuid: $uuid_pattern"},{"line_number":125,"context_line":"      customization:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_1c068921","line":122,"range":{"start_line":122,"start_character":16,"end_line":122,"end_character":39},"in_reply_to":"7faddb67_85122061","updated":"2019-07-18 19:35:10.000000000","message":"@Eric, could you reword the comment too.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a01cf6771d8fc28347483b2d96ffbd97e78cf5d","unresolved":false,"context_lines":[{"line_number":131,"context_line":"              # This section allows the admin to specify various override"},{"line_number":132,"context_line":"              # actions to create and manage providers\u0027 inventories."},{"line_number":133,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":134,"context_line":"              # schema evolves to meet new usecases."},{"line_number":135,"context_line":"              ensure:"},{"line_number":136,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":137,"context_line":"                  # Inventories of resource classes natively managed by Nova"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_49c44c40","line":134,"range":{"start_line":134,"start_character":43,"end_line":134,"end_character":51},"updated":"2019-07-18 09:31:02.000000000","message":"nit: use cases","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":131,"context_line":"              # This section allows the admin to specify various override"},{"line_number":132,"context_line":"              # actions to create and manage providers\u0027 inventories."},{"line_number":133,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":134,"context_line":"              # schema evolves to meet new usecases."},{"line_number":135,"context_line":"              ensure:"},{"line_number":136,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":137,"context_line":"                  # Inventories of resource classes natively managed by Nova"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_37d4bee8","line":134,"range":{"start_line":134,"start_character":43,"end_line":134,"end_character":51},"in_reply_to":"7faddb67_3c010507","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e21692d7c1919e785b4b65c789bbe8e3ddf43ced","unresolved":false,"context_lines":[{"line_number":131,"context_line":"              # This section allows the admin to specify various override"},{"line_number":132,"context_line":"              # actions to create and manage providers\u0027 inventories."},{"line_number":133,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":134,"context_line":"              # schema evolves to meet new usecases."},{"line_number":135,"context_line":"              ensure:"},{"line_number":136,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":137,"context_line":"                  # Inventories of resource classes natively managed by Nova"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_c9391cf2","line":134,"range":{"start_line":134,"start_character":43,"end_line":134,"end_character":51},"in_reply_to":"7faddb67_49c44c40","updated":"2019-07-18 10:13:18.000000000","message":"Fixed this.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"91f259fd49915d6a65889b2256e911b83d648399","unresolved":false,"context_lines":[{"line_number":131,"context_line":"              # This section allows the admin to specify various override"},{"line_number":132,"context_line":"              # actions to create and manage providers\u0027 inventories."},{"line_number":133,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":134,"context_line":"              # schema evolves to meet new usecases."},{"line_number":135,"context_line":"              ensure:"},{"line_number":136,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":137,"context_line":"                  # Inventories of resource classes natively managed by Nova"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_3c010507","line":134,"range":{"start_line":134,"start_character":43,"end_line":134,"end_character":51},"in_reply_to":"7faddb67_c9391cf2","updated":"2019-07-18 19:35:10.000000000","message":"@Eric, please add this change too in the final draft","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f8c948ee742dedb2e5ec662268d31aa190f95980","unresolved":false,"context_lines":[{"line_number":132,"context_line":"              # actions to create and manage providers\u0027 inventories."},{"line_number":133,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":134,"context_line":"              # schema evolves to meet new usecases."},{"line_number":135,"context_line":"              ensure:"},{"line_number":136,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":137,"context_line":"                  # Inventories of resource classes natively managed by Nova"},{"line_number":138,"context_line":"                  # virt driver are illegal and will cause the compute driver"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_fc7b6d88","line":135,"range":{"start_line":135,"start_character":14,"end_line":135,"end_character":20},"updated":"2019-07-18 19:14:43.000000000","message":"Agreed to call this \"additional\" here and L158 to clarify that you\u0027re adding, not replacing, and to further crisp the line between this and what the virt driver controls.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":132,"context_line":"              # actions to create and manage providers\u0027 inventories."},{"line_number":133,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":134,"context_line":"              # schema evolves to meet new usecases."},{"line_number":135,"context_line":"              ensure:"},{"line_number":136,"context_line":"                  # Inventory dicts keyed by resource class."},{"line_number":137,"context_line":"                  # Inventories of resource classes natively managed by Nova"},{"line_number":138,"context_line":"                  # virt driver are illegal and will cause the compute driver"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_d708ca92","line":135,"range":{"start_line":135,"start_character":14,"end_line":135,"end_character":20},"in_reply_to":"7faddb67_fc7b6d88","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a01cf6771d8fc28347483b2d96ffbd97e78cf5d","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                  # be idempotent)."},{"line_number":142,"context_line":"                  $resource_class:"},{"line_number":143,"context_line":"                      # `total` is required. Other optional fields not"},{"line_number":144,"context_line":"                      # specified get defaults."},{"line_number":145,"context_line":"                      total: $int"},{"line_number":146,"context_line":"                      reserved: $int"},{"line_number":147,"context_line":"                      min_unit: $int"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_e9e898b3","line":144,"range":{"start_line":144,"start_character":34,"end_line":144,"end_character":47},"updated":"2019-07-18 09:31:02.000000000","message":"defaults from placement? from nova?","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                  # be idempotent)."},{"line_number":142,"context_line":"                  $resource_class:"},{"line_number":143,"context_line":"                      # `total` is required. Other optional fields not"},{"line_number":144,"context_line":"                      # specified get defaults."},{"line_number":145,"context_line":"                      total: $int"},{"line_number":146,"context_line":"                      reserved: $int"},{"line_number":147,"context_line":"                      min_unit: $int"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_97fed268","line":144,"range":{"start_line":144,"start_character":34,"end_line":144,"end_character":47},"in_reply_to":"7faddb67_02c4e63e","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"57198dc9a503b455fbea37641827d87325e6ec76","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                  # be idempotent)."},{"line_number":142,"context_line":"                  $resource_class:"},{"line_number":143,"context_line":"                      # `total` is required. Other optional fields not"},{"line_number":144,"context_line":"                      # specified get defaults."},{"line_number":145,"context_line":"                      total: $int"},{"line_number":146,"context_line":"                      reserved: $int"},{"line_number":147,"context_line":"                      min_unit: $int"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_02c4e63e","line":144,"range":{"start_line":144,"start_character":34,"end_line":144,"end_character":47},"in_reply_to":"7faddb67_2c0b1ed6","updated":"2019-07-18 15:08:34.000000000","message":"...which happens for free on the placement side. No action is needed by the code being added under this spec.\n\n(Implementation detail)","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e21692d7c1919e785b4b65c789bbe8e3ddf43ced","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                  # be idempotent)."},{"line_number":142,"context_line":"                  $resource_class:"},{"line_number":143,"context_line":"                      # `total` is required. Other optional fields not"},{"line_number":144,"context_line":"                      # specified get defaults."},{"line_number":145,"context_line":"                      total: $int"},{"line_number":146,"context_line":"                      reserved: $int"},{"line_number":147,"context_line":"                      min_unit: $int"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_2c0b1ed6","line":144,"range":{"start_line":144,"start_character":34,"end_line":144,"end_character":47},"in_reply_to":"7faddb67_e9e898b3","updated":"2019-07-18 10:13:18.000000000","message":"Defaults from placement for optional fields","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a01cf6771d8fc28347483b2d96ffbd97e78cf5d","unresolved":false,"context_lines":[{"line_number":156,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":157,"context_line":"              # schema evolves to meet new usecases."},{"line_number":158,"context_line":"              ensure:"},{"line_number":159,"context_line":"                  - $trait_pattern"},{"line_number":160,"context_line":"                  - ..."},{"line_number":161,"context_line":"    # Next provider..."},{"line_number":162,"context_line":"    - identification:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_89d32404","line":159,"updated":"2019-07-18 09:31:02.000000000","message":"So if a trait is listed here it will be added to the provider. Does traits managed by nova is legal to be listed here?","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f14b7c40dcf8fee0cf026cc67c454957042c49a1","unresolved":false,"context_lines":[{"line_number":156,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":157,"context_line":"              # schema evolves to meet new usecases."},{"line_number":158,"context_line":"              ensure:"},{"line_number":159,"context_line":"                  - $trait_pattern"},{"line_number":160,"context_line":"                  - ..."},{"line_number":161,"context_line":"    # Next provider..."},{"line_number":162,"context_line":"    - identification:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_c7ca639f","line":159,"in_reply_to":"7faddb67_6c5d9613","updated":"2019-07-18 11:17:59.000000000","message":"How does an individual making this file know which traits are managed by nova and which traits are not?","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e21692d7c1919e785b4b65c789bbe8e3ddf43ced","unresolved":false,"context_lines":[{"line_number":156,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":157,"context_line":"              # schema evolves to meet new usecases."},{"line_number":158,"context_line":"              ensure:"},{"line_number":159,"context_line":"                  - $trait_pattern"},{"line_number":160,"context_line":"                  - ..."},{"line_number":161,"context_line":"    # Next provider..."},{"line_number":162,"context_line":"    - identification:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_6c5d9613","line":159,"in_reply_to":"7faddb67_89d32404","updated":"2019-07-18 10:13:18.000000000","message":"Yes added to the provider. Currently we do not support changes to traits already managed by Nova.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":156,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":157,"context_line":"              # schema evolves to meet new usecases."},{"line_number":158,"context_line":"              ensure:"},{"line_number":159,"context_line":"                  - $trait_pattern"},{"line_number":160,"context_line":"                  - ..."},{"line_number":161,"context_line":"    # Next provider..."},{"line_number":162,"context_line":"    - identification:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_57fcda6e","line":159,"in_reply_to":"7faddb67_bc0ad51c","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f8c948ee742dedb2e5ec662268d31aa190f95980","unresolved":false,"context_lines":[{"line_number":156,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":157,"context_line":"              # schema evolves to meet new usecases."},{"line_number":158,"context_line":"              ensure:"},{"line_number":159,"context_line":"                  - $trait_pattern"},{"line_number":160,"context_line":"                  - ..."},{"line_number":161,"context_line":"    # Next provider..."},{"line_number":162,"context_line":"    - identification:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_bc0ad51c","line":159,"in_reply_to":"7faddb67_c5f25870","updated":"2019-07-18 19:14:43.000000000","message":"We decided to punt on this by only allowing CUSTOM_ traits. So, since it\u0027s also additive-only, there can\u0027t be a conflict (if you add a CUSTOM_ trait that was already present from upt, no harm no foul; and upt doesn\u0027t get to declare \"ownership\" over traits that are CUSTOM_ so it can\u0027t get mad if you add one it thinks shouldn\u0027t be there).","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"57198dc9a503b455fbea37641827d87325e6ec76","unresolved":false,"context_lines":[{"line_number":156,"context_line":"              # This list of actions can be extended below in future as the"},{"line_number":157,"context_line":"              # schema evolves to meet new usecases."},{"line_number":158,"context_line":"              ensure:"},{"line_number":159,"context_line":"                  - $trait_pattern"},{"line_number":160,"context_line":"                  - ..."},{"line_number":161,"context_line":"    # Next provider..."},{"line_number":162,"context_line":"    - identification:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_c5f25870","line":159,"in_reply_to":"7faddb67_c7ca639f","updated":"2019-07-18 15:08:34.000000000","message":"Based on the flow suggested at [1], merging the file into the provider tree would happen from within update_provider_tree, and the RT does automatic trait work *after* that [2]. So traits managed by nova [3] are applied (added or removed) afterward, which means they\u0027ll indeed take precedence.\n\n(I\u0027m not sure that\u0027s the right thing, actually, based on my arguments elsewhere for why we might eventually need to be able to *remove* automatic traits. But assuming it is...)\n\n\u003e How does an individual ... know which traits are managed by nova\n\nThey pretty much don\u0027t. But this is an existing problem, manifested if you use e.g. osc to add/remove a trait and then some time later nova-compute periodic removes/adds it back for you. This is explained to some extent at [4] and [5].\n\nHowever, the manifestation here would be a little cleaner because you wouldn\u0027t have to wait some indeterminate amount of time for periodic to override - it would happen before the changes are even flushed to placement.\n\nSo I guess the answer is: \"You can tell because the trait in your file will never show up on the provider (and since there\u0027s no way we have a bug in our code, this is obviously by design).\"\n\n[1] https://review.opendev.org/#/c/612497/10/specs/train/approved/provider-config-file.rst@205\n[2] https://opendev.org/openstack/nova/src/branch/master/nova/compute/resource_tracker.py#L1007-L1027\n[3] though \"traits managed by nova\" is probably too vague. Technically \"traits managed by nova-compute outside of update_provider_tree\".\n[4] https://docs.openstack.org/nova/latest/reference/update-provider-tree.html#taxonomy-of-traits-and-capabilities\n[5] https://docs.openstack.org/nova/latest/admin/configuration/schedulers.html#compute-capabilities-as-traits","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f8c948ee742dedb2e5ec662268d31aa190f95980","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Provider config consumption from Nova"},{"line_number":203,"context_line":"-------------------------------------"},{"line_number":204,"context_line":"The virt driver, which is by definition platform/hypervisor-specific, is"},{"line_number":205,"context_line":"responsible for:"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Discovering resources on the system."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_dc16b1a8","line":204,"updated":"2019-07-18 19:14:43.000000000","message":"Need to rework this section. We agreed that the flow will be as follows:\n\n0) On startup, the resource tracker loads files from the directory specified by CONF.compute.provider_config and schema-validates them. Schema validation failure blows up the compute service. On successful load/validation, the resulting dict blob is saved as an instance attribute on the resource tracker.\n\nThen, during the resource tracker\u0027s _update_to_placement flow (so on periodics etc.):\n1) driver.update_provider_tree is invoked, as today [1]. It doesn\u0027t know about provider config, has no ability to pre-/post-process it. (If we decide we want that at some point in the future, we can pass the config into upt. But not now.)\n2) Automatic traits processing happens, as today [2].\n3) Provider config is now merged with the provider tree. Inventory conflicts (meaning reference to existing resource classes) log a warning. If `startup` is True, also blow up the compute service. (It should be very difficult to generate a conflict on not-startup; this is for extra safety.) If `startup` is False, ignore the conflicting piece of the inventory.\n4) update_from_provider_tree (flush to Placement), as today [3].\n\nNB: We will only support provider config in the update_provider_tree code path. It will not be processed in the get_inventory [4] or compute_node_to_inventory_dict [5] code paths.\n\n[1] https://opendev.org/openstack/nova/src/branch/master/nova/compute/resource_tracker.py#L1007-L1008\n[2] https://opendev.org/openstack/nova/src/branch/master/nova/compute/resource_tracker.py#L1010-L1027\n[3] https://opendev.org/openstack/nova/src/branch/master/nova/compute/resource_tracker.py#L1049-L1052\n[4] https://opendev.org/openstack/nova/src/branch/master/nova/compute/resource_tracker.py#L1036-L1039\n[5] https://opendev.org/openstack/nova/src/branch/master/nova/compute/resource_tracker.py#L1041-L1045","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Provider config consumption from Nova"},{"line_number":203,"context_line":"-------------------------------------"},{"line_number":204,"context_line":"The virt driver, which is by definition platform/hypervisor-specific, is"},{"line_number":205,"context_line":"responsible for:"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Discovering resources on the system."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_77f7968c","line":204,"in_reply_to":"7faddb67_dc16b1a8","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f14b7c40dcf8fee0cf026cc67c454957042c49a1","unresolved":false,"context_lines":[{"line_number":205,"context_line":"responsible for:"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Discovering resources on the system."},{"line_number":208,"context_line":"* Constructing resource providers corresponding to those resources."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"The author of the ``providers.yaml`` file (the operator) is responsible for"},{"line_number":211,"context_line":"knowing what platform/hypervisor it\u0027s going to be deployed on, reading the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_67b92f13","line":208,"updated":"2019-07-18 11:17:59.000000000","message":"Does this mean nova will create any resource providers identified in the yaml file that do not yet exist?","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":205,"context_line":"responsible for:"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Discovering resources on the system."},{"line_number":208,"context_line":"* Constructing resource providers corresponding to those resources."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"The author of the ``providers.yaml`` file (the operator) is responsible for"},{"line_number":211,"context_line":"knowing what platform/hypervisor it\u0027s going to be deployed on, reading the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_17f2e29a","line":208,"in_reply_to":"7faddb67_059150f1","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"57198dc9a503b455fbea37641827d87325e6ec76","unresolved":false,"context_lines":[{"line_number":205,"context_line":"responsible for:"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Discovering resources on the system."},{"line_number":208,"context_line":"* Constructing resource providers corresponding to those resources."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"The author of the ``providers.yaml`` file (the operator) is responsible for"},{"line_number":211,"context_line":"knowing what platform/hypervisor it\u0027s going to be deployed on, reading the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_059150f1","line":208,"in_reply_to":"7faddb67_67b92f13","updated":"2019-07-18 15:08:34.000000000","message":"This is left over from previous revs where we were going to allow just that. For this pass we\u0027ve said we\u0027re not going to create any providers, so we should remove this bullet.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a01cf6771d8fc28347483b2d96ffbd97e78cf5d","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"  provider_config_dir \u003d /etc/nova/provider_config"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":227,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":228,"context_line":"identifies the contents as having originated from a single file."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Each file in the folder can represent a set of providers. The files in the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_69ed88b5","line":227,"range":{"start_line":226,"start_character":0,"end_line":227,"end_character":20},"updated":"2019-07-18 09:31:02.000000000","message":"Does it mean Nova will read and try to parse each file under this directory?","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":29334,"name":"Dakshina Ilangovan","email":"dakshina.ilangovan@intel.com","username":"dakshinai"},"change_message_id":"e21692d7c1919e785b4b65c789bbe8e3ddf43ced","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"  provider_config_dir \u003d /etc/nova/provider_config"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":227,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":228,"context_line":"identifies the contents as having originated from a single file."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Each file in the folder can represent a set of providers. The files in the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_8cb1f249","line":227,"range":{"start_line":226,"start_character":0,"end_line":227,"end_character":20},"in_reply_to":"7faddb67_69ed88b5","updated":"2019-07-18 10:13:18.000000000","message":"As the next line suggests, it collectively reads all the files in lexicographic order as a glob and then begins the schema validation and parsing.","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"29d0be2bc3d889a8e192a00d765720ce9afb27c1","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"  provider_config_dir \u003d /etc/nova/provider_config"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Nova virt-driver looks for a list of provider config files under"},{"line_number":227,"context_line":"provider_config_path. It then processes all the files as a single glob and"},{"line_number":228,"context_line":"identifies the contents as having originated from a single file."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Each file in the folder can represent a set of providers. The files in the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7faddb67_37ed9eb6","line":227,"range":{"start_line":226,"start_character":0,"end_line":227,"end_character":20},"in_reply_to":"7faddb67_8cb1f249","updated":"2019-07-18 20:14:57.000000000","message":"Done","commit_id":"6ad4f286cdd590dc2bf16a590c7451a5941c573e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"026782ddb47352586a97abcda8f5600d59279dfe","unresolved":false,"context_lines":[{"line_number":107,"context_line":"  meta:"},{"line_number":108,"context_line":"    # Version ($Major, $minor) of the schema must successfully parse documents"},{"line_number":109,"context_line":"    # conforming to ($Major, *). I.e. additionalProperties must be allowed at"},{"line_number":110,"context_line":"    # all levels; but code at a lower $minor will ignore fileds it doesn\u0027t"},{"line_number":111,"context_line":"    # recognize. Schema changes representing optional additions should bump"},{"line_number":112,"context_line":"    # $minor. Any breaking schema change (e.g. removing fields, adding new"},{"line_number":113,"context_line":"    # required fields, imposing a stricter pattern on a value, etc.) must bump"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_456e52c9","line":110,"range":{"start_line":110,"start_character":67,"end_line":110,"end_character":74},"updated":"2019-07-19 17:50:57.000000000","message":"does not","commit_id":"2af0e2a64d41e5a5f951aea3b62c5376fda807f9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"026782ddb47352586a97abcda8f5600d59279dfe","unresolved":false,"context_lines":[{"line_number":107,"context_line":"  meta:"},{"line_number":108,"context_line":"    # Version ($Major, $minor) of the schema must successfully parse documents"},{"line_number":109,"context_line":"    # conforming to ($Major, *). I.e. additionalProperties must be allowed at"},{"line_number":110,"context_line":"    # all levels; but code at a lower $minor will ignore fileds it doesn\u0027t"},{"line_number":111,"context_line":"    # recognize. Schema changes representing optional additions should bump"},{"line_number":112,"context_line":"    # $minor. Any breaking schema change (e.g. removing fields, adding new"},{"line_number":113,"context_line":"    # required fields, imposing a stricter pattern on a value, etc.) must bump"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_a57b8689","line":110,"range":{"start_line":110,"start_character":57,"end_line":110,"end_character":63},"updated":"2019-07-19 17:50:57.000000000","message":"fields","commit_id":"2af0e2a64d41e5a5f951aea3b62c5376fda807f9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2ce673a5fbf5dcf11981061e43767d3b152ad34b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"  meta:"},{"line_number":108,"context_line":"    # Version ($Major, $minor) of the schema must successfully parse documents"},{"line_number":109,"context_line":"    # conforming to ($Major, *). I.e. additionalProperties must be allowed at"},{"line_number":110,"context_line":"    # all levels; but code at a lower $minor will ignore fileds it doesn\u0027t"},{"line_number":111,"context_line":"    # recognize. Schema changes representing optional additions should bump"},{"line_number":112,"context_line":"    # $minor. Any breaking schema change (e.g. removing fields, adding new"},{"line_number":113,"context_line":"    # required fields, imposing a stricter pattern on a value, etc.) must bump"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_65102e01","line":110,"range":{"start_line":110,"start_character":67,"end_line":110,"end_character":74},"in_reply_to":"7faddb67_456e52c9","updated":"2019-07-19 18:05:39.000000000","message":"Done","commit_id":"2af0e2a64d41e5a5f951aea3b62c5376fda807f9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2ce673a5fbf5dcf11981061e43767d3b152ad34b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"  meta:"},{"line_number":108,"context_line":"    # Version ($Major, $minor) of the schema must successfully parse documents"},{"line_number":109,"context_line":"    # conforming to ($Major, *). I.e. additionalProperties must be allowed at"},{"line_number":110,"context_line":"    # all levels; but code at a lower $minor will ignore fileds it doesn\u0027t"},{"line_number":111,"context_line":"    # recognize. Schema changes representing optional additions should bump"},{"line_number":112,"context_line":"    # $minor. Any breaking schema change (e.g. removing fields, adding new"},{"line_number":113,"context_line":"    # required fields, imposing a stricter pattern on a value, etc.) must bump"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_05fb7ac0","line":110,"range":{"start_line":110,"start_character":57,"end_line":110,"end_character":63},"in_reply_to":"7faddb67_a57b8689","updated":"2019-07-19 18:05:39.000000000","message":"Done","commit_id":"2af0e2a64d41e5a5f951aea3b62c5376fda807f9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"026782ddb47352586a97abcda8f5600d59279dfe","unresolved":false,"context_lines":[{"line_number":118,"context_line":"  providers:"},{"line_number":119,"context_line":"    # List of dicts"},{"line_number":120,"context_line":"      # Identify a single provider to configure."},{"line_number":121,"context_line":"      # Either uuid or name is mandatory."},{"line_number":122,"context_line":"      # The consuming nova-compute service must fail if the same provider is"},{"line_number":123,"context_line":"      # specified more than once across all provider configs."},{"line_number":124,"context_line":"    - identification:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_05b13a47","line":121,"range":{"start_line":121,"start_character":7,"end_line":121,"end_character":40},"updated":"2019-07-19 17:50:57.000000000","message":"I was going to say maybe change this to \"exactly one identification mechanism is required\" as I think having name and uuid here would be confusing, and for the future where we could add something else like has_trait:foo.","commit_id":"2af0e2a64d41e5a5f951aea3b62c5376fda807f9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2ce673a5fbf5dcf11981061e43767d3b152ad34b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"  providers:"},{"line_number":119,"context_line":"    # List of dicts"},{"line_number":120,"context_line":"      # Identify a single provider to configure."},{"line_number":121,"context_line":"      # Either uuid or name is mandatory."},{"line_number":122,"context_line":"      # The consuming nova-compute service must fail if the same provider is"},{"line_number":123,"context_line":"      # specified more than once across all provider configs."},{"line_number":124,"context_line":"    - identification:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7faddb67_4597323b","line":121,"range":{"start_line":121,"start_character":7,"end_line":121,"end_character":40},"in_reply_to":"7faddb67_05b13a47","updated":"2019-07-19 18:05:39.000000000","message":"Done","commit_id":"2af0e2a64d41e5a5f951aea3b62c5376fda807f9"}]}
