)]}'
{"nova/tests/baremetal/test_ipmi.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertEqual(os.stat(path)[stat.ST_MODE] \u0026 0777, 0600)"},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            with open(path, \"r\") as f:"},{"line_number":63,"context_line":"                s \u003d f.read(100)"},{"line_number":64,"context_line":"            self.assertEqual(s, PASSWORD)"},{"line_number":65,"context_line":"        finally:"},{"line_number":66,"context_line":"            os.unlink(path)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG2o%3D","line":63,"updated":"2012-10-18 15:25:10.000000000","message":"Why the arbitrary limit of 100 here?","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"b7a2130ec04e886cd2acbfa378f6645c0c376d17","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.mox.StubOutWithMock(self.ipmi, \u0027_is_power\u0027)"},{"line_number":97,"context_line":"        self.mox.StubOutWithMock(self.ipmi, \u0027_exec_ipmitool\u0027)"},{"line_number":98,"context_line":"        self.mox.StubOutWithMock(time, \u0027sleep\u0027)"},{"line_number":99,"context_line":"        for _ in range(retry):"},{"line_number":100,"context_line":"            self.ipmi._is_power(\"on\").AndReturn(False)"},{"line_number":101,"context_line":"            self.ipmi._exec_ipmitool(\"power on\")"},{"line_number":102,"context_line":"            time.sleep(wait)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAALn%2F%2F3mw%3D","line":99,"updated":"2012-10-31 15:28:07.000000000","message":"Should be xrange not range since you\u0027re not actually using the list, but this is really minor since retry will be small.","commit_id":"2fd503fa329af64247817f56d6cc395b16949516"}],"nova/virt/baremetal/doc/pxe-bm-installation.rst":[{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"c3c13a0d9b03e4e828f3a9b2365a9624172fdb9b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Packages\r"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":4,"context_line":"\r"},{"line_number":5,"context_line":"* This procedure is for Ubuntu 12.04 x86_64. Reading \u0027pxe-bm-instance-creation.txt\u0027 may make this document easy to understand.\r"},{"line_number":6,"context_line":"\r"},{"line_number":7,"context_line":"* dnsmasq (PXE server for baremetal hosts)\r"},{"line_number":8,"context_line":"* syslinux (bootloader for PXE)\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAALn%2F%2F3z0%3D","line":5,"updated":"2012-10-31 13:44:21.000000000","message":"How do I find the pxe-bm-instance-creation.txt file? I\u0027ll look through the other patches too but might make it easier for readers to find.","commit_id":"2fd503fa329af64247817f56d6cc395b16949516"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"c3c13a0d9b03e4e828f3a9b2365a9624172fdb9b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"\r"},{"line_number":41,"context_line":"Example::\r"},{"line_number":42,"context_line":"\r"},{"line_number":43,"context_line":"\t$ glance add name\u003d\"baremetal deployment ramdisk\" is_public\u003dtrue container_format\u003dari disk_format\u003dari \u003c /tmp/deploy-ramdisk.img\r"},{"line_number":44,"context_line":"\tUploading image \u0027baremetal deployment ramdisk\u0027\r"},{"line_number":45,"context_line":"\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d[100%] 114.951697M/s, ETA  0h  0m  0s\r"},{"line_number":46,"context_line":"\tAdded new image with ID: e99775cb-f78d-401e-9d14-acd86e2f36e3\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAALn%2F%2F3zw%3D","line":43,"updated":"2012-10-31 13:44:21.000000000","message":"For the latest glance client, glance add sends a \"deprecated\" warning - probably want to use glance create-image...","commit_id":"2fd503fa329af64247817f56d6cc395b16949516"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"c3c13a0d9b03e4e828f3a9b2365a9624172fdb9b","unresolved":false,"context_lines":[{"line_number":138,"context_line":"Create tables::\r"},{"line_number":139,"context_line":"\r"},{"line_number":140,"context_line":"\t$ nova-baremetal-manage db sync\r"},{"line_number":141,"context_line":"\r"},{"line_number":142,"context_line":"\r"},{"line_number":143,"context_line":"Create Baremetal Instance Type\r"},{"line_number":144,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAALn%2F%2F3zc%3D","line":141,"updated":"2012-10-31 13:44:21.000000000","message":"If we\u0027re getting rid of nova-manage, does it make sense to add nova-baremetal-manage? Is there a way to do the commands with an API? This is a bit of an ignorant question but this new command set does stick out to me.","commit_id":"2fd503fa329af64247817f56d6cc395b16949516"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"7abcf37e308f214d738a412c93ed79c5aee643d2","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Deplyment Kernel/RAMDisk per Image\r"},{"line_number":164,"context_line":"----------------------------------\r"},{"line_number":165,"context_line":"\r"},{"line_number":166,"context_line":"You can also specify a deploymant kernel/ramdisk by Glance\u0027s properties; deploy_kernel_id and deploy_ramdisk_id. These properties take precidence over ones in nove.conf.\r"},{"line_number":167,"context_line":"\r"},{"line_number":168,"context_line":"Example: set the properties to an image (29b99aad-99b7-4e58-bd55-7640eb8ea9ae)::\r"},{"line_number":169,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAALn%2F%2Fz3E%3D","line":166,"updated":"2012-11-05 14:12:54.000000000","message":"deploy_ramdisk_id probably shouldn\u0027t be split over two lines.\n\nI think you meant nova.conf not nove.conf","commit_id":"5a4a347efa9620e993e83c0f3208819416eacac8"}],"nova/virt/baremetal/doc/pxe-bm-instance-creation.rst":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":16,"context_line":"  baremetal_deploy_kernel \u003d xxxxxxxxxx\r"},{"line_number":17,"context_line":"  baremetal_deploy_ramdisk \u003d yyyyyyyy\r"},{"line_number":18,"context_line":"\r"},{"line_number":19,"context_line":"3) The nova-compute selects a bare-metal host from its pool based on hardware resources and the instance type (# of cpus, memory, HDDs).\r"},{"line_number":20,"context_line":"\r"},{"line_number":21,"context_line":"4) kernel and ramdisk for the deployment, and the user specified kernel and ramdisk are put to TFTP server.  PXE are configured for the bare-metal host.\r"},{"line_number":22,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":6,"id":"AAAALH%2F%2FG2w%3D","line":19,"updated":"2012-10-18 15:25:10.000000000","message":"several lines \u003e 80 columns","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"39951ab09d31bdca6d142dd109005603b9eea10e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"  baremetal_deploy_kernel \u003d xxxxxxxxxx\r"},{"line_number":17,"context_line":"  baremetal_deploy_ramdisk \u003d yyyyyyyy\r"},{"line_number":18,"context_line":"\r"},{"line_number":19,"context_line":"3) The nova-compute selects a bare-metal host from its pool based on hardware resources and the instance type (# of cpus, memory, HDDs).\r"},{"line_number":20,"context_line":"\r"},{"line_number":21,"context_line":"4) kernel and ramdisk for the deployment, and the user specified kernel and ramdisk are put to TFTP server.  PXE are configured for the bare-metal host.\r"},{"line_number":22,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":6,"id":"AAAALH%2F%2FG1A%3D","line":19,"in_reply_to":"AAAALH%2F%2FG2w%3D","updated":"2012-10-19 07:58:54.000000000","message":"I tried insert newline, then ReST\u0027s output was broken. Can we obey the rule of lines\u003e80 in ReST?","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"}],"nova/virt/baremetal/ipmi.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                self._exec_ipmitool(\"power on\")"},{"line_number":133,"context_line":"            except Exception:"},{"line_number":134,"context_line":"                LOG.exception(\"power_on failed\")"},{"line_number":135,"context_line":"            time.sleep(5)"},{"line_number":136,"context_line":"        return baremetal_states.ACTIVE"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _power_off(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG20%3D","line":135,"updated":"2012-10-18 15:25:10.000000000","message":"Is 5s a universal constant, or do we need to make it configurable?","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"39951ab09d31bdca6d142dd109005603b9eea10e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                self._exec_ipmitool(\"power on\")"},{"line_number":133,"context_line":"            except Exception:"},{"line_number":134,"context_line":"                LOG.exception(\"power_on failed\")"},{"line_number":135,"context_line":"            time.sleep(5)"},{"line_number":136,"context_line":"        return baremetal_states.ACTIVE"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _power_off(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FGx0%3D","line":135,"in_reply_to":"AAAALH%2F%2FG20%3D","updated":"2012-10-19 07:58:54.000000000","message":"I added flags","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"56466fe7ee20a5c7e2fbab6fb12a8db165e7c0fe","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            except Exception:"},{"line_number":148,"context_line":"                LOG.exception(\"power_off failed\")"},{"line_number":149,"context_line":"            time.sleep(FLAGS.baremetal_ipmi_power_wait)"},{"line_number":150,"context_line":"        return baremetal_states.DELETED"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _power_status(self):"},{"line_number":153,"context_line":"        out_err \u003d self._exec_ipmitool(\"power status\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALH%2F%2FGQ8%3D","line":150,"updated":"2012-10-20 18:07:38.000000000","message":"It sure seems like some reuse between _power_on() and _power_off() is warranted here.","commit_id":"05a43977f5f39397ea9f5d1a60459938fff81dd1"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"56466fe7ee20a5c7e2fbab6fb12a8db165e7c0fe","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        pidfile \u003d self._console_pidfile(node_id)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        TERMINAL \u003d FLAGS.baremetal_term"},{"line_number":168,"context_line":"        CERTDIR \u003d FLAGS.baremetal_term_cert_dir"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        args \u003d []"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALH%2F%2FGQ4%3D","line":168,"updated":"2012-10-20 18:07:38.000000000","message":"I think you should not capitalize these, as it makes their use below look like top-level variables, which they are not.","commit_id":"05a43977f5f39397ea9f5d1a60459938fff81dd1"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"56466fe7ee20a5c7e2fbab6fb12a8db165e7c0fe","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        ipmi_args \u003d \"/:%s:%s:HOME:ipmitool -H %s -I lanplus \" \\"},{"line_number":192,"context_line":"                    \" -U %s -f %s sol activate\" \\"},{"line_number":193,"context_line":"                    % (str(uid), str(gid), self._address, self._user, pwfile)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        args.append(ipmi_args)"},{"line_number":196,"context_line":"        # Run shellinaboxd without pipes. Otherwise utils.execute() waits"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALH%2F%2FGQw%3D","line":193,"updated":"2012-10-20 18:07:38.000000000","message":"I think that this string formatting is definitely deserving of named parameters. I.e.:\n\n\"/:%(uid)s:%(gid)s:HOME:...\" % dict(uid\u003dstr(uid), gid\u003dstr(gid))","commit_id":"05a43977f5f39397ea9f5d1a60459938fff81dd1"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"56466fe7ee20a5c7e2fbab6fb12a8db165e7c0fe","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        pidfile \u003d self._console_pidfile(node_id)"},{"line_number":219,"context_line":"        if os.path.exists(pidfile):"},{"line_number":220,"context_line":"            with open(pidfile, \u0027r\u0027) as f:"},{"line_number":221,"context_line":"                return int(f.read())"},{"line_number":222,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALH%2F%2FGQo%3D","line":221,"updated":"2012-10-20 18:07:38.000000000","message":"Maybe you should catch the case where this throws a ValueError if it\u0027s not the right format (or empty) and handle it properly?","commit_id":"05a43977f5f39397ea9f5d1a60459938fff81dd1"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5e27159eb08998c6b7f30cd4b62b9231674044d9","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        x.append(\u0027\u003c/dev/null\u0027)"},{"line_number":210,"context_line":"        x.append(\u0027\u003e/dev/null\u0027)"},{"line_number":211,"context_line":"        x.append(\u00272\u003e\u00261\u0027)"},{"line_number":212,"context_line":"        utils.execute(\u0027 \u0027.join(x), shell\u003dTrue)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def stop_console(self):"},{"line_number":215,"context_line":"        _stop_console(self._node_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAALn%2F%2F%2FyM%3D","line":212,"updated":"2012-10-22 14:22:04.000000000","message":"In the previous version of the patch set, you returned the result of utils.execute(). Did you mean to remove that?","commit_id":"410629b052c1bd5932c62169304ac9cfe925b4f2"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"65a27f6fecbc17791099ef7439f8153c6df97a27","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        x.append(\u0027\u003c/dev/null\u0027)"},{"line_number":210,"context_line":"        x.append(\u0027\u003e/dev/null\u0027)"},{"line_number":211,"context_line":"        x.append(\u00272\u003e\u00261\u0027)"},{"line_number":212,"context_line":"        utils.execute(\u0027 \u0027.join(x), shell\u003dTrue)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def stop_console(self):"},{"line_number":215,"context_line":"        _stop_console(self._node_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAALn%2F%2F%2Fxw%3D","line":212,"in_reply_to":"AAAALn%2F%2F%2FyM%3D","updated":"2012-10-22 15:19:18.000000000","message":"Yes. It is because the caller of this method doesn\u0027t expect any returning value.","commit_id":"410629b052c1bd5932c62169304ac9cfe925b4f2"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"b7a2130ec04e886cd2acbfa378f6645c0c376d17","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    if console_pid:"},{"line_number":90,"context_line":"        utils.execute(\u0027kill\u0027, str(console_pid),"},{"line_number":91,"context_line":"                      run_as_root\u003dTrue,"},{"line_number":92,"context_line":"                      check_exit_code\u003dFalse)"},{"line_number":93,"context_line":"    bm_utils.unlink_without_raise(_console_pidfile(node_id))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAALn%2F%2F3nc%3D","line":92,"updated":"2012-10-31 15:28:07.000000000","message":"Why spawn an external kill process rather than using os.kill?","commit_id":"2fd503fa329af64247817f56d6cc395b16949516"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"b7a2130ec04e886cd2acbfa378f6645c0c376d17","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        ipmi_args \u003d \"/:%(uid)s:%(gid)s:HOME:ipmitool -H %(address)s\" \\"},{"line_number":197,"context_line":"                    \" -I lanplus -U %(user)s -f %(pwfile)s sol activate\" \\"},{"line_number":198,"context_line":"                    % {\u0027uid\u0027: str(os.getuid()),"},{"line_number":199,"context_line":"                       \u0027gid\u0027: str(os.getgid()),"},{"line_number":200,"context_line":"                       \u0027address\u0027: self._address,"},{"line_number":201,"context_line":"                       \u0027user\u0027: self._user,"},{"line_number":202,"context_line":"                       \u0027pwfile\u0027: pwfile,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAALn%2F%2F3nE%3D","line":199,"updated":"2012-10-31 15:28:07.000000000","message":"str() is unnecessary here because the %s will convert int to str.","commit_id":"2fd503fa329af64247817f56d6cc395b16949516"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"480042a030ce319b01cc577e7efeca6d73ca4435","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        return \"%s: %s\" % (self.status, self.msg)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class Ipmi(object):"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def __init__(self, node):"},{"line_number":108,"context_line":"        self._node_id \u003d node[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAMH%2F%2FwMM%3D","line":105,"updated":"2012-11-27 05:57:29.000000000","message":"Should this derive from a common \"interface\" object?","commit_id":"9669870685fdc7bd199d24198331520e36ca86e5"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"fecb8aa4874b7ba5d5754a2840e5963a677a7f0f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.virt.libvirt import utils as libvirt_utils"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"opts \u003d ["},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027baremetal_term\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027shellinaboxd\u0027,"},{"line_number":39,"context_line":"               help\u003d\u0027path to baremetal terminal program\u0027),"},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027baremetal_term_cert_dir\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAMX%2F%2F%2F4A%3D","line":37,"updated":"2012-12-03 00:11:53.000000000","message":"Can we call this \"baremetal_terminal\"? I\u0027m thinking that people might think of other meanings for \"term\".","commit_id":"dc328efd6a436f5b6dd262bd6cbd6b3a3d109818"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9a87cc6ca1b405e5fbd89213c9417a259173b596","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.virt.libvirt import utils as libvirt_utils"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"opts \u003d ["},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027baremetal_term\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027shellinaboxd\u0027,"},{"line_number":39,"context_line":"               help\u003d\u0027path to baremetal terminal program\u0027),"},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027baremetal_term_cert_dir\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAMX%2F%2F%2FqE%3D","line":37,"in_reply_to":"AAAAMX%2F%2F%2F4A%3D","updated":"2012-12-03 11:21:58.000000000","message":"Done","commit_id":"dc328efd6a436f5b6dd262bd6cbd6b3a3d109818"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"fecb8aa4874b7ba5d5754a2840e5963a677a7f0f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    cfg.StrOpt(\u0027baremetal_term\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027shellinaboxd\u0027,"},{"line_number":39,"context_line":"               help\u003d\u0027path to baremetal terminal program\u0027),"},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027baremetal_term_cert_dir\u0027,"},{"line_number":41,"context_line":"               default\u003dNone,"},{"line_number":42,"context_line":"               help\u003d\u0027path to baremetal terminal SSL cert(PEM)\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027baremetal_term_pid_dir\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAMX%2F%2F%2F38%3D","line":40,"updated":"2012-12-03 00:11:53.000000000","message":"Ditto.","commit_id":"dc328efd6a436f5b6dd262bd6cbd6b3a3d109818"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"fecb8aa4874b7ba5d5754a2840e5963a677a7f0f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    cfg.StrOpt(\u0027baremetal_term_cert_dir\u0027,"},{"line_number":41,"context_line":"               default\u003dNone,"},{"line_number":42,"context_line":"               help\u003d\u0027path to baremetal terminal SSL cert(PEM)\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027baremetal_term_pid_dir\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027$state_path/baremetal/console\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027path to directory stores pidfiles of baremetal_term\u0027),"},{"line_number":46,"context_line":"    cfg.IntOpt(\u0027baremetal_ipmi_power_retry\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAMX%2F%2F%2F34%3D","line":43,"updated":"2012-12-03 00:11:53.000000000","message":"Ditto.","commit_id":"dc328efd6a436f5b6dd262bd6cbd6b3a3d109818"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"fecb8aa4874b7ba5d5754a2840e5963a677a7f0f","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        args.append(self._address)"},{"line_number":129,"context_line":"        args.append(\"-U\")"},{"line_number":130,"context_line":"        args.append(self._user)"},{"line_number":131,"context_line":"        args.append(\"-f\")"},{"line_number":132,"context_line":"        pwfile \u003d _make_password_file(self._password)"},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            args.append(pwfile)"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAMX%2F%2F%2F30%3D","line":131,"updated":"2012-12-03 00:11:53.000000000","message":"Why not just construct an initial array containing these values instead of calling append over and over?","commit_id":"dc328efd6a436f5b6dd262bd6cbd6b3a3d109818"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9a87cc6ca1b405e5fbd89213c9417a259173b596","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        args.append(self._address)"},{"line_number":129,"context_line":"        args.append(\"-U\")"},{"line_number":130,"context_line":"        args.append(self._user)"},{"line_number":131,"context_line":"        args.append(\"-f\")"},{"line_number":132,"context_line":"        pwfile \u003d _make_password_file(self._password)"},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            args.append(pwfile)"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAMX%2F%2F%2FqA%3D","line":131,"in_reply_to":"AAAAMX%2F%2F%2F30%3D","updated":"2012-12-03 11:21:58.000000000","message":"Done","commit_id":"dc328efd6a436f5b6dd262bd6cbd6b3a3d109818"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"80565753eec62cec1d434310946b7fac7953085e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            return int(pidstr)"},{"line_number":81,"context_line":"        except ValueError:"},{"line_number":82,"context_line":"            pass"},{"line_number":83,"context_line":"        LOG.warn(\"pidfile %s does not contain any pid\", pidfile)"},{"line_number":84,"context_line":"    return None"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAMX%2F%2F3Tw%3D","line":83,"updated":"2012-12-11 22:44:04.000000000","message":"not i18n","commit_id":"004decc069809691bfbb78aadc48dab8f1389045"}],"nova/virt/baremetal/pxe.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":76,"context_line":"Template \u003d None"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def _late_load_cheetah():"},{"line_number":80,"context_line":"    global Template"},{"line_number":81,"context_line":"    if Template is None:"},{"line_number":82,"context_line":"        t \u003d __import__(\u0027Cheetah.Template\u0027, globals(), locals(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG3Y%3D","line":79,"updated":"2012-10-18 15:25:10.000000000","message":"Why is cheetah imported in this scary hacky way rather than normally?","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"39951ab09d31bdca6d142dd109005603b9eea10e","unresolved":false,"context_lines":[{"line_number":76,"context_line":"Template \u003d None"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def _late_load_cheetah():"},{"line_number":80,"context_line":"    global Template"},{"line_number":81,"context_line":"    if Template is None:"},{"line_number":82,"context_line":"        t \u003d __import__(\u0027Cheetah.Template\u0027, globals(), locals(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FGzU%3D","line":79,"in_reply_to":"AAAALH%2F%2FG3Y%3D","updated":"2012-10-19 07:58:54.000000000","message":"I don\u0027t know the reason... I borrow it from nova/virt/netutils.py.","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    import random"},{"line_number":116,"context_line":"    import string"},{"line_number":117,"context_line":"    chars \u003d string.ascii_uppercase + string.digits"},{"line_number":118,"context_line":"    return \"\".join([random.choice(chars) for _ in range(count)])"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"def _start_dnsmasq(interface, tftp_root, client_address, pid_path, lease_path):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG4A%3D","line":118,"updated":"2012-10-18 15:25:10.000000000","message":"This is a micro-optimization, but if you change the square brackets to parentheses here to make a generator comprehension instead of a list comprehension, you avoid creating a list just to throw it away.","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":130,"context_line":"             \u0027--tftp-root\u003d%s\u0027 % tftp_root,"},{"line_number":131,"context_line":"             \u0027--dhcp-boot\u003dpxelinux.0\u0027,"},{"line_number":132,"context_line":"             \u0027--dhcp-range\u003d%s,%s\u0027 % (client_address, client_address),"},{"line_number":133,"context_line":"             run_as_root\u003dTrue)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"def _cache_image_x(context, target, image_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG34%3D","line":133,"updated":"2012-10-18 15:25:10.000000000","message":"I think the other arguments should be indented under the first argument.","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    pxe_interface \u003d vlan.ensure_vlan(vlan_id, parent_interface)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    from nova.network import linux_net"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    chain \u003d \u0027bm-%s\u0027 % pxe_interface"},{"line_number":190,"context_line":"    iptables \u003d linux_net.iptables_manager"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG3o%3D","line":187,"updated":"2012-10-18 15:25:10.000000000","message":"Why is this import done here rather than at the top?  Is it particularly expensive?","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    utils.execute(\u0027ip\u0027, \u0027address\u0027,"},{"line_number":200,"context_line":"            \u0027add\u0027, server_address + \u0027/24\u0027,"},{"line_number":201,"context_line":"            \u0027dev\u0027, pxe_interface,"},{"line_number":202,"context_line":"            run_as_root\u003dTrue)"},{"line_number":203,"context_line":"    utils.execute(\u0027ip\u0027, \u0027route\u0027, \u0027add\u0027,"},{"line_number":204,"context_line":"            client_address, \u0027scope\u0027, \u0027host\u0027, \u0027dev\u0027, pxe_interface,"},{"line_number":205,"context_line":"            run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG3k%3D","line":202,"updated":"2012-10-18 15:25:10.000000000","message":"indentation","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            run_as_root\u003dTrue)"},{"line_number":203,"context_line":"    utils.execute(\u0027ip\u0027, \u0027route\u0027, \u0027add\u0027,"},{"line_number":204,"context_line":"            client_address, \u0027scope\u0027, \u0027host\u0027, \u0027dev\u0027, pxe_interface,"},{"line_number":205,"context_line":"            run_as_root\u003dTrue)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    shutil.copyfile(FLAGS.baremetal_pxelinux_path,"},{"line_number":208,"context_line":"                    os.path.join(tftp_root, \u0027pxelinux.0\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG3Q%3D","line":205,"updated":"2012-10-18 15:25:10.000000000","message":"indentation","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    shutil.rmtree(os.path.join(tftp_root, \u0027pxelinux.cfg\u0027), ignore_errors\u003dTrue)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    from nova.network import linux_net"},{"line_number":232,"context_line":"    chain \u003d \u0027bm-%s\u0027 % pxe_interface"},{"line_number":233,"context_line":"    iptables \u003d linux_net.iptables_manager"},{"line_number":234,"context_line":"    iptables.ipv4[\u0027filter\u0027].remove_chain(chain)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG3M%3D","line":231,"updated":"2012-10-18 15:25:10.000000000","message":"again, why the late import here?","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                     \u0027ATTR{address}\u003d\u003d\"%s\", ATTR{dev_id}\u003d\u003d\"0x0\", \u0027 \\"},{"line_number":283,"context_line":"                     \u0027ATTR{type}\u003d\u003d\"1\", KERNEL\u003d\u003d\"eth*\", NAME\u003d\"eth%d\"\\n\u0027 \\"},{"line_number":284,"context_line":"                     % (hwaddr.lower(), i)"},{"line_number":285,"context_line":"            i +\u003d 1"},{"line_number":286,"context_line":"        if not injected_files:"},{"line_number":287,"context_line":"            injected_files \u003d []"},{"line_number":288,"context_line":"        injected_files.append((\u0027/etc/udev/rules.d/70-persistent-net.rules\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG3E%3D","line":285,"updated":"2012-10-18 15:25:10.000000000","message":"for (i, hwaddr) in enumerate(nics_in_order)\nis cleaner than manually maintaining the loop counter","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            ifc_num +\u003d 1"},{"line_number":303,"context_line":"            # always inject"},{"line_number":304,"context_line":"            #if not network_ref[\u0027injected\u0027]:"},{"line_number":305,"context_line":"            #    continue"},{"line_number":306,"context_line":"            have_injected_networks \u003d True"},{"line_number":307,"context_line":"            address \u003d mapping[\u0027ips\u0027][0][\u0027ip\u0027]"},{"line_number":308,"context_line":"            netmask \u003d mapping[\u0027ips\u0027][0][\u0027netmask\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG3A%3D","line":305,"updated":"2012-10-18 15:25:10.000000000","message":"I think this commented-out code should go.","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            name \u003d \u0027eth%d\u0027 % ifc_num"},{"line_number":317,"context_line":"            if FLAGS.baremetal_use_unsafe_vlan \\"},{"line_number":318,"context_line":"                    and mapping[\u0027should_create_vlan\u0027] \\"},{"line_number":319,"context_line":"                    and network_ref.get(\u0027vlan\u0027):"},{"line_number":320,"context_line":"                name \u003d \u0027eth%d.%d\u0027 % (ifc_num, network_ref.get(\u0027vlan\u0027))"},{"line_number":321,"context_line":"            net_info \u003d {\u0027name\u0027: name,"},{"line_number":322,"context_line":"                   \u0027address\u0027: address,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG28%3D","line":319,"updated":"2012-10-18 15:25:10.000000000","message":"Parentheses read better than backslashes for continuation lines.","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"0050302e99ff633a7fc08449357072da3709fe52","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                   \u0027address_v6\u0027: address_v6,"},{"line_number":328,"context_line":"                   \u0027gateway_v6\u0027: gateway_v6,"},{"line_number":329,"context_line":"                   \u0027netmask_v6\u0027: netmask_v6,"},{"line_number":330,"context_line":"                   \u0027hwaddress\u0027: mapping[\u0027mac\u0027]}"},{"line_number":331,"context_line":"            nets.append(net_info)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        if have_injected_networks:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FG24%3D","line":330,"updated":"2012-10-18 15:25:10.000000000","message":"Please align all keys of the dictionary, use a trailing comma on the last one, and put the closing curly brace on its own line.  This makes for easier maintenance later.","commit_id":"92af6cd08ed0d91f14ab26a65f3eb779cd2d26fc"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"e3c785fdf625b09a482d9f0b6a123b95550c5234","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        else:"},{"line_number":278,"context_line":"            key \u003d None"},{"line_number":279,"context_line":"        nets \u003d []"},{"line_number":280,"context_line":"        for (ifc_num, (network_ref, mapping)) in enumerate(network_info):"},{"line_number":281,"context_line":"            address \u003d mapping[\u0027ips\u0027][0][\u0027ip\u0027]"},{"line_number":282,"context_line":"            netmask \u003d mapping[\u0027ips\u0027][0][\u0027netmask\u0027]"},{"line_number":283,"context_line":"            address_v6 \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALH%2F%2FGhE%3D","line":280,"updated":"2012-10-19 13:07:59.000000000","message":"I think you created a fencepost error here when you changed to enumerate.  ifc_num started at -1 before, but now starts at 0, and it doesn\u0027t look like you changed anything to account for that.","commit_id":"a55dffb36f3f98d4d69ab8af23e984f065cc0167"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"8dc0c6ec6f35a9e1aa8050044b5f7d0d35f1f948","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        else:"},{"line_number":278,"context_line":"            key \u003d None"},{"line_number":279,"context_line":"        nets \u003d []"},{"line_number":280,"context_line":"        for (ifc_num, (network_ref, mapping)) in enumerate(network_info):"},{"line_number":281,"context_line":"            address \u003d mapping[\u0027ips\u0027][0][\u0027ip\u0027]"},{"line_number":282,"context_line":"            netmask \u003d mapping[\u0027ips\u0027][0][\u0027netmask\u0027]"},{"line_number":283,"context_line":"            address_v6 \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALH%2F%2FGeo%3D","line":280,"in_reply_to":"AAAALH%2F%2FGfw%3D","updated":"2012-10-19 15:11:57.000000000","message":"I missed that the +1 was at the top.  You\u0027re right; it\u0027s equivalent.","commit_id":"a55dffb36f3f98d4d69ab8af23e984f065cc0167"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"6ade4f0bd743e77e695413736c14c3af9a5d35c9","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        else:"},{"line_number":278,"context_line":"            key \u003d None"},{"line_number":279,"context_line":"        nets \u003d []"},{"line_number":280,"context_line":"        for (ifc_num, (network_ref, mapping)) in enumerate(network_info):"},{"line_number":281,"context_line":"            address \u003d mapping[\u0027ips\u0027][0][\u0027ip\u0027]"},{"line_number":282,"context_line":"            netmask \u003d mapping[\u0027ips\u0027][0][\u0027netmask\u0027]"},{"line_number":283,"context_line":"            address_v6 \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALH%2F%2FGfw%3D","line":280,"in_reply_to":"AAAALH%2F%2FGhE%3D","updated":"2012-10-19 14:55:02.000000000","message":"This produces the same result as it did. ifc_num was started at -1, but +\u003d1 at very top of the loop. So, actual values of ifc_num in the loop ware 0,1,2,... It is not changed in the current code. And ifc_num is not used out of the loop. No problem.","commit_id":"a55dffb36f3f98d4d69ab8af23e984f065cc0167"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"56466fe7ee20a5c7e2fbab6fb12a8db165e7c0fe","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                LOG.warn(_(\u0027instance %(inst_name)s: ignoring error injecting\u0027"},{"line_number":342,"context_line":"                        \u0027 data into image %(img_id)s (%(e)s)\u0027) % locals(),"},{"line_number":343,"context_line":"                         instance\u003dinst)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def create_image(self, var, context, image_meta, node, instance,"},{"line_number":346,"context_line":"                     injected_files\u003dNone, admin_password\u003dNone):"},{"line_number":347,"context_line":"        image_root \u003d var[\u0027image_root\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALH%2F%2FGKk%3D","line":344,"updated":"2012-10-20 18:07:38.000000000","message":"Any chance you could break up this and other long functions a little more? There is a lot going on here and I think it would be nice to have a little more functional decomposition.","commit_id":"05a43977f5f39397ea9f5d1a60459938fff81dd1"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"480042a030ce319b01cc577e7efeca6d73ca4435","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    iptables.apply()"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"class PXE(object):"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def define_vars(self, instance, network_info, block_device_info):"},{"line_number":226,"context_line":"        var \u003d {}"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAMH%2F%2FwMQ%3D","line":223,"updated":"2012-11-27 05:57:29.000000000","message":"Should this derive from a common \"interface\" object?","commit_id":"9669870685fdc7bd199d24198331520e36ca86e5"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"80565753eec62cec1d434310946b7fac7953085e","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        ami_id \u003d str(image_meta[\u0027id\u0027])"},{"line_number":359,"context_line":"        fileutils.ensure_tree(image_root)"},{"line_number":360,"context_line":"        image_path \u003d os.path.join(image_root, \u0027disk\u0027)"},{"line_number":361,"context_line":"        LOG.debug(\"fetching image id\u003d%s target\u003d%s\", ami_id, image_path)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        bm_utils.cache_image(context\u003dcontext,"},{"line_number":364,"context_line":"                             target\u003dimage_path,"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAMX%2F%2F3UE%3D","line":361,"updated":"2012-12-11 22:44:04.000000000","message":"not i18n","commit_id":"004decc069809691bfbb78aadc48dab8f1389045"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"80565753eec62cec1d434310946b7fac7953085e","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                             user_id\u003dinstance[\u0027user_id\u0027],"},{"line_number":367,"context_line":"                             project_id\u003dinstance[\u0027project_id\u0027])"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        LOG.debug(\"injecting to image id\u003d%s target\u003d%s\", ami_id, image_path)"},{"line_number":370,"context_line":"        self._inject_to_image(context, image_path, node,"},{"line_number":371,"context_line":"                              instance, network_info,"},{"line_number":372,"context_line":"                              injected_files\u003dinjected_files,"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAMX%2F%2F3UA%3D","line":369,"updated":"2012-12-11 22:44:04.000000000","message":"not i18n","commit_id":"004decc069809691bfbb78aadc48dab8f1389045"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"80565753eec62cec1d434310946b7fac7953085e","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                              injected_files\u003dinjected_files,"},{"line_number":373,"context_line":"                              admin_password\u003dadmin_password)"},{"line_number":374,"context_line":"        var[\u0027image_path\u0027] \u003d image_path"},{"line_number":375,"context_line":"        LOG.debug(\"fetching images all done\")"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def destroy_images(self, var, context, node, instance):"},{"line_number":378,"context_line":"        image_root \u003d var[\u0027image_root\u0027]"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAMX%2F%2F3T8%3D","line":375,"updated":"2012-12-11 22:44:04.000000000","message":"not i18n","commit_id":"004decc069809691bfbb78aadc48dab8f1389045"}],"nova/virt/baremetal/vlan.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"80565753eec62cec1d434310946b7fac7953085e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"def _execute(*cmd, **kwargs):"},{"line_number":31,"context_line":"    \"\"\"Wrapper around utils._execute for fake_network.\"\"\""},{"line_number":32,"context_line":"    if CONF.fake_network:"},{"line_number":33,"context_line":"        LOG.debug(\u0027FAKE NET: %s\u0027, \u0027 \u0027.join(map(str, cmd)))"},{"line_number":34,"context_line":"        return \u0027fake\u0027, 0"},{"line_number":35,"context_line":"    else:"},{"line_number":36,"context_line":"        return utils.execute(*cmd, **kwargs)"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAMX%2F%2F3UQ%3D","line":33,"updated":"2012-12-11 22:44:04.000000000","message":"not i18n","commit_id":"004decc069809691bfbb78aadc48dab8f1389045"}]}
