)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"c5163879d8ef65239bd8236cc8fd9aaca4a21446","unresolved":false,"context_lines":[{"line_number":11,"context_line":"pre-existing config-drive partition had an extra one created"},{"line_number":12,"context_line":"by ironic."},{"line_number":13,"context_line":"Switched the command to use blkid -L config-2, that correctly"},{"line_number":14,"context_line":"gets the information on the partition."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ic5228ce91d1a133fd846ceb7be547a227292dd38"},{"line_number":17,"context_line":"Closes-Bug: #1654269"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"ba5201f7_2f5d5047","line":14,"updated":"2017-01-11 22:50:23.000000000","message":"This information seems out of date based on the current code.","commit_id":"a5c1edc66c04cb30961f75c8faeb37a234cccc9d"}],"etc/rootwrap.d/ironic-lib.filters":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"22ae0995c6d2f7adeb6a1fe213f4905b17b3626e","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# NOTE:"},{"line_number":6,"context_line":"# if you update this file, you will also need to adjust the"},{"line_number":7,"context_line":"# ironic-lib.filters from the ironic module."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"[Filters]"},{"line_number":10,"context_line":"# ironic_lib/disk_utils.py"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"ba5201f7_76e75ae4","line":7,"updated":"2017-01-11 10:09:03.000000000","message":"apparently we have to update it in ironic as well :-(","commit_id":"da3039dd884e09ad0e36b48fe1de2ed019a8f6f4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"dc82374c8932546f7e6326f6f0b09ae344d14fb4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"[Filters]"},{"line_number":10,"context_line":"# ironic_lib/disk_utils.py"},{"line_number":11,"context_line":"blkid: CommandFilter, blkid, root"},{"line_number":12,"context_line":"lsblk: CommandFilter, lsblk, root"},{"line_number":13,"context_line":"blockdev: CommandFilter, blockdev, root"},{"line_number":14,"context_line":"hexdump: CommandFilter, hexdump, root"},{"line_number":15,"context_line":"qemu-img: CommandFilter, qemu-img, root"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"ba5201f7_4b98eb1b","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":33},"updated":"2017-01-11 12:16:15.000000000","message":"I\u0027d prefer this to go after \"hexdump\" like in the ironic patch to reduce the diff between them","commit_id":"c6fcdc34b69dc0081b563e9a58a8d651d0dc38fd"}],"ironic_lib/disk_utils.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"1d1ef6fc8c2195d76128125ae62e1d33a8e0170a","unresolved":false,"context_lines":[{"line_number":605,"context_line":"    \"\"\""},{"line_number":606,"context_line":"    try:"},{"line_number":607,"context_line":"        utils.execute(\u0027partprobe\u0027, device, run_as_root\u003dTrue)"},{"line_number":608,"context_line":"        output, err \u003d utils.execute(\u0027blkid\u0027, \u0027-L\u0027, label, device,"},{"line_number":609,"context_line":"                                    check_exit_code\u003d[0, 2],"},{"line_number":610,"context_line":"                                    use_standard_locale\u003dTrue, run_as_root\u003dTrue)"},{"line_number":611,"context_line":"    except (processutils.UnknownArgumentError,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_66a536b4","line":608,"updated":"2017-01-10 00:38:54.000000000","message":"Seems like if use \u0027-L label\u0027 that device should not be provided.","commit_id":"0efbf208ec44b73933ea2c00b723b96fed25568c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"648d0ca70c48305cf5a99036d77ece91d9e1db19","unresolved":false,"context_lines":[{"line_number":605,"context_line":"    \"\"\""},{"line_number":606,"context_line":"    try:"},{"line_number":607,"context_line":"        utils.execute(\u0027partprobe\u0027, device, run_as_root\u003dTrue)"},{"line_number":608,"context_line":"        output, err \u003d utils.execute(\u0027blkid\u0027, \u0027-L\u0027, label, device,"},{"line_number":609,"context_line":"                                    check_exit_code\u003d[0, 2],"},{"line_number":610,"context_line":"                                    use_standard_locale\u003dTrue, run_as_root\u003dTrue)"},{"line_number":611,"context_line":"    except (processutils.UnknownArgumentError,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_45ae4599","line":608,"in_reply_to":"ba5201f7_66a536b4","updated":"2017-01-10 15:52:58.000000000","message":"++\n\nYeah, talked on IRC about it [0] and that\u0027s the case. I think that the right way to go here is to use the list_partitions() method (L77) and the e2label command to read the label of each filesystem and try to find one labeled \"config-2\". It\u0027s less optimal but it\u0027s reliable. \n\n[0] http://eavesdrop.openstack.org/irclogs/%23openstack-ironic/%23openstack-ironic.2017-01-09.log.html#t2017-01-09T11:55:06","commit_id":"0efbf208ec44b73933ea2c00b723b96fed25568c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b038e37facd678f11b95ad6a7de8053dc2754fce","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        utils.execute(\u0027partprobe\u0027, device, run_as_root\u003dTrue)"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        # lsblk command"},{"line_number":610,"context_line":"        output, err \u003d utils.execute(\u0027lsblk\u0027, \u0027-Po\u0027, \u0027name,label\u0027, device,"},{"line_number":611,"context_line":"                                    check_exit_code\u003d[0, 2],"},{"line_number":612,"context_line":"                                    use_standard_locale\u003dTrue, run_as_root\u003dTrue)"},{"line_number":613,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_44ce3984","line":610,"updated":"2017-01-10 21:10:54.000000000","message":"Awesome!","commit_id":"295af7738d71d1a74591fa11af6dd156a7dcdd30"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"92179230dede2258278219acbdb823b0fac9edfa","unresolved":false,"context_lines":[{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        # lsblk command"},{"line_number":610,"context_line":"        output, err \u003d utils.execute(\u0027lsblk\u0027, \u0027-Po\u0027, \u0027name,label\u0027, device,"},{"line_number":611,"context_line":"                                    check_exit_code\u003d[0, 2],"},{"line_number":612,"context_line":"                                    use_standard_locale\u003dTrue, run_as_root\u003dTrue)"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    except (processutils.UnknownArgumentError,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_97f77158","line":611,"updated":"2017-01-10 21:46:39.000000000","message":"Is exit code 2 still valid?","commit_id":"295af7738d71d1a74591fa11af6dd156a7dcdd30"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d8727d32fe1f999366fb995f15462655ef85b132","unresolved":false,"context_lines":[{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    found_partition \u003d None"},{"line_number":623,"context_line":"    if output:"},{"line_number":624,"context_line":"        pattern \u003d \u0027NAME\u003d\"(.+?)\" LABEL\u003d\"%s\"\u0027 % label"},{"line_number":625,"context_line":"        for entry in output.split(\u0027\\n\u0027):"},{"line_number":626,"context_line":"            # check if that matches the pattern"},{"line_number":627,"context_line":"            m \u003d re.search(pattern, entry)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_b4eb9611","line":624,"updated":"2017-01-10 19:39:10.000000000","message":"might be good to use re.compile() since doing it more than once possibly.","commit_id":"295af7738d71d1a74591fa11af6dd156a7dcdd30"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"22ae0995c6d2f7adeb6a1fe213f4905b17b3626e","unresolved":false,"context_lines":[{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    found_partition \u003d None"},{"line_number":623,"context_line":"    if output:"},{"line_number":624,"context_line":"        pattern \u003d \u0027NAME\u003d\"(.+?)\" LABEL\u003d\"%s\"\u0027 % label"},{"line_number":625,"context_line":"        prog \u003d re.compile(pattern)"},{"line_number":626,"context_line":"        for entry in output.split(\u0027\\n\u0027):"},{"line_number":627,"context_line":"            # check if that matches the pattern"},{"line_number":628,"context_line":"            m \u003d prog.search(entry)"},{"line_number":629,"context_line":"            if m:"},{"line_number":630,"context_line":"                if found_partition:"},{"line_number":631,"context_line":"                    raise exception.InstanceDeployFailure("},{"line_number":632,"context_line":"                        _(\u0027More than one config drive exists \u0027"},{"line_number":633,"context_line":"                          \u0027on device %(device)s \u0027"},{"line_number":634,"context_line":"                          \u0027for node %(node)s.\u0027) %"},{"line_number":635,"context_line":"                        {\u0027device\u0027: device, \u0027node\u0027: node_uuid})"},{"line_number":636,"context_line":"                found_partition \u003d m.group(1)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    if found_partition:"},{"line_number":639,"context_line":"        return found_partition.strip()"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_f09ef152","line":636,"range":{"start_line":624,"start_character":0,"end_line":636,"end_character":44},"updated":"2017-01-11 10:09:03.000000000","message":"This can greatly simplified by using shlex, e.g:\n\nimport shlex\n\n for device in output.split(\u0027\\n\u0027):\n      dev \u003d {key: value for key, value in (v.split(\u0027\u003d\u0027, 1) for v in shlex.split(device))}\n      if not dev:\n          continue\n      if dev[\u0027LABEL\u0027] \u003d\u003d \u0027config-2\u0027:\n          return dev[\u0027NAME\u0027]\n\nNote: only tested locally with fake output","commit_id":"da3039dd884e09ad0e36b48fe1de2ed019a8f6f4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"dc82374c8932546f7e6326f6f0b09ae344d14fb4","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                   for v in shlex.split(device))}"},{"line_number":628,"context_line":"            if not dev:"},{"line_number":629,"context_line":"                continue"},{"line_number":630,"context_line":"            if dev[\u0027LABEL\u0027] \u003d\u003d \u0027config-2\u0027:"},{"line_number":631,"context_line":"                if found_partition:"},{"line_number":632,"context_line":"                    raise exception.InstanceDeployFailure("},{"line_number":633,"context_line":"                        _(\u0027More than one config drive exists \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_0b7d03b1","line":630,"range":{"start_line":630,"start_character":31,"end_line":630,"end_character":41},"updated":"2017-01-11 12:16:15.000000000","message":"this should be label variable, not a hardcoded string","commit_id":"c6fcdc34b69dc0081b563e9a58a8d651d0dc38fd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b246003aa0bcbfe8e82915581d6e2f740f3eca6d","unresolved":false,"context_lines":[{"line_number":597,"context_line":"    \"\"\"Check and return if partition with given label exists"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    :param device: The device path."},{"line_number":600,"context_line":"    :param label: Partition label"},{"line_number":601,"context_line":"    :param node_uuid: UUID of the Node. Used for logging."},{"line_number":602,"context_line":"    :raises: InstanceDeployFailure, if any disk partitioning related"},{"line_number":603,"context_line":"        commands fail."}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_968913cd","line":600,"updated":"2017-01-11 13:14:45.000000000","message":"this is no longer used - see below","commit_id":"1fa8fc77a5eaf2e432a368194ceeadbbafbc282d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b246003aa0bcbfe8e82915581d6e2f740f3eca6d","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                   for v in shlex.split(device))}"},{"line_number":628,"context_line":"            if not dev:"},{"line_number":629,"context_line":"                continue"},{"line_number":630,"context_line":"            if dev[\u0027LABEL\u0027] \u003d\u003d CONFIGDRIVE_LABEL:"},{"line_number":631,"context_line":"                if found_partition:"},{"line_number":632,"context_line":"                    raise exception.InstanceDeployFailure("},{"line_number":633,"context_line":"                        _(\u0027More than one config drive exists \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_b68457b1","line":630,"updated":"2017-01-11 13:14:45.000000000","message":"s/CONFIGDRIVE_LABEL/label/","commit_id":"1fa8fc77a5eaf2e432a368194ceeadbbafbc282d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b246003aa0bcbfe8e82915581d6e2f740f3eca6d","unresolved":false,"context_lines":[{"line_number":630,"context_line":"            if dev[\u0027LABEL\u0027] \u003d\u003d CONFIGDRIVE_LABEL:"},{"line_number":631,"context_line":"                if found_partition:"},{"line_number":632,"context_line":"                    raise exception.InstanceDeployFailure("},{"line_number":633,"context_line":"                        _(\u0027More than one config drive exists \u0027"},{"line_number":634,"context_line":"                          \u0027on device %(device)s \u0027"},{"line_number":635,"context_line":"                          \u0027for node %(node)s.\u0027) %"},{"line_number":636,"context_line":"                        {\u0027device\u0027: device, \u0027node\u0027: node_uuid})"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_d6939bf8","line":633,"updated":"2017-01-11 13:14:45.000000000","message":"s/config drive/partition with label %(label)s/","commit_id":"1fa8fc77a5eaf2e432a368194ceeadbbafbc282d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bc83b3f1f2bb174744675981000bbcd2de4d6281","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                         \u0027node\u0027: node_uuid})"},{"line_number":638,"context_line":"                found_partition \u003d dev[\u0027NAME\u0027].strip()"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"    return found_partition"},{"line_number":641,"context_line":""},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"def _is_disk_gpt_partitioned(device, node_uuid):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5201f7_690f6d39","line":640,"updated":"2017-01-11 15:25:16.000000000","message":"As far as I can tell, this is missing /dev/ as only the relative name is returned.  Everything in that path seems to work just fine with the exception of dd, which means it may silently fail as it wrote to a file and not the device.","commit_id":"ac01316b74ee3b35292881d0d1caad15a9e7a023"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7e8645afc393f1242f35cd86e3566d9220eb597a","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                         \u0027node\u0027: node_uuid})"},{"line_number":638,"context_line":"                found_partition \u003d dev[\u0027NAME\u0027].strip()"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"    return found_partition"},{"line_number":641,"context_line":""},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"def _is_disk_gpt_partitioned(device, node_uuid):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5201f7_b4dc48e5","line":640,"in_reply_to":"ba5201f7_690f6d39","updated":"2017-01-11 15:37:47.000000000","message":"Oh, good point. Yeah if this partition is going to be used in dd we need the full path.","commit_id":"ac01316b74ee3b35292881d0d1caad15a9e7a023"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e90a451cd15e114fd2e93294ba2256df6f6a0373","unresolved":false,"context_lines":[{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        # lsblk command"},{"line_number":611,"context_line":"        output, err \u003d utils.execute(\u0027lsblk\u0027, \u0027-Po\u0027, \u0027name,label\u0027, device,"},{"line_number":612,"context_line":"                                    check_exit_code\u003d[0, 1],"},{"line_number":613,"context_line":"                                    use_standard_locale\u003dTrue, run_as_root\u003dTrue)"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    except (processutils.UnknownArgumentError,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_b937cefd","line":612,"updated":"2017-01-11 22:03:05.000000000","message":"Not sure why we want to continue on exit code 1.\n\n RETURN CODES\n       0      success\n\n       1      failure\n\n       32     not found all specified devices\n\n       64     some specified devices found, some not found","commit_id":"a5c1edc66c04cb30961f75c8faeb37a234cccc9d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1a93c0c2741c14bcfad18a886dc4619c858a9d61","unresolved":false,"context_lines":[{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        # lsblk command"},{"line_number":611,"context_line":"        output, err \u003d utils.execute(\u0027lsblk\u0027, \u0027-Po\u0027, \u0027name,label\u0027, device,"},{"line_number":612,"context_line":"                                    check_exit_code\u003d[0, 1],"},{"line_number":613,"context_line":"                                    use_standard_locale\u003dTrue, run_as_root\u003dTrue)"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    except (processutils.UnknownArgumentError,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_d26b87b7","line":612,"in_reply_to":"ba5201f7_b937cefd","updated":"2017-01-11 22:56:27.000000000","message":"I think failures are tolerable in this case, the output, or lack their of is truly what matters.","commit_id":"a5c1edc66c04cb30961f75c8faeb37a234cccc9d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"1c917dde652040a425ac655615ad6434ec204369","unresolved":false,"context_lines":[{"line_number":631,"context_line":"                if found_part:"},{"line_number":632,"context_line":"                    raise exception.InstanceDeployFailure("},{"line_number":633,"context_line":"                        _(\u0027More than one partition with label \u0027"},{"line_number":634,"context_line":"                          \u0027%(label)s exists on device %(device)s \u0027"},{"line_number":635,"context_line":"                          \u0027for node %(node)s.\u0027) %"},{"line_number":636,"context_line":"                        {\u0027label\u0027: label, \u0027device\u0027: device,"},{"line_number":637,"context_line":"                         \u0027node\u0027: node_uuid})"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_b4890acd","line":634,"updated":"2017-01-12 19:36:34.000000000","message":"I\u0027m not sure this is what you want. The original \u0027device\u0027 that was passed to this method is no longer available; this will show the current device dict.\n\nThis might be more useful: https://review.openstack.org/#/c/419621/.","commit_id":"2d8f1d91c72ec302b0659aa0d6c5668495461d7e"}],"ironic_lib/tests/test_disk_utils.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d8727d32fe1f999366fb995f15462655ef85b132","unresolved":false,"context_lines":[{"line_number":787,"context_line":"        self.assertEqual(blkid_output.rstrip(), result)"},{"line_number":788,"context_line":"        execute_calls \u003d ["},{"line_number":789,"context_line":"            mock.call(\u0027partprobe\u0027, self.dev, run_as_root\u003dTrue),"},{"line_number":790,"context_line":"            mock.call(\u0027lsblk\u0027, \u0027-Po\u0027, \u0027name,lavel\u0027, self.dev,"},{"line_number":791,"context_line":"                      check_exit_code\u003d[0, 2],"},{"line_number":792,"context_line":"                      use_standard_locale\u003dTrue, run_as_root\u003dTrue)"},{"line_number":793,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_94813250","line":790,"range":{"start_line":790,"start_character":44,"end_line":790,"end_character":49},"updated":"2017-01-10 19:39:10.000000000","message":"This looks wrong","commit_id":"295af7738d71d1a74591fa11af6dd156a7dcdd30"}]}
