)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f9792221d72d7b1a4ff437008228d67a13b2e28","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The preceding change [1] converted get_inventory+get_traits to"},{"line_number":10,"context_line":"update_provider_tree in the ironic virt driver.  It used"},{"line_number":11,"context_line":"provider_tree.add_traits to set the traits on the compute node provider."},{"line_number":12,"context_line":"This was a deviation from the previous behavior, which used"},{"line_number":13,"context_line":"update_traits (in the resource tracker) thereby *replacing* the compute"},{"line_number":14,"context_line":"node provider\u0027s traits with whatever the driver reported.  This has the"},{"line_number":15,"context_line":"drawback of obliterating any traits set outside of the compute service,"},{"line_number":16,"context_line":"but that\u0027s a bridge we\u0027ll cross later."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5f7c97a3_be5aef7e","line":13,"range":{"start_line":12,"start_character":49,"end_line":13,"end_character":39},"updated":"2018-06-25 21:42:46.000000000","message":"Well, I guess via this call chain:\n\nhttps://review.openstack.org/#/c/576588/3/nova/compute/resource_tracker.py@a925\n\nhttps://review.openstack.org/#/c/576588/3/nova/scheduler/client/report.py@1221\n\nAnd PUT /resource_providers/{id}/traits is a full replace:\n\nhttps://developer.openstack.org/api-ref/placement/#update-resource-provider-traits","commit_id":"10bca5c0597fa938b1489bd5a8b142116714ed89"}],"nova/virt/ironic/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f9792221d72d7b1a4ff437008228d67a13b2e28","unresolved":false,"context_lines":[{"line_number":801,"context_line":"                }"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"        provider_tree.update_inventory(nodename, result)"},{"line_number":804,"context_line":"        # TODO(efried): *Unset* (remove_traits) if \"owned\" by ironic virt but"},{"line_number":805,"context_line":"        # not set on the node object, and *set* (add_traits) only those both"},{"line_number":806,"context_line":"        # owned by ironic virt and set on the node object."},{"line_number":807,"context_line":"        provider_tree.update_traits(nodename, node.traits)"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def get_available_resource(self, nodename):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_bee8af7a","line":806,"range":{"start_line":804,"start_character":8,"end_line":806,"end_character":58},"updated":"2018-06-25 21:42:46.000000000","message":"Does this go away once I fix this up in https://review.openstack.org/#/c/538498/7/nova/compute/resource_tracker.py ? Or is ironic going to be special in saying what comes out of the driver is always what should be and nothing can be set outside the driver (via the ironic traits API)?","commit_id":"10bca5c0597fa938b1489bd5a8b142116714ed89"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"57a7bdfa416f00ab1805850f7f870ba91a1800fa","unresolved":false,"context_lines":[{"line_number":801,"context_line":"                }"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"        provider_tree.update_inventory(nodename, result)"},{"line_number":804,"context_line":"        # TODO(efried): *Unset* (remove_traits) if \"owned\" by ironic virt but"},{"line_number":805,"context_line":"        # not set on the node object, and *set* (add_traits) only those both"},{"line_number":806,"context_line":"        # owned by ironic virt and set on the node object."},{"line_number":807,"context_line":"        provider_tree.update_traits(nodename, node.traits)"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def get_available_resource(self, nodename):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_6112785a","line":806,"range":{"start_line":804,"start_character":8,"end_line":806,"end_character":58},"in_reply_to":"5f7c97a3_bee8af7a","updated":"2018-06-25 21:50:25.000000000","message":"Not quite.  It goes away once ironic implements similar logic within this method as what you\u0027re implementing in that patch.  It will actually wind up looking most like https://review.openstack.org/#/c/560317/","commit_id":"10bca5c0597fa938b1489bd5a8b142116714ed89"}]}
