)]}'
{"ironic_inspector/common/ironic.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"666a934b57f2699c0cf49ebb86057c1a7bcbbcb0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        :return: a node entity"},{"line_number":83,"context_line":"        \"\"\""},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            return self.connection.get_node(node_id)"},{"line_number":86,"context_line":"        except os_exc.SDKException as e:"},{"line_number":87,"context_line":"            err_msg \u003d (_(\u0027Ironic failed to get node %(node)s \u0027"},{"line_number":88,"context_line":"                         \u0027Error was: %(error)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_46d039ca","line":85,"updated":"2019-07-26 14:34:50.000000000","message":"I\u0027d recommend adding aliases to the resulting object to cope with the renamed fields, like\n\n node.uuid \u003d node.id","commit_id":"10fe892b08bc7908abfbc83d8ed173391c0678eb"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f5f13a000a748c621e47180c195a30e62596f465","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    \"\"\"Get an ironic client connection.\"\"\""},{"line_number":57,"context_line":"    session \u003d _get_ironic_session()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    # TODO(rpittau) remove the try-except before removing the WIP"},{"line_number":60,"context_line":"    try:"},{"line_number":61,"context_line":"        return openstack.connection.Connection("},{"line_number":62,"context_line":"            session\u003dsession, oslo_conf\u003dCONF).baremetal"}],"source_content_type":"text/x-python","patch_set":51,"id":"3fa7e38b_7f9f934d","line":59,"updated":"2020-02-12 09:57:01.000000000","message":"Remove :)","commit_id":"a1c022917ceff2e6f3495980fbb816921d66514c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f5f13a000a748c621e47180c195a30e62596f465","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    nodes \u003d set()"},{"line_number":206,"context_line":"    for mac in macs:"},{"line_number":207,"context_line":"        LOG.debug(\u0027Getting ports\u0027)"},{"line_number":208,"context_line":"        ports \u003d ironic.ports(address\u003dmac, fields\u003d[\"uuid\", \"node_uuid\"])"},{"line_number":209,"context_line":"        ports \u003d list(ports)"},{"line_number":210,"context_line":"        LOG.debug(\u0027Ports are %(ports)s\u0027,"}],"source_content_type":"text/x-python","patch_set":51,"id":"3fa7e38b_1fb45fd3","line":207,"updated":"2020-02-12 09:57:01.000000000","message":"Let\u0027s clean up debugging logs introduced here","commit_id":"a1c022917ceff2e6f3495980fbb816921d66514c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"43ca24bb761f1d058de2bcb2d9b29ccb53c24a7a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return openstack.connection.Connection("},{"line_number":61,"context_line":"            session\u003dsession, oslo_conf\u003dCONF).baremetal"},{"line_number":62,"context_line":"    except Exception as e:"},{"line_number":63,"context_line":"        LOG.error(e)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def reset_ironic_session():"}],"source_content_type":"text/x-python","patch_set":53,"id":"1fa4df85_52e4e10c","line":63,"updated":"2020-03-10 10:47:42.000000000","message":"1) First argument must be a string.\n\n2) I think we should raise here.","commit_id":"e0904cb9a2f31fce5843b070fba052654a900a9e"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"72dd4b947c3689acc9e706b9477a2b9ccdd960a8","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return openstack.connection.Connection("},{"line_number":61,"context_line":"            session\u003dsession, oslo_conf\u003dCONF).baremetal"},{"line_number":62,"context_line":"    except Exception as e:"},{"line_number":63,"context_line":"        LOG.error(e)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def reset_ironic_session():"}],"source_content_type":"text/x-python","patch_set":53,"id":"1fa4df85_d1576e25","line":63,"in_reply_to":"1fa4df85_52e4e10c","updated":"2020-03-10 13:22:52.000000000","message":"oh yes, I\u0027ll correct that","commit_id":"e0904cb9a2f31fce5843b070fba052654a900a9e"}],"ironic_inspector/conductor/manager.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"43ca24bb761f1d058de2bcb2d9b29ccb53c24a7a","unresolved":false,"context_lines":[{"line_number":204,"context_line":"def sync_with_ironic():"},{"line_number":205,"context_line":"    ironic \u003d ir_utils.get_client()"},{"line_number":206,"context_line":"    # TODO(yuikotakada): pagination"},{"line_number":207,"context_line":"    ironic_nodes \u003d ironic.nodes(limit\u003dNone)"},{"line_number":208,"context_line":"    ironic_node_uuids \u003d {node.id for node in ironic_nodes}"},{"line_number":209,"context_line":"    node_cache.delete_nodes_not_in_list(ironic_node_uuids)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1fa4df85_92ded93b","line":207,"updated":"2020-03-10 10:47:42.000000000","message":"nit: use fields to only fetch uuid","commit_id":"e0904cb9a2f31fce5843b070fba052654a900a9e"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"72dd4b947c3689acc9e706b9477a2b9ccdd960a8","unresolved":false,"context_lines":[{"line_number":204,"context_line":"def sync_with_ironic():"},{"line_number":205,"context_line":"    ironic \u003d ir_utils.get_client()"},{"line_number":206,"context_line":"    # TODO(yuikotakada): pagination"},{"line_number":207,"context_line":"    ironic_nodes \u003d ironic.nodes(limit\u003dNone)"},{"line_number":208,"context_line":"    ironic_node_uuids \u003d {node.id for node in ironic_nodes}"},{"line_number":209,"context_line":"    node_cache.delete_nodes_not_in_list(ironic_node_uuids)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1fa4df85_713c7ae0","line":207,"in_reply_to":"1fa4df85_92ded93b","updated":"2020-03-10 13:22:52.000000000","message":"good point, I think I just adapted the code and didn\u0027t revisit it","commit_id":"e0904cb9a2f31fce5843b070fba052654a900a9e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"eb005fd13b7b7bccfae930f3ecb23e56896aa03e","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    ironic \u003d ir_utils.get_client()"},{"line_number":206,"context_line":"    # TODO(yuikotakada): pagination"},{"line_number":207,"context_line":"    ironic_nodes \u003d ironic.nodes(limit\u003dNone)"},{"line_number":208,"context_line":"    ironic_node_uuids \u003d {node.id for node in ironic_nodes}"},{"line_number":209,"context_line":"    node_cache.delete_nodes_not_in_list(ironic_node_uuids)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1fa4df85_f78b7abc","line":208,"updated":"2020-03-10 14:45:05.000000000","message":"I don\u0027t think this line should be removed. Even with \u0027fields\u0027 the returned objects are Node resources.","commit_id":"e0904cb9a2f31fce5843b070fba052654a900a9e"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"9df61990f6744cc711330f695ed2397a3c8796ea","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    ironic \u003d ir_utils.get_client()"},{"line_number":206,"context_line":"    # TODO(yuikotakada): pagination"},{"line_number":207,"context_line":"    ironic_nodes \u003d ironic.nodes(limit\u003dNone)"},{"line_number":208,"context_line":"    ironic_node_uuids \u003d {node.id for node in ironic_nodes}"},{"line_number":209,"context_line":"    node_cache.delete_nodes_not_in_list(ironic_node_uuids)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1fa4df85_260c783a","line":208,"in_reply_to":"1fa4df85_f78b7abc","updated":"2020-03-11 09:17:17.000000000","message":"yeah, thanks!","commit_id":"e0904cb9a2f31fce5843b070fba052654a900a9e"}],"ironic_inspector/node_cache.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"666a934b57f2699c0cf49ebb86057c1a7bcbbcb0","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                patch[\u0027path\u0027] \u003d \u0027/\u0027 + patch[\u0027path\u0027]"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        LOG.debug(\u0027Updating node with patches %s\u0027, patches, node_info\u003dself)"},{"line_number":410,"context_line":"        self._node \u003d ironic.node.update(self.uuid, patches, **kwargs)"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def patch_port(self, port, patches, ironic\u003dNone):"},{"line_number":413,"context_line":"        \"\"\"Apply JSON patches to a port."}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_c6e3c9a3","line":410,"range":{"start_line":410,"start_character":28,"end_line":410,"end_character":39},"updated":"2019-07-26 14:34:50.000000000","message":"patch_node","commit_id":"10fe892b08bc7908abfbc83d8ed173391c0678eb"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"666a934b57f2699c0cf49ebb86057c1a7bcbbcb0","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        LOG.debug(\u0027Updating port %(mac)s with patches %(patches)s\u0027,"},{"line_number":425,"context_line":"                  {\u0027mac\u0027: port.address, \u0027patches\u0027: patches},"},{"line_number":426,"context_line":"                  node_info\u003dself)"},{"line_number":427,"context_line":"        new_port \u003d ironic.connection.update_port(port.uuid, patches)"},{"line_number":428,"context_line":"        ports[port.address] \u003d new_port"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def update_properties(self, ironic\u003dNone, **props):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_665e9577","line":427,"range":{"start_line":427,"start_character":37,"end_line":427,"end_character":48},"updated":"2019-07-26 14:34:50.000000000","message":"patch_port","commit_id":"10fe892b08bc7908abfbc83d8ed173391c0678eb"}],"ironic_inspector/plugins/discovery.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"32d4f68e604fb5569b1ee8bf59849c4bd0c8b40d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    node_driver_info \u003d _extract_node_driver_info(introspection_data)"},{"line_number":69,"context_line":"    node_attr[\u0027driver_info\u0027] \u003d node_driver_info"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    # NOTE(rpittau) by default, if the provision_state is None, it will"},{"line_number":72,"context_line":"    # be set to \u0027available\u0027 by openstacksdk, blocking the inspection of the"},{"line_number":73,"context_line":"    # node in this phase, as it\u0027s not a valid state for inspection."},{"line_number":74,"context_line":"    node_attr[\u0027provision_state\u0027] \u003d \u0027enroll\u0027"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"df33271e_1d7d301c","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":44},"updated":"2020-03-23 19:11:15.000000000","message":"sounds more like our API to be honest... :(","commit_id":"3accdfbbc6cf7176f9ff8b4967195cb4e2036cea"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"123aa266f80d828516588c37d32b9f00fbe35954","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    node_driver_info \u003d _extract_node_driver_info(introspection_data)"},{"line_number":69,"context_line":"    node_attr[\u0027driver_info\u0027] \u003d node_driver_info"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    # NOTE(rpittau) by default, if the provision_state is None, it will"},{"line_number":72,"context_line":"    # be set to \u0027available\u0027 by openstacksdk, blocking the inspection of the"},{"line_number":73,"context_line":"    # node in this phase, as it\u0027s not a valid state for inspection."},{"line_number":74,"context_line":"    node_attr[\u0027provision_state\u0027] \u003d \u0027enroll\u0027"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"df33271e_e674339c","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":44},"in_reply_to":"df33271e_1d7d301c","updated":"2020-03-24 09:00:25.000000000","message":"oh yeah, it is our API, just wanted to point out the default behavior of openstacksdk and why I was adding this here.\nI can rephrase the NOTE, at this point I believe setting the state to enroll was actually the correct thing to do.","commit_id":"3accdfbbc6cf7176f9ff8b4967195cb4e2036cea"}],"ironic_inspector/test/functional.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a75617604e54ba15c6ba2c2469b4d28c4ff30a8a","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        # should be deleted."},{"line_number":280,"context_line":"        self.cli.ports.return_value \u003d ["},{"line_number":281,"context_line":"            mock.Mock(address\u003dself.macs[1], uuid\u003duuid_to_update,"},{"line_number":282,"context_line":"                      node_uuid\u003dself.uuid, extra\u003d{}, pxe_enabled\u003dTrue),"},{"line_number":283,"context_line":"            mock.Mock(address\u003d\u0027foobar\u0027, uuid\u003duuid_to_delete,"},{"line_number":284,"context_line":"                      node_uuid\u003dself.uuid, extra\u003d{}, pxe_enabled\u003dTrue),"},{"line_number":285,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":47,"id":"3fa7e38b_57c3f758","line":282,"range":{"start_line":282,"start_character":22,"end_line":282,"end_character":31},"updated":"2020-02-06 09:39:51.000000000","message":"node_id here and everywhere","commit_id":"455ab13a14ade2df1ac2c9bb6622af59b3c6f059"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0d9934532b0b84fe3719adf3e6471dfe40be20ab","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        # should be deleted."},{"line_number":280,"context_line":"        self.cli.ports.return_value \u003d ["},{"line_number":281,"context_line":"            mock.Mock(address\u003dself.macs[1], uuid\u003duuid_to_update,"},{"line_number":282,"context_line":"                      node_uuid\u003dself.uuid, extra\u003d{}, pxe_enabled\u003dTrue),"},{"line_number":283,"context_line":"            mock.Mock(address\u003d\u0027foobar\u0027, uuid\u003duuid_to_delete,"},{"line_number":284,"context_line":"                      node_uuid\u003dself.uuid, extra\u003d{}, pxe_enabled\u003dTrue),"},{"line_number":285,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":47,"id":"3fa7e38b_b810085a","line":282,"range":{"start_line":282,"start_character":22,"end_line":282,"end_character":31},"in_reply_to":"3fa7e38b_57c3f758","updated":"2020-02-07 10:59:37.000000000","message":"thanks Dmitry, it was right under my nose :/","commit_id":"455ab13a14ade2df1ac2c9bb6622af59b3c6f059"}],"ironic_inspector/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"43ca24bb761f1d058de2bcb2d9b29ccb53c24a7a","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def __init__(self, msg, code\u003d404, **kwargs):"},{"line_number":139,"context_line":"        super(NotFoundInCacheError, self).__init__(msg, code,"},{"line_number":140,"context_line":"                                                   log_level\u003d\u0027warning\u0027,"},{"line_number":141,"context_line":"                                                   **kwargs)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"1fa4df85_32e925e5","line":140,"updated":"2020-03-10 10:47:42.000000000","message":"What\u0027s the reasoning behind changing this?","commit_id":"e0904cb9a2f31fce5843b070fba052654a900a9e"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"72dd4b947c3689acc9e706b9477a2b9ccdd960a8","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def __init__(self, msg, code\u003d404, **kwargs):"},{"line_number":139,"context_line":"        super(NotFoundInCacheError, self).__init__(msg, code,"},{"line_number":140,"context_line":"                                                   log_level\u003d\u0027warning\u0027,"},{"line_number":141,"context_line":"                                                   **kwargs)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"1fa4df85_51129e63","line":140,"in_reply_to":"1fa4df85_32e925e5","updated":"2020-03-10 13:22:52.000000000","message":"to be honest I don\u0027t remember :/\nI\u0027ll remove the change","commit_id":"e0904cb9a2f31fce5843b070fba052654a900a9e"}],"requirements.txt":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"32d4f68e604fb5569b1ee8bf59849c4bd0c8b40d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"keystonemiddleware\u003e\u003d4.18.0 # Apache-2.0"},{"line_number":16,"context_line":"netaddr\u003e\u003d0.7.18 # BSD"},{"line_number":17,"context_line":"pbr!\u003d2.1.0,\u003e\u003d2.0.0 # Apache-2.0"},{"line_number":18,"context_line":"python-ironicclient!\u003d2.5.2,!\u003d2.7.1,!\u003d3.0.0,\u003e\u003d2.3.0 # Apache-2.0"},{"line_number":19,"context_line":"pytz\u003e\u003d2013.6 # MIT"},{"line_number":20,"context_line":"openstacksdk\u003e\u003d0.40.0 # Apache-2.0"},{"line_number":21,"context_line":"oslo.concurrency\u003e\u003d3.26.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":59,"id":"df33271e_bdeb64ae","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":63},"updated":"2020-03-23 19:11:15.000000000","message":"Do we still need it?","commit_id":"3accdfbbc6cf7176f9ff8b4967195cb4e2036cea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8fa5e1038ec3d970145d373dba57bccfea9af17d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"keystonemiddleware\u003e\u003d4.18.0 # Apache-2.0"},{"line_number":16,"context_line":"netaddr\u003e\u003d0.7.18 # BSD"},{"line_number":17,"context_line":"pbr!\u003d2.1.0,\u003e\u003d2.0.0 # Apache-2.0"},{"line_number":18,"context_line":"python-ironicclient!\u003d2.5.2,!\u003d2.7.1,!\u003d3.0.0,\u003e\u003d2.3.0 # Apache-2.0"},{"line_number":19,"context_line":"pytz\u003e\u003d2013.6 # MIT"},{"line_number":20,"context_line":"openstacksdk\u003e\u003d0.40.0 # Apache-2.0"},{"line_number":21,"context_line":"oslo.concurrency\u003e\u003d3.26.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":59,"id":"df33271e_94d748c0","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":63},"in_reply_to":"df33271e_8663a7dc","updated":"2020-03-24 18:54:37.000000000","message":"ack","commit_id":"3accdfbbc6cf7176f9ff8b4967195cb4e2036cea"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"123aa266f80d828516588c37d32b9f00fbe35954","unresolved":false,"context_lines":[{"line_number":15,"context_line":"keystonemiddleware\u003e\u003d4.18.0 # Apache-2.0"},{"line_number":16,"context_line":"netaddr\u003e\u003d0.7.18 # BSD"},{"line_number":17,"context_line":"pbr!\u003d2.1.0,\u003e\u003d2.0.0 # Apache-2.0"},{"line_number":18,"context_line":"python-ironicclient!\u003d2.5.2,!\u003d2.7.1,!\u003d3.0.0,\u003e\u003d2.3.0 # Apache-2.0"},{"line_number":19,"context_line":"pytz\u003e\u003d2013.6 # MIT"},{"line_number":20,"context_line":"openstacksdk\u003e\u003d0.40.0 # Apache-2.0"},{"line_number":21,"context_line":"oslo.concurrency\u003e\u003d3.26.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":59,"id":"df33271e_8663a7dc","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":63},"in_reply_to":"df33271e_bdeb64ae","updated":"2020-03-24 09:00:25.000000000","message":"we do, in this patch I\u0027m not removing entirely the dependency as there are other places we use it.\nNext one in chain probably will remove it entirely.","commit_id":"3accdfbbc6cf7176f9ff8b4967195cb4e2036cea"}]}
