)]}'
{"ironic_python_agent/hardware.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"69f46b574b8d1a03a42eb154d503bfef8872ccb7","unresolved":true,"context_lines":[{"line_number":1635,"context_line":"        :param block_device: a BlockDevice object"},{"line_number":1636,"context_line":"        :returns: True if the device is an NVMe, False if it is not."},{"line_number":1637,"context_line":"        \"\"\""},{"line_number":1638,"context_line":"        if \u0027nvme\u0027 in block_device.name:"},{"line_number":1639,"context_line":"            return True"},{"line_number":1640,"context_line":"        else:"},{"line_number":1641,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"54076061_014e7d13","line":1638,"updated":"2021-01-22 07:55:14.000000000","message":"nit: nvme device names usually start with \u0027nvme\u0027","commit_id":"9f97276b80762eb9308e897b92452a3ce13d2ffc"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"69f46b574b8d1a03a42eb154d503bfef8872ccb7","unresolved":true,"context_lines":[{"line_number":1637,"context_line":"        \"\"\""},{"line_number":1638,"context_line":"        if \u0027nvme\u0027 in block_device.name:"},{"line_number":1639,"context_line":"            return True"},{"line_number":1640,"context_line":"        else:"},{"line_number":1641,"context_line":"            return False"},{"line_number":1642,"context_line":""},{"line_number":1643,"context_line":"    def _nvme_erase(self, block_device):"}],"source_content_type":"text/x-python","patch_set":3,"id":"e539be57_026abfce","line":1640,"updated":"2021-01-22 07:55:14.000000000","message":"nit: no need for else here","commit_id":"9f97276b80762eb9308e897b92452a3ce13d2ffc"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"a72a8b124e2c89011a2233d4e86e31522184c210","unresolved":true,"context_lines":[{"line_number":1647,"context_line":"        :return: True if cleaning operation succeeded, False if failed"},{"line_number":1648,"context_line":"        :raises: BlockDeviceEraseError"},{"line_number":1649,"context_line":"        \"\"\""},{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"        # check if crypto format is supported"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        try:"},{"line_number":1654,"context_line":"            LOG.info(\"Attempting to fetch NVMe capabilities for device\","},{"line_number":1655,"context_line":"                     block_device.name)"},{"line_number":1656,"context_line":"            nvme_info \u003d utils.execute(\u0027nvme\u0027, \u0027id-ctrl\u0027,"},{"line_number":1657,"context_line":"                                      block_device.name, \u0027-H\u0027)[0]"},{"line_number":1658,"context_line":""},{"line_number":1659,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1660,"context_line":"            msg \u003d ((\"Failed to fetch NVMe capabilities for device {}: {}\""},{"line_number":1661,"context_line":"                    ).format(block_device, e))"},{"line_number":1662,"context_line":"            raise errors.BlockDeviceEraseError(msg)"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        # execute format with crypto option (ses\u003d2) if supported"},{"line_number":1665,"context_line":"        # if crypto is unsupported use user-data erase (ses\u003d1)"},{"line_number":1666,"context_line":""},{"line_number":1667,"context_line":"        if nvme_info is not None:"},{"line_number":1668,"context_line":"            fma_match \u003d re.search(r\u0027fna.*\\n([\\s\\S]*?)\\n\\n\u0027, nvme_info)"},{"line_number":1669,"context_line":"            fma \u003d fma_match.groups()[0]"},{"line_number":1670,"context_line":"            if \"Crypto Erase Supported as part of Secure Erase\" in fma:"},{"line_number":1671,"context_line":"                format_mode \u003d 2     # crypto erase"},{"line_number":1672,"context_line":""},{"line_number":1673,"context_line":"        else:"},{"line_number":1674,"context_line":"            # if nvme-cli output doesn\u0027t explicitly state support for crypto"},{"line_number":1675,"context_line":"            # erase, attempt user-data erase. In case nvme-cli didn\u0027t"},{"line_number":1676,"context_line":"            # output anything at all we try user-data as well because"},{"line_number":1677,"context_line":"            # ultimately nvme-cli format command exit code and stdout that"},{"line_number":1678,"context_line":"            # indicate success or failure"},{"line_number":1679,"context_line":"            LOG.warning(\"nvme-cli didn\u0027t return any format capability\""},{"line_number":1680,"context_line":"                        \" information for \", block_device.name,"},{"line_number":1681,"context_line":"                        \" attempting user-data format (ses\u003d1)\")"},{"line_number":1682,"context_line":"            format_mode \u003d 1  # user data erase"},{"line_number":1683,"context_line":""},{"line_number":1684,"context_line":"        try:"},{"line_number":1685,"context_line":"            LOG.info(\"Attempting to nvme-format \", block_device.name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"73d6000e_8fad1a3b","line":1682,"range":{"start_line":1650,"start_character":0,"end_line":1682,"end_character":46},"updated":"2021-01-22 02:40:35.000000000","message":"If attempting crypto erase mode (and falling back to user data erase mode) is not desired, the change can be simplified further dropping this part - I\u0027d welcome feedback on this.","commit_id":"9f97276b80762eb9308e897b92452a3ce13d2ffc"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6aa492dfebdaa5a9179a560dd7281c885030f383","unresolved":true,"context_lines":[{"line_number":1636,"context_line":"        :returns: True if the device is an NVMe, False if it is not."},{"line_number":1637,"context_line":"        \"\"\""},{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        if \u0027nvme\u0027 in block_device.name:"},{"line_number":1640,"context_line":"            return True"},{"line_number":1641,"context_line":"        else:"},{"line_number":1642,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":19,"id":"565a11a9_c06f05e7","line":1639,"updated":"2021-02-02 09:37:11.000000000","message":"The NVMe naming standard expects nvme device names to start with \u0027nvme\u0027, we can use that to be more precise","commit_id":"66974f94963f9af351702123e5d67965582bfd05"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8783d596a5fba6342842a7c1997134c87fe1988c","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"        :returns: True if the device is an NVMe, False if it is not."},{"line_number":1637,"context_line":"        \"\"\""},{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        if \u0027nvme\u0027 in block_device.name:"},{"line_number":1640,"context_line":"            return True"},{"line_number":1641,"context_line":"        else:"},{"line_number":1642,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":19,"id":"b30d9963_a9226647","line":1639,"in_reply_to":"565a11a9_c06f05e7","updated":"2021-02-03 03:21:06.000000000","message":"Done","commit_id":"66974f94963f9af351702123e5d67965582bfd05"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6aa492dfebdaa5a9179a560dd7281c885030f383","unresolved":true,"context_lines":[{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        if \u0027nvme\u0027 in block_device.name:"},{"line_number":1640,"context_line":"            return True"},{"line_number":1641,"context_line":"        else:"},{"line_number":1642,"context_line":"            return False"},{"line_number":1643,"context_line":""},{"line_number":1644,"context_line":"    def _nvme_erase(self, block_device):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9717a49c_212fb28b","line":1641,"updated":"2021-02-02 09:37:11.000000000","message":"no need for else","commit_id":"66974f94963f9af351702123e5d67965582bfd05"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8783d596a5fba6342842a7c1997134c87fe1988c","unresolved":false,"context_lines":[{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        if \u0027nvme\u0027 in block_device.name:"},{"line_number":1640,"context_line":"            return True"},{"line_number":1641,"context_line":"        else:"},{"line_number":1642,"context_line":"            return False"},{"line_number":1643,"context_line":""},{"line_number":1644,"context_line":"    def _nvme_erase(self, block_device):"}],"source_content_type":"text/x-python","patch_set":19,"id":"b5db3a42_e77bdc34","line":1641,"in_reply_to":"9717a49c_212fb28b","updated":"2021-02-03 03:21:06.000000000","message":"Done","commit_id":"66974f94963f9af351702123e5d67965582bfd05"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6aa492dfebdaa5a9179a560dd7281c885030f383","unresolved":true,"context_lines":[{"line_number":1651,"context_line":""},{"line_number":1652,"context_line":"        # check if crypto format is supported"},{"line_number":1653,"context_line":"        try:"},{"line_number":1654,"context_line":"            LOG.info(\"Attempting to fetch NVMe capabilities for device\","},{"line_number":1655,"context_line":"                     block_device.name)"},{"line_number":1656,"context_line":"            nvme_info \u003d utils.execute(\u0027nvme\u0027, \u0027id-ctrl\u0027,"},{"line_number":1657,"context_line":"                                      block_device.name, \u0027-H\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":19,"id":"1b2c8bb6_5b674007","line":1654,"range":{"start_line":1654,"start_character":70,"end_line":1654,"end_character":71},"updated":"2021-02-02 09:37:11.000000000","message":"missing %s","commit_id":"66974f94963f9af351702123e5d67965582bfd05"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8783d596a5fba6342842a7c1997134c87fe1988c","unresolved":true,"context_lines":[{"line_number":1651,"context_line":""},{"line_number":1652,"context_line":"        # check if crypto format is supported"},{"line_number":1653,"context_line":"        try:"},{"line_number":1654,"context_line":"            LOG.info(\"Attempting to fetch NVMe capabilities for device\","},{"line_number":1655,"context_line":"                     block_device.name)"},{"line_number":1656,"context_line":"            nvme_info \u003d utils.execute(\u0027nvme\u0027, \u0027id-ctrl\u0027,"},{"line_number":1657,"context_line":"                                      block_device.name, \u0027-H\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":19,"id":"d5284d3c_8c2e34d8","line":1654,"range":{"start_line":1654,"start_character":70,"end_line":1654,"end_character":71},"in_reply_to":"1b2c8bb6_5b674007","updated":"2021-02-03 03:21:06.000000000","message":"That\u0027s embarrassing! :) Done.","commit_id":"66974f94963f9af351702123e5d67965582bfd05"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6aa492dfebdaa5a9179a560dd7281c885030f383","unresolved":true,"context_lines":[{"line_number":1678,"context_line":"                # Given the device supports format, check if crypto"},{"line_number":1679,"context_line":"                # erase format mode is supported and pass it to nvme-cli"},{"line_number":1680,"context_line":"                # instead"},{"line_number":1681,"context_line":"                fma_match \u003d re.search(r\u0027fna.*\\n([\\s\\S]*?)\\n\\n\u0027, nvme_info)"},{"line_number":1682,"context_line":"                fma \u003d fma_match.groups()[0]"},{"line_number":1683,"context_line":"                if \"Crypto Erase Supported as part of Secure Erase\" in fma:"},{"line_number":1684,"context_line":"                    format_mode \u003d 2     # crypto erase"}],"source_content_type":"text/x-python","patch_set":19,"id":"305ec7cb_cfc60685","line":1681,"range":{"start_line":1681,"start_character":16,"end_line":1681,"end_character":25},"updated":"2021-02-02 09:37:11.000000000","message":"fna_match for consistency, and fna below","commit_id":"66974f94963f9af351702123e5d67965582bfd05"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8783d596a5fba6342842a7c1997134c87fe1988c","unresolved":true,"context_lines":[{"line_number":1678,"context_line":"                # Given the device supports format, check if crypto"},{"line_number":1679,"context_line":"                # erase format mode is supported and pass it to nvme-cli"},{"line_number":1680,"context_line":"                # instead"},{"line_number":1681,"context_line":"                fma_match \u003d re.search(r\u0027fna.*\\n([\\s\\S]*?)\\n\\n\u0027, nvme_info)"},{"line_number":1682,"context_line":"                fma \u003d fma_match.groups()[0]"},{"line_number":1683,"context_line":"                if \"Crypto Erase Supported as part of Secure Erase\" in fma:"},{"line_number":1684,"context_line":"                    format_mode \u003d 2     # crypto erase"}],"source_content_type":"text/x-python","patch_set":19,"id":"59e7fd3a_8b41cb9a","line":1681,"range":{"start_line":1681,"start_character":16,"end_line":1681,"end_character":25},"in_reply_to":"305ec7cb_cfc60685","updated":"2021-02-03 03:21:06.000000000","message":"Doh! Well spotted Riccardo. Done.","commit_id":"66974f94963f9af351702123e5d67965582bfd05"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"72bb59742ba01cbf4081b6fcb190de6466cd649f","unresolved":true,"context_lines":[{"line_number":1636,"context_line":"        :returns: True if the device is an NVMe, False if it is not."},{"line_number":1637,"context_line":"        \"\"\""},{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        if \u0027/dev/nvme\u0027 in block_device.name:"},{"line_number":1640,"context_line":"            return True"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"    def _nvme_erase(self, block_device):"}],"source_content_type":"text/x-python","patch_set":22,"id":"6fdb1815_de3a5f4b","line":1639,"updated":"2021-02-03 10:09:51.000000000","message":"maybe we can use startswith instead as this should be the first part of the device name in case of an nvme device","commit_id":"246509d968b6896f3d8de1e1ab4ead734f47b889"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"4ace2a081a54639b19448574be62a2831cc24776","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"        :returns: True if the device is an NVMe, False if it is not."},{"line_number":1637,"context_line":"        \"\"\""},{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        if \u0027/dev/nvme\u0027 in block_device.name:"},{"line_number":1640,"context_line":"            return True"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"    def _nvme_erase(self, block_device):"}],"source_content_type":"text/x-python","patch_set":22,"id":"f239f488_af538c3c","line":1639,"in_reply_to":"6fdb1815_de3a5f4b","updated":"2021-02-03 11:15:45.000000000","message":"Great idea, thank you for the hint. Done.","commit_id":"246509d968b6896f3d8de1e1ab4ead734f47b889"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"30c99bba5e9c3305c2d3064c8c4e961b4cf0705f","unresolved":true,"context_lines":[{"line_number":1289,"context_line":"            if self._is_nvme(block_device):"},{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"                # given this is a new feature let\u0027s disable it by default both"},{"line_number":1292,"context_line":"                # in the config file and here"},{"line_number":1293,"context_line":"                execute_nvme_erase \u003d info.get("},{"line_number":1294,"context_line":"                    \u0027agent_enable_nvme_secure_erase\u0027, False)"},{"line_number":1295,"context_line":"                if execute_nvme_erase and self._nvme_erase(block_device):"}],"source_content_type":"text/x-python","patch_set":24,"id":"9e3ba910_12cd258b","line":1292,"updated":"2021-02-05 15:20:29.000000000","message":"I kind of disagree with a disable by default as a new feature, that is unless you want to backport this. We could just as easily treat this as a bug fix because the fallback from handling ATA erase to shred is detrimental to NVMe devices.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"51a6bdddb341f1e628ee8e304ae91fbb27dd81d4","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"            if self._is_nvme(block_device):"},{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"                # given this is a new feature let\u0027s disable it by default both"},{"line_number":1292,"context_line":"                # in the config file and here"},{"line_number":1293,"context_line":"                execute_nvme_erase \u003d info.get("},{"line_number":1294,"context_line":"                    \u0027agent_enable_nvme_secure_erase\u0027, False)"},{"line_number":1295,"context_line":"                if execute_nvme_erase and self._nvme_erase(block_device):"}],"source_content_type":"text/x-python","patch_set":24,"id":"59df7e70_371b3e98","line":1292,"in_reply_to":"9e3ba910_12cd258b","updated":"2021-02-08 01:39:41.000000000","message":"I changed the default configuration in-line with your recommendations both in IPA and Ironic (conf/deploy.py) to make NVMe cleaning enabled by default.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"30c99bba5e9c3305c2d3064c8c4e961b4cf0705f","unresolved":true,"context_lines":[{"line_number":1633,"context_line":"        Checks if the device name indicates that it is an NVMe drive."},{"line_number":1634,"context_line":""},{"line_number":1635,"context_line":"        :param block_device: a BlockDevice object"},{"line_number":1636,"context_line":"        :returns: True if the device is an NVMe, False if it is not."},{"line_number":1637,"context_line":"        \"\"\""},{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        is_nvme \u003d block_device.name.startswith(\"/dev/nvme\")"}],"source_content_type":"text/x-python","patch_set":24,"id":"e15f1094_58754718","line":1636,"range":{"start_line":1636,"start_character":49,"end_line":1636,"end_character":67},"updated":"2021-02-05 15:20:29.000000000","message":"So not returning anything means it returns None, not False, but will compare to false. At least as presently coded. If the conditional is removed, then I suspect this would be correct","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"51a6bdddb341f1e628ee8e304ae91fbb27dd81d4","unresolved":false,"context_lines":[{"line_number":1633,"context_line":"        Checks if the device name indicates that it is an NVMe drive."},{"line_number":1634,"context_line":""},{"line_number":1635,"context_line":"        :param block_device: a BlockDevice object"},{"line_number":1636,"context_line":"        :returns: True if the device is an NVMe, False if it is not."},{"line_number":1637,"context_line":"        \"\"\""},{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        is_nvme \u003d block_device.name.startswith(\"/dev/nvme\")"}],"source_content_type":"text/x-python","patch_set":24,"id":"e5072af0_10584a94","line":1636,"range":{"start_line":1636,"start_character":49,"end_line":1636,"end_character":67},"in_reply_to":"e15f1094_58754718","updated":"2021-02-08 01:39:41.000000000","message":"Thank you for pointing this out, I forgot to remove this while removing the \"else: return False\" clause in the conditional below. Further comments below.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"ed33f7842348db93e86ca84adb64a27f20abf211","unresolved":true,"context_lines":[{"line_number":1639,"context_line":"        is_nvme \u003d block_device.name.startswith(\"/dev/nvme\")"},{"line_number":1640,"context_line":""},{"line_number":1641,"context_line":"        if is_nvme:"},{"line_number":1642,"context_line":"            return True"},{"line_number":1643,"context_line":""},{"line_number":1644,"context_line":"    def _nvme_erase(self, block_device):"},{"line_number":1645,"context_line":"        \"\"\"Attempt to clean the NVMe using the most secure supported method"}],"source_content_type":"text/x-python","patch_set":24,"id":"bc2be10e_edc31e38","line":1642,"updated":"2021-02-04 17:56:14.000000000","message":"or just:\nreturn is_nvme\n\nyou could also return directly the expression, I\u0027m for leaving the variable, but it\u0027s up to you and what others think","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"51a6bdddb341f1e628ee8e304ae91fbb27dd81d4","unresolved":false,"context_lines":[{"line_number":1639,"context_line":"        is_nvme \u003d block_device.name.startswith(\"/dev/nvme\")"},{"line_number":1640,"context_line":""},{"line_number":1641,"context_line":"        if is_nvme:"},{"line_number":1642,"context_line":"            return True"},{"line_number":1643,"context_line":""},{"line_number":1644,"context_line":"    def _nvme_erase(self, block_device):"},{"line_number":1645,"context_line":"        \"\"\"Attempt to clean the NVMe using the most secure supported method"}],"source_content_type":"text/x-python","patch_set":24,"id":"2e3b6036_f8d3179d","line":1642,"in_reply_to":"2517981b_6f7f7a7f","updated":"2021-02-08 01:39:41.000000000","message":"Thank you Riccardo and Julia. I removed the conditional and moved to returning the expression directly. This will result in True on match, otherwise False.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"30c99bba5e9c3305c2d3064c8c4e961b4cf0705f","unresolved":true,"context_lines":[{"line_number":1639,"context_line":"        is_nvme \u003d block_device.name.startswith(\"/dev/nvme\")"},{"line_number":1640,"context_line":""},{"line_number":1641,"context_line":"        if is_nvme:"},{"line_number":1642,"context_line":"            return True"},{"line_number":1643,"context_line":""},{"line_number":1644,"context_line":"    def _nvme_erase(self, block_device):"},{"line_number":1645,"context_line":"        \"\"\"Attempt to clean the NVMe using the most secure supported method"}],"source_content_type":"text/x-python","patch_set":24,"id":"2517981b_6f7f7a7f","line":1642,"in_reply_to":"bc2be10e_edc31e38","updated":"2021-02-05 15:20:29.000000000","message":"Yeah, pretty much any variation here works. If this were inside the conductor, I would say just return the expression directly that way we skip the conditional.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"30c99bba5e9c3305c2d3064c8c4e961b4cf0705f","unresolved":true,"context_lines":[{"line_number":1664,"context_line":""},{"line_number":1665,"context_line":"        # execute format with crypto option (ses\u003d2) if supported"},{"line_number":1666,"context_line":"        # if crypto is unsupported use user-data erase (ses\u003d1)"},{"line_number":1667,"context_line":"        if nvme_info is not None:"},{"line_number":1668,"context_line":""},{"line_number":1669,"context_line":"            # Check if the device supports NVMe format at all. This info"},{"line_number":1670,"context_line":"            # is in \"oacs\" section of nvme-cli id-ctrl output. If it does,"}],"source_content_type":"text/x-python","patch_set":24,"id":"670a09d0_78645f97","line":1667,"updated":"2021-02-05 15:20:29.000000000","message":"It might just be better to go \"if nvme_info:\" instead of asking python to check if is not a literal of none. Also, I\u0027m not sure in reality it would ever return as a literal of None. It should be stdout, and at a minimum that should have a \"\\n\" or be an empty string, which is also, not none and afaik should match an \"if nvme_info\". I think.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"51a6bdddb341f1e628ee8e304ae91fbb27dd81d4","unresolved":false,"context_lines":[{"line_number":1664,"context_line":""},{"line_number":1665,"context_line":"        # execute format with crypto option (ses\u003d2) if supported"},{"line_number":1666,"context_line":"        # if crypto is unsupported use user-data erase (ses\u003d1)"},{"line_number":1667,"context_line":"        if nvme_info is not None:"},{"line_number":1668,"context_line":""},{"line_number":1669,"context_line":"            # Check if the device supports NVMe format at all. This info"},{"line_number":1670,"context_line":"            # is in \"oacs\" section of nvme-cli id-ctrl output. If it does,"}],"source_content_type":"text/x-python","patch_set":24,"id":"329e9852_3fcf045f","line":1667,"in_reply_to":"670a09d0_78645f97","updated":"2021-02-08 01:39:41.000000000","message":"Good point Julia - thank you. I applied your recommendation.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"30c99bba5e9c3305c2d3064c8c4e961b4cf0705f","unresolved":true,"context_lines":[{"line_number":1687,"context_line":"                       \u0027for device: {device}\u0027"},{"line_number":1688,"context_line":"                       ).format(device\u003dblock_device.name)"},{"line_number":1689,"context_line":"                LOG.error(msg)"},{"line_number":1690,"context_line":"                raise errors.BlockDeviceEraseError(msg)"},{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"        else:"},{"line_number":1693,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"a96c03c9_c76f5deb","line":1690,"updated":"2021-02-05 15:20:29.000000000","message":"So should we completely fail cleaning if the device does not support format/secure erase?\n\nI think my experience with operators would lean towards them wanting it to be an option *or* fall-through to disk wiping to maintain security.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"51a6bdddb341f1e628ee8e304ae91fbb27dd81d4","unresolved":false,"context_lines":[{"line_number":1687,"context_line":"                       \u0027for device: {device}\u0027"},{"line_number":1688,"context_line":"                       ).format(device\u003dblock_device.name)"},{"line_number":1689,"context_line":"                LOG.error(msg)"},{"line_number":1690,"context_line":"                raise errors.BlockDeviceEraseError(msg)"},{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"        else:"},{"line_number":1693,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"fcb30ed3_24cf45c9","line":1690,"in_reply_to":"a96c03c9_c76f5deb","updated":"2021-02-08 01:39:41.000000000","message":"My thinking is that if the device does not seem to support format/secure erase, _nvme_erase should fail and raise an \"errors.BlockDeviceEraseError\" exception so that it can be handled in erase_block_device (https://review.opendev.org/c/openstack/ironic-python-agent/+/771904/24/ironic_python_agent/hardware.py#1302). Then, if shred fallback is enabled, the cleaning should continue in this way. If shred fallback is disabled, cleaning would indeed fail. \nMy understanding is that\u0027s how the existing SATA Secure Erase codepath works - is this correct? (My intention was try make NVMe erase work consistently with SATA secure erase).  If not let\u0027s discuss further - will try to catch you on IRC.\nI fully agree regarding giving the operators a mechanism to control shred fallback. I reused the same configuration option ([deploy]/continue_if_disk_secure_erase_fails) to control fallback to shred behaviour to allow the operators to control this.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"30c99bba5e9c3305c2d3064c8c4e961b4cf0705f","unresolved":true,"context_lines":[{"line_number":1695,"context_line":"            msg \u003d (\u0027nvme-cli did not return any information \u0027"},{"line_number":1696,"context_line":"                   \u0027for device: {device}\u0027).format(device\u003dblock_device.name)"},{"line_number":1697,"context_line":"            LOG.error(msg)"},{"line_number":1698,"context_line":"            raise errors.BlockDeviceEraseError(msg)"},{"line_number":1699,"context_line":""},{"line_number":1700,"context_line":"        try:"},{"line_number":1701,"context_line":"            LOG.info(\"Attempting to nvme-format \", block_device.name,"}],"source_content_type":"text/x-python","patch_set":24,"id":"4c9f06b8_209eb078","line":1698,"updated":"2021-02-05 15:20:29.000000000","message":"Same question as above applies. Also, I think your only going to hit this in unit testing based on previous comments.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"51a6bdddb341f1e628ee8e304ae91fbb27dd81d4","unresolved":false,"context_lines":[{"line_number":1695,"context_line":"            msg \u003d (\u0027nvme-cli did not return any information \u0027"},{"line_number":1696,"context_line":"                   \u0027for device: {device}\u0027).format(device\u003dblock_device.name)"},{"line_number":1697,"context_line":"            LOG.error(msg)"},{"line_number":1698,"context_line":"            raise errors.BlockDeviceEraseError(msg)"},{"line_number":1699,"context_line":""},{"line_number":1700,"context_line":"        try:"},{"line_number":1701,"context_line":"            LOG.info(\"Attempting to nvme-format \", block_device.name,"}],"source_content_type":"text/x-python","patch_set":24,"id":"846fe51b_8f85ef1e","line":1698,"in_reply_to":"4c9f06b8_209eb078","updated":"2021-02-08 01:39:41.000000000","message":"Good point. I removed this else clause entirely - the one above should catch all the relevant cases.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"30c99bba5e9c3305c2d3064c8c4e961b4cf0705f","unresolved":true,"context_lines":[{"line_number":1715,"context_line":"                LOG.error(msg)"},{"line_number":1716,"context_line":"                raise errors.BlockDeviceEraseError(msg)"},{"line_number":1717,"context_line":""},{"line_number":1718,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1719,"context_line":"            msg \u003d ((\"Failed to nvme format device {}: {}\""},{"line_number":1720,"context_line":"                    ).format(block_device, e))"},{"line_number":1721,"context_line":"            raise errors.BlockDeviceEraseError(msg)"},{"line_number":1722,"context_line":""},{"line_number":1723,"context_line":"    def get_bmc_address(self):"},{"line_number":1724,"context_line":"        \"\"\"Attempt to detect BMC IP address"}],"source_content_type":"text/x-python","patch_set":24,"id":"5dc0d7b2_8222866a","line":1721,"range":{"start_line":1718,"start_character":0,"end_line":1721,"end_character":51},"updated":"2021-02-05 15:20:29.000000000","message":"Here it does make sense to raise an exception here. The operation failed even though we thought we could do it. Someone might want to look at this hardware sort of failure.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"51a6bdddb341f1e628ee8e304ae91fbb27dd81d4","unresolved":false,"context_lines":[{"line_number":1715,"context_line":"                LOG.error(msg)"},{"line_number":1716,"context_line":"                raise errors.BlockDeviceEraseError(msg)"},{"line_number":1717,"context_line":""},{"line_number":1718,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1719,"context_line":"            msg \u003d ((\"Failed to nvme format device {}: {}\""},{"line_number":1720,"context_line":"                    ).format(block_device, e))"},{"line_number":1721,"context_line":"            raise errors.BlockDeviceEraseError(msg)"},{"line_number":1722,"context_line":""},{"line_number":1723,"context_line":"    def get_bmc_address(self):"},{"line_number":1724,"context_line":"        \"\"\"Attempt to detect BMC IP address"}],"source_content_type":"text/x-python","patch_set":24,"id":"ce4c187f_e53e0ba8","line":1721,"range":{"start_line":1718,"start_character":0,"end_line":1721,"end_character":51},"in_reply_to":"5dc0d7b2_8222866a","updated":"2021-02-08 01:39:41.000000000","message":"I addressed this together with the response to the comment regarding line 1690 (raising exception if no NVMe erase capabilities are found) - we can discuss further there if needed.","commit_id":"17f3c3c6f14d057ab64960670182aee38b22d94d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"443c3c1d7d3b1734c80976b3fcdbdffbe55fad16","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"            if self._is_nvme(block_device):"},{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"                execute_nvme_erase \u003d info.get("},{"line_number":1292,"context_line":"                    \u0027agent_enable_nvme_secure_erase\u0027, True)"},{"line_number":1293,"context_line":"                if execute_nvme_erase and self._nvme_erase(block_device):"},{"line_number":1294,"context_line":"                    return"},{"line_number":1295,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"27e81342_3371c9a5","line":1292,"updated":"2021-02-11 16:39:35.000000000","message":"I wonder if we need one option for this one as well (s/nvme_//)","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d472387ce98fc3a9e56a770c274355eb133f43f3","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"            if self._is_nvme(block_device):"},{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"                execute_nvme_erase \u003d info.get("},{"line_number":1292,"context_line":"                    \u0027agent_enable_nvme_secure_erase\u0027, True)"},{"line_number":1293,"context_line":"                if execute_nvme_erase and self._nvme_erase(block_device):"},{"line_number":1294,"context_line":"                    return"},{"line_number":1295,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"1229de1f_1eb76a0d","line":1292,"in_reply_to":"27e81342_3371c9a5","updated":"2021-02-17 04:28:28.000000000","message":"As discussed on IRC let\u0027s keep separate config options for NVMe and SATA cleaning.","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"443c3c1d7d3b1734c80976b3fcdbdffbe55fad16","unresolved":false,"context_lines":[{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        # check if crypto format is supported"},{"line_number":1665,"context_line":"        try:"},{"line_number":1666,"context_line":"            LOG.info(\"Attempting to fetch NVMe capabilities for device %s\","},{"line_number":1667,"context_line":"                     block_device.name)"},{"line_number":1668,"context_line":"            nvme_info \u003d utils.execute(\u0027nvme\u0027, \u0027id-ctrl\u0027,"},{"line_number":1669,"context_line":"                                      block_device.name, \u0027-H\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":27,"id":"e254af0a_ec671ea4","line":1666,"updated":"2021-02-11 16:39:35.000000000","message":"s/info/debug/","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d472387ce98fc3a9e56a770c274355eb133f43f3","unresolved":false,"context_lines":[{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        # check if crypto format is supported"},{"line_number":1665,"context_line":"        try:"},{"line_number":1666,"context_line":"            LOG.info(\"Attempting to fetch NVMe capabilities for device %s\","},{"line_number":1667,"context_line":"                     block_device.name)"},{"line_number":1668,"context_line":"            nvme_info \u003d utils.execute(\u0027nvme\u0027, \u0027id-ctrl\u0027,"},{"line_number":1669,"context_line":"                                      block_device.name, \u0027-H\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":27,"id":"b6566001_786274f6","line":1666,"in_reply_to":"e254af0a_ec671ea4","updated":"2021-02-17 04:28:28.000000000","message":"Thank you. Done.","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"443c3c1d7d3b1734c80976b3fcdbdffbe55fad16","unresolved":false,"context_lines":[{"line_number":1666,"context_line":"            LOG.info(\"Attempting to fetch NVMe capabilities for device %s\","},{"line_number":1667,"context_line":"                     block_device.name)"},{"line_number":1668,"context_line":"            nvme_info \u003d utils.execute(\u0027nvme\u0027, \u0027id-ctrl\u0027,"},{"line_number":1669,"context_line":"                                      block_device.name, \u0027-H\u0027)[0]"},{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1672,"context_line":"            msg \u003d ((\"Failed to fetch NVMe capabilities for device {}: {}\""}],"source_content_type":"text/x-python","patch_set":27,"id":"b0446e40_3f642c06","line":1669,"updated":"2021-02-11 16:39:35.000000000","message":"Why not use -o json? Will save you a lot of parsing below.","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d472387ce98fc3a9e56a770c274355eb133f43f3","unresolved":false,"context_lines":[{"line_number":1666,"context_line":"            LOG.info(\"Attempting to fetch NVMe capabilities for device %s\","},{"line_number":1667,"context_line":"                     block_device.name)"},{"line_number":1668,"context_line":"            nvme_info \u003d utils.execute(\u0027nvme\u0027, \u0027id-ctrl\u0027,"},{"line_number":1669,"context_line":"                                      block_device.name, \u0027-H\u0027)[0]"},{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1672,"context_line":"            msg \u003d ((\"Failed to fetch NVMe capabilities for device {}: {}\""}],"source_content_type":"text/x-python","patch_set":27,"id":"a27e3e78_cf6cf2c2","line":1669,"in_reply_to":"b0446e40_3f642c06","updated":"2021-02-17 04:28:28.000000000","message":"I modified the patch to use the json output as per your recommendation. Thanks for sharing your parser samples!","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"443c3c1d7d3b1734c80976b3fcdbdffbe55fad16","unresolved":false,"context_lines":[{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1672,"context_line":"            msg \u003d ((\"Failed to fetch NVMe capabilities for device {}: {}\""},{"line_number":1673,"context_line":"                    ).format(block_device, e))"},{"line_number":1674,"context_line":"            LOG.error(msg)"},{"line_number":1675,"context_line":"            raise errors.BlockDeviceEraseError(msg)"},{"line_number":1676,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"61e8869f_b9b20ae2","line":1673,"updated":"2021-02-11 16:39:35.000000000","message":"nit: ) should be on the previous line","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d472387ce98fc3a9e56a770c274355eb133f43f3","unresolved":false,"context_lines":[{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1672,"context_line":"            msg \u003d ((\"Failed to fetch NVMe capabilities for device {}: {}\""},{"line_number":1673,"context_line":"                    ).format(block_device, e))"},{"line_number":1674,"context_line":"            LOG.error(msg)"},{"line_number":1675,"context_line":"            raise errors.BlockDeviceEraseError(msg)"},{"line_number":1676,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"bb9c7d48_00aee05a","line":1673,"in_reply_to":"61e8869f_b9b20ae2","updated":"2021-02-17 04:28:28.000000000","message":"Done","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"443c3c1d7d3b1734c80976b3fcdbdffbe55fad16","unresolved":false,"context_lines":[{"line_number":1692,"context_line":"                # instead"},{"line_number":1693,"context_line":"                fna_match \u003d re.search(r\u0027fna.*\\n([\\s\\S]*?)\\n\\n\u0027, nvme_info)"},{"line_number":1694,"context_line":"                fna \u003d fna_match.groups()[0]"},{"line_number":1695,"context_line":"                if \"Crypto Erase Supported as part of Secure Erase\" in fna:"},{"line_number":1696,"context_line":"                    format_mode \u003d 2     # crypto erase"},{"line_number":1697,"context_line":"            else:"},{"line_number":1698,"context_line":"                msg \u003d (\u0027nvme-cli did not return any supported format modes \u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"0a9b6217_c14a5a1f","line":1695,"updated":"2021-02-11 16:39:35.000000000","message":"Analyzing strings like this requires passing use_standard_locale\u003dTrue to utils.execute() (but better use -o json)","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d472387ce98fc3a9e56a770c274355eb133f43f3","unresolved":false,"context_lines":[{"line_number":1692,"context_line":"                # instead"},{"line_number":1693,"context_line":"                fna_match \u003d re.search(r\u0027fna.*\\n([\\s\\S]*?)\\n\\n\u0027, nvme_info)"},{"line_number":1694,"context_line":"                fna \u003d fna_match.groups()[0]"},{"line_number":1695,"context_line":"                if \"Crypto Erase Supported as part of Secure Erase\" in fna:"},{"line_number":1696,"context_line":"                    format_mode \u003d 2     # crypto erase"},{"line_number":1697,"context_line":"            else:"},{"line_number":1698,"context_line":"                msg \u003d (\u0027nvme-cli did not return any supported format modes \u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"44a1b7ae_b904462e","line":1695,"in_reply_to":"0a9b6217_c14a5a1f","updated":"2021-02-17 04:28:28.000000000","message":"I switched the code to using json so this should no longer be a problem.","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"443c3c1d7d3b1734c80976b3fcdbdffbe55fad16","unresolved":false,"context_lines":[{"line_number":1697,"context_line":"            else:"},{"line_number":1698,"context_line":"                msg \u003d (\u0027nvme-cli did not return any supported format modes \u0027"},{"line_number":1699,"context_line":"                       \u0027for device: {device}\u0027"},{"line_number":1700,"context_line":"                       ).format(device\u003dblock_device.name)"},{"line_number":1701,"context_line":"                LOG.error(msg)"},{"line_number":1702,"context_line":"                raise errors.BlockDeviceEraseError(msg)"},{"line_number":1703,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"c27ec46f_c19d05fe","line":1700,"updated":"2021-02-11 16:39:35.000000000","message":"nit: ditto re bracket","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d472387ce98fc3a9e56a770c274355eb133f43f3","unresolved":false,"context_lines":[{"line_number":1697,"context_line":"            else:"},{"line_number":1698,"context_line":"                msg \u003d (\u0027nvme-cli did not return any supported format modes \u0027"},{"line_number":1699,"context_line":"                       \u0027for device: {device}\u0027"},{"line_number":1700,"context_line":"                       ).format(device\u003dblock_device.name)"},{"line_number":1701,"context_line":"                LOG.error(msg)"},{"line_number":1702,"context_line":"                raise errors.BlockDeviceEraseError(msg)"},{"line_number":1703,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7618b027_3cd26ffa","line":1700,"in_reply_to":"c27ec46f_c19d05fe","updated":"2021-02-17 04:28:28.000000000","message":"Done","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"443c3c1d7d3b1734c80976b3fcdbdffbe55fad16","unresolved":false,"context_lines":[{"line_number":1702,"context_line":"                raise errors.BlockDeviceEraseError(msg)"},{"line_number":1703,"context_line":""},{"line_number":1704,"context_line":"        try:"},{"line_number":1705,"context_line":"            LOG.info(\"Attempting to nvme-format \", block_device.name,"},{"line_number":1706,"context_line":"                     \" using secure format mode (ses) \", format_mode)"},{"line_number":1707,"context_line":"            nvme_format_output \u003d utils.execute(\u0027nvme\u0027, \u0027format\u0027,"},{"line_number":1708,"context_line":"                                               block_device.name, \u0027-ses\u003d\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"e4cf1313_773dab90","line":1705,"updated":"2021-02-11 16:39:35.000000000","message":"s/info/debug/\n\nAlso I\u0027m not sure logging will work like that, you need\n\n LOG.debug(\"Attempting to nvme-format %s using ... %s\", block_device.name, format_mode)","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d472387ce98fc3a9e56a770c274355eb133f43f3","unresolved":false,"context_lines":[{"line_number":1702,"context_line":"                raise errors.BlockDeviceEraseError(msg)"},{"line_number":1703,"context_line":""},{"line_number":1704,"context_line":"        try:"},{"line_number":1705,"context_line":"            LOG.info(\"Attempting to nvme-format \", block_device.name,"},{"line_number":1706,"context_line":"                     \" using secure format mode (ses) \", format_mode)"},{"line_number":1707,"context_line":"            nvme_format_output \u003d utils.execute(\u0027nvme\u0027, \u0027format\u0027,"},{"line_number":1708,"context_line":"                                               block_device.name, \u0027-ses\u003d\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"fbc8e891_85e398bc","line":1705,"in_reply_to":"e4cf1313_773dab90","updated":"2021-02-17 04:28:28.000000000","message":"Done","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"443c3c1d7d3b1734c80976b3fcdbdffbe55fad16","unresolved":false,"context_lines":[{"line_number":1709,"context_line":"                                               format_mode)[0]"},{"line_number":1710,"context_line":"            if \u0027Success\u0027 in nvme_format_output:"},{"line_number":1711,"context_line":"                LOG.info(\"nvme-cli format for device \", block_device.name,"},{"line_number":1712,"context_line":"                         \" (ses\u003d \", format_mode, \") completed successfully.\")"},{"line_number":1713,"context_line":"                return True"},{"line_number":1714,"context_line":"            else:"},{"line_number":1715,"context_line":"                msg \u003d (\u0027Unexpected output erasing NVMe device {device}. \u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"17f2df90_04ca87bd","line":1712,"updated":"2021-02-11 16:39:35.000000000","message":"dittp","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d472387ce98fc3a9e56a770c274355eb133f43f3","unresolved":false,"context_lines":[{"line_number":1709,"context_line":"                                               format_mode)[0]"},{"line_number":1710,"context_line":"            if \u0027Success\u0027 in nvme_format_output:"},{"line_number":1711,"context_line":"                LOG.info(\"nvme-cli format for device \", block_device.name,"},{"line_number":1712,"context_line":"                         \" (ses\u003d \", format_mode, \") completed successfully.\")"},{"line_number":1713,"context_line":"                return True"},{"line_number":1714,"context_line":"            else:"},{"line_number":1715,"context_line":"                msg \u003d (\u0027Unexpected output erasing NVMe device {device}. \u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"ce2d40bb_e6acc085","line":1712,"in_reply_to":"17f2df90_04ca87bd","updated":"2021-02-17 04:28:28.000000000","message":"Done","commit_id":"ccc901ceeadefd48a84f14db3e67d166b6c9d87d"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"86eaaebd3516aeb5ed13c43f1c0b47d1861b4b10","unresolved":true,"context_lines":[{"line_number":1708,"context_line":"        try:"},{"line_number":1709,"context_line":"            LOG.debug(\"Attempting to nvme-format %s using secure format mode \""},{"line_number":1710,"context_line":"                      \"(ses) %s\", block_device.name, format_mode)"},{"line_number":1711,"context_line":"            nvme_format_output \u003d utils.execute(\u0027nvme\u0027, \u0027format\u0027,"},{"line_number":1712,"context_line":"                                               block_device.name, \u0027-ses\u003d\u0027,"},{"line_number":1713,"context_line":"                                               format_mode)[0]"},{"line_number":1714,"context_line":"            if \u0027Success\u0027 in nvme_format_output:"}],"source_content_type":"text/x-python","patch_set":29,"id":"34c2aef0_13242d24","line":1711,"range":{"start_line":1711,"start_character":12,"end_line":1711,"end_character":31},"updated":"2021-02-17 09:58:18.000000000","message":"let\u0027s be consistent and use \", _e\" as in L1667 instead of using [0] afterwards\nit\u0027s also more clear IMHO","commit_id":"6a1c2f2ffd2b257c6ab020849aea2624afad1240"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"bf8e9f3c25d0b379b9e99b5d80409bf20c893c34","unresolved":false,"context_lines":[{"line_number":1708,"context_line":"        try:"},{"line_number":1709,"context_line":"            LOG.debug(\"Attempting to nvme-format %s using secure format mode \""},{"line_number":1710,"context_line":"                      \"(ses) %s\", block_device.name, format_mode)"},{"line_number":1711,"context_line":"            nvme_format_output \u003d utils.execute(\u0027nvme\u0027, \u0027format\u0027,"},{"line_number":1712,"context_line":"                                               block_device.name, \u0027-ses\u003d\u0027,"},{"line_number":1713,"context_line":"                                               format_mode)[0]"},{"line_number":1714,"context_line":"            if \u0027Success\u0027 in nvme_format_output:"}],"source_content_type":"text/x-python","patch_set":29,"id":"5a484136_90e7fd31","line":1711,"range":{"start_line":1711,"start_character":12,"end_line":1711,"end_character":31},"in_reply_to":"34c2aef0_13242d24","updated":"2021-02-17 13:22:04.000000000","message":"Good pickup! I missed this one while fixing the other one.","commit_id":"6a1c2f2ffd2b257c6ab020849aea2624afad1240"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"86eaaebd3516aeb5ed13c43f1c0b47d1861b4b10","unresolved":true,"context_lines":[{"line_number":1709,"context_line":"            LOG.debug(\"Attempting to nvme-format %s using secure format mode \""},{"line_number":1710,"context_line":"                      \"(ses) %s\", block_device.name, format_mode)"},{"line_number":1711,"context_line":"            nvme_format_output \u003d utils.execute(\u0027nvme\u0027, \u0027format\u0027,"},{"line_number":1712,"context_line":"                                               block_device.name, \u0027-ses\u003d\u0027,"},{"line_number":1713,"context_line":"                                               format_mode)[0]"},{"line_number":1714,"context_line":"            if \u0027Success\u0027 in nvme_format_output:"},{"line_number":1715,"context_line":"                LOG.info(\"nvme-cli format for device %s (ses\u003d %s ) completed \""}],"source_content_type":"text/x-python","patch_set":29,"id":"bf278b18_3906cf78","line":1712,"range":{"start_line":1712,"start_character":67,"end_line":1712,"end_character":72},"updated":"2021-02-17 09:58:18.000000000","message":"--ses\u003d or -s\n-ses or -ses\u003d are supported but not officially :)","commit_id":"6a1c2f2ffd2b257c6ab020849aea2624afad1240"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"bf8e9f3c25d0b379b9e99b5d80409bf20c893c34","unresolved":false,"context_lines":[{"line_number":1709,"context_line":"            LOG.debug(\"Attempting to nvme-format %s using secure format mode \""},{"line_number":1710,"context_line":"                      \"(ses) %s\", block_device.name, format_mode)"},{"line_number":1711,"context_line":"            nvme_format_output \u003d utils.execute(\u0027nvme\u0027, \u0027format\u0027,"},{"line_number":1712,"context_line":"                                               block_device.name, \u0027-ses\u003d\u0027,"},{"line_number":1713,"context_line":"                                               format_mode)[0]"},{"line_number":1714,"context_line":"            if \u0027Success\u0027 in nvme_format_output:"},{"line_number":1715,"context_line":"                LOG.info(\"nvme-cli format for device %s (ses\u003d %s ) completed \""}],"source_content_type":"text/x-python","patch_set":29,"id":"b4ebae46_cbcf830e","line":1712,"range":{"start_line":1712,"start_character":67,"end_line":1712,"end_character":72},"in_reply_to":"bf278b18_3906cf78","updated":"2021-02-17 13:22:04.000000000","message":"Thanks Riccardo, that\u0027s good to know (I did not know that).","commit_id":"6a1c2f2ffd2b257c6ab020849aea2624afad1240"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"d9a2b8a49e98e09f82c83dafc78aa82dcba66561","unresolved":true,"context_lines":[{"line_number":1668,"context_line":"                      block_device.name)"},{"line_number":1669,"context_line":"            nvme_info, _e \u003d utils.execute(\u0027nvme\u0027, \u0027id-ctrl\u0027,"},{"line_number":1670,"context_line":"                                          block_device.name, \u0027-o\u0027, \u0027json\u0027,"},{"line_number":1671,"context_line":"                                          check_exit_code\u003d[0])"},{"line_number":1672,"context_line":"            nvme_info \u003d json.loads(nvme_info)"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"        except processutils.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":31,"id":"71ace8ae_1b0c94af","line":1671,"range":{"start_line":1671,"start_character":42,"end_line":1671,"end_character":61},"updated":"2021-02-18 12:45:32.000000000","message":"this is the default setting, you can remove it","commit_id":"2908f50cb1ff2f7342a4f5b333619a7138c7fc69"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"e5ddb4f0b872ff0bf2a518c8867646bbeef9bf15","unresolved":false,"context_lines":[{"line_number":1668,"context_line":"                      block_device.name)"},{"line_number":1669,"context_line":"            nvme_info, _e \u003d utils.execute(\u0027nvme\u0027, \u0027id-ctrl\u0027,"},{"line_number":1670,"context_line":"                                          block_device.name, \u0027-o\u0027, \u0027json\u0027,"},{"line_number":1671,"context_line":"                                          check_exit_code\u003d[0])"},{"line_number":1672,"context_line":"            nvme_info \u003d json.loads(nvme_info)"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"        except processutils.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":31,"id":"cec9cf9a_b3270545","line":1671,"range":{"start_line":1671,"start_character":42,"end_line":1671,"end_character":61},"in_reply_to":"71ace8ae_1b0c94af","updated":"2021-02-18 12:51:01.000000000","message":"Done","commit_id":"2908f50cb1ff2f7342a4f5b333619a7138c7fc69"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"d9a2b8a49e98e09f82c83dafc78aa82dcba66561","unresolved":true,"context_lines":[{"line_number":1710,"context_line":"        try:"},{"line_number":1711,"context_line":"            LOG.debug(\"Attempting to nvme-format %s using secure format mode \""},{"line_number":1712,"context_line":"                      \"(ses) %s\", block_device.name, format_mode)"},{"line_number":1713,"context_line":"            nvme_format_output, _e \u003d utils.execute(\u0027nvme\u0027, \u0027format\u0027,"},{"line_number":1714,"context_line":"                                                   block_device.name, \u0027-s\u0027,"},{"line_number":1715,"context_line":"                                                   format_mode,"},{"line_number":1716,"context_line":"                                                   check_exit_code\u003d[0])"}],"source_content_type":"text/x-python","patch_set":31,"id":"7882ae9d_7bffce17","line":1713,"range":{"start_line":1713,"start_character":12,"end_line":1713,"end_character":37},"updated":"2021-02-18 12:45:32.000000000","message":"we\u0027re not using those, let\u0027s remove them","commit_id":"2908f50cb1ff2f7342a4f5b333619a7138c7fc69"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"e5ddb4f0b872ff0bf2a518c8867646bbeef9bf15","unresolved":false,"context_lines":[{"line_number":1710,"context_line":"        try:"},{"line_number":1711,"context_line":"            LOG.debug(\"Attempting to nvme-format %s using secure format mode \""},{"line_number":1712,"context_line":"                      \"(ses) %s\", block_device.name, format_mode)"},{"line_number":1713,"context_line":"            nvme_format_output, _e \u003d utils.execute(\u0027nvme\u0027, \u0027format\u0027,"},{"line_number":1714,"context_line":"                                                   block_device.name, \u0027-s\u0027,"},{"line_number":1715,"context_line":"                                                   format_mode,"},{"line_number":1716,"context_line":"                                                   check_exit_code\u003d[0])"}],"source_content_type":"text/x-python","patch_set":31,"id":"b4d64d46_fbff5e57","line":1713,"range":{"start_line":1713,"start_character":12,"end_line":1713,"end_character":37},"in_reply_to":"7882ae9d_7bffce17","updated":"2021-02-18 12:51:01.000000000","message":"Done","commit_id":"2908f50cb1ff2f7342a4f5b333619a7138c7fc69"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"d9a2b8a49e98e09f82c83dafc78aa82dcba66561","unresolved":true,"context_lines":[{"line_number":1713,"context_line":"            nvme_format_output, _e \u003d utils.execute(\u0027nvme\u0027, \u0027format\u0027,"},{"line_number":1714,"context_line":"                                                   block_device.name, \u0027-s\u0027,"},{"line_number":1715,"context_line":"                                                   format_mode,"},{"line_number":1716,"context_line":"                                                   check_exit_code\u003d[0])"},{"line_number":1717,"context_line":"            LOG.info(\"nvme-cli format for device %s (ses\u003d %s ) completed \""},{"line_number":1718,"context_line":"                     \"successfully.\", block_device.name, format_mode)"},{"line_number":1719,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":31,"id":"6832a6a7_2a31b3e9","line":1716,"range":{"start_line":1716,"start_character":50,"end_line":1716,"end_character":70},"updated":"2021-02-18 12:45:32.000000000","message":"this is the default setting, you can remove it","commit_id":"2908f50cb1ff2f7342a4f5b333619a7138c7fc69"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"e5ddb4f0b872ff0bf2a518c8867646bbeef9bf15","unresolved":false,"context_lines":[{"line_number":1713,"context_line":"            nvme_format_output, _e \u003d utils.execute(\u0027nvme\u0027, \u0027format\u0027,"},{"line_number":1714,"context_line":"                                                   block_device.name, \u0027-s\u0027,"},{"line_number":1715,"context_line":"                                                   format_mode,"},{"line_number":1716,"context_line":"                                                   check_exit_code\u003d[0])"},{"line_number":1717,"context_line":"            LOG.info(\"nvme-cli format for device %s (ses\u003d %s ) completed \""},{"line_number":1718,"context_line":"                     \"successfully.\", block_device.name, format_mode)"},{"line_number":1719,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":31,"id":"eb4a1681_30790de8","line":1716,"range":{"start_line":1716,"start_character":50,"end_line":1716,"end_character":70},"in_reply_to":"6832a6a7_2a31b3e9","updated":"2021-02-18 12:51:01.000000000","message":"Done","commit_id":"2908f50cb1ff2f7342a4f5b333619a7138c7fc69"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b8fe7f952afb8010c669644fe08a126641194ed8","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                                          block_device.name, \u0027-o\u0027, \u0027json\u0027)"},{"line_number":1671,"context_line":"            nvme_info \u003d json.loads(nvme_info)"},{"line_number":1672,"context_line":""},{"line_number":1673,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":1674,"context_line":"            msg \u003d ((\"Failed to fetch NVMe capabilities for device {}: {}\")"},{"line_number":1675,"context_line":"                   .format(block_device, e))"},{"line_number":1676,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"52798920_07832803","line":1673,"updated":"2021-02-19 10:24:57.000000000","message":"maybe catch ValueError in case of invalid JSON?","commit_id":"8bcf1be9200b52536f76cb61c62071eaaac1e004"}],"ironic_python_agent/tests/unit/extensions/test_standby.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6aa492dfebdaa5a9179a560dd7281c885030f383","unresolved":true,"context_lines":[{"line_number":235,"context_line":"                                                  image_path,"},{"line_number":236,"context_line":"                                                  node_uuid,"},{"line_number":237,"context_line":"                                                  preserve_ephemeral\u003dpr_ep,"},{"line_number":238,"context_line":"                                                  configdrive\u003dconfigdrive,"},{"line_number":239,"context_line":"                                                  boot_option\u003dboot_option,"},{"line_number":240,"context_line":"                                                  boot_mode\u003dboot_mode,"},{"line_number":241,"context_line":"                                                  disk_label\u003ddisk_label,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9bf66d67_01e2db06","line":238,"updated":"2021-02-02 09:37:11.000000000","message":"why changing order here?","commit_id":"66974f94963f9af351702123e5d67965582bfd05"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"7429963d7833f62f01f8efc74b10760bee86c809","unresolved":true,"context_lines":[{"line_number":235,"context_line":"                                                  image_path,"},{"line_number":236,"context_line":"                                                  node_uuid,"},{"line_number":237,"context_line":"                                                  preserve_ephemeral\u003dpr_ep,"},{"line_number":238,"context_line":"                                                  configdrive\u003dconfigdrive,"},{"line_number":239,"context_line":"                                                  boot_option\u003dboot_option,"},{"line_number":240,"context_line":"                                                  boot_mode\u003dboot_mode,"},{"line_number":241,"context_line":"                                                  disk_label\u003ddisk_label,"}],"source_content_type":"text/x-python","patch_set":19,"id":"6bbb0fc0_8f90ff1a","line":238,"in_reply_to":"9bf66d67_01e2db06","updated":"2021-02-02 13:05:22.000000000","message":"I was struggling to get tests to pass both locally and in CI without that... I will revert those changes and get CI to re-run overnight (this comment applies to all the changes in this file).","commit_id":"66974f94963f9af351702123e5d67965582bfd05"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6aa492dfebdaa5a9179a560dd7281c885030f383","unresolved":true,"context_lines":[{"line_number":282,"context_line":"                                                  image_path,"},{"line_number":283,"context_line":"                                                  node_uuid,"},{"line_number":284,"context_line":"                                                  preserve_ephemeral\u003dpr_ep,"},{"line_number":285,"context_line":"                                                  configdrive\u003dconfigdrive,"},{"line_number":286,"context_line":"                                                  boot_option\u003dboot_option,"},{"line_number":287,"context_line":"                                                  boot_mode\u003dboot_mode,"},{"line_number":288,"context_line":"                                                  disk_label\u003ddisk_label,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fb4476e1_614ee8ed","line":285,"updated":"2021-02-02 09:37:11.000000000","message":"ditto and below","commit_id":"66974f94963f9af351702123e5d67965582bfd05"}],"releasenotes/notes/adds-nvme-secure-erase-0ecfd624e5f50581.yaml":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"86eaaebd3516aeb5ed13c43f1c0b47d1861b4b10","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - Adds support for NVMe-specific storage cleaning to IPA. Currently this is"},{"line_number":4,"context_line":"    implemented by using nvme-cli format functionality. Crypto Erase is used"},{"line_number":5,"context_line":"    if supported by the device, otherwise the code falls back to User Data"},{"line_number":6,"context_line":"    Erase. Currently the feature is disabled by default. The operators can"},{"line_number":7,"context_line":"    enable NVMe cleaning using ``agent_enable_nvme_erase`` internal setting in"},{"line_number":8,"context_line":"    driver_internal_info which is controlled by deploy.enable_nvme_erase"},{"line_number":9,"context_line":"    config option."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"c33d6ca5_90ff1789","line":6,"range":{"start_line":6,"start_character":55,"end_line":6,"end_character":57},"updated":"2021-02-17 09:58:18.000000000","message":"nit: I would put a comma here","commit_id":"6a1c2f2ffd2b257c6ab020849aea2624afad1240"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"86eaaebd3516aeb5ed13c43f1c0b47d1861b4b10","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - Adds support for NVMe-specific storage cleaning to IPA. Currently this is"},{"line_number":4,"context_line":"    implemented by using nvme-cli format functionality. Crypto Erase is used"},{"line_number":5,"context_line":"    if supported by the device, otherwise the code falls back to User Data"},{"line_number":6,"context_line":"    Erase. Currently the feature is disabled by default. The operators can"},{"line_number":7,"context_line":"    enable NVMe cleaning using ``agent_enable_nvme_erase`` internal setting in"},{"line_number":8,"context_line":"    driver_internal_info which is controlled by deploy.enable_nvme_erase"},{"line_number":9,"context_line":"    config option."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"37c628fe_a8c67937","line":6,"range":{"start_line":6,"start_character":11,"end_line":6,"end_character":20},"updated":"2021-02-17 09:58:18.000000000","message":"nit: repetition","commit_id":"6a1c2f2ffd2b257c6ab020849aea2624afad1240"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"bf8e9f3c25d0b379b9e99b5d80409bf20c893c34","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Adds support for NVMe-specific storage cleaning to IPA. Currently this is"},{"line_number":4,"context_line":"    implemented by using nvme-cli format functionality. Crypto Erase is used"},{"line_number":5,"context_line":"    if supported by the device, otherwise the code falls back to User Data"},{"line_number":6,"context_line":"    Erase. Currently the feature is disabled by default. The operators can"},{"line_number":7,"context_line":"    enable NVMe cleaning using ``agent_enable_nvme_erase`` internal setting in"},{"line_number":8,"context_line":"    driver_internal_info which is controlled by deploy.enable_nvme_erase"},{"line_number":9,"context_line":"    config option."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"65f9e2c2_5a44b7d9","line":6,"range":{"start_line":6,"start_character":11,"end_line":6,"end_character":20},"in_reply_to":"37c628fe_a8c67937","updated":"2021-02-17 13:22:04.000000000","message":"Done. I re-phrased the release note to reflect adjustments that have been made (it was out of date).","commit_id":"6a1c2f2ffd2b257c6ab020849aea2624afad1240"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"bf8e9f3c25d0b379b9e99b5d80409bf20c893c34","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Adds support for NVMe-specific storage cleaning to IPA. Currently this is"},{"line_number":4,"context_line":"    implemented by using nvme-cli format functionality. Crypto Erase is used"},{"line_number":5,"context_line":"    if supported by the device, otherwise the code falls back to User Data"},{"line_number":6,"context_line":"    Erase. Currently the feature is disabled by default. The operators can"},{"line_number":7,"context_line":"    enable NVMe cleaning using ``agent_enable_nvme_erase`` internal setting in"},{"line_number":8,"context_line":"    driver_internal_info which is controlled by deploy.enable_nvme_erase"},{"line_number":9,"context_line":"    config option."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"c0b696d8_51389a63","line":6,"range":{"start_line":6,"start_character":55,"end_line":6,"end_character":57},"in_reply_to":"c33d6ca5_90ff1789","updated":"2021-02-17 13:22:04.000000000","message":"Done","commit_id":"6a1c2f2ffd2b257c6ab020849aea2624afad1240"}],"releasenotes/notes/releasenote-0ecfd624e5f50581.yaml":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6aa492dfebdaa5a9179a560dd7281c885030f383","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for NVMe-specific storage cleaning to IPA. Currently this is"},{"line_number":4,"context_line":"    implemented by using nvme-cli format functionality. Crypto Erase is used"},{"line_number":5,"context_line":"    if supported by the device, otherwise the code falls back to User Data"},{"line_number":6,"context_line":"    Erase. Currently the feature is disabled by default. The operators can"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"bf319ce6_ff74910d","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":9},"updated":"2021-02-02 09:37:11.000000000","message":"\u0027Adds\u0027\nlet\u0027s use present in release notes.","commit_id":"66974f94963f9af351702123e5d67965582bfd05"}]}
