)]}'
{"ironic_inspector/plugins/base_physnet.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"5eb9faf5f61518e43df2d75c4ba650140d17ff89","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"CONF \u003d cfg.CONF"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# Port physical_network field was introduced in API microversion 1.34."},{"line_number":30,"context_line":"REQUIRED_IRONIC_VERSION \u003d \u00271.34\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class BasePhysnetHook(base.ProcessingHook):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4c43b2_4cda60e9","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":32},"updated":"2020-04-14 16:56:57.000000000","message":"This is from pike. I don\u0027t know if we can assume it\u0027s supported now?","commit_id":"b1bcea0f89b77d81b74ec47cdb3f095b7a4f7203"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e2fab3302fb1cfdaf5f94a9d353a0ee3be220293","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"CONF \u003d cfg.CONF"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# Port physical_network field was introduced in API microversion 1.34."},{"line_number":30,"context_line":"REQUIRED_IRONIC_VERSION \u003d \u00271.34\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class BasePhysnetHook(base.ProcessingHook):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4c43b2_fb767d06","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":32},"in_reply_to":"3f4c43b2_4cda60e9","updated":"2020-04-15 06:46:17.000000000","message":"Yes, I think we can. I dropped this.","commit_id":"b1bcea0f89b77d81b74ec47cdb3f095b7a4f7203"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"5eb9faf5f61518e43df2d75c4ba650140d17ff89","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        inventory \u003d utils.get_inventory(introspection_data)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        LOG.info(\"Plugin: %s\", type(self))"},{"line_number":71,"context_line":"        # Use a client with a version set explicitly."},{"line_number":72,"context_line":"        client \u003d ir_utils.get_client()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        ironic_ports \u003d node_info.ports()"},{"line_number":75,"context_line":"        if (ironic_ports and"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4c43b2_8c762806","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":38},"updated":"2020-04-14 16:56:57.000000000","message":"I don\u0027t know if this is still required now that we are using openstacksdk.","commit_id":"b1bcea0f89b77d81b74ec47cdb3f095b7a4f7203"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e2fab3302fb1cfdaf5f94a9d353a0ee3be220293","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        inventory \u003d utils.get_inventory(introspection_data)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        LOG.info(\"Plugin: %s\", type(self))"},{"line_number":71,"context_line":"        # Use a client with a version set explicitly."},{"line_number":72,"context_line":"        client \u003d ir_utils.get_client()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        ironic_ports \u003d node_info.ports()"},{"line_number":75,"context_line":"        if (ironic_ports and"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4c43b2_7bd1cdcd","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":38},"in_reply_to":"3f4c43b2_8c762806","updated":"2020-04-15 06:46:17.000000000","message":"Ok, let\u0027s remove it.","commit_id":"b1bcea0f89b77d81b74ec47cdb3f095b7a4f7203"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"5eb9faf5f61518e43df2d75c4ba650140d17ff89","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        client \u003d ir_utils.get_client()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        ironic_ports \u003d node_info.ports()"},{"line_number":75,"context_line":"        if (ironic_ports and"},{"line_number":76,"context_line":"                not all(hasattr(port, \u0027physical_network\u0027)"},{"line_number":77,"context_line":"                        for port in ironic_ports.values())):"},{"line_number":78,"context_line":"            # If the ports do not have a physical network field, use our newer"},{"line_number":79,"context_line":"            # versioned client to fetch some that do."},{"line_number":80,"context_line":"            port_list \u003d client.node.list_ports(node_info.uuid, limit\u003d0,"},{"line_number":81,"context_line":"                                               detail\u003dTrue)"},{"line_number":82,"context_line":"            ironic_ports \u003d {p.address: p for p in port_list}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        for iface in inventory[\u0027interfaces\u0027]:"},{"line_number":85,"context_line":"            if iface[\u0027name\u0027] not in introspection_data[\u0027all_interfaces\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4c43b2_6c73dc16","line":82,"range":{"start_line":75,"start_character":0,"end_line":82,"end_character":60},"updated":"2020-04-14 16:56:57.000000000","message":"ditto","commit_id":"b1bcea0f89b77d81b74ec47cdb3f095b7a4f7203"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e2fab3302fb1cfdaf5f94a9d353a0ee3be220293","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        client \u003d ir_utils.get_client()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        ironic_ports \u003d node_info.ports()"},{"line_number":75,"context_line":"        if (ironic_ports and"},{"line_number":76,"context_line":"                not all(hasattr(port, \u0027physical_network\u0027)"},{"line_number":77,"context_line":"                        for port in ironic_ports.values())):"},{"line_number":78,"context_line":"            # If the ports do not have a physical network field, use our newer"},{"line_number":79,"context_line":"            # versioned client to fetch some that do."},{"line_number":80,"context_line":"            port_list \u003d client.node.list_ports(node_info.uuid, limit\u003d0,"},{"line_number":81,"context_line":"                                               detail\u003dTrue)"},{"line_number":82,"context_line":"            ironic_ports \u003d {p.address: p for p in port_list}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        for iface in inventory[\u0027interfaces\u0027]:"},{"line_number":85,"context_line":"            if iface[\u0027name\u0027] not in introspection_data[\u0027all_interfaces\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4c43b2_dbe1019d","line":82,"range":{"start_line":75,"start_character":0,"end_line":82,"end_character":60},"in_reply_to":"3f4c43b2_6c73dc16","updated":"2020-04-15 06:46:17.000000000","message":"Removed.","commit_id":"b1bcea0f89b77d81b74ec47cdb3f095b7a4f7203"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c329145dd8bbd0964df556d2cbde4ccfe504dd04","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        :param port: The ironic port to patch."},{"line_number":54,"context_line":"        :returns: A dict to be used as a patch for the port, or None."},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        # Bug is here."},{"line_number":57,"context_line":"        if (not CONF.processing.overwrite_existing or"},{"line_number":58,"context_line":"                port.physical_network \u003d\u003d physnet):"},{"line_number":59,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4c43b2_3dcfe056","line":56,"updated":"2020-04-20 10:15:07.000000000","message":"Mmmm?","commit_id":"f3a1ca956a6a25a6fa35e1de49abf9c3bdd9c6dc"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e4dbe5e989676eece4b6b89dd8f71074979a28b2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        :param port: The ironic port to patch."},{"line_number":54,"context_line":"        :returns: A dict to be used as a patch for the port, or None."},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        # Bug is here."},{"line_number":57,"context_line":"        if (not CONF.processing.overwrite_existing or"},{"line_number":58,"context_line":"                port.physical_network \u003d\u003d physnet):"},{"line_number":59,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_59cd075c","line":56,"in_reply_to":"3f4c43b2_3dcfe056","updated":"2020-04-22 11:09:18.000000000","message":"oops, removed.\n\nThis comment was added in the stackhpc version of this class, related to a bug where node_info.ports did\u0027nt have physical_network attribute. The other code related to the fix was removed, since inspector now use openstacksdk and the problem was seen in Pike times.","commit_id":"f3a1ca956a6a25a6fa35e1de49abf9c3bdd9c6dc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c329145dd8bbd0964df556d2cbde4ccfe504dd04","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        # Bug is here."},{"line_number":57,"context_line":"        if (not CONF.processing.overwrite_existing or"},{"line_number":58,"context_line":"                port.physical_network \u003d\u003d physnet):"},{"line_number":59,"context_line":"            return"},{"line_number":60,"context_line":"        return {\u0027op\u0027: \u0027add\u0027, \u0027path\u0027: \u0027/physical_network\u0027, \u0027value\u0027: physnet}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4c43b2_9dd8b41e","line":58,"updated":"2020-04-20 10:15:07.000000000","message":"This is not supposed to pass pep8, I wonder why it does","commit_id":"f3a1ca956a6a25a6fa35e1de49abf9c3bdd9c6dc"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e4dbe5e989676eece4b6b89dd8f71074979a28b2","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        # Bug is here."},{"line_number":57,"context_line":"        if (not CONF.processing.overwrite_existing or"},{"line_number":58,"context_line":"                port.physical_network \u003d\u003d physnet):"},{"line_number":59,"context_line":"            return"},{"line_number":60,"context_line":"        return {\u0027op\u0027: \u0027add\u0027, \u0027path\u0027: \u0027/physical_network\u0027, \u0027value\u0027: physnet}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_593b4737","line":58,"in_reply_to":"3f4c43b2_9dd8b41e","updated":"2020-04-22 11:09:18.000000000","message":"moved the or to start of next line.","commit_id":"f3a1ca956a6a25a6fa35e1de49abf9c3bdd9c6dc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c329145dd8bbd0964df556d2cbde4ccfe504dd04","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        \"\"\"Process introspection data and patch port physical network.\"\"\""},{"line_number":64,"context_line":"        inventory \u003d utils.get_inventory(introspection_data)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        LOG.info(\"Plugin: %s\", type(self))"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        ironic_ports \u003d node_info.ports()"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4c43b2_7dd5e8e4","line":66,"updated":"2020-04-20 10:15:07.000000000","message":"Let\u0027s remove this?","commit_id":"f3a1ca956a6a25a6fa35e1de49abf9c3bdd9c6dc"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e4dbe5e989676eece4b6b89dd8f71074979a28b2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        \"\"\"Process introspection data and patch port physical network.\"\"\""},{"line_number":64,"context_line":"        inventory \u003d utils.get_inventory(introspection_data)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        LOG.info(\"Plugin: %s\", type(self))"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        ironic_ports \u003d node_info.ports()"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_f91333b7","line":66,"in_reply_to":"3f4c43b2_7dd5e8e4","updated":"2020-04-22 11:09:18.000000000","message":"Done","commit_id":"f3a1ca956a6a25a6fa35e1de49abf9c3bdd9c6dc"}],"ironic_inspector/test/unit/test_plugins_base_physnet.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":"f7a0f76650a392701b2f93d87c28eb9023cfb75e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        return"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"@mock.patch.object(ir_utils, \u0027get_client\u0027)"},{"line_number":33,"context_line":"class TestBasePortPhysnetHook(test_base.NodeTest):"},{"line_number":34,"context_line":"    hook \u003d FakePortPhysnetHook()"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4c43b2_c66ac87e","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":42},"updated":"2020-04-14 20:20:53.000000000","message":"Is this still right? Which seems to get pulled in as mock_get?","commit_id":"9e03ec2d24736ed1a8aeb485d9b46609f136c85a"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e2fab3302fb1cfdaf5f94a9d353a0ee3be220293","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        return"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"@mock.patch.object(ir_utils, \u0027get_client\u0027)"},{"line_number":33,"context_line":"class TestBasePortPhysnetHook(test_base.NodeTest):"},{"line_number":34,"context_line":"    hook \u003d FakePortPhysnetHook()"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4c43b2_f20977dd","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":42},"in_reply_to":"3f4c43b2_c66ac87e","updated":"2020-04-15 06:46:17.000000000","message":"Thanks Julia, we don\u0027t need to mock the client anymore. I have removed it in the latest patchset.","commit_id":"9e03ec2d24736ed1a8aeb485d9b46609f136c85a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c329145dd8bbd0964df556d2cbde4ccfe504dd04","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.node_info \u003d node_cache.NodeInfo(uuid\u003dself.uuid, started_at\u003d0,"},{"line_number":55,"context_line":"                                             node\u003dself.node, ports\u003dports)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @mock.patch.object(node_cache.NodeInfo, \u0027patch_port\u0027)"},{"line_number":58,"context_line":"    @mock.patch.object(FakePortPhysnetHook, \u0027get_physnet\u0027)"},{"line_number":59,"context_line":"    def test_expected_data(self, mock_get, mock_patch):"},{"line_number":60,"context_line":"        patches \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4c43b2_5dd2ac01","line":57,"updated":"2020-04-20 10:15:07.000000000","message":"autospec\u003dTrue everywhere please","commit_id":"f3a1ca956a6a25a6fa35e1de49abf9c3bdd9c6dc"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e4dbe5e989676eece4b6b89dd8f71074979a28b2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.node_info \u003d node_cache.NodeInfo(uuid\u003dself.uuid, started_at\u003d0,"},{"line_number":55,"context_line":"                                             node\u003dself.node, ports\u003dports)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @mock.patch.object(node_cache.NodeInfo, \u0027patch_port\u0027)"},{"line_number":58,"context_line":"    @mock.patch.object(FakePortPhysnetHook, \u0027get_physnet\u0027)"},{"line_number":59,"context_line":"    def test_expected_data(self, mock_get, mock_patch):"},{"line_number":60,"context_line":"        patches \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_3983dbce","line":57,"in_reply_to":"3f4c43b2_5dd2ac01","updated":"2020-04-22 11:09:18.000000000","message":"I created a separate patch for autospec\u003dTrue, since adding it here required changing assertCalledWithPatch + it was not used in several other places as well.","commit_id":"f3a1ca956a6a25a6fa35e1de49abf9c3bdd9c6dc"}],"releasenotes/notes/physnet-base-4499ad3a7c08725f.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c329145dd8bbd0964df556d2cbde4ccfe504dd04","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added base class (``BasePhysnetHook``) for plugins that assign a physical"},{"line_number":4,"context_line":"    network to ports."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f4c43b2_fde9f8b6","line":2,"updated":"2020-04-20 10:15:07.000000000","message":"Should go to \u0027other\u0027, it\u0027s not a user-visible feature","commit_id":"f3a1ca956a6a25a6fa35e1de49abf9c3bdd9c6dc"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e4dbe5e989676eece4b6b89dd8f71074979a28b2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added base class (``BasePhysnetHook``) for plugins that assign a physical"},{"line_number":4,"context_line":"    network to ports."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"1f493fa4_796c4336","line":2,"in_reply_to":"3f4c43b2_fde9f8b6","updated":"2020-04-22 11:09:18.000000000","message":"Done","commit_id":"f3a1ca956a6a25a6fa35e1de49abf9c3bdd9c6dc"}]}
