)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e83c45635933c96223988e2e1f45cf4e502102f8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"address can be registered as a volume connector for an Ironic node."},{"line_number":12,"context_line":"The IP address may be required depending on cinder backend drivers."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch gets an IP address for a volume connector based on a MAC"},{"line_number":15,"context_line":"address assigned to a volume connector in ironic. To bind VIFs to"},{"line_number":16,"context_line":"ironic ports before connecting a volume, VIFs are attached earlier"},{"line_number":17,"context_line":"with a new virt driver API. Nova can get an IP address assigned to"},{"line_number":18,"context_line":"a VIF attached to a ironic port by retrieving the port with the"},{"line_number":19,"context_line":"MAC address."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Co-Authored-By: Satoru Moriya \u003csatoru.moriya.br@hitachi.com\u003e"},{"line_number":22,"context_line":"Implements: blueprint ironic-volume-connector-ip"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"7f96bb07_296a66ed","line":19,"range":{"start_line":14,"start_character":0,"end_line":19,"end_character":12},"updated":"2018-01-16 10:12:55.000000000","message":"If I understood correctly it\u0027s only for boot from volume case. Maybe it is worth to mention that here.","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"f22995ff8902917c9098fe153d219b35824bb947","unresolved":false,"context_lines":[{"line_number":11,"context_line":"address can be registered as a volume connector for an Ironic node."},{"line_number":12,"context_line":"The IP address may be required depending on cinder backend drivers."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch gets an IP address for a volume connector based on a MAC"},{"line_number":15,"context_line":"address assigned to a volume connector in ironic. To bind VIFs to"},{"line_number":16,"context_line":"ironic ports before connecting a volume, VIFs are attached earlier"},{"line_number":17,"context_line":"with a new virt driver API. Nova can get an IP address assigned to"},{"line_number":18,"context_line":"a VIF attached to a ironic port by retrieving the port with the"},{"line_number":19,"context_line":"MAC address."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Co-Authored-By: Satoru Moriya \u003csatoru.moriya.br@hitachi.com\u003e"},{"line_number":22,"context_line":"Implements: blueprint ironic-volume-connector-ip"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"7f96bb07_590499c6","line":19,"range":{"start_line":14,"start_character":0,"end_line":19,"end_character":12},"in_reply_to":"7f96bb07_296a66ed","updated":"2018-01-23 09:09:09.000000000","message":"Done","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"}],"nova/compute/manager.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":"7757d007171dd64d584ac7eb4f8d7dd2d4ef08cd","unresolved":false,"context_lines":[{"line_number":2106,"context_line":"                    reason\u003dmsg)"},{"line_number":2107,"context_line":""},{"line_number":2108,"context_line":"        try:"},{"line_number":2109,"context_line":"            self.driver.prepare_networks_before_block_device_mapping("},{"line_number":2110,"context_line":"                instance, network_info)"},{"line_number":2111,"context_line":"            # Verify that all the BDMs have a device_name set and assign a"},{"line_number":2112,"context_line":"            # default to the ones missing it with the help of the driver."}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_2b3cd691","line":2109,"updated":"2017-07-13 14:53:02.000000000","message":"I think it would be good to put an inline comment detailing what this is being run to achieve.","commit_id":"e98650ed27e9a311052b241500065b5c7905f6c2"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e83c45635933c96223988e2e1f45cf4e502102f8","unresolved":false,"context_lines":[{"line_number":2192,"context_line":"            # Depending on a virt driver, some network configuration is"},{"line_number":2193,"context_line":"            # necessary before preparing block devices."},{"line_number":2194,"context_line":"            self.driver.prepare_networks_before_block_device_mapping("},{"line_number":2195,"context_line":"                instance, network_info)"},{"line_number":2196,"context_line":""},{"line_number":2197,"context_line":"            # Verify that all the BDMs have a device_name set and assign a"},{"line_number":2198,"context_line":"            # default to the ones missing it with the help of the driver."}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_09644a49","line":2195,"updated":"2018-01-16 10:12:55.000000000","message":"Do drivers other than ironic require that call?\nDo you think it possible to make that inside ironic driver?","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"f22995ff8902917c9098fe153d219b35824bb947","unresolved":false,"context_lines":[{"line_number":2192,"context_line":"            # Depending on a virt driver, some network configuration is"},{"line_number":2193,"context_line":"            # necessary before preparing block devices."},{"line_number":2194,"context_line":"            self.driver.prepare_networks_before_block_device_mapping("},{"line_number":2195,"context_line":"                instance, network_info)"},{"line_number":2196,"context_line":""},{"line_number":2197,"context_line":"            # Verify that all the BDMs have a device_name set and assign a"},{"line_number":2198,"context_line":"            # default to the ones missing it with the help of the driver."}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_ea93495b","line":2195,"in_reply_to":"7f96bb07_09644a49","updated":"2018-01-23 09:09:09.000000000","message":"Other drivers don\u0027t use this method. This method is introduced because there is not an appropriate existing driver call before block device preparation.","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"}],"nova/tests/unit/virt/ironic/test_driver.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"db807e4f633e93d45e9c5fff0d3075da5d4e247f","unresolved":false,"context_lines":[{"line_number":2251,"context_line":"    def test_get_volume_connector_no_ip_with_mac(self):"},{"line_number":2252,"context_line":"        self._test_get_volume_connector_no_ip(True)"},{"line_number":2253,"context_line":""},{"line_number":2254,"context_line":"    def test_get_volume_connector_no_ip_with_mac_with_porgroup(self):"},{"line_number":2255,"context_line":"        self._test_get_volume_connector_no_ip(True, portgroup_exist\u003dTrue)"},{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def test_get_volume_connector_no_ip_without_mac(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_a9a49a09","line":2254,"range":{"start_line":2254,"start_character":54,"end_line":2254,"end_character":62},"updated":"2018-01-11 21:56:26.000000000","message":"portgroup","commit_id":"4d79274d164baaa8e7edbc3cb840d61bcb459d8e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"54491e202a084bcebec11141efd02a9a82f0cf2e","unresolved":false,"context_lines":[{"line_number":2251,"context_line":"    def test_get_volume_connector_no_ip_with_mac(self):"},{"line_number":2252,"context_line":"        self._test_get_volume_connector_no_ip(True)"},{"line_number":2253,"context_line":""},{"line_number":2254,"context_line":"    def test_get_volume_connector_no_ip_with_mac_with_porgroup(self):"},{"line_number":2255,"context_line":"        self._test_get_volume_connector_no_ip(True, portgroup_exist\u003dTrue)"},{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def test_get_volume_connector_no_ip_without_mac(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_33bd5065","line":2254,"range":{"start_line":2254,"start_character":54,"end_line":2254,"end_character":62},"in_reply_to":"7f96bb07_a9a49a09","updated":"2018-01-12 05:33:05.000000000","message":"Done","commit_id":"4d79274d164baaa8e7edbc3cb840d61bcb459d8e"}],"nova/virt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1e56cbc55d661ea8f815c5ed734a682dfc7bebcc","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        \"\"\"Prepare networks before the block devices are mapped to instance."},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        Drivers who need network information for block device preparation can"},{"line_number":513,"context_line":"        ensure network async call is done by calling network_info.wait(). Then,"},{"line_number":514,"context_line":"        the drivers also can do some network preparation necessary for block"},{"line_number":515,"context_line":"        device preparation."},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_70b658fd","line":513,"range":{"start_line":513,"start_character":53,"end_line":513,"end_character":72},"updated":"2018-01-12 18:59:24.000000000","message":"The driver doesn\u0027t need to explicitly call this, it\u0027s built into the function call:\n\nhttps://github.com/openstack/nova/blob/master/nova/network/model.py#L551","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"39a9da1e7c24538350ec8f675a89e21f9a0ada7d","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        \"\"\"Prepare networks before the block devices are mapped to instance."},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        Drivers who need network information for block device preparation can"},{"line_number":513,"context_line":"        ensure network async call is done by calling network_info.wait(). Then,"},{"line_number":514,"context_line":"        the drivers also can do some network preparation necessary for block"},{"line_number":515,"context_line":"        device preparation."},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_82a11a97","line":513,"range":{"start_line":513,"start_character":53,"end_line":513,"end_character":72},"in_reply_to":"7f96bb07_70b658fd","updated":"2018-01-16 06:44:50.000000000","message":"In early implementation before ironic introduced vif attach/detach, network_info.wait() is called[1], because network_info wrapped NetworkInfoAsyncWrapper cannot be got in get_volume_connector()[2]. Now that we don\u0027t need to call this wait(), I removed this comment.\n\n[1] https://review.openstack.org/#/c/215385/6/nova/virt/ironic/driver.py@1210\n[2] https://review.openstack.org/#/c/215385/6/nova/virt/ironic/driver.py@1229","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"}],"nova/virt/ironic/driver.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":"7757d007171dd64d584ac7eb4f8d7dd2d4ef08cd","unresolved":false,"context_lines":[{"line_number":1721,"context_line":"        props[\u0027multipath\u0027] \u003d False"},{"line_number":1722,"context_line":"        return props"},{"line_number":1723,"context_line":""},{"line_number":1724,"context_line":"    def _get_vif_from_mac(self, node, mac):"},{"line_number":1725,"context_line":"        for method in [\u0027portgroup.list\u0027, \u0027port.list\u0027]:"},{"line_number":1726,"context_line":"            ports \u003d self.ironicclient.call(method,"},{"line_number":1727,"context_line":"                                           node\u003dnode.uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_4b14b2a0","line":1724,"range":{"start_line":1724,"start_character":3,"end_line":1724,"end_character":43},"updated":"2017-07-13 14:53:02.000000000","message":"I would like to see a better doc string for this method describing, even if only at a high level, what it is doing.","commit_id":"e98650ed27e9a311052b241500065b5c7905f6c2"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"db807e4f633e93d45e9c5fff0d3075da5d4e247f","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"            LOG.warning(\u0027Error detaching VIF from node %(node)s \u0027"},{"line_number":1817,"context_line":"                        \u0027after deploy failed; %(reason)s\u0027,"},{"line_number":1818,"context_line":"                        {\u0027node\u0027: instance.node,"},{"line_number":1819,"context_line":"                         \u0027reason\u0027: e},"},{"line_number":1820,"context_line":"                        instance\u003dinstance)"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"    def get_volume_connector(self, instance):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_b7ae362c","line":1819,"range":{"start_line":1819,"start_character":35,"end_line":1819,"end_character":36},"updated":"2018-01-11 21:56:26.000000000","message":"Do we need six.text_type() around this?","commit_id":"4d79274d164baaa8e7edbc3cb840d61bcb459d8e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"54491e202a084bcebec11141efd02a9a82f0cf2e","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"            LOG.warning(\u0027Error detaching VIF from node %(node)s \u0027"},{"line_number":1817,"context_line":"                        \u0027after deploy failed; %(reason)s\u0027,"},{"line_number":1818,"context_line":"                        {\u0027node\u0027: instance.node,"},{"line_number":1819,"context_line":"                         \u0027reason\u0027: e},"},{"line_number":1820,"context_line":"                        instance\u003dinstance)"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"    def get_volume_connector(self, instance):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_f3ae082d","line":1819,"range":{"start_line":1819,"start_character":35,"end_line":1819,"end_character":36},"in_reply_to":"7f96bb07_3848d2ca","updated":"2018-01-12 05:33:05.000000000","message":"Done","commit_id":"4d79274d164baaa8e7edbc3cb840d61bcb459d8e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d9b1bad18f54821e20bd841c775401aadbe3de78","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"            LOG.warning(\u0027Error detaching VIF from node %(node)s \u0027"},{"line_number":1817,"context_line":"                        \u0027after deploy failed; %(reason)s\u0027,"},{"line_number":1818,"context_line":"                        {\u0027node\u0027: instance.node,"},{"line_number":1819,"context_line":"                         \u0027reason\u0027: e},"},{"line_number":1820,"context_line":"                        instance\u003dinstance)"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"    def get_volume_connector(self, instance):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_3848d2ca","line":1819,"range":{"start_line":1819,"start_character":35,"end_line":1819,"end_character":36},"in_reply_to":"7f96bb07_b7ae362c","updated":"2018-01-12 02:11:58.000000000","message":"Likely yes if it can be unicode.","commit_id":"4d79274d164baaa8e7edbc3cb840d61bcb459d8e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"db807e4f633e93d45e9c5fff0d3075da5d4e247f","unresolved":false,"context_lines":[{"line_number":1873,"context_line":"        if values.get(\u0027ip\u0027):"},{"line_number":1874,"context_line":"            return values[\u0027ip\u0027][0]"},{"line_number":1875,"context_line":""},{"line_number":1876,"context_line":"        vif_id \u003d self._get_vif_from_macs(node, values.get(\u0027mac\u0027, []))"},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"        # retrieve VIF and get the IP address"},{"line_number":1879,"context_line":"        nw_info \u003d instance.get_network_info()"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_6912125b","line":1876,"range":{"start_line":1876,"start_character":59,"end_line":1876,"end_character":62},"updated":"2018-01-11 21:56:26.000000000","message":"Based on my later comment, is this really \"mac\" if it\u0027s a list of macs?","commit_id":"4d79274d164baaa8e7edbc3cb840d61bcb459d8e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"54491e202a084bcebec11141efd02a9a82f0cf2e","unresolved":false,"context_lines":[{"line_number":1873,"context_line":"        if values.get(\u0027ip\u0027):"},{"line_number":1874,"context_line":"            return values[\u0027ip\u0027][0]"},{"line_number":1875,"context_line":""},{"line_number":1876,"context_line":"        vif_id \u003d self._get_vif_from_macs(node, values.get(\u0027mac\u0027, []))"},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"        # retrieve VIF and get the IP address"},{"line_number":1879,"context_line":"        nw_info \u003d instance.get_network_info()"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_b6194e7a","line":1876,"range":{"start_line":1876,"start_character":59,"end_line":1876,"end_character":62},"in_reply_to":"7f96bb07_6912125b","updated":"2018-01-12 05:33:05.000000000","message":"Ironic volume connectors are populated at line 1852. Because keys of the populated values are types of volume connectors, \u0027mac\u0027 is used. A volume connector representing a MAC address consists of type\u003d\u0027mac\u0027 and connector_id\u003d\u003cMAC address\u003e. A node may have multiple volume connectors with macs.","commit_id":"4d79274d164baaa8e7edbc3cb840d61bcb459d8e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"db807e4f633e93d45e9c5fff0d3075da5d4e247f","unresolved":false,"context_lines":[{"line_number":1888,"context_line":"        return None"},{"line_number":1889,"context_line":""},{"line_number":1890,"context_line":"    def _get_vif_from_macs(self, node, macs):"},{"line_number":1891,"context_line":"        \"\"\"Get a VIF assigned to a port or a portgroup with a specified MAC."},{"line_number":1892,"context_line":""},{"line_number":1893,"context_line":"        Retrieve a port or a portgroup which has a specified MAC address. Then,"},{"line_number":1894,"context_line":"        return a UUID of a VIF already attached to the port or the portgroup."},{"line_number":1895,"context_line":""},{"line_number":1896,"context_line":"        :param node: The node object."},{"line_number":1897,"context_line":"        :param mac: Tha MAC address for a volume connector."},{"line_number":1898,"context_line":"        :return: A UUID of a VIF assigned to the MAC address."},{"line_number":1899,"context_line":"        \"\"\""},{"line_number":1900,"context_line":"        for mac in macs:"},{"line_number":1901,"context_line":"            for method in [\u0027portgroup.list\u0027, \u0027port.list\u0027]:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_77042e18","line":1898,"range":{"start_line":1891,"start_character":8,"end_line":1898,"end_character":61},"updated":"2018-01-11 21:56:26.000000000","message":"All of this is describing a single MAC address but the function takes a list of MACs. One or the other need to change to match.","commit_id":"4d79274d164baaa8e7edbc3cb840d61bcb459d8e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"54491e202a084bcebec11141efd02a9a82f0cf2e","unresolved":false,"context_lines":[{"line_number":1888,"context_line":"        return None"},{"line_number":1889,"context_line":""},{"line_number":1890,"context_line":"    def _get_vif_from_macs(self, node, macs):"},{"line_number":1891,"context_line":"        \"\"\"Get a VIF assigned to a port or a portgroup with a specified MAC."},{"line_number":1892,"context_line":""},{"line_number":1893,"context_line":"        Retrieve a port or a portgroup which has a specified MAC address. Then,"},{"line_number":1894,"context_line":"        return a UUID of a VIF already attached to the port or the portgroup."},{"line_number":1895,"context_line":""},{"line_number":1896,"context_line":"        :param node: The node object."},{"line_number":1897,"context_line":"        :param mac: Tha MAC address for a volume connector."},{"line_number":1898,"context_line":"        :return: A UUID of a VIF assigned to the MAC address."},{"line_number":1899,"context_line":"        \"\"\""},{"line_number":1900,"context_line":"        for mac in macs:"},{"line_number":1901,"context_line":"            for method in [\u0027portgroup.list\u0027, \u0027port.list\u0027]:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_762d0694","line":1898,"range":{"start_line":1891,"start_character":8,"end_line":1898,"end_character":61},"in_reply_to":"7f96bb07_77042e18","updated":"2018-01-12 05:33:05.000000000","message":"A list of MACs is passed. I changed the docstring.","commit_id":"4d79274d164baaa8e7edbc3cb840d61bcb459d8e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1e56cbc55d661ea8f815c5ed734a682dfc7bebcc","unresolved":false,"context_lines":[{"line_number":1798,"context_line":"            self.plug_vifs(instance, network_info)"},{"line_number":1799,"context_line":"        except Exception:"},{"line_number":1800,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1801,"context_line":"                LOG.error(\"Error preparing deploy for instance \""},{"line_number":1802,"context_line":"                          \"%(instance)s on baremetal node %(node)s.\","},{"line_number":1803,"context_line":"                          {\u0027instance\u0027: instance.uuid,"},{"line_number":1804,"context_line":"                           \u0027node\u0027: instance.node},"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_f09ee861","line":1801,"updated":"2018-01-12 18:59:24.000000000","message":"Why wouldn\u0027t we fail here? Otherwise we\u0027re going to call spawn() and not call plug_vifs() again.","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c4793f9a464424e7c9cd63a6f5824abc3c586e2d","unresolved":false,"context_lines":[{"line_number":1798,"context_line":"            self.plug_vifs(instance, network_info)"},{"line_number":1799,"context_line":"        except Exception:"},{"line_number":1800,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1801,"context_line":"                LOG.error(\"Error preparing deploy for instance \""},{"line_number":1802,"context_line":"                          \"%(instance)s on baremetal node %(node)s.\","},{"line_number":1803,"context_line":"                          {\u0027instance\u0027: instance.uuid,"},{"line_number":1804,"context_line":"                           \u0027node\u0027: instance.node},"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f93b717_0319e9d5","line":1801,"in_reply_to":"7f96bb07_b1037f73","updated":"2018-01-25 19:07:29.000000000","message":"\u003e What do you mean? The exception will be re-raised after this is\n \u003e logged.\n\nI knew that...","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"8bc8e6ca5d6e111520696c4a5e9ebbbd02fc45fe","unresolved":false,"context_lines":[{"line_number":1798,"context_line":"            self.plug_vifs(instance, network_info)"},{"line_number":1799,"context_line":"        except Exception:"},{"line_number":1800,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1801,"context_line":"                LOG.error(\"Error preparing deploy for instance \""},{"line_number":1802,"context_line":"                          \"%(instance)s on baremetal node %(node)s.\","},{"line_number":1803,"context_line":"                          {\u0027instance\u0027: instance.uuid,"},{"line_number":1804,"context_line":"                           \u0027node\u0027: instance.node},"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_b1037f73","line":1801,"in_reply_to":"7f96bb07_f09ee861","updated":"2018-01-13 00:10:04.000000000","message":"What do you mean? The exception will be re-raised after this is logged.","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1e56cbc55d661ea8f815c5ed734a682dfc7bebcc","unresolved":false,"context_lines":[{"line_number":1852,"context_line":"            values.setdefault(conn.type, []).append(conn.connector_id)"},{"line_number":1853,"context_line":"        props \u003d {}"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"        ip \u003d self._get_volume_connector_ip(instance, node, values)"},{"line_number":1856,"context_line":"        if ip:"},{"line_number":1857,"context_line":"            props[\u0027ip\u0027] \u003d props[\u0027host\u0027] \u003d ip"},{"line_number":1858,"context_line":"        if values.get(\u0027iqn\u0027):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_509ebc54","line":1855,"updated":"2018-01-12 18:59:24.000000000","message":"For debuggability, should probably log the IP you found from this.","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"39a9da1e7c24538350ec8f675a89e21f9a0ada7d","unresolved":false,"context_lines":[{"line_number":1852,"context_line":"            values.setdefault(conn.type, []).append(conn.connector_id)"},{"line_number":1853,"context_line":"        props \u003d {}"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"        ip \u003d self._get_volume_connector_ip(instance, node, values)"},{"line_number":1856,"context_line":"        if ip:"},{"line_number":1857,"context_line":"            props[\u0027ip\u0027] \u003d props[\u0027host\u0027] \u003d ip"},{"line_number":1858,"context_line":"        if values.get(\u0027iqn\u0027):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_bd2a3b29","line":1855,"in_reply_to":"7f96bb07_509ebc54","updated":"2018-01-16 06:44:50.000000000","message":"Good suggestion, thanks.","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1e56cbc55d661ea8f815c5ed734a682dfc7bebcc","unresolved":false,"context_lines":[{"line_number":1880,"context_line":"        fixed_ips \u003d [ip for vif in nw_info"},{"line_number":1881,"context_line":"                     if not vif_id or vif[\u0027id\u0027] \u003d\u003d vif_id"},{"line_number":1882,"context_line":"                     for ip in vif.fixed_ips()]"},{"line_number":1883,"context_line":"        fixed_ips_v4 \u003d [ip for ip in fixed_ips if ip[\u0027version\u0027] \u003d\u003d 4]"},{"line_number":1884,"context_line":"        if fixed_ips_v4:"},{"line_number":1885,"context_line":"            return fixed_ips_v4[0][\u0027address\u0027]"},{"line_number":1886,"context_line":"        elif fixed_ips:"},{"line_number":1887,"context_line":"            return fixed_ips[0][\u0027address\u0027]"},{"line_number":1888,"context_line":"        return None"},{"line_number":1889,"context_line":""},{"line_number":1890,"context_line":"    def _get_vif_from_macs(self, node, macs):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_b08f0022","line":1887,"range":{"start_line":1883,"start_character":8,"end_line":1887,"end_character":42},"updated":"2018-01-12 18:59:24.000000000","message":"Why the distinction here?","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"39a9da1e7c24538350ec8f675a89e21f9a0ada7d","unresolved":false,"context_lines":[{"line_number":1880,"context_line":"        fixed_ips \u003d [ip for vif in nw_info"},{"line_number":1881,"context_line":"                     if not vif_id or vif[\u0027id\u0027] \u003d\u003d vif_id"},{"line_number":1882,"context_line":"                     for ip in vif.fixed_ips()]"},{"line_number":1883,"context_line":"        fixed_ips_v4 \u003d [ip for ip in fixed_ips if ip[\u0027version\u0027] \u003d\u003d 4]"},{"line_number":1884,"context_line":"        if fixed_ips_v4:"},{"line_number":1885,"context_line":"            return fixed_ips_v4[0][\u0027address\u0027]"},{"line_number":1886,"context_line":"        elif fixed_ips:"},{"line_number":1887,"context_line":"            return fixed_ips[0][\u0027address\u0027]"},{"line_number":1888,"context_line":"        return None"},{"line_number":1889,"context_line":""},{"line_number":1890,"context_line":"    def _get_vif_from_macs(self, node, macs):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_021bcacf","line":1887,"range":{"start_line":1883,"start_character":8,"end_line":1887,"end_character":42},"in_reply_to":"7f96bb07_b08f0022","updated":"2018-01-16 06:44:50.000000000","message":"Though I\u0027m not the original submitter of this code, I guess IP V4 is prior to V6 like another parameter[1].\n\n[1] https://github.com/openstack/nova/blob/master/nova/conf/netconf.py#L33","commit_id":"1b30e700a207fdf4f559c257cd1466faedf3defb"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e83c45635933c96223988e2e1f45cf4e502102f8","unresolved":false,"context_lines":[{"line_number":1876,"context_line":"    def _get_volume_connector_ip(self, instance, node, values):"},{"line_number":1877,"context_line":"        if values.get(\u0027ip\u0027):"},{"line_number":1878,"context_line":"            LOG.debug(\u0027Node %s has an IP address for volume connector\u0027,"},{"line_number":1879,"context_line":"                      node.uuid, instance\u003dinstance)"},{"line_number":1880,"context_line":"            return values[\u0027ip\u0027][0]"},{"line_number":1881,"context_line":""},{"line_number":1882,"context_line":"        vif_id \u003d self._get_vif_from_macs(node, values.get(\u0027mac\u0027, []), instance)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_643093e9","line":1879,"updated":"2018-01-16 10:12:55.000000000","message":"Looks like two very same debug message. Not sure we need that one.","commit_id":"c1017e064d0c20d6214cd8d9a877ad997e9fbb04"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"f22995ff8902917c9098fe153d219b35824bb947","unresolved":false,"context_lines":[{"line_number":1876,"context_line":"    def _get_volume_connector_ip(self, instance, node, values):"},{"line_number":1877,"context_line":"        if values.get(\u0027ip\u0027):"},{"line_number":1878,"context_line":"            LOG.debug(\u0027Node %s has an IP address for volume connector\u0027,"},{"line_number":1879,"context_line":"                      node.uuid, instance\u003dinstance)"},{"line_number":1880,"context_line":"            return values[\u0027ip\u0027][0]"},{"line_number":1881,"context_line":""},{"line_number":1882,"context_line":"        vif_id \u003d self._get_vif_from_macs(node, values.get(\u0027mac\u0027, []), instance)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_4adfdd39","line":1879,"in_reply_to":"7f96bb07_643093e9","updated":"2018-01-23 09:09:09.000000000","message":"I prefer showing that the IP address is got directly from ironic here comparing to the message at line 1917.","commit_id":"c1017e064d0c20d6214cd8d9a877ad997e9fbb04"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e83c45635933c96223988e2e1f45cf4e502102f8","unresolved":false,"context_lines":[{"line_number":1884,"context_line":"        # retrieve VIF and get the IP address"},{"line_number":1885,"context_line":"        nw_info \u003d instance.get_network_info()"},{"line_number":1886,"context_line":"        fixed_ips \u003d [ip for vif in nw_info"},{"line_number":1887,"context_line":"                     if not vif_id or vif[\u0027id\u0027] \u003d\u003d vif_id"},{"line_number":1888,"context_line":"                     for ip in vif.fixed_ips()]"},{"line_number":1889,"context_line":"        fixed_ips_v4 \u003d [ip for ip in fixed_ips if ip[\u0027version\u0027] \u003d\u003d 4]"},{"line_number":1890,"context_line":"        if fixed_ips_v4:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_a4cf7b54","line":1887,"range":{"start_line":1887,"start_character":24,"end_line":1887,"end_character":34},"updated":"2018-01-16 10:12:55.000000000","message":"Could we move that condition out of the loop to make it clearer?","commit_id":"c1017e064d0c20d6214cd8d9a877ad997e9fbb04"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"f22995ff8902917c9098fe153d219b35824bb947","unresolved":false,"context_lines":[{"line_number":1884,"context_line":"        # retrieve VIF and get the IP address"},{"line_number":1885,"context_line":"        nw_info \u003d instance.get_network_info()"},{"line_number":1886,"context_line":"        fixed_ips \u003d [ip for vif in nw_info"},{"line_number":1887,"context_line":"                     if not vif_id or vif[\u0027id\u0027] \u003d\u003d vif_id"},{"line_number":1888,"context_line":"                     for ip in vif.fixed_ips()]"},{"line_number":1889,"context_line":"        fixed_ips_v4 \u003d [ip for ip in fixed_ips if ip[\u0027version\u0027] \u003d\u003d 4]"},{"line_number":1890,"context_line":"        if fixed_ips_v4:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_991a2115","line":1887,"range":{"start_line":1887,"start_character":24,"end_line":1887,"end_character":34},"in_reply_to":"7f96bb07_a4cf7b54","updated":"2018-01-23 09:09:09.000000000","message":"Done","commit_id":"c1017e064d0c20d6214cd8d9a877ad997e9fbb04"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a88a98672e2cb1bdc9f342674728a21fc8a93e3d","unresolved":false,"context_lines":[{"line_number":1888,"context_line":"                         for ip in vif.fixed_ips()]"},{"line_number":1889,"context_line":"        else:"},{"line_number":1890,"context_line":"            fixed_ips \u003d [ip for vif in nw_info for ip in vif.fixed_ips()]"},{"line_number":1891,"context_line":"        fixed_ips_v4 \u003d [ip for ip in fixed_ips if ip[\u0027version\u0027] \u003d\u003d 4]"},{"line_number":1892,"context_line":"        if fixed_ips_v4:"},{"line_number":1893,"context_line":"            return fixed_ips_v4[0][\u0027address\u0027]"},{"line_number":1894,"context_line":"        elif fixed_ips:"},{"line_number":1895,"context_line":"            return fixed_ips[0][\u0027address\u0027]"},{"line_number":1896,"context_line":"        return None"},{"line_number":1897,"context_line":""},{"line_number":1898,"context_line":"    def _get_vif_from_macs(self, node, macs, instance):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f93b717_e04b9384","line":1895,"range":{"start_line":1891,"start_character":8,"end_line":1895,"end_character":42},"updated":"2018-01-25 18:28:52.000000000","message":"Okay, so if any v4 IP address is present, one of them will be returned, else a v6 address will be returned. And the reasoning is assumed to be because v4 is usually the default [1].\n\n[1] https://github.com/openstack/nova/blob/master/nova/conf/netconf.py#L33","commit_id":"6d55acd2c15d18eead3be5cfa55b36491707800d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a88a98672e2cb1bdc9f342674728a21fc8a93e3d","unresolved":false,"context_lines":[{"line_number":1902,"context_line":"        return a UUID of a VIF attached to a port or a portgroup found first."},{"line_number":1903,"context_line":""},{"line_number":1904,"context_line":"        :param node: The node object."},{"line_number":1905,"context_line":"        :param mac: A list of MAC addresses of volume connectors."},{"line_number":1906,"context_line":"        :param instance: nova instance, used for logging."},{"line_number":1907,"context_line":"        :return: A UUID of a VIF assigned to one of the MAC addresses."},{"line_number":1908,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_f7855bd0","line":1905,"range":{"start_line":1905,"start_character":15,"end_line":1905,"end_character":18},"updated":"2018-01-25 18:28:52.000000000","message":"macs","commit_id":"6d55acd2c15d18eead3be5cfa55b36491707800d"}],"releasenotes/notes/bp-ironic-volume-connector-ip-467396a516dc668a.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c4793f9a464424e7c9cd63a6f5824abc3c586e2d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Passes an IP address of an iSCSI initiator to cinder when launching an"},{"line_number":5,"context_line":"    instance from an iSCSI volume with ironic driver. A cinder backend may"},{"line_number":6,"context_line":"    require the IP address for access control. If an IP address is set to an"},{"line_number":7,"context_line":"    ironic node as a volume connector resource, the address is used. If a node"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"5f93b717_43fa9142","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":24},"updated":"2018-01-25 19:07:29.000000000","message":"What does? The release notes all get put together:\n\nhttps://docs.openstack.org/releasenotes/nova/unreleased.html\n\nSo when someone is reading this, they won\u0027t have the context on the specific change it came from. Therefore we should be clear about what feature is being added, rather than making it sound like a commit message.\n\nMaybe reword the first two sentences like:\n\n\"When creating a baremetal instance with volumes, the ironic driver will now pass an IP address of an iSCSI initiator to the block storage service because the volume backend may require the IP address for access control.\"","commit_id":"6d55acd2c15d18eead3be5cfa55b36491707800d"}]}
