)]}'
{"doc/source/admin/custom-traits-and-inventories.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Managing resource provider inventory and traits using config files"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"In order to facilitate management of resource provider information in the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_c3ca099f","line":2,"range":{"start_line":2,"start_character":18,"end_line":2,"end_character":47},"updated":"2020-01-14 23:09:52.000000000","message":"I would just say \"Providers\" here, so we don\u0027t have to change the title later when we add support for managing other bits and pieces.\n\nAlso please use Title Case","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Managing resource provider inventory and traits using config files"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"In order to facilitate management of resource provider information in the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_901e8373","line":2,"range":{"start_line":2,"start_character":18,"end_line":2,"end_character":47},"in_reply_to":"3fa7e38b_90c9a37b","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"05c2a29f3c3111895f43523bfcf7be2470bdd464","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Managing resource provider inventory and traits using config files"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"In order to facilitate management of resource provider information in the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_90c9a37b","line":2,"range":{"start_line":2,"start_character":18,"end_line":2,"end_character":47},"in_reply_to":"3fa7e38b_ba6da002","updated":"2020-01-15 18:57:32.000000000","message":"Hm, looks like some use title case and some don\u0027t.\n\nI prefer title case for the title of a document. Not worth a whole patch to go make it consistent for all the docs, but worth changing here since you\u0027re respinning please.","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"3c4db133e2e066b7be5e94879f58a10c110dda19","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Managing resource provider inventory and traits using config files"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"In order to facilitate management of resource provider information in the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_ba6da002","line":2,"range":{"start_line":2,"start_character":18,"end_line":2,"end_character":47},"in_reply_to":"3fa7e38b_c3ca099f","updated":"2020-01-15 17:40:23.000000000","message":"Are you sure about title case? I chose to capitalize just the first letter to match other files in this directory.","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":".. note::"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    Only ``CUSTOM_*`` resource classes and traits may be assigned this way."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Placing Files"},{"line_number":14,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_23b99d15","line":11,"range":{"start_line":11,"start_character":57,"end_line":11,"end_character":65},"updated":"2020-01-14 23:09:52.000000000","message":"managed?","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":".. note::"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    Only ``CUSTOM_*`` resource classes and traits may be assigned this way."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Placing Files"},{"line_number":14,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_153125bc","line":11,"range":{"start_line":11,"start_character":57,"end_line":11,"end_character":65},"in_reply_to":"3fa7e38b_23b99d15","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Placing Files"},{"line_number":14,"context_line":"-------------"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Nova will search for ``*.yaml`` files in the path specified in"},{"line_number":17,"context_line":":oslo.config:option:`compute.provider_config_location`. These files will be"},{"line_number":18,"context_line":"loaded and validated for errors on Nova startup. If there are any errors in"},{"line_number":19,"context_line":"the files, Nova will fail to start up."}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_4364d9b3","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":4},"updated":"2020-01-14 23:09:52.000000000","message":"We should call this nova-compute any time we\u0027re talking specifically about nova-compute (which I think is all except L6).","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Placing Files"},{"line_number":14,"context_line":"-------------"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Nova will search for ``*.yaml`` files in the path specified in"},{"line_number":17,"context_line":":oslo.config:option:`compute.provider_config_location`. These files will be"},{"line_number":18,"context_line":"loaded and validated for errors on Nova startup. If there are any errors in"},{"line_number":19,"context_line":"the files, Nova will fail to start up."}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_3536a1b5","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":4},"in_reply_to":"3fa7e38b_4364d9b3","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":21,"context_line":".. note::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    The files are loaded once at Nova startup and any changes will require a"},{"line_number":24,"context_line":"    restart of the Nova service in order to be recognized."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Examples"},{"line_number":27,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_0336e1b4","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":11},"updated":"2020-01-14 23:09:52.000000000","message":"or SIGHUP?","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":21,"context_line":".. note::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    The files are loaded once at Nova startup and any changes will require a"},{"line_number":24,"context_line":"    restart of the Nova service in order to be recognized."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Examples"},{"line_number":27,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_b01b7f82","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":11},"in_reply_to":"3fa7e38b_0336e1b4","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Examples"},{"line_number":27,"context_line":"--------"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Resource providers to target can be identified by either UUID or Name. In"},{"line_number":30,"context_line":"addition, the value $COMPUTE_NODE can be used in the UUID field to identify"},{"line_number":31,"context_line":"all nodes managed by the service."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_c33f6984","line":29,"range":{"start_line":29,"start_character":65,"end_line":29,"end_character":69},"updated":"2020-01-14 23:09:52.000000000","message":"name (throughout)","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Examples"},{"line_number":27,"context_line":"--------"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Resource providers to target can be identified by either UUID or Name. In"},{"line_number":30,"context_line":"addition, the value $COMPUTE_NODE can be used in the UUID field to identify"},{"line_number":31,"context_line":"all nodes managed by the service."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_d53aad95","line":29,"range":{"start_line":29,"start_character":65,"end_line":29,"end_character":69},"in_reply_to":"3fa7e38b_c33f6984","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"--------"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Resource providers to target can be identified by either UUID or Name. In"},{"line_number":30,"context_line":"addition, the value $COMPUTE_NODE can be used in the UUID field to identify"},{"line_number":31,"context_line":"all nodes managed by the service."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"If an entry does not include any additional inventory or traits, it will be"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_6344751b","line":30,"range":{"start_line":30,"start_character":20,"end_line":30,"end_character":33},"updated":"2020-01-14 23:09:52.000000000","message":"``literal`` this (throughout)","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":27,"context_line":"--------"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Resource providers to target can be identified by either UUID or Name. In"},{"line_number":30,"context_line":"addition, the value $COMPUTE_NODE can be used in the UUID field to identify"},{"line_number":31,"context_line":"all nodes managed by the service."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"If an entry does not include any additional inventory or traits, it will be"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_754bb927","line":30,"range":{"start_line":30,"start_character":20,"end_line":30,"end_character":33},"in_reply_to":"3fa7e38b_6344751b","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"all nodes managed by the service."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"If an entry does not include any additional inventory or traits, it will be"},{"line_number":34,"context_line":"logged at load time and will not be processed. In the case of a resource"},{"line_number":35,"context_line":"provider being identified by both $COMPUTE_NODE and individual UUID/Name, the"},{"line_number":36,"context_line":"values in the $COMPUTE_NODE entry will be ignored for *that provider* only if"},{"line_number":37,"context_line":"the explicit entry includes inventory or traits."}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_234e7d39","line":34,"range":{"start_line":34,"start_character":20,"end_line":34,"end_character":45},"updated":"2020-01-14 23:09:52.000000000","message":"but otherwise ignored","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":31,"context_line":"all nodes managed by the service."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"If an entry does not include any additional inventory or traits, it will be"},{"line_number":34,"context_line":"logged at load time and will not be processed. In the case of a resource"},{"line_number":35,"context_line":"provider being identified by both $COMPUTE_NODE and individual UUID/Name, the"},{"line_number":36,"context_line":"values in the $COMPUTE_NODE entry will be ignored for *that provider* only if"},{"line_number":37,"context_line":"the explicit entry includes inventory or traits."}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_155a85f4","line":34,"range":{"start_line":34,"start_character":20,"end_line":34,"end_character":45},"in_reply_to":"3fa7e38b_234e7d39","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                allocation_ratio: 1.0"},{"line_number":63,"context_line":"        traits:"},{"line_number":64,"context_line":"          additional:"},{"line_number":65,"context_line":"            - \u0027CUSTOM_EXAMPLE_TRAIT\u0027"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_63f235e7","line":65,"updated":"2020-01-14 23:09:52.000000000","message":"nice doc","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                allocation_ratio: 1.0"},{"line_number":63,"context_line":"        traits:"},{"line_number":64,"context_line":"          additional:"},{"line_number":65,"context_line":"            - \u0027CUSTOM_EXAMPLE_TRAIT\u0027"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_355f81e5","line":65,"in_reply_to":"3fa7e38b_63f235e7","updated":"2020-01-15 21:27:42.000000000","message":"Thanks!","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"}],"doc/source/admin/index.rst":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ac825dc4ca8c8280cbc37f5a95f4b7c122a2b30b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"   file-backed-memory"},{"line_number":113,"context_line":"   ports-with-resource-requests"},{"line_number":114,"context_line":"   virtual-persistent-memory"},{"line_number":115,"context_line":"   emulated-tpm"},{"line_number":116,"context_line":"   managing-resource-providers"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":38,"id":"9f560f44_5fa99f21","line":115,"range":{"start_line":115,"start_character":3,"end_line":115,"end_character":15},"updated":"2020-08-26 14:56:19.000000000","message":"rebased due to conflict with this line","commit_id":"260713dc22c2b8da1588e44d57d25404a3ae2b1b"}],"doc/source/admin/managing-resource-providers.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a15dba54ad6c0d74c322dbc45832a085082a7245","unresolved":false,"context_lines":[{"line_number":21,"context_line":".. note::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    The files are loaded once at nova-compute startup and any changes or new"},{"line_number":24,"context_line":"    files will not be recognized until the next nova-compute startup."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Examples"},{"line_number":27,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fa7e38b_a71b32c9","line":24,"updated":"2020-01-16 22:40:32.000000000","message":"I mentioned SIGHUP before; I *think* we would reload the config on SIGHUP, but I\u0027m not sure, and I\u0027d like you to test it locally please. (I don\u0027t think we can test it in the gate.) If that works, it\u0027d be nice to mention it here.","commit_id":"099812ecbe065d87779e6d0df81cd53e37e5bfd4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":21,"context_line":".. note::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    The files are loaded once at nova-compute startup and any changes or new"},{"line_number":24,"context_line":"    files will not be recognized until the next nova-compute startup."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Examples"},{"line_number":27,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"3fa7e38b_7972af4c","line":24,"updated":"2020-01-17 22:30:02.000000000","message":"I think this means that the appearing and disappearing RPs case and consequently the whole logging a missing RP only once is logic is unused.","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dc8c5420bf3beb97c2d89331a9c80b9926b9803c","unresolved":false,"context_lines":[{"line_number":21,"context_line":".. note::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    The files are loaded once at nova-compute startup and any changes or new"},{"line_number":24,"context_line":"    files will not be recognized until the next nova-compute startup."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Examples"},{"line_number":27,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"3fa7e38b_ec1f9108","line":24,"in_reply_to":"3fa7e38b_7972af4c","updated":"2020-01-21 23:04:38.000000000","message":"Answered this at https://review.opendev.org/#/c/676522/41/nova/compute/resource_tracker.py@1766","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac8411de962fa1591d42924b8d6635a4ccc32f21","unresolved":false,"context_lines":[{"line_number":21,"context_line":".. note::"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    The files are loaded once at nova-compute startup and any changes or new"},{"line_number":24,"context_line":"    files will not be recognized until the next nova-compute startup."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Examples"},{"line_number":27,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"3fa7e38b_dc6815bd","line":24,"in_reply_to":"3fa7e38b_ec1f9108","updated":"2020-01-24 15:25:11.000000000","message":"I agree with your answer.","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":39,"context_line":".. note::"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    In the case that a resource provider is identified more than once by"},{"line_number":42,"context_line":"    explicit UUID/name, the nova-compute service will fail to start."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":".. code-block:: yaml"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"3fa7e38b_f993ff4c","line":42,"range":{"start_line":42,"start_character":22,"end_line":42,"end_character":23},"updated":"2020-01-17 22:30:02.000000000","message":"collectively in one every file or only if in the same file?\n\n// later\n\nI found the functional test so now I know that this logic is not per file but global. So I suggest to add this clarification to the doc.","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        traits:"},{"line_number":64,"context_line":"          additional:"},{"line_number":65,"context_line":"            - \u0027CUSTOM_EXAMPLE_TRAIT\u0027"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":".. __: https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"}],"source_content_type":"text/x-rst","patch_set":18,"id":"3fa7e38b_99a20b97","line":66,"updated":"2020-01-17 22:30:02.000000000","message":"I would refer to the schema in the doc so that the admin can actually run a simple yaml validator on his config with our schema without running a nova-compute service.","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"19cba1c1719f9d7dff9da5b698ea094880520661","unresolved":false,"context_lines":[{"line_number":68,"context_line":"Schema Example"},{"line_number":69,"context_line":"--------------"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":".. literalinclude:: ../../../nova/compute/provider_config_schemas/provider_config_schema_v1.yaml"},{"line_number":72,"context_line":"   :language: yaml"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":".. note::"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    When creating a provider.yaml config file it is recommended to use the schema provided by"},{"line_number":77,"context_line":"    nova to validate the config using a simple jsonschema validator rather then starting the"},{"line_number":78,"context_line":"    nova compute agent to enable faster iteration."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":".. __: https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"}],"source_content_type":"text/x-rst","patch_set":30,"id":"bf51134e_968bb91c","line":78,"range":{"start_line":71,"start_character":0,"end_line":78,"end_character":50},"updated":"2020-07-22 13:24:04.000000000","message":"We could just add a nova-manage command to do this for us. Lets us keep the schema in code and provides an easier UX for users","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"6029494a3fa9535668d2be3f080ca5bf18842bf6","unresolved":false,"context_lines":[{"line_number":68,"context_line":"Schema Example"},{"line_number":69,"context_line":"--------------"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":".. literalinclude:: ../../../nova/compute/provider_config_schemas/provider_config_schema_v1.yaml"},{"line_number":72,"context_line":"   :language: yaml"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":".. note::"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    When creating a provider.yaml config file it is recommended to use the schema provided by"},{"line_number":77,"context_line":"    nova to validate the config using a simple jsonschema validator rather then starting the"},{"line_number":78,"context_line":"    nova compute agent to enable faster iteration."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":".. __: https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"}],"source_content_type":"text/x-rst","patch_set":30,"id":"9f560f44_a1be42b1","line":78,"range":{"start_line":71,"start_character":0,"end_line":78,"end_character":50},"in_reply_to":"bf51134e_968bb91c","updated":"2020-08-03 02:33:08.000000000","message":"already put schema in Python code.\nas to nova-manage, keep it open here.","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73678f9e942ce6a2e5c22051264959bdc7721bfd","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    Only ``CUSTOM_*`` resource classes and traits may be managed this way."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Placing Files"},{"line_number":14,"context_line":"-------------"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Nova-compute will search for ``*.yaml`` files in the path specified in"}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_b8f2b598","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":13},"updated":"2020-08-06 09:39:50.000000000","message":"Creating Files ?","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"607fd53e64e791c319fd916363834cbc8fb8c77b","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    Only ``CUSTOM_*`` resource classes and traits may be managed this way."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Placing Files"},{"line_number":14,"context_line":"-------------"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Nova-compute will search for ``*.yaml`` files in the path specified in"}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_bb9d7dbd","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":13},"in_reply_to":"9f560f44_b8f2b598","updated":"2020-08-07 04:11:38.000000000","message":"I guess the author wants to tell reader where to place provider config YAML files.","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73678f9e942ce6a2e5c22051264959bdc7721bfd","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    In the case that a resource provider is identified more than once by"},{"line_number":42,"context_line":"    explicit UUID/name, the nova-compute service will fail to start. This"},{"line_number":43,"context_line":"    is a global requirement across all supplied provider.yaml files."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":".. code-block:: yaml"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_380ea5e4","line":43,"range":{"start_line":43,"start_character":48,"end_line":43,"end_character":61},"updated":"2020-08-06 09:39:50.000000000","message":"``provider.yaml``","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"607fd53e64e791c319fd916363834cbc8fb8c77b","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    In the case that a resource provider is identified more than once by"},{"line_number":42,"context_line":"    explicit UUID/name, the nova-compute service will fail to start. This"},{"line_number":43,"context_line":"    is a global requirement across all supplied provider.yaml files."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":".. code-block:: yaml"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_3bb16d48","line":43,"range":{"start_line":43,"start_character":48,"end_line":43,"end_character":61},"in_reply_to":"9f560f44_380ea5e4","updated":"2020-08-07 04:11:38.000000000","message":"Done","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73678f9e942ce6a2e5c22051264959bdc7721bfd","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Schema Example"},{"line_number":69,"context_line":"--------------"},{"line_number":70,"context_line":"::"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"  type: object"},{"line_number":73,"context_line":"  properties:"}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_58f6f9d8","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":2},"updated":"2020-08-06 09:39:50.000000000","message":"Or\n\n  .. code-block:: yaml\n\nso we get syntax highlighting","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"607fd53e64e791c319fd916363834cbc8fb8c77b","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Schema Example"},{"line_number":69,"context_line":"--------------"},{"line_number":70,"context_line":"::"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"  type: object"},{"line_number":73,"context_line":"  properties:"}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_7bb7653b","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":2},"in_reply_to":"9f560f44_58f6f9d8","updated":"2020-08-07 04:11:38.000000000","message":"Done","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73678f9e942ce6a2e5c22051264959bdc7721bfd","unresolved":false,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":".. note::"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    When creating a provider.yaml config file it is recommended to use the schema provided by"},{"line_number":204,"context_line":"    nova to validate the config using a simple jsonschema validator rather than starting the"},{"line_number":205,"context_line":"    nova compute agent to enable faster iteration."},{"line_number":206,"context_line":""}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_b8d91523","line":203,"range":{"start_line":203,"start_character":75,"end_line":203,"end_character":93},"updated":"2020-08-06 09:39:50.000000000","message":"nit: wrap at \u003c 80 characters","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"607fd53e64e791c319fd916363834cbc8fb8c77b","unresolved":false,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":".. note::"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    When creating a provider.yaml config file it is recommended to use the schema provided by"},{"line_number":204,"context_line":"    nova to validate the config using a simple jsonschema validator rather than starting the"},{"line_number":205,"context_line":"    nova compute agent to enable faster iteration."},{"line_number":206,"context_line":""}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_9b899976","line":203,"range":{"start_line":203,"start_character":75,"end_line":203,"end_character":93},"in_reply_to":"9f560f44_b8d91523","updated":"2020-08-07 04:11:38.000000000","message":"Done","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73678f9e942ce6a2e5c22051264959bdc7721bfd","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    When creating a provider.yaml config file it is recommended to use the schema provided by"},{"line_number":204,"context_line":"    nova to validate the config using a simple jsonschema validator rather than starting the"},{"line_number":205,"context_line":"    nova compute agent to enable faster iteration."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":".. __: https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_1802c16f","line":205,"updated":"2020-08-06 09:39:50.000000000","message":"Rather than doing this and including the schema above, can we provide a \u0027nova-manage\u0027 command to validate a file?","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"607fd53e64e791c319fd916363834cbc8fb8c77b","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    When creating a provider.yaml config file it is recommended to use the schema provided by"},{"line_number":204,"context_line":"    nova to validate the config using a simple jsonschema validator rather than starting the"},{"line_number":205,"context_line":"    nova compute agent to enable faster iteration."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":".. __: https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_3b9a0db8","line":205,"in_reply_to":"9f560f44_1802c16f","updated":"2020-08-07 04:11:38.000000000","message":"so far, I don\u0027t know how to do this. Let me check IRC channel.","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73678f9e942ce6a2e5c22051264959bdc7721bfd","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    nova to validate the config using a simple jsonschema validator rather than starting the"},{"line_number":205,"context_line":"    nova compute agent to enable faster iteration."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":".. __: https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_9867f1b7","line":207,"updated":"2020-08-06 09:39:50.000000000","message":"Can you move this to the bottom of the section that it is utilized in (the intro)?","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"607fd53e64e791c319fd916363834cbc8fb8c77b","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    nova to validate the config using a simple jsonschema validator rather than starting the"},{"line_number":205,"context_line":"    nova compute agent to enable faster iteration."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":".. __: https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"}],"source_content_type":"text/x-rst","patch_set":35,"id":"9f560f44_1b958987","line":207,"in_reply_to":"9f560f44_9867f1b7","updated":"2020-08-07 04:11:38.000000000","message":"Done","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c37442e166916f4460ced1fe9ced64460f3791ec","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"        self.provider_tree \u003d prov_tree"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"        # This merges in changes from the provider config files loaded in init"},{"line_number":1165,"context_line":"        self._merge_provider_configs(self.provider_configs, prov_tree)"},{"line_number":1166,"context_line":""},{"line_number":1167,"context_line":"        # Flush any changes. If we processed ReshapeNeeded above, allocs is not"},{"line_number":1168,"context_line":"        # None, and this will hit placement\u0027s POST /reshaper route."}],"source_content_type":"text/x-python","patch_set":30,"id":"bf51134e_a6d21ad0","line":1165,"updated":"2020-07-22 01:59:12.000000000","message":"I feel this would be bad performance if $COMPUTE_NODE used. The case is when using ironic, there are multiple nodes, for each node, we will update all the nodes inside this method. Then it becomes a O(N^2). I\u0027m not very sure, but still looking","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"6029494a3fa9535668d2be3f080ca5bf18842bf6","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"        self.provider_tree \u003d prov_tree"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"        # This merges in changes from the provider config files loaded in init"},{"line_number":1165,"context_line":"        self._merge_provider_configs(self.provider_configs, prov_tree)"},{"line_number":1166,"context_line":""},{"line_number":1167,"context_line":"        # Flush any changes. If we processed ReshapeNeeded above, allocs is not"},{"line_number":1168,"context_line":"        # None, and this will hit placement\u0027s POST /reshaper route."}],"source_content_type":"text/x-python","patch_set":30,"id":"9f560f44_41a486a6","line":1165,"in_reply_to":"bf51134e_a6d21ad0","updated":"2020-08-03 02:33:08.000000000","message":"temporarily keep no code change","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"19cba1c1719f9d7dff9da5b698ea094880520661","unresolved":false,"context_lines":[{"line_number":1723,"context_line":"        :param provider_tree: The provider tree to be updated in place"},{"line_number":1724,"context_line":"        \"\"\""},{"line_number":1725,"context_line":"        processed_providers \u003d dict()"},{"line_number":1726,"context_line":"        provider_custom_traits \u003d dict()"},{"line_number":1727,"context_line":"        for uuid_or_name, provider_data in provider_configs.items():"},{"line_number":1728,"context_line":"            additional_traits \u003d provider_data.get("},{"line_number":1729,"context_line":"                \"traits\", {}).get(\"additional\", [])"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf51134e_d6853109","line":1726,"range":{"start_line":1726,"start_character":33,"end_line":1726,"end_character":39},"updated":"2020-07-22 13:24:04.000000000","message":"{}","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"6029494a3fa9535668d2be3f080ca5bf18842bf6","unresolved":false,"context_lines":[{"line_number":1723,"context_line":"        :param provider_tree: The provider tree to be updated in place"},{"line_number":1724,"context_line":"        \"\"\""},{"line_number":1725,"context_line":"        processed_providers \u003d dict()"},{"line_number":1726,"context_line":"        provider_custom_traits \u003d dict()"},{"line_number":1727,"context_line":"        for uuid_or_name, provider_data in provider_configs.items():"},{"line_number":1728,"context_line":"            additional_traits \u003d provider_data.get("},{"line_number":1729,"context_line":"                \"traits\", {}).get(\"additional\", [])"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f560f44_e12afa29","line":1726,"range":{"start_line":1726,"start_character":33,"end_line":1726,"end_character":39},"in_reply_to":"bf51134e_d6853109","updated":"2020-08-03 02:33:08.000000000","message":"will fix","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"19cba1c1719f9d7dff9da5b698ea094880520661","unresolved":false,"context_lines":[{"line_number":1766,"context_line":"                # existing custom traits."},{"line_number":1767,"context_line":"                if current_uuid not in provider_custom_traits:"},{"line_number":1768,"context_line":"                    provider_custom_traits[current_uuid] \u003d {"},{"line_number":1769,"context_line":"                    trait for trait in provider.traits"},{"line_number":1770,"context_line":"                    if trait.startswith(\u0027CUSTOM\u0027)}"},{"line_number":1771,"context_line":"                existing_custom_traits \u003d provider_custom_traits[current_uuid]"},{"line_number":1772,"context_line":""},{"line_number":1773,"context_line":"                if additional_traits:"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf51134e_7676e540","line":1770,"range":{"start_line":1769,"start_character":0,"end_line":1770,"end_character":50},"updated":"2020-07-22 13:24:04.000000000","message":"missing indentation","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"6029494a3fa9535668d2be3f080ca5bf18842bf6","unresolved":false,"context_lines":[{"line_number":1766,"context_line":"                # existing custom traits."},{"line_number":1767,"context_line":"                if current_uuid not in provider_custom_traits:"},{"line_number":1768,"context_line":"                    provider_custom_traits[current_uuid] \u003d {"},{"line_number":1769,"context_line":"                    trait for trait in provider.traits"},{"line_number":1770,"context_line":"                    if trait.startswith(\u0027CUSTOM\u0027)}"},{"line_number":1771,"context_line":"                existing_custom_traits \u003d provider_custom_traits[current_uuid]"},{"line_number":1772,"context_line":""},{"line_number":1773,"context_line":"                if additional_traits:"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f560f44_a1a762bd","line":1770,"range":{"start_line":1769,"start_character":0,"end_line":1770,"end_character":50},"in_reply_to":"bf51134e_7676e540","updated":"2020-08-03 02:33:08.000000000","message":"will fix","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"00143dc02645ba16c5fc78106099c695444873f0","unresolved":false,"context_lines":[{"line_number":1776,"context_line":"                        trait for trait in provider.traits"},{"line_number":1777,"context_line":"                        if trait.startswith(\u0027CUSTOM\u0027)"},{"line_number":1778,"context_line":"                    }"},{"line_number":1779,"context_line":"                existing_custom_traits \u003d provider_custom_traits[current_uuid]"},{"line_number":1780,"context_line":""},{"line_number":1781,"context_line":"                if additional_traits:"},{"line_number":1782,"context_line":"                    intersect \u003d set(provider.traits) \u0026 set(additional_traits)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9f560f44_6838549f","line":1779,"updated":"2020-08-06 00:38:45.000000000","message":"we should have unittest for this.","commit_id":"02da4888d5feb9b374110479436d075740870903"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"f44eea700aef8c83be69a4d3af900a181b24de60","unresolved":false,"context_lines":[{"line_number":1776,"context_line":"                        trait for trait in provider.traits"},{"line_number":1777,"context_line":"                        if trait.startswith(\u0027CUSTOM\u0027)"},{"line_number":1778,"context_line":"                    }"},{"line_number":1779,"context_line":"                existing_custom_traits \u003d provider_custom_traits[current_uuid]"},{"line_number":1780,"context_line":""},{"line_number":1781,"context_line":"                if additional_traits:"},{"line_number":1782,"context_line":"                    intersect \u003d set(provider.traits) \u0026 set(additional_traits)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9f560f44_e33f6722","line":1779,"in_reply_to":"9f560f44_6838549f","updated":"2020-08-06 03:20:07.000000000","message":"improve existing test case to cover \"ignoring existing custom traits\" code logic in this function.","commit_id":"02da4888d5feb9b374110479436d075740870903"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4a804db35ddad4964de398d6909cad2d0c8afbba","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        # nova.exception.ProviderConfigException if invalid or conflicting"},{"line_number":118,"context_line":"        # data exists in the provider config files."},{"line_number":119,"context_line":"        self.provider_configs \u003d provider_config.get_provider_configs("},{"line_number":120,"context_line":"            CONF.compute.provider_config_location)"},{"line_number":121,"context_line":"        # Set of ids for providers identified in provider config files that"},{"line_number":122,"context_line":"        # are not found on the provider tree. These are tracked to facilitate"},{"line_number":123,"context_line":"        # smarter logging."}],"source_content_type":"text/x-python","patch_set":36,"id":"9f560f44_3ec2f685","line":120,"updated":"2020-08-26 09:16:18.000000000","message":"As I said in https://review.opendev.org/#/c/676029/51/nova/compute/provider_config.py@391 please verify whether the config option is set *before* calling it.","commit_id":"fafcc0e9ed6bef49e00591375dd0faf2b274615b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"edba99c22790580c30023c527402915fdf15922b","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        # nova.exception.ProviderConfigException if invalid or conflicting"},{"line_number":118,"context_line":"        # data exists in the provider config files."},{"line_number":119,"context_line":"        self.provider_configs \u003d provider_config.get_provider_configs("},{"line_number":120,"context_line":"            CONF.compute.provider_config_location)"},{"line_number":121,"context_line":"        # Set of ids for providers identified in provider config files that"},{"line_number":122,"context_line":"        # are not found on the provider tree. These are tracked to facilitate"},{"line_number":123,"context_line":"        # smarter logging."}],"source_content_type":"text/x-python","patch_set":36,"id":"9f560f44_5942643f","line":120,"in_reply_to":"9f560f44_3ec2f685","updated":"2020-08-26 10:01:09.000000000","message":"OK, so after thinking it a bit more, we will set the self.provider_configs anyway and we\u0027ll just log one line.\n\nMaybe my opinion is a nit, so I\u0027ll accept it.","commit_id":"fafcc0e9ed6bef49e00591375dd0faf2b274615b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c24f7d838cd71e0f3fffc1bf3cafc84b288da63f","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"        self.provider_tree \u003d prov_tree"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"        # This merges in changes from the provider config files loaded in init"},{"line_number":1165,"context_line":"        self._merge_provider_configs(self.provider_configs, prov_tree)"},{"line_number":1166,"context_line":""},{"line_number":1167,"context_line":"        # Flush any changes. If we processed ReshapeNeeded above, allocs is not"},{"line_number":1168,"context_line":"        # None, and this will hit placement\u0027s POST /reshaper route."}],"source_content_type":"text/x-python","patch_set":36,"id":"9f560f44_5e4c0a41","line":1165,"updated":"2020-08-26 09:18:48.000000000","message":"again, we shouldn\u0027t be trying to merge if we don\u0027t have provider_configs","commit_id":"fafcc0e9ed6bef49e00591375dd0faf2b274615b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"447e1e16e03d2aed1d522c0d300a8995c823299f","unresolved":false,"context_lines":[{"line_number":1778,"context_line":"                if current_uuid not in provider_custom_traits:"},{"line_number":1779,"context_line":"                    provider_custom_traits[current_uuid] \u003d {"},{"line_number":1780,"context_line":"                        trait for trait in provider.traits"},{"line_number":1781,"context_line":"                        if trait.startswith(\u0027CUSTOM\u0027)"},{"line_number":1782,"context_line":"                    }"},{"line_number":1783,"context_line":"                existing_custom_traits \u003d provider_custom_traits[current_uuid]"},{"line_number":1784,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9f560f44_c24def3b","line":1781,"range":{"start_line":1781,"start_character":27,"end_line":1781,"end_character":53},"updated":"2020-08-25 15:59:14.000000000","message":"os_traits.is_custom(trait) would be better","commit_id":"fafcc0e9ed6bef49e00591375dd0faf2b274615b"}],"nova/conf/compute.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":941,"context_line":"Location of yaml files containing resource provider configuration data. These"},{"line_number":942,"context_line":"files allow an operator to specify additional custom inventory and traits to"},{"line_number":943,"context_line":"assign to a resource provider."},{"line_number":944,"context_line":"Files in this directory will be processed in lexicographic order."},{"line_number":945,"context_line":"\"\"\"),"},{"line_number":946,"context_line":"]"},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_c3268968","line":944,"range":{"start_line":944,"start_character":0,"end_line":944,"end_character":65},"updated":"2020-01-14 23:09:52.000000000","message":"While this may be true, is it still relevant? I.e. would anything be different if it weren\u0027t the case? If not, may as well omit this statement.\n\nCould also include a link to your shiny new doc here.","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":941,"context_line":"Location of yaml files containing resource provider configuration data. These"},{"line_number":942,"context_line":"files allow an operator to specify additional custom inventory and traits to"},{"line_number":943,"context_line":"assign to a resource provider."},{"line_number":944,"context_line":"Files in this directory will be processed in lexicographic order."},{"line_number":945,"context_line":"\"\"\"),"},{"line_number":946,"context_line":"]"},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_702507bf","line":944,"range":{"start_line":944,"start_character":0,"end_line":944,"end_character":65},"in_reply_to":"3fa7e38b_109b7379","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"3c4db133e2e066b7be5e94879f58a10c110dda19","unresolved":false,"context_lines":[{"line_number":941,"context_line":"Location of yaml files containing resource provider configuration data. These"},{"line_number":942,"context_line":"files allow an operator to specify additional custom inventory and traits to"},{"line_number":943,"context_line":"assign to a resource provider."},{"line_number":944,"context_line":"Files in this directory will be processed in lexicographic order."},{"line_number":945,"context_line":"\"\"\"),"},{"line_number":946,"context_line":"]"},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_f507a916","line":944,"range":{"start_line":944,"start_character":0,"end_line":944,"end_character":65},"in_reply_to":"3fa7e38b_c3268968","updated":"2020-01-15 17:40:23.000000000","message":"The order is no longer relevant (was it ever?), I will remove it. \nWould the correct URL be [1]? (assuming the file name stays the same)  \n  \n[1] https://docs.openstack.org/nova/ussuri/admin/custom-traits-and-inventories.html","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"05c2a29f3c3111895f43523bfcf7be2470bdd464","unresolved":false,"context_lines":[{"line_number":941,"context_line":"Location of yaml files containing resource provider configuration data. These"},{"line_number":942,"context_line":"files allow an operator to specify additional custom inventory and traits to"},{"line_number":943,"context_line":"assign to a resource provider."},{"line_number":944,"context_line":"Files in this directory will be processed in lexicographic order."},{"line_number":945,"context_line":"\"\"\"),"},{"line_number":946,"context_line":"]"},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_109b7379","line":944,"range":{"start_line":944,"start_character":0,"end_line":944,"end_character":65},"in_reply_to":"3fa7e38b_f507a916","updated":"2020-01-15 18:57:32.000000000","message":"I would s/ussuri/latest/ but yeah.\n\n(Note that in regular documentation you can use a form like :doc:`/admin/custom-traits-and-inventories`, but that doesn\u0027t work in conf helps, release notes, or api-ref.)","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":939,"context_line":"        default\u003d\u0027/etc/nova/provider_config/\u0027,"},{"line_number":940,"context_line":"        help\u003d\"\"\""},{"line_number":941,"context_line":"Location of yaml files containing resource provider configuration data. These"},{"line_number":942,"context_line":"files allow an operator to specify additional custom inventory and traits to"},{"line_number":943,"context_line":"assign to a resource provider."},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"Additional documentation is available here:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_d9c16332","line":942,"range":{"start_line":942,"start_character":12,"end_line":942,"end_character":14},"updated":"2020-01-17 22:30:02.000000000","message":"the?","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":940,"context_line":"        help\u003d\"\"\""},{"line_number":941,"context_line":"Location of yaml files containing resource provider configuration data. These"},{"line_number":942,"context_line":"files allow an operator to specify additional custom inventory and traits to"},{"line_number":943,"context_line":"assign to a resource provider."},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"Additional documentation is available here:"},{"line_number":946,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_39d8b722","line":943,"range":{"start_line":943,"start_character":7,"end_line":943,"end_character":12},"updated":"2020-01-17 22:30:02.000000000","message":"to one or more","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"19cba1c1719f9d7dff9da5b698ea094880520661","unresolved":false,"context_lines":[{"line_number":971,"context_line":"    cfg.StrOpt(\u0027provider_config_location\u0027,"},{"line_number":972,"context_line":"        default\u003d\u0027/etc/nova/provider_config/\u0027,"},{"line_number":973,"context_line":"        help\u003d\"\"\""},{"line_number":974,"context_line":"Location of yaml files containing resource provider configuration data. These"},{"line_number":975,"context_line":"files allow the operator to specify additional custom inventory and traits to"},{"line_number":976,"context_line":"assign to one or more resource providers."},{"line_number":977,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"bf51134e_f6979539","line":974,"range":{"start_line":974,"start_character":12,"end_line":974,"end_character":16},"updated":"2020-07-22 13:24:04.000000000","message":"YAML","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"19cba1c1719f9d7dff9da5b698ea094880520661","unresolved":false,"context_lines":[{"line_number":971,"context_line":"    cfg.StrOpt(\u0027provider_config_location\u0027,"},{"line_number":972,"context_line":"        default\u003d\u0027/etc/nova/provider_config/\u0027,"},{"line_number":973,"context_line":"        help\u003d\"\"\""},{"line_number":974,"context_line":"Location of yaml files containing resource provider configuration data. These"},{"line_number":975,"context_line":"files allow the operator to specify additional custom inventory and traits to"},{"line_number":976,"context_line":"assign to one or more resource providers."},{"line_number":977,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"bf51134e_d69a5160","line":974,"range":{"start_line":974,"start_character":71,"end_line":974,"end_character":77},"updated":"2020-07-22 13:24:04.000000000","message":"nit: Can you add an empty line before this?\n\n\n  Summary\n\n  Description...","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"6029494a3fa9535668d2be3f080ca5bf18842bf6","unresolved":false,"context_lines":[{"line_number":971,"context_line":"    cfg.StrOpt(\u0027provider_config_location\u0027,"},{"line_number":972,"context_line":"        default\u003d\u0027/etc/nova/provider_config/\u0027,"},{"line_number":973,"context_line":"        help\u003d\"\"\""},{"line_number":974,"context_line":"Location of yaml files containing resource provider configuration data. These"},{"line_number":975,"context_line":"files allow the operator to specify additional custom inventory and traits to"},{"line_number":976,"context_line":"assign to one or more resource providers."},{"line_number":977,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f560f44_61c0aa2b","line":974,"range":{"start_line":974,"start_character":71,"end_line":974,"end_character":77},"in_reply_to":"bf51134e_d69a5160","updated":"2020-08-03 02:33:08.000000000","message":"will fix.","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73678f9e942ce6a2e5c22051264959bdc7721bfd","unresolved":false,"context_lines":[{"line_number":971,"context_line":"    cfg.StrOpt(\u0027provider_config_location\u0027,"},{"line_number":972,"context_line":"        default\u003d\u0027/etc/nova/provider_config/\u0027,"},{"line_number":973,"context_line":"        help\u003d\"\"\""},{"line_number":974,"context_line":"Summary"},{"line_number":975,"context_line":"Location of YAML files containing resource provider configuration data."},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"Description"}],"source_content_type":"text/x-python","patch_set":35,"id":"9f560f44_1837614f","line":974,"range":{"start_line":974,"start_character":0,"end_line":974,"end_character":7},"updated":"2020-08-06 09:39:50.000000000","message":"Drop this","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"607fd53e64e791c319fd916363834cbc8fb8c77b","unresolved":false,"context_lines":[{"line_number":971,"context_line":"    cfg.StrOpt(\u0027provider_config_location\u0027,"},{"line_number":972,"context_line":"        default\u003d\u0027/etc/nova/provider_config/\u0027,"},{"line_number":973,"context_line":"        help\u003d\"\"\""},{"line_number":974,"context_line":"Summary"},{"line_number":975,"context_line":"Location of YAML files containing resource provider configuration data."},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"Description"}],"source_content_type":"text/x-python","patch_set":35,"id":"9f560f44_dbf4b1f3","line":974,"range":{"start_line":974,"start_character":0,"end_line":974,"end_character":7},"in_reply_to":"9f560f44_1837614f","updated":"2020-08-07 04:11:38.000000000","message":"Done","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73678f9e942ce6a2e5c22051264959bdc7721bfd","unresolved":false,"context_lines":[{"line_number":974,"context_line":"Summary"},{"line_number":975,"context_line":"Location of YAML files containing resource provider configuration data."},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"Description"},{"line_number":978,"context_line":"These files allow the operator to specify additional custom inventory and"},{"line_number":979,"context_line":"traits to assign to one or more resource providers."},{"line_number":980,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"9f560f44_b84755bc","line":977,"range":{"start_line":977,"start_character":0,"end_line":977,"end_character":11},"updated":"2020-08-06 09:39:50.000000000","message":"And this.\n\nIt\u0027s not necessary since simply structuring the help text creates a distinct summary and description","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"607fd53e64e791c319fd916363834cbc8fb8c77b","unresolved":false,"context_lines":[{"line_number":974,"context_line":"Summary"},{"line_number":975,"context_line":"Location of YAML files containing resource provider configuration data."},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"Description"},{"line_number":978,"context_line":"These files allow the operator to specify additional custom inventory and"},{"line_number":979,"context_line":"traits to assign to one or more resource providers."},{"line_number":980,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"9f560f44_3bdfad69","line":977,"range":{"start_line":977,"start_character":0,"end_line":977,"end_character":11},"in_reply_to":"9f560f44_b84755bc","updated":"2020-08-07 04:11:38.000000000","message":"Done","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"}],"nova/tests/functional/compute/test_resource_tracker.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        and inventories."},{"line_number":511,"context_line":"        \"\"\""},{"line_number":512,"context_line":"        if not cfg_file:"},{"line_number":513,"context_line":"            cfg_file \u003d copy.deepcopy(self.BASE_CONFIG)"},{"line_number":514,"context_line":"        provider \u003d copy.deepcopy(self.EMPTY_PROVIDER)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        if id_method.lower() \u003d\u003d \"uuid\":"},{"line_number":517,"context_line":"            provider[\u0027identification\u0027] \u003d {\"uuid\": id_value}"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_431299ff","line":514,"range":{"start_line":513,"start_character":0,"end_line":514,"end_character":53},"updated":"2020-01-14 23:09:52.000000000","message":"yeah, *these* deepcopyZ are necessary.","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        else:"},{"line_number":521,"context_line":"            raise Exception(\"Invalid id_method %s\" % id_method)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        _id \u003d \u0027\u0027.join(c for c in str(id_value) if c.isalnum())[-32:].upper()"},{"line_number":524,"context_line":"        provider[\u0027inventories\u0027][\u0027additional\u0027].append({"},{"line_number":525,"context_line":"            \"CUSTOM_RESOURCE_CLASS_%s\" % _id: {"},{"line_number":526,"context_line":"                \"total\": 100,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_63c9d578","line":523,"range":{"start_line":523,"start_character":8,"end_line":523,"end_character":76},"updated":"2020-01-14 23:09:52.000000000","message":"suggest using os_{traits|resource_classes}.normalize_name() for this, if you feel the need to do it at all ;P","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        else:"},{"line_number":521,"context_line":"            raise Exception(\"Invalid id_method %s\" % id_method)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        _id \u003d \u0027\u0027.join(c for c in str(id_value) if c.isalnum())[-32:].upper()"},{"line_number":524,"context_line":"        provider[\u0027inventories\u0027][\u0027additional\u0027].append({"},{"line_number":525,"context_line":"            \"CUSTOM_RESOURCE_CLASS_%s\" % _id: {"},{"line_number":526,"context_line":"                \"total\": 100,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_8b665856","line":523,"range":{"start_line":523,"start_character":8,"end_line":523,"end_character":76},"in_reply_to":"3fa7e38b_63c9d578","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":548,"context_line":"        cn_expected_inventory, cn_expected_traits \u003d None, None"},{"line_number":549,"context_line":"        for p_config in config[\u0027providers\u0027]:"},{"line_number":550,"context_line":"            _pid \u003d p_config[\u0027identification\u0027]"},{"line_number":551,"context_line":"            if _pid.get(\"uuid\") \u003d\u003d provider[\u0027uuid\u0027] \\"},{"line_number":552,"context_line":"                    or _pid.get(\"name\") \u003d\u003d provider[\u0027name\u0027]:"},{"line_number":553,"context_line":"                expected_inventory \u003d p_config.get(\"inventories\", {}"},{"line_number":554,"context_line":"                                                  ).get(\"additional\", [])"},{"line_number":555,"context_line":"                expected_traits \u003d p_config.get(\"traits\", {}"},{"line_number":556,"context_line":"                                               ).get(\"additional\", [])"},{"line_number":557,"context_line":"                break  # we are done searching after finding one match"},{"line_number":558,"context_line":"            elif _pid.get(\"uuid\") \u003d\u003d \"$COMPUTE_NODE\":"},{"line_number":559,"context_line":"                cn_expected_inventory \u003d p_config.get(\"inventory\", {}"},{"line_number":560,"context_line":"                                                     ).get(\"additional\", [])"},{"line_number":561,"context_line":"                cn_expected_traits \u003d p_config.get(\"traits\", {}"},{"line_number":562,"context_line":"                                                  ).get(\"additional\", [])"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        if not expected_inventory and not expected_traits:"},{"line_number":565,"context_line":"            # If no expected inventory or traits were found, then either the"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_63f315a2","line":562,"range":{"start_line":551,"start_character":0,"end_line":562,"end_character":73},"updated":"2020-01-14 23:09:52.000000000","message":"This could use a comment. AFAICT it\u0027s doing something like:\n\nLook for the entry for ``provider`` in the ``config``, defaulting to the entry for ``$COMPUTE_NODE``.\n\nAnd I *think* you could get rid of cn_*, collapse the logic so you\u0027re always assigning to expected_*, and only `break` if you matched by exact UUID/name. Then you also wouldn\u0027t need L564-9","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":548,"context_line":"        cn_expected_inventory, cn_expected_traits \u003d None, None"},{"line_number":549,"context_line":"        for p_config in config[\u0027providers\u0027]:"},{"line_number":550,"context_line":"            _pid \u003d p_config[\u0027identification\u0027]"},{"line_number":551,"context_line":"            if _pid.get(\"uuid\") \u003d\u003d provider[\u0027uuid\u0027] \\"},{"line_number":552,"context_line":"                    or _pid.get(\"name\") \u003d\u003d provider[\u0027name\u0027]:"},{"line_number":553,"context_line":"                expected_inventory \u003d p_config.get(\"inventories\", {}"},{"line_number":554,"context_line":"                                                  ).get(\"additional\", [])"},{"line_number":555,"context_line":"                expected_traits \u003d p_config.get(\"traits\", {}"},{"line_number":556,"context_line":"                                               ).get(\"additional\", [])"},{"line_number":557,"context_line":"                break  # we are done searching after finding one match"},{"line_number":558,"context_line":"            elif _pid.get(\"uuid\") \u003d\u003d \"$COMPUTE_NODE\":"},{"line_number":559,"context_line":"                cn_expected_inventory \u003d p_config.get(\"inventory\", {}"},{"line_number":560,"context_line":"                                                     ).get(\"additional\", [])"},{"line_number":561,"context_line":"                cn_expected_traits \u003d p_config.get(\"traits\", {}"},{"line_number":562,"context_line":"                                                  ).get(\"additional\", [])"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        if not expected_inventory and not expected_traits:"},{"line_number":565,"context_line":"            # If no expected inventory or traits were found, then either the"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_e682a1ff","line":562,"range":{"start_line":551,"start_character":0,"end_line":562,"end_character":73},"in_reply_to":"3fa7e38b_63f315a2","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        missing_traits \u003d [trait for trait in expected_traits"},{"line_number":580,"context_line":"                          if trait not in p_traits]"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        self.assertFalse(missing_inventory, msg\u003d\"Missing inventory\")"},{"line_number":583,"context_line":"        self.assertFalse(missing_traits, msg\u003d\"Missing traits\")"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def _place_config_file(self, file_name, file_data):"},{"line_number":586,"context_line":"        \"\"\"Creates a file in the provider config directory using file_name and"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_8335f145","line":583,"range":{"start_line":582,"start_character":0,"end_line":583,"end_character":62},"updated":"2020-01-14 23:09:52.000000000","message":"should include the missing thingy in the message.","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a15dba54ad6c0d74c322dbc45832a085082a7245","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        missing_traits \u003d [trait for trait in expected_traits"},{"line_number":580,"context_line":"                          if trait not in p_traits]"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        self.assertFalse(missing_inventory, msg\u003d\"Missing inventory\")"},{"line_number":583,"context_line":"        self.assertFalse(missing_traits, msg\u003d\"Missing traits\")"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def _place_config_file(self, file_name, file_data):"},{"line_number":586,"context_line":"        \"\"\"Creates a file in the provider config directory using file_name and"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_e7c5aa3f","line":583,"range":{"start_line":582,"start_character":0,"end_line":583,"end_character":62},"in_reply_to":"3fa7e38b_4667f5b9","updated":"2020-01-16 22:40:32.000000000","message":"Cool, thanks for confirming. (Dan did the same thing recently; I\u0027m a believer.)","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        missing_traits \u003d [trait for trait in expected_traits"},{"line_number":580,"context_line":"                          if trait not in p_traits]"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        self.assertFalse(missing_inventory, msg\u003d\"Missing inventory\")"},{"line_number":583,"context_line":"        self.assertFalse(missing_traits, msg\u003d\"Missing traits\")"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def _place_config_file(self, file_name, file_data):"},{"line_number":586,"context_line":"        \"\"\"Creates a file in the provider config directory using file_name and"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_4667f5b9","line":583,"range":{"start_line":582,"start_character":0,"end_line":583,"end_character":62},"in_reply_to":"3fa7e38b_8335f145","updated":"2020-01-15 21:27:42.000000000","message":"It already gets output by test framework:\n\n    AssertionError: \u003cthe missing thing\u003e is not false : \u003cmsg\u003e","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        \"\"\""},{"line_number":612,"context_line":"        config1 \u003d self._create_config_entry(\"$COMPUTE_NODE\", id_method\u003d\"uuid\")"},{"line_number":613,"context_line":"        self._place_config_file(\"provider_config1.yaml\", config1)"},{"line_number":614,"context_line":"        config2 \u003d self._create_config_entry(\"fake-host\", id_method\u003d\"name\")"},{"line_number":615,"context_line":"        self._place_config_file(\"provider_config2.yaml\", config2)"},{"line_number":616,"context_line":"        self._start_compute(\"fake-host\")"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        provider1 \u003d self._get_resource_provider_by_uuid("},{"line_number":619,"context_line":"            self._get_provider_uuid_by_host(\"fake-host\"))"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_c381a9c4","line":616,"range":{"start_line":614,"start_character":0,"end_line":616,"end_character":40},"updated":"2020-01-14 23:09:52.000000000","message":"okay, the contents of the files differ based on the first arg to _create_config_entry, so you are proving that the right one gets merged in ++","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a15dba54ad6c0d74c322dbc45832a085082a7245","unresolved":false,"context_lines":[{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        # create entries for additional traits and inventories using values"},{"line_number":527,"context_line":"        # unique to this provider entry"},{"line_number":528,"context_line":"        _new_rc \u003d orc.normalize_name(\u0027CUSTOM_RC_%s\u0027 % id_value)"},{"line_number":529,"context_line":"        _new_trait \u003d os_traits.normalize_name(\"CUSTOM_TRAIT_%s\" % id_value)"},{"line_number":530,"context_line":"        provider[\u0027inventories\u0027][\u0027additional\u0027].append({"},{"line_number":531,"context_line":"            _new_rc: {"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_07efa6b2","line":528,"range":{"start_line":528,"start_character":38,"end_line":528,"end_character":45},"updated":"2020-01-16 22:40:32.000000000","message":"normalize_name adds CUSTOM_ for you","commit_id":"099812ecbe065d87779e6d0df81cd53e37e5bfd4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a15dba54ad6c0d74c322dbc45832a085082a7245","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        # create entries for additional traits and inventories using values"},{"line_number":527,"context_line":"        # unique to this provider entry"},{"line_number":528,"context_line":"        _new_rc \u003d orc.normalize_name(\u0027CUSTOM_RC_%s\u0027 % id_value)"},{"line_number":529,"context_line":"        _new_trait \u003d os_traits.normalize_name(\"CUSTOM_TRAIT_%s\" % id_value)"},{"line_number":530,"context_line":"        provider[\u0027inventories\u0027][\u0027additional\u0027].append({"},{"line_number":531,"context_line":"            _new_rc: {"},{"line_number":532,"context_line":"                \"total\": 100,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_a7ed72b9","line":529,"range":{"start_line":529,"start_character":47,"end_line":529,"end_character":54},"updated":"2020-01-16 22:40:32.000000000","message":"\"","commit_id":"099812ecbe065d87779e6d0df81cd53e37e5bfd4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a15dba54ad6c0d74c322dbc45832a085082a7245","unresolved":false,"context_lines":[{"line_number":556,"context_line":"        for p_config in config[\u0027providers\u0027]:"},{"line_number":557,"context_line":"            _pid \u003d p_config[\u0027identification\u0027]"},{"line_number":558,"context_line":"            # check for explicit uuid/name match"},{"line_number":559,"context_line":"            if _pid.get(\"uuid\") \u003d\u003d provider[\u0027uuid\u0027] \\"},{"line_number":560,"context_line":"                    or _pid.get(\"name\") \u003d\u003d provider[\u0027name\u0027]:"},{"line_number":561,"context_line":"                expected_inventory \u003d p_config.get(\"inventories\", {}"},{"line_number":562,"context_line":"                                                  ).get(\"additional\", [])"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_07348646","line":559,"updated":"2020-01-16 22:40:32.000000000","message":"prefer parens to backslashes","commit_id":"099812ecbe065d87779e6d0df81cd53e37e5bfd4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a15dba54ad6c0d74c322dbc45832a085082a7245","unresolved":false,"context_lines":[{"line_number":558,"context_line":"            # check for explicit uuid/name match"},{"line_number":559,"context_line":"            if _pid.get(\"uuid\") \u003d\u003d provider[\u0027uuid\u0027] \\"},{"line_number":560,"context_line":"                    or _pid.get(\"name\") \u003d\u003d provider[\u0027name\u0027]:"},{"line_number":561,"context_line":"                expected_inventory \u003d p_config.get(\"inventories\", {}"},{"line_number":562,"context_line":"                                                  ).get(\"additional\", [])"},{"line_number":563,"context_line":"                expected_traits \u003d p_config.get(\"traits\", {}"},{"line_number":564,"context_line":"                                               ).get(\"additional\", [])"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_a74252ab","line":561,"updated":"2020-01-16 22:40:32.000000000","message":"the indent on these is weird","commit_id":"099812ecbe065d87779e6d0df81cd53e37e5bfd4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a15dba54ad6c0d74c322dbc45832a085082a7245","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"3fa7e38b_678f7ad3","line":634,"updated":"2020-01-16 22:40:32.000000000","message":"Should have a test that simulates an ironic setup with multiple nodes, catches some with $COMPUTE_NODE and others with explicit entries, across multiple files.","commit_id":"099812ecbe065d87779e6d0df81cd53e37e5bfd4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":482,"context_line":"    provider config files described in spec provider-config-file."},{"line_number":483,"context_line":"    \"\"\""},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    compute_driver \u003d \u0027fake.FakeDriver\u0027"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    BASE_CONFIG \u003d {"},{"line_number":488,"context_line":"        \"meta\": {"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_f9e1bfd0","line":485,"range":{"start_line":485,"start_character":27,"end_line":485,"end_character":37},"updated":"2020-01-17 22:30:02.000000000","message":"I did not know we can use this directly I always used one of the derivatives like SmallFakeDriver. But it seems this is OK.","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        # make a new temp dir and configure nova-compute to look for provider"},{"line_number":508,"context_line":"        # config files there"},{"line_number":509,"context_line":"        self.pconf_loc \u003d tempfile.mkdtemp()"},{"line_number":510,"context_line":"        CONF.set_override(\u0027provider_config_location\u0027, self.pconf_loc,"},{"line_number":511,"context_line":"                          group\u003d\u0027compute\u0027)"},{"line_number":512,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_b98347aa","line":509,"updated":"2020-01-17 22:30:02.000000000","message":"you need to register a cleanup callable to delete the temp directory at the end of each test","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dc8c5420bf3beb97c2d89331a9c80b9926b9803c","unresolved":false,"context_lines":[{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        # make a new temp dir and configure nova-compute to look for provider"},{"line_number":508,"context_line":"        # config files there"},{"line_number":509,"context_line":"        self.pconf_loc \u003d tempfile.mkdtemp()"},{"line_number":510,"context_line":"        CONF.set_override(\u0027provider_config_location\u0027, self.pconf_loc,"},{"line_number":511,"context_line":"                          group\u003d\u0027compute\u0027)"},{"line_number":512,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_8cbe1dcc","line":509,"in_reply_to":"3fa7e38b_b98347aa","updated":"2020-01-21 23:04:38.000000000","message":"The TempDir fixture takes care of this for us.\n\n...and we get TempDir via NestedTempFile, which we get from oslotest.base.BaseTestCase, which is the master uber grandparent of all our test cases.","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":507,"context_line":"        # make a new temp dir and configure nova-compute to look for provider"},{"line_number":508,"context_line":"        # config files there"},{"line_number":509,"context_line":"        self.pconf_loc \u003d tempfile.mkdtemp()"},{"line_number":510,"context_line":"        CONF.set_override(\u0027provider_config_location\u0027, self.pconf_loc,"},{"line_number":511,"context_line":"                          group\u003d\u0027compute\u0027)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def _create_config_entry(self, id_value, id_method\u003d\"uuid\", cfg_file\u003dNone):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_79d5cfe5","line":510,"updated":"2020-01-17 22:30:02.000000000","message":"we have utils for everything :)\n\nself.flags(provider_config_location\u003dself.pconf_loc, group\u003d\u0027compute\u0027)","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":517,"context_line":"        \"\"\""},{"line_number":518,"context_line":"        # if an existing config file was not passed, create a new one"},{"line_number":519,"context_line":"        if not cfg_file:"},{"line_number":520,"context_line":"            cfg_file \u003d copy.deepcopy(self.BASE_CONFIG)"},{"line_number":521,"context_line":"        provider \u003d copy.deepcopy(self.EMPTY_PROVIDER)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        # create identification method"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_993e8b24","line":520,"updated":"2020-01-17 22:30:02.000000000","message":"I like this templating","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"a49c569e370b8dc03f3d2e4af55c4feb3b55c54b","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        cfg_file[\u0027providers\u0027].append(provider)"},{"line_number":543,"context_line":"        return cfg_file"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"    def _assert_inventory_and_traits(self, provider, config):"},{"line_number":546,"context_line":"        \"\"\"Asserts that the inventory and traits on the provider include those"},{"line_number":547,"context_line":"        defined in the provided config file. If the provider was identified"},{"line_number":548,"context_line":"        explicitly, also asserts that the $COMPUTE_NODE values are not included"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_785dd7e9","line":545,"range":{"start_line":545,"start_character":8,"end_line":545,"end_character":36},"updated":"2020-01-17 04:02:31.000000000","message":"This function ended up getting pretty big in order to assert all the expected present/not-present values. I tried to comment it thoroughly. It almost feels like it needs its own tests...\n\nThese changes should actually make the previous tests more robust as well.","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"a49c569e370b8dc03f3d2e4af55c4feb3b55c54b","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        # since we also want to check for unexpected inventory,"},{"line_number":561,"context_line":"        # we also need to track compute node entries"},{"line_number":562,"context_line":"        expected_inventory, expected_traits \u003d [], []"},{"line_number":563,"context_line":"        cn_expected_inventory, cn_expected_traits \u003d [], []"},{"line_number":564,"context_line":"        for p_config in config[\u0027providers\u0027]:"},{"line_number":565,"context_line":"            _pid \u003d p_config[\u0027identification\u0027]"},{"line_number":566,"context_line":"            # check for explicit uuid/name match"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_585a5bf5","line":563,"range":{"start_line":563,"start_character":8,"end_line":563,"end_character":49},"updated":"2020-01-17 04:02:31.000000000","message":"I had to go back to tracking these to assert that they are _not_ present on a provider that had an explicit entry","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"a49c569e370b8dc03f3d2e4af55c4feb3b55c54b","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                              if trait not in actual_traits]"},{"line_number":604,"context_line":"        # if no values were found, the test is broken"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            assert \"No expected values were found, the test is broken.\""},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"        self.assertFalse(missing_inventory,"},{"line_number":609,"context_line":"                         msg\u003d\"Missing inventory: %s\" % missing_inventory)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_383e7f8a","line":606,"updated":"2020-01-17 04:02:31.000000000","message":"This should theoretically catch any issues with a broken test where everything ends up None/[]...","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                              if trait not in actual_traits]"},{"line_number":604,"context_line":"        # if no values were found, the test is broken"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            assert \"No expected values were found, the test is broken.\""},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"        self.assertFalse(missing_inventory,"},{"line_number":609,"context_line":"                         msg\u003d\"Missing inventory: %s\" % missing_inventory)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_3990b7f3","line":606,"in_reply_to":"3fa7e38b_383e7f8a","updated":"2020-01-17 22:30:02.000000000","message":"we tend to use self.fail() instead of assert but it is OK too.","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        # start nova-compute"},{"line_number":655,"context_line":"        self._start_compute(\"fake-host\")"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        # test that only inventory from the explicit entry exists"},{"line_number":658,"context_line":"        provider1 \u003d self._get_resource_provider_by_uuid("},{"line_number":659,"context_line":"            self._get_provider_uuid_by_host(\"fake-host\"))"},{"line_number":660,"context_line":"        self._assert_inventory_and_traits(provider1, config2)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_9988cbc3","line":657,"updated":"2020-01-17 22:30:02.000000000","message":"thanks this test clarifies my earlier question about the scope of this logic.","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[{"line_number":676,"context_line":"                                      cfg_file\u003dconfig)"},{"line_number":677,"context_line":"        self._place_config_file(\"provider.yaml\", config)"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        # start the compute services"},{"line_number":680,"context_line":"        for provider_name in provider_names:"},{"line_number":681,"context_line":"            self._start_compute(provider_name)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"        # test for expected inventory and traits on each provider"},{"line_number":684,"context_line":"        for provider_name in provider_names:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_79a62f57","line":681,"range":{"start_line":679,"start_character":1,"end_line":681,"end_character":46},"updated":"2020-01-17 22:30:02.000000000","message":"This is not ironic like. In case of ironic you have one compute service which handles more than one node. Here you create one compute service for each node.\n\nUnfortunately it is not simple to start up a compute with fake driver having multiple nodes. Let me try to hack up something.\n\n// later\n\nHere is a patch top of yours with multi node compute http://paste.openstack.org/show/788562/","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c874ebfc5b6f728643519b98fdf3c79ad1aa7a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"3fa7e38b_a4aebee1","line":689,"updated":"2020-01-17 22:30:02.000000000","message":"I would be really happy for one more end-to-end functional test case.\n\n1) start a compute with any extra config\n2) create a flavor that requires custom trait\n3) try to boot a server with that flavor and expect to fail with NoValidHost\n4) start a compute with provider config that adds the above trait to the compute node RP\n5) try the boot again and expect that it succeeds and the the server ends up on the second compute.\n\nThis would show a real, end-to-end use case of your feature.","commit_id":"20c0754cfb71bc3c7ee2e528a09fac761bf29f62"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"434c13c6277d7cfcca1f5216a28f0d170b2170ab","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"import fixtures"},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import os_resource_classes as orc"}],"source_content_type":"text/x-python","patch_set":36,"id":"9f560f44_b90900de","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":11},"updated":"2020-08-26 10:16:55.000000000","message":"These are third-part libraries and should be in the second group","commit_id":"fafcc0e9ed6bef49e00591375dd0faf2b274615b"}],"releasenotes/notes/provider-config-file-bf026380cb5a7898.yaml":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    `blueprint provider-config-file`__"},{"line_number":5,"context_line":"    Nova now supports defining of additional resource provider traits and"},{"line_number":6,"context_line":"    inventories by way of yaml configuration files. The location of these"},{"line_number":7,"context_line":"    files is defined by the new config option provider_config_location. Nova"},{"line_number":8,"context_line":"    will look in this directory for ``*.yaml`` files and will process them in"},{"line_number":9,"context_line":"    lexicographical order."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_63d475bd","line":7,"range":{"start_line":7,"start_character":46,"end_line":7,"end_character":70},"updated":"2020-01-14 23:09:52.000000000","message":"``[compute]provider_config_location`` (alas, you can\u0027t use :oslo.config:option:)","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    `blueprint provider-config-file`__"},{"line_number":5,"context_line":"    Nova now supports defining of additional resource provider traits and"},{"line_number":6,"context_line":"    inventories by way of yaml configuration files. The location of these"},{"line_number":7,"context_line":"    files is defined by the new config option provider_config_location. Nova"},{"line_number":8,"context_line":"    will look in this directory for ``*.yaml`` files and will process them in"},{"line_number":9,"context_line":"    lexicographical order."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_959c355d","line":7,"range":{"start_line":7,"start_character":46,"end_line":7,"end_character":70},"in_reply_to":"3fa7e38b_63d475bd","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    will look in this directory for ``*.yaml`` files and will process them in"},{"line_number":9,"context_line":"    lexicographical order."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    __ https://blueprints.launchpad.net/nova/+spec/provider-config-file"},{"line_number":12,"context_line":"security:"},{"line_number":13,"context_line":"  - |"},{"line_number":14,"context_line":"    Administrators should ensure that provider config files have appropriate"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_23de7ddb","line":11,"range":{"start_line":11,"start_character":7,"end_line":11,"end_character":71},"updated":"2020-01-14 23:09:52.000000000","message":"Either link to the published spec [1] or your shiny new doc.\n\n[1] http://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    will look in this directory for ``*.yaml`` files and will process them in"},{"line_number":9,"context_line":"    lexicographical order."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    __ https://blueprints.launchpad.net/nova/+spec/provider-config-file"},{"line_number":12,"context_line":"security:"},{"line_number":13,"context_line":"  - |"},{"line_number":14,"context_line":"    Administrators should ensure that provider config files have appropriate"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_1095b394","line":11,"range":{"start_line":11,"start_character":7,"end_line":11,"end_character":71},"in_reply_to":"3fa7e38b_23de7ddb","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f83e8539f544ed45629277f35b685cf3eb361f2a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    __ https://blueprints.launchpad.net/nova/+spec/provider-config-file"},{"line_number":12,"context_line":"security:"},{"line_number":13,"context_line":"  - |"},{"line_number":14,"context_line":"    Administrators should ensure that provider config files have appropriate"},{"line_number":15,"context_line":"    permissions and ownership."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_a3e34da0","line":14,"range":{"start_line":14,"start_character":38,"end_line":14,"end_character":59},"updated":"2020-01-14 23:09:52.000000000","message":"Make this a link to the spec/doc too. (These chunks will show up in wildly different places in the release notes.)","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"bd40add157799fd3366a7876f4d3de5e9ec42887","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    __ https://blueprints.launchpad.net/nova/+spec/provider-config-file"},{"line_number":12,"context_line":"security:"},{"line_number":13,"context_line":"  - |"},{"line_number":14,"context_line":"    Administrators should ensure that provider config files have appropriate"},{"line_number":15,"context_line":"    permissions and ownership."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_309a2fc4","line":14,"range":{"start_line":14,"start_character":38,"end_line":14,"end_character":59},"in_reply_to":"3fa7e38b_a3e34da0","updated":"2020-01-15 21:27:42.000000000","message":"Done","commit_id":"d76b64812d99bb04211b6e75d7820c5c2e27f409"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"19cba1c1719f9d7dff9da5b698ea094880520661","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Nova now supports defining of additional resource provider traits and"},{"line_number":5,"context_line":"    inventories by way of yaml configuration files. The location of these"},{"line_number":6,"context_line":"    files is defined by the new config option"},{"line_number":7,"context_line":"    ``[compute]provider_config_location``. Nova will look in this directory"},{"line_number":8,"context_line":"    for ``*.yaml`` files. See the `specification`__ and `admin guide`__ for"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"bf51134e_169cc959","line":5,"range":{"start_line":5,"start_character":26,"end_line":5,"end_character":30},"updated":"2020-07-22 13:24:04.000000000","message":"YAML","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"6029494a3fa9535668d2be3f080ca5bf18842bf6","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Nova now supports defining of additional resource provider traits and"},{"line_number":5,"context_line":"    inventories by way of yaml configuration files. The location of these"},{"line_number":6,"context_line":"    files is defined by the new config option"},{"line_number":7,"context_line":"    ``[compute]provider_config_location``. Nova will look in this directory"},{"line_number":8,"context_line":"    for ``*.yaml`` files. See the `specification`__ and `admin guide`__ for"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"9f560f44_c1ded60f","line":5,"range":{"start_line":5,"start_character":26,"end_line":5,"end_character":30},"in_reply_to":"bf51134e_169cc959","updated":"2020-08-03 02:33:08.000000000","message":"will fix","commit_id":"ddf5d523da770f2e7d9955069ab77ba6c861f81d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73678f9e942ce6a2e5c22051264959bdc7721bfd","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    __ https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"},{"line_number":12,"context_line":"    __ https://docs.openstack.org/nova/latest/admin/managing-resource-providers.html"},{"line_number":13,"context_line":"security:"},{"line_number":14,"context_line":"  - |"},{"line_number":15,"context_line":"    Administrators should ensure that provider config files have appropriate"},{"line_number":16,"context_line":"    permissions and ownership. See the `specification`__ and `admin guide`__"},{"line_number":17,"context_line":"    for more details."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    __ https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"},{"line_number":20,"context_line":"    __ https://docs.openstack.org/nova/latest/admin/managing-resource-providers.html"}],"source_content_type":"text/x-yaml","patch_set":35,"id":"9f560f44_181001a8","line":20,"range":{"start_line":13,"start_character":0,"end_line":20,"end_character":84},"updated":"2020-08-06 09:39:50.000000000","message":"I don\u0027t think this is relevant. The security section is more for fixes, rather than general best practices. You should note the need to ensure correct permissions and ownership in the main doc","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"},{"author":{"_account_id":30192,"name":"Tony Su","email":"tao.su@intel.com","username":"tsu5"},"change_message_id":"607fd53e64e791c319fd916363834cbc8fb8c77b","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    __ https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"},{"line_number":12,"context_line":"    __ https://docs.openstack.org/nova/latest/admin/managing-resource-providers.html"},{"line_number":13,"context_line":"security:"},{"line_number":14,"context_line":"  - |"},{"line_number":15,"context_line":"    Administrators should ensure that provider config files have appropriate"},{"line_number":16,"context_line":"    permissions and ownership. See the `specification`__ and `admin guide`__"},{"line_number":17,"context_line":"    for more details."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    __ https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/provider-config-file.html"},{"line_number":20,"context_line":"    __ https://docs.openstack.org/nova/latest/admin/managing-resource-providers.html"}],"source_content_type":"text/x-yaml","patch_set":35,"id":"9f560f44_bbd45d49","line":20,"range":{"start_line":13,"start_character":0,"end_line":20,"end_character":84},"in_reply_to":"9f560f44_181001a8","updated":"2020-08-07 04:11:38.000000000","message":"move this to main doc.","commit_id":"de12a5ecac36d0d8926de908a09cbaac15a5cf60"}]}
