)]}'
{"nova/virt/baremetal/vbox.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2012 NTT DOCOMO, INC."},{"line_number":4,"context_line":"# Copyright (c) 2011 University of Southern California / ISI"},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3rE%3D","line":3,"updated":"2012-12-28 18:40:40.000000000","message":"This is a new file, so you probably should stick your own (c) header here, at the top of the list.","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2012 NTT DOCOMO, INC."},{"line_number":4,"context_line":"# Copyright (c) 2011 University of Southern California / ISI"},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3mU%3D","line":3,"in_reply_to":"AAAAM3%2F%2F3rE%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"# VirtualBox power driver"},{"line_number":20,"context_line":"# cjk 12.26.12"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from nova import utils"},{"line_number":23,"context_line":"from nova.openstack.common import cfg"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3rA%3D","line":20,"updated":"2012-12-28 18:40:40.000000000","message":"please remove author/date line here.","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"# VirtualBox power driver"},{"line_number":20,"context_line":"# cjk 12.26.12"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from nova import utils"},{"line_number":23,"context_line":"from nova.openstack.common import cfg"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3mM%3D","line":20,"in_reply_to":"AAAAM3%2F%2F3rA%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               default\u003d\u0027/usr/bin/VBoxManage\u0027,"},{"line_number":38,"context_line":"               help\u003d\u0027base command to use\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027host_user\u0027,"},{"line_number":40,"context_line":"               default\u003d\u0027ssh_user\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027user to execute commands as\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027host_pass\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027ssh_password\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3q0%3D","line":40,"updated":"2012-12-28 18:40:40.000000000","message":"it would be better not to set a default here, and then test the config option in __init__ and raise an exception if it\u0027s not present.","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               default\u003d\u0027/usr/bin/VBoxManage\u0027,"},{"line_number":38,"context_line":"               help\u003d\u0027base command to use\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027host_user\u0027,"},{"line_number":40,"context_line":"               default\u003d\u0027ssh_user\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027user to execute commands as\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027host_pass\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027ssh_password\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3lg%3D","line":40,"in_reply_to":"AAAAM3%2F%2F3q0%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":40,"context_line":"               default\u003d\u0027ssh_user\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027user to execute commands as\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027host_pass\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027ssh_password\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027password for host_user\u0027),"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3qw%3D","line":43,"updated":"2012-12-28 18:40:40.000000000","message":"ditto","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"               default\u003d\u0027ssh_user\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027user to execute commands as\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027host_pass\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027ssh_password\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027password for host_user\u0027),"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3ik%3D","line":43,"in_reply_to":"AAAAM3%2F%2F3qw%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    return Vbox()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class Vbox(base.NodeDriver):"},{"line_number":67,"context_line":"    def define_vars(self, instance, network_info, block_device_info):"},{"line_number":68,"context_line":"        return {}"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3qs%3D","line":66,"updated":"2012-12-28 18:40:40.000000000","message":"I don\u0027t think you need this class, since you\u0027re only implementing a PowerManager, not a NodeDriver.","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    return Vbox()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class Vbox(base.NodeDriver):"},{"line_number":67,"context_line":"    def define_vars(self, instance, network_info, block_device_info):"},{"line_number":68,"context_line":"        return {}"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3kE%3D","line":66,"in_reply_to":"AAAAM3%2F%2F3qs%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":95,"context_line":"class VboxPowerManager(base.PowerManager):"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def __init__(self, **kwargs):"},{"line_number":98,"context_line":"        if \u0027node\u0027 in kwargs:"},{"line_number":99,"context_line":"            node \u003d kwargs.pop(\u0027node\u0027, None)"},{"line_number":100,"context_line":"        if \u0027instance\u0027 in kwargs:"},{"line_number":101,"context_line":"            instance \u003d kwargs.pop(\u0027instance\u0027, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3qk%3D","line":98,"updated":"2012-12-28 18:40:40.000000000","message":"if check is not necessary when using pop(\u0027name\u0027, None)","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"class VboxPowerManager(base.PowerManager):"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def __init__(self, **kwargs):"},{"line_number":98,"context_line":"        if \u0027node\u0027 in kwargs:"},{"line_number":99,"context_line":"            node \u003d kwargs.pop(\u0027node\u0027, None)"},{"line_number":100,"context_line":"        if \u0027instance\u0027 in kwargs:"},{"line_number":101,"context_line":"            instance \u003d kwargs.pop(\u0027instance\u0027, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3j4%3D","line":98,"in_reply_to":"AAAAM3%2F%2F3qk%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def __init__(self, **kwargs):"},{"line_number":98,"context_line":"        if \u0027node\u0027 in kwargs:"},{"line_number":99,"context_line":"            node \u003d kwargs.pop(\u0027node\u0027, None)"},{"line_number":100,"context_line":"        if \u0027instance\u0027 in kwargs:"},{"line_number":101,"context_line":"            instance \u003d kwargs.pop(\u0027instance\u0027, None)"},{"line_number":102,"context_line":"            self._node_name \u003d instance[\u0027hostname\u0027]"},{"line_number":103,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3qc%3D","line":100,"updated":"2012-12-28 18:40:40.000000000","message":"ditto","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def __init__(self, **kwargs):"},{"line_number":98,"context_line":"        if \u0027node\u0027 in kwargs:"},{"line_number":99,"context_line":"            node \u003d kwargs.pop(\u0027node\u0027, None)"},{"line_number":100,"context_line":"        if \u0027instance\u0027 in kwargs:"},{"line_number":101,"context_line":"            instance \u003d kwargs.pop(\u0027instance\u0027, None)"},{"line_number":102,"context_line":"            self._node_name \u003d instance[\u0027hostname\u0027]"},{"line_number":103,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3j8%3D","line":100,"in_reply_to":"AAAAM3%2F%2F3qc%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            node \u003d kwargs.pop(\u0027node\u0027, None)"},{"line_number":100,"context_line":"        if \u0027instance\u0027 in kwargs:"},{"line_number":101,"context_line":"            instance \u003d kwargs.pop(\u0027instance\u0027, None)"},{"line_number":102,"context_line":"            self._node_name \u003d instance[\u0027hostname\u0027]"},{"line_number":103,"context_line":"        else:"},{"line_number":104,"context_line":"            self._node_name \u003d \u0027Not Set\u0027"},{"line_number":105,"context_line":"        self._connection \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3qU%3D","line":102,"updated":"2012-12-28 18:40:40.000000000","message":"once the preceeding \"if\" are removed, you can do this line with\n\n  self._node_name \u003d instance.get(\u0027hostname\u0027, None)","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            node \u003d kwargs.pop(\u0027node\u0027, None)"},{"line_number":100,"context_line":"        if \u0027instance\u0027 in kwargs:"},{"line_number":101,"context_line":"            instance \u003d kwargs.pop(\u0027instance\u0027, None)"},{"line_number":102,"context_line":"            self._node_name \u003d instance[\u0027hostname\u0027]"},{"line_number":103,"context_line":"        else:"},{"line_number":104,"context_line":"            self._node_name \u003d \u0027Not Set\u0027"},{"line_number":105,"context_line":"        self._connection \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3kA%3D","line":102,"in_reply_to":"AAAAM3%2F%2F3qU%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        node_found \u003d \u0027\u0027"},{"line_number":118,"context_line":"        node_to_look_for \u003d \u0027\"%s\"\u0027 % node_to_look_for"},{"line_number":119,"context_line":"        for node in result:"},{"line_number":120,"context_line":"            if node_to_look_for.lower() in node.lower():"},{"line_number":121,"context_line":"                LOG.info(\u0027Found node : %s\u0027 % node_to_look_for)"},{"line_number":122,"context_line":"                node_found \u003d node[1:node.index(\u0027\"\u0027, 3)]"},{"line_number":123,"context_line":"        return node_found"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3qE%3D","line":120,"updated":"2012-12-28 18:40:40.000000000","message":"minor optimization -- please move the .lower() calls outside of the for loop. Eg:\n\n  node_to_look_for \u003d self._node_name.lower()\nand\n  result \u003d self.run_command(cmd).lower()","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"cf40c94d22103224b1360f137a3cd2a291282881","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        node_found \u003d \u0027\u0027"},{"line_number":118,"context_line":"        node_to_look_for \u003d \u0027\"%s\"\u0027 % node_to_look_for"},{"line_number":119,"context_line":"        for node in result:"},{"line_number":120,"context_line":"            if node_to_look_for.lower() in node.lower():"},{"line_number":121,"context_line":"                LOG.info(\u0027Found node : %s\u0027 % node_to_look_for)"},{"line_number":122,"context_line":"                node_found \u003d node[1:node.index(\u0027\"\u0027, 3)]"},{"line_number":123,"context_line":"        return node_found"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3ag%3D","line":120,"in_reply_to":"AAAAM3%2F%2F3jo%3D","updated":"2012-12-29 00:53:45.000000000","message":"Ah, so that\u0027s why you return \"node_found\", as opposed to just returning True/False. Perhaps adding a doc header that explains this would be good :)","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        node_found \u003d \u0027\u0027"},{"line_number":118,"context_line":"        node_to_look_for \u003d \u0027\"%s\"\u0027 % node_to_look_for"},{"line_number":119,"context_line":"        for node in result:"},{"line_number":120,"context_line":"            if node_to_look_for.lower() in node.lower():"},{"line_number":121,"context_line":"                LOG.info(\u0027Found node : %s\u0027 % node_to_look_for)"},{"line_number":122,"context_line":"                node_found \u003d node[1:node.index(\u0027\"\u0027, 3)]"},{"line_number":123,"context_line":"        return node_found"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3jo%3D","line":120,"in_reply_to":"AAAAM3%2F%2F3qE%3D","updated":"2012-12-29 00:29:04.000000000","message":"this edit would change the function. Virtual box is case sensitive. So I am using the return the raw result as virtual box sees it.\n\nie \"nova boot --blah pxenode\" matches virtual box guest PxeNode. vboxmanage requires PxeNode to control it.","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        for node in result:"},{"line_number":120,"context_line":"            if node_to_look_for.lower() in node.lower():"},{"line_number":121,"context_line":"                LOG.info(\u0027Found node : %s\u0027 % node_to_look_for)"},{"line_number":122,"context_line":"                node_found \u003d node[1:node.index(\u0027\"\u0027, 3)]"},{"line_number":123,"context_line":"        return node_found"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def activate_node(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3qA%3D","line":122,"updated":"2012-12-28 18:40:40.000000000","message":"You should probably break out of the for loop once a match is found, no?","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        for node in result:"},{"line_number":120,"context_line":"            if node_to_look_for.lower() in node.lower():"},{"line_number":121,"context_line":"                LOG.info(\u0027Found node : %s\u0027 % node_to_look_for)"},{"line_number":122,"context_line":"                node_found \u003d node[1:node.index(\u0027\"\u0027, 3)]"},{"line_number":123,"context_line":"        return node_found"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def activate_node(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3jg%3D","line":122,"in_reply_to":"AAAAM3%2F%2F3qA%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        return baremetal_states.DELETED"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def is_power_on(self):"},{"line_number":159,"context_line":"        return True"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def start_console(self):"},{"line_number":162,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3p4%3D","line":159,"updated":"2012-12-28 18:40:40.000000000","message":"This should actually check the state of the VM, not just return True.","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        return baremetal_states.DELETED"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def is_power_on(self):"},{"line_number":159,"context_line":"        return True"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def start_console(self):"},{"line_number":162,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3io%3D","line":159,"in_reply_to":"AAAAM3%2F%2F3p4%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    def stop_console(self):"},{"line_number":165,"context_line":"        pass"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def run_command(self, cmd, check_exit_code\u003dTrue):"},{"line_number":168,"context_line":"        \"\"\"Run a remote command using an active ssh connection."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        :param command: String with the command to run."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3p0%3D","line":167,"updated":"2012-12-28 18:40:40.000000000","message":"This looks like a private method. If it is, the name should be prefixed with \"_\".","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    def stop_console(self):"},{"line_number":165,"context_line":"        pass"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def run_command(self, cmd, check_exit_code\u003dTrue):"},{"line_number":168,"context_line":"        \"\"\"Run a remote command using an active ssh connection."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        :param command: String with the command to run."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3is%3D","line":167,"in_reply_to":"AAAAM3%2F%2F3p0%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"6be273467804d2279958ce745f4ba43b28970f70","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self._connection \u003d None"},{"line_number":68,"context_line":"        if not conn.host or not conn.username or not conn.password:"},{"line_number":69,"context_line":"            LOG.exception(_(\u0027Error: host/user/password not set\u0027))"},{"line_number":70,"context_line":"            raise exception.NovaException"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            self.connection_data \u003d conn"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F3aA%3D","line":70,"updated":"2012-12-29 01:12:17.000000000","message":"No need to log it, but instead please raise\n\n  InvalidParamterValue(_(\"Invalid or missing parameter supplied to VBoxPowerManager\"))\n\ninstead of NovaException.","commit_id":"2bd7713767779a07429edbe824031227fce24794"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"6be273467804d2279958ce745f4ba43b28970f70","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        if self._connection is None:"},{"line_number":76,"context_line":"            self._connection \u003d connection.ssh_connect(self.connection_data)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _check_for_node(self):"},{"line_number":79,"context_line":"        node_to_look_for \u003d self._node_name"},{"line_number":80,"context_line":"        LOG.info(\"Checking for %s in VBox vms list\" % node_to_look_for)"},{"line_number":81,"context_line":"        cmd \u003d \u0027%s list vms\u0027 % CONF.baremetal_vbox.cmd_base"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F3aU%3D","line":78,"updated":"2012-12-29 01:12:17.000000000","message":"please add doc header explaining the case-matching stuff","commit_id":"2bd7713767779a07429edbe824031227fce24794"}],"nova/virt/baremetal/virsh.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":54,"context_line":"conn \u003d connection.Connection(CONF.baremetal_virsh.ssh_host,"},{"line_number":55,"context_line":"                             CONF.baremetal_virsh.host_user,"},{"line_number":56,"context_line":"                             CONF.baremetal_virsh.host_pass)"},{"line_number":57,"context_line":"#ssh \u003d connection.ssh_connect(conn)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3pY%3D","line":57,"updated":"2012-12-28 18:40:40.000000000","message":"should this commented-out line just be removed?","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"conn \u003d connection.Connection(CONF.baremetal_virsh.ssh_host,"},{"line_number":55,"context_line":"                             CONF.baremetal_virsh.host_user,"},{"line_number":56,"context_line":"                             CONF.baremetal_virsh.host_pass)"},{"line_number":57,"context_line":"#ssh \u003d connection.ssh_connect(conn)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3b0%3D","line":57,"in_reply_to":"AAAAM3%2F%2F3pY%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        LOG.info(\"Virsh activate_node name %s\" % node_name)"},{"line_number":127,"context_line":"        matched_name \u003d self._check_for_node()"},{"line_number":128,"context_line":"        if matched_name:"},{"line_number":129,"context_line":"            cmd \u003d \u0027%s create %s\u0027 % (CONF.baremetal_virsh.cmd_base,"},{"line_number":130,"context_line":"                                    matched_name)"},{"line_number":131,"context_line":"            result \u003d self.run_command(cmd)"},{"line_number":132,"context_line":"            LOG.info(\u0027Result for run_command: %s\u0027 % result)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3pM%3D","line":129,"updated":"2012-12-28 18:40:40.000000000","message":"I think the command here is \"start %s\"","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        LOG.info(\"Virsh activate_node name %s\" % node_name)"},{"line_number":127,"context_line":"        matched_name \u003d self._check_for_node()"},{"line_number":128,"context_line":"        if matched_name:"},{"line_number":129,"context_line":"            cmd \u003d \u0027%s create %s\u0027 % (CONF.baremetal_virsh.cmd_base,"},{"line_number":130,"context_line":"                                    matched_name)"},{"line_number":131,"context_line":"            result \u003d self.run_command(cmd)"},{"line_number":132,"context_line":"            LOG.info(\u0027Result for run_command: %s\u0027 % result)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3b4%3D","line":129,"in_reply_to":"AAAAM3%2F%2F3pM%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f6702212d425146075a66f43d24edac92065b3fe","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        LOG.info(\"Virsh reboot node: %s\" % node_name)"},{"line_number":138,"context_line":"        matched_name \u003d self._check_for_node()"},{"line_number":139,"context_line":"        if matched_name:"},{"line_number":140,"context_line":"            cmd \u003d \u0027%s reboot %s\u0027 % (CONF.baremetal_virsh.cmd_base,"},{"line_number":141,"context_line":"                                    matched_name)"},{"line_number":142,"context_line":"            result \u003d self.run_command(cmd)"},{"line_number":143,"context_line":"            LOG.info(\u0027Result for run_command: %s\u0027 % result)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3pE%3D","line":140,"updated":"2012-12-28 18:40:40.000000000","message":"Since \"virsh reboot\" just passes the reboot request to the guest, and this is a power driver, I suspect this should be \"virsh reset\". According to the virsh man page:\n\n  reset emulates the power reset button on a machine, \n  where all guest hardware sees the RST line set and reinitializes internal state.","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6e9b9d788e73989162be0c1c89267605268636d7","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        LOG.info(\"Virsh reboot node: %s\" % node_name)"},{"line_number":138,"context_line":"        matched_name \u003d self._check_for_node()"},{"line_number":139,"context_line":"        if matched_name:"},{"line_number":140,"context_line":"            cmd \u003d \u0027%s reboot %s\u0027 % (CONF.baremetal_virsh.cmd_base,"},{"line_number":141,"context_line":"                                    matched_name)"},{"line_number":142,"context_line":"            result \u003d self.run_command(cmd)"},{"line_number":143,"context_line":"            LOG.info(\u0027Result for run_command: %s\u0027 % result)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F3b8%3D","line":140,"in_reply_to":"AAAAM3%2F%2F3pE%3D","updated":"2012-12-29 00:29:04.000000000","message":"Done","commit_id":"cea1e81dd11cb1fdb80bef13c35466ef8a6c8e95"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"6be273467804d2279958ce745f4ba43b28970f70","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self._connection \u003d None"},{"line_number":69,"context_line":"        if not conn.host or not conn.username or not conn.password:"},{"line_number":70,"context_line":"            LOG.exception(_(\u0027Error: host/user/password not set\u0027))"},{"line_number":71,"context_line":"            raise exception.NovaException"},{"line_number":72,"context_line":"        else:"},{"line_number":73,"context_line":"            self.connection_data \u003d conn"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F3Z8%3D","line":71,"updated":"2012-12-29 01:12:17.000000000","message":"ditto on the exception","commit_id":"2bd7713767779a07429edbe824031227fce24794"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"6be273467804d2279958ce745f4ba43b28970f70","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        if self._connection is None:"},{"line_number":77,"context_line":"            self._connection \u003d connection.ssh_connect(self.connection_data)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _check_for_node(self):"},{"line_number":80,"context_line":"        node_to_look_for \u003d self._node_name"},{"line_number":81,"context_line":"        LOG.info(\"Checking for %s in virsh list\" % node_to_look_for)"},{"line_number":82,"context_line":"        cmd \u003d \u0027%s list --all|awk -F\" \" \\\u0027{print $2}\\\u0027\u0027 % \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F3aQ%3D","line":79,"updated":"2012-12-29 01:12:17.000000000","message":"ditto on the doc header. I verified that virsh domain names are also case sensitive.","commit_id":"2bd7713767779a07429edbe824031227fce24794"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"6be273467804d2279958ce745f4ba43b28970f70","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def is_power_on(self):"},{"line_number":126,"context_line":"        node_to_look_for \u003d self._node_name"},{"line_number":127,"context_line":"        LOG.info(\"Checking for %s in virsh list\" % node_to_look_for)"},{"line_number":128,"context_line":"        cmd \u003d \u0027%s list --all|grep running\u0027 % CONF.baremetal_virsh.cmd_base"},{"line_number":129,"context_line":"        result \u003d self._run_command(cmd)"},{"line_number":130,"context_line":"        node_found \u003d \u0027\u0027"},{"line_number":131,"context_line":"        for node in result:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F3aY%3D","line":128,"updated":"2012-12-29 01:12:17.000000000","message":"why does this command not have the awk -F line that\u0027s in _check_for_node?","commit_id":"2bd7713767779a07429edbe824031227fce24794"}],"nova/virt/baremetal/virtual_power_driver.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9b8d6dfc0782a28ae6ec8c663a9202804b32c42c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        "},{"line_number":82,"context_line":"        if _virtual_power_settings is None:"},{"line_number":83,"context_line":"            LOG.info(\"setting up _virtual_power_settings.\")"},{"line_number":84,"context_line":"            _virtual_power_settings \u003d __import__(\\"},{"line_number":85,"context_line":"                       \u0027nova.virt.baremetal.virtual_power_driver_settings\u0027,"},{"line_number":86,"context_line":"                        fromlist\u003d[\u0027VirtPowerManagerSettings\u0027])"},{"line_number":87,"context_line":"        if _cmds is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F0ac%3D","line":84,"updated":"2013-01-03 21:43:59.000000000","message":"this import seems a bit odd...","commit_id":"db74aa0ac3f9d705e85ecf4a7214f9ed78426d2d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9b8d6dfc0782a28ae6ec8c663a9202804b32c42c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        _data_valid \u003d True"},{"line_number":107,"context_line":"        if not CONF.baremetal.virtual_power_ssh_host:"},{"line_number":108,"context_line":"            _data_valid \u003d False"},{"line_number":109,"context_line":"            raise exception.VirtualPowerNoHost()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if not CONF.baremetal.virtual_power_host_user:"},{"line_number":112,"context_line":"            _data_valid \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F0a8%3D","line":109,"updated":"2013-01-03 21:43:59.000000000","message":"Instead of implementing a new exception, I would just use exception.NovaException, with a message something like\n\n  \"Virtual power ssh host is not defined. Baremetal virtual power manager can not start\"","commit_id":"db74aa0ac3f9d705e85ecf4a7214f9ed78426d2d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9b8d6dfc0782a28ae6ec8c663a9202804b32c42c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            _data_valid \u003d False"},{"line_number":117,"context_line":"            raise exception.VirtualPowerNoPass()"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        if _data_valid:"},{"line_number":120,"context_line":"            _conn \u003d connection.Connection(\\"},{"line_number":121,"context_line":"                        CONF.baremetal.virtual_power_ssh_host,"},{"line_number":122,"context_line":"                        CONF.baremetal.virtual_power_host_user,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F0b0%3D","line":119,"updated":"2013-01-03 21:43:59.000000000","message":"\"if _data_valid\" doesn\u0027t seem to have any real function here. You could remove _data_valid entirely, and still be assured that connection.Connection() would only be called if all three options are set.","commit_id":"db74aa0ac3f9d705e85ecf4a7214f9ed78426d2d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9b8d6dfc0782a28ae6ec8c663a9202804b32c42c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        if self._connection is None:"},{"line_number":128,"context_line":"            self._connection \u003d connection.ssh_connect(self.connection_data)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _check_for_node(self, _running_only\u003dFalse):"},{"line_number":131,"context_line":"        \"\"\"set _matched_node to ensure Proper Case for Virtual power driver\"\"\""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        if _running_only:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F0bs%3D","line":130,"updated":"2013-01-03 21:43:59.000000000","message":"No need for leading-underscore notation here. \"running_only\" isn\u0027t a private variable.","commit_id":"db74aa0ac3f9d705e85ecf4a7214f9ed78426d2d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9b8d6dfc0782a28ae6ec8c663a9202804b32c42c","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        _base_cmd will also get prepended to the command."},{"line_number":203,"context_line":"        \"\"\""},{"line_number":204,"context_line":"        self._set_connection()"},{"line_number":205,"context_line":"        # check for %s in cmd if its there swap out for the _matched_name"},{"line_number":206,"context_line":"        if \u0027%s\u0027 in cmd:"},{"line_number":207,"context_line":"            cmd \u003d cmd % self._matched_name"},{"line_number":208,"context_line":"        # now build the actual command"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F0bc%3D","line":205,"updated":"2013-01-03 21:43:59.000000000","message":"The code here is probably clear enough without the inline # comments","commit_id":"db74aa0ac3f9d705e85ecf4a7214f9ed78426d2d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"acb1228777a28b5fa36af903b5fce122a249a286","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from nova.openstack.common import log as logging"},{"line_number":25,"context_line":"from nova.virt.baremetal import baremetal_states"},{"line_number":26,"context_line":"from nova.virt.baremetal import base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import nova.virt.powervm.common as connection"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"opts \u003d ["}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Fl4Y%3D","line":27,"updated":"2013-01-14 20:12:14.000000000","message":"No blank line here - all local imports are one group.","commit_id":"88eebe7a0174f3b73ec34a3ae507446e71e01087"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"48b1bae096eada0b4c9c75e139e23c4499bc3f86","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from nova.openstack.common import log as logging"},{"line_number":25,"context_line":"from nova.virt.baremetal import baremetal_states"},{"line_number":26,"context_line":"from nova.virt.baremetal import base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import nova.virt.powervm.common as connection"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"opts \u003d ["}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2FlhE%3D","line":27,"in_reply_to":"AAAAM3%2F%2Fl4Y%3D","updated":"2013-01-14 23:06:35.000000000","message":"Done","commit_id":"88eebe7a0174f3b73ec34a3ae507446e71e01087"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"acb1228777a28b5fa36af903b5fce122a249a286","unresolved":false,"context_lines":[{"line_number":33,"context_line":"               help\u003d\u0027ip or name to virtual power host\u0027),"},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027virtual_power_type\u0027,"},{"line_number":35,"context_line":"               default\u003d\u0027VBox\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027base command to use for virtual power\u0027),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027virtual_power_host_user\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":39,"context_line":"               help\u003d\u0027user to execute virtual power commands as\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Fl4U%3D","line":36,"updated":"2013-01-14 20:12:14.000000000","message":"List all the options here, it will make it easier. (E.g. that virsh is an option).\n\nAlso perhaps all lower case? Easier to type.","commit_id":"88eebe7a0174f3b73ec34a3ae507446e71e01087"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"48b1bae096eada0b4c9c75e139e23c4499bc3f86","unresolved":false,"context_lines":[{"line_number":33,"context_line":"               help\u003d\u0027ip or name to virtual power host\u0027),"},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027virtual_power_type\u0027,"},{"line_number":35,"context_line":"               default\u003d\u0027VBox\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027base command to use for virtual power\u0027),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027virtual_power_host_user\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":39,"context_line":"               help\u003d\u0027user to execute virtual power commands as\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2FlhA%3D","line":36,"in_reply_to":"AAAAM3%2F%2Fl4U%3D","updated":"2013-01-14 23:06:35.000000000","message":"Done","commit_id":"88eebe7a0174f3b73ec34a3ae507446e71e01087"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"acb1228777a28b5fa36af903b5fce122a249a286","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            self._connection \u003d connection.ssh_connect(self.connection_data)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _check_for_node(self):"},{"line_number":125,"context_line":"        LOG.info(\"Looking up Name for Mac address %s.\" % self._mac_address)"},{"line_number":126,"context_line":"        cmd \u003d self._vp_cmd.list_cmd"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        full_node_list \u003d self._run_command(cmd)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Fl4Q%3D","line":125,"updated":"2013-01-14 20:12:14.000000000","message":"Should be debug.","commit_id":"88eebe7a0174f3b73ec34a3ae507446e71e01087"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"48b1bae096eada0b4c9c75e139e23c4499bc3f86","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            self._connection \u003d connection.ssh_connect(self.connection_data)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _check_for_node(self):"},{"line_number":125,"context_line":"        LOG.info(\"Looking up Name for Mac address %s.\" % self._mac_address)"},{"line_number":126,"context_line":"        cmd \u003d self._vp_cmd.list_cmd"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        full_node_list \u003d self._run_command(cmd)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Flgg%3D","line":125,"in_reply_to":"AAAAM3%2F%2Fl4Q%3D","updated":"2013-01-14 23:06:35.000000000","message":"Done","commit_id":"88eebe7a0174f3b73ec34a3ae507446e71e01087"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a6d574ed42c3d604a00771efaf3cd7475bf6b68f","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            result \u003d self._run_command(cmd)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        node_running \u003d False"},{"line_number":188,"context_line":"        for node in result:"},{"line_number":189,"context_line":"            if self._matched_name in node:"},{"line_number":190,"context_line":"                node_running \u003d True"},{"line_number":191,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2FlTM%3D","line":188,"updated":"2013-01-15 01:45:51.000000000","message":"\"result\" may be undefined if self._check_for_node() did not succeed. This method should be rewritten like so:\n\n  node_running \u003d False\n  if self._check_for_node():\n    cmd \u003d ...\n    result \u003d ...\n    for node in result:\n      if self._matched_name in node:\n        node_running \u003d True\n        break\n\n  return node_running","commit_id":"88eebe7a0174f3b73ec34a3ae507446e71e01087"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4c88baa1ee04cd3b624ad2303011fc2c2bb9151d","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        return self._matched_name"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def activate_node(self):"},{"line_number":147,"context_line":"        LOG.debug(\"activate_node name %s\" % self._node_name)"},{"line_number":148,"context_line":"        if self._check_for_node():"},{"line_number":149,"context_line":"            cmd \u003d self._vp_cmd.start_cmd"},{"line_number":150,"context_line":"            self._run_command(cmd)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2FeW4%3D","line":147,"updated":"2013-01-20 23:21:29.000000000","message":"You might want the rare actions (activate, reset, deactivate) to be INFO. It was the low level chatter that I meant to refer to before. Up to you.","commit_id":"4ec50dbd8a0efbd8dc31125a559245a481526a2d"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"119820b0ee2c9cc9d4a41b9725cf4960c58cc2b3","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        return self._matched_name"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def activate_node(self):"},{"line_number":147,"context_line":"        LOG.debug(\"activate_node name %s\" % self._node_name)"},{"line_number":148,"context_line":"        if self._check_for_node():"},{"line_number":149,"context_line":"            cmd \u003d self._vp_cmd.start_cmd"},{"line_number":150,"context_line":"            self._run_command(cmd)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2Fb68%3D","line":147,"in_reply_to":"AAAAM3%2F%2FeW4%3D","updated":"2013-01-22 22:02:52.000000000","message":"Done","commit_id":"4ec50dbd8a0efbd8dc31125a559245a481526a2d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4c88baa1ee04cd3b624ad2303011fc2c2bb9151d","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"            for node in result:"},{"line_number":189,"context_line":"                if self._matched_name in node:"},{"line_number":190,"context_line":"                    node_running \u003d True"},{"line_number":191,"context_line":"                    break"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        return node_running"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2FeW0%3D","line":190,"updated":"2013-01-20 23:21:29.000000000","message":"You can return early here. I would write this as:\nif not self._check_for_node():\n    return False\ncmd \u003d self._vp_cmd.list_running_cmd\nnodes \u003d self._run_command(cmd)\nfor node in nodes:\n    if self._matched_name in node:\n        return True\nreturn False","commit_id":"4ec50dbd8a0efbd8dc31125a559245a481526a2d"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"119820b0ee2c9cc9d4a41b9725cf4960c58cc2b3","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"            for node in result:"},{"line_number":189,"context_line":"                if self._matched_name in node:"},{"line_number":190,"context_line":"                    node_running \u003d True"},{"line_number":191,"context_line":"                    break"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        return node_running"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2Fb7I%3D","line":190,"in_reply_to":"AAAAM3%2F%2FeW0%3D","updated":"2013-01-22 22:02:52.000000000","message":"Done","commit_id":"4ec50dbd8a0efbd8dc31125a559245a481526a2d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4c88baa1ee04cd3b624ad2303011fc2c2bb9151d","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        :param command: String with the command to run."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        If {_NodeName_} in the command it will get swapped out for"},{"line_number":207,"context_line":"        the _matched_name value."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        base_cmd will also get prepended to the command."}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2FeWw%3D","line":206,"updated":"2013-01-20 23:21:29.000000000","message":"\"is in\", and perhaps \"replaced by\".","commit_id":"4ec50dbd8a0efbd8dc31125a559245a481526a2d"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"119820b0ee2c9cc9d4a41b9725cf4960c58cc2b3","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        :param command: String with the command to run."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        If {_NodeName_} in the command it will get swapped out for"},{"line_number":207,"context_line":"        the _matched_name value."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        base_cmd will also get prepended to the command."}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2Fb8c%3D","line":206,"in_reply_to":"AAAAM3%2F%2FeWw%3D","updated":"2013-01-22 22:02:52.000000000","message":"Done","commit_id":"4ec50dbd8a0efbd8dc31125a559245a481526a2d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4c88baa1ee04cd3b624ad2303011fc2c2bb9151d","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self._set_connection()"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        if \u0027{_NodeName_}\u0027 in cmd:"},{"line_number":214,"context_line":"            cmd \u003d cmd.replace(\u0027{_NodeName_}\u0027, self._matched_name)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        cmd \u003d \u0027%s %s\u0027 % (self._vp_cmd.base_cmd, cmd)"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2FeWo%3D","line":214,"updated":"2013-01-20 23:21:29.000000000","message":"I believe you can just write:\ncmd \u003d cmd.replace(\u0027{_NodeName_}\u0027, self._matched_name)\nwith no guarding if.","commit_id":"4ec50dbd8a0efbd8dc31125a559245a481526a2d"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"119820b0ee2c9cc9d4a41b9725cf4960c58cc2b3","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self._set_connection()"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        if \u0027{_NodeName_}\u0027 in cmd:"},{"line_number":214,"context_line":"            cmd \u003d cmd.replace(\u0027{_NodeName_}\u0027, self._matched_name)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        cmd \u003d \u0027%s %s\u0027 % (self._vp_cmd.base_cmd, cmd)"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2Fb8g%3D","line":214,"in_reply_to":"AAAAM3%2F%2FeWo%3D","updated":"2013-01-22 22:02:52.000000000","message":"Done","commit_id":"4ec50dbd8a0efbd8dc31125a559245a481526a2d"}],"nova/virt/baremetal/virtual_power_driver_settings.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"acb1228777a28b5fa36af903b5fce122a249a286","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class VirtPowerManagerSettings(object):"},{"line_number":27,"context_line":"    \"\"\"Virtual Power Driver settings for specific hypervisors\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, op_mode\u003d\u0027VBox\u0027):"},{"line_number":30,"context_line":"        LOG.info(\"setting up for op_mode: %s\" % op_mode)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Fl4g%3D","line":27,"updated":"2013-01-14 20:12:14.000000000","message":"This looks like two separate things to me; why is it one class?\n\nPerhaps\nvbox \u003d dict(base_cmd\u003d\u0027/usr/bin/VBoxManage\u0027, ...)\nvirsh \u003d dict(base_cmd\u003d\u0027/usr/bin/virsh\u0027, ....)","commit_id":"88eebe7a0174f3b73ec34a3ae507446e71e01087"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a6d574ed42c3d604a00771efaf3cd7475bf6b68f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.start_cmd \u003d \u0027start {_NodeName_}\u0027"},{"line_number":49,"context_line":"        self.stop_cmd \u003d \u0027destroy {_NodeName_}\u0027"},{"line_number":50,"context_line":"        self.reboot_cmd \u003d \u0027reset {_NodeName_}\u0027"},{"line_number":51,"context_line":"        self.list_cmd \u003d \u0027list --all | tail -n +2 | awk -F\" \" \\\u0027{print \"$2\"}\\\u0027\u0027"},{"line_number":52,"context_line":"        self.list_running_cmd \u003d \\"},{"line_number":53,"context_line":"            \u0027list --all|grep running|awk -F\" \" \\\u0027{print \"$2\"}\\\u0027\u0027"},{"line_number":54,"context_line":"        self.get_node_macs \u003d \"\"\"dumpxml {_NodeName_}\"\"\" \\"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2FlTE%3D","line":51,"updated":"2013-01-15 01:45:51.000000000","message":"Extra quotes around \"$2\" break this command. It should read:\n\n  self.list_cmd \u003d \u0027list --all | tail -n +2 | awk -F\" \" \\\u0027{print $2}\\\u0027\u0027","commit_id":"88eebe7a0174f3b73ec34a3ae507446e71e01087"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a6d574ed42c3d604a00771efaf3cd7475bf6b68f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.reboot_cmd \u003d \u0027reset {_NodeName_}\u0027"},{"line_number":51,"context_line":"        self.list_cmd \u003d \u0027list --all | tail -n +2 | awk -F\" \" \\\u0027{print \"$2\"}\\\u0027\u0027"},{"line_number":52,"context_line":"        self.list_running_cmd \u003d \\"},{"line_number":53,"context_line":"            \u0027list --all|grep running|awk -F\" \" \\\u0027{print \"$2\"}\\\u0027\u0027"},{"line_number":54,"context_line":"        self.get_node_macs \u003d \"\"\"dumpxml {_NodeName_}\"\"\" \\"},{"line_number":55,"context_line":"            \"\"\"|grep \"mac address\" | awk -F \"\u0027\" \u0027{print $2}\u0027|tr -d \u0027:\u0027\"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2FlTA%3D","line":53,"updated":"2013-01-15 01:45:51.000000000","message":"ditto with the extra quotes around \"$2\"","commit_id":"88eebe7a0174f3b73ec34a3ae507446e71e01087"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4c88baa1ee04cd3b624ad2303011fc2c2bb9151d","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class VirtPowerManagerSettings(object):"},{"line_number":27,"context_line":"    \"\"\"Virtual Power Driver settings for specific hypervisors.\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, op_mode\u003d\u0027vbox\u0027):"},{"line_number":30,"context_line":"        LOG.info(\"setting up for op_mode: %s\" % op_mode)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2FeWk%3D","line":27,"updated":"2013-01-20 23:21:29.000000000","message":"Even more than before, this should be two distinct things, not one class.","commit_id":"4ec50dbd8a0efbd8dc31125a559245a481526a2d"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"119820b0ee2c9cc9d4a41b9725cf4960c58cc2b3","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class VirtPowerManagerSettings(object):"},{"line_number":27,"context_line":"    \"\"\"Virtual Power Driver settings for specific hypervisors.\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, op_mode\u003d\u0027vbox\u0027):"},{"line_number":30,"context_line":"        LOG.info(\"setting up for op_mode: %s\" % op_mode)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2FbbQ%3D","line":27,"in_reply_to":"AAAAM3%2F%2FeWk%3D","updated":"2013-01-22 22:02:52.000000000","message":"Done","commit_id":"4ec50dbd8a0efbd8dc31125a559245a481526a2d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"dc171359c51b9aac6ab82c1c3dda3c91f4c8a68d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"set commands for basic Virtual Box control.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self):"},{"line_number":31,"context_line":"        LOG.info(\"setting up for VirtualBox.\")"},{"line_number":32,"context_line":"        self.base_cmd \u003d \u0027/usr/bin/VBoxManage\u0027"},{"line_number":33,"context_line":"        self.start_cmd \u003d \u0027startvm {_NodeName_}\u0027"},{"line_number":34,"context_line":"        self.stop_cmd \u003d \u0027controlvm {_NodeName_} poweroff\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAM3%2F%2FbXs%3D","line":31,"updated":"2013-01-22 22:43:23.000000000","message":"Logging here is a bad idea, every object construction will log. I suggest logging where you import it, and debug level at most.","commit_id":"f4f8f6c8f2173c715af2a9fac2c2e2eecc4818d6"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"31025c6102694b44722676c2b25c9a47f3c8080c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"set commands for basic Virtual Box control.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self):"},{"line_number":31,"context_line":"        LOG.info(\"setting up for VirtualBox.\")"},{"line_number":32,"context_line":"        self.base_cmd \u003d \u0027/usr/bin/VBoxManage\u0027"},{"line_number":33,"context_line":"        self.start_cmd \u003d \u0027startvm {_NodeName_}\u0027"},{"line_number":34,"context_line":"        self.stop_cmd \u003d \u0027controlvm {_NodeName_} poweroff\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAM3%2F%2FbTc%3D","line":31,"in_reply_to":"AAAAM3%2F%2FbXs%3D","updated":"2013-01-22 23:21:31.000000000","message":"Done","commit_id":"f4f8f6c8f2173c715af2a9fac2c2e2eecc4818d6"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"dc171359c51b9aac6ab82c1c3dda3c91f4c8a68d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        _build_cmd.append(\"\u0027\")"},{"line_number":43,"context_line":"        _build_cmd.append(\u0027\"\u0027)"},{"line_number":44,"context_line":"        _build_cmd.append(\"\u0027 \u0027{print $2}\u0027\")"},{"line_number":45,"context_line":"        self.get_node_macs \u003d \u0027\u0027.join(_build_cmd)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class virsh(object):"},{"line_number":48,"context_line":"    \"\"\"set commands for basic Virsh control.\"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAM3%2F%2FbXc%3D","line":45,"updated":"2013-01-22 22:43:23.000000000","message":"This would likely be cleaner as\nself.get_node_macs \u003d (\"showvminfo --machinereadable {_NodeName_} | \"\n    \"grep \"\n...\n)\n\nbasically strings with no , between them just get concatted.","commit_id":"f4f8f6c8f2173c715af2a9fac2c2e2eecc4818d6"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"31025c6102694b44722676c2b25c9a47f3c8080c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        _build_cmd.append(\"\u0027\")"},{"line_number":43,"context_line":"        _build_cmd.append(\u0027\"\u0027)"},{"line_number":44,"context_line":"        _build_cmd.append(\"\u0027 \u0027{print $2}\u0027\")"},{"line_number":45,"context_line":"        self.get_node_macs \u003d \u0027\u0027.join(_build_cmd)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class virsh(object):"},{"line_number":48,"context_line":"    \"\"\"set commands for basic Virsh control.\"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAM3%2F%2FbTQ%3D","line":45,"in_reply_to":"AAAAM3%2F%2FbXc%3D","updated":"2013-01-22 23:21:31.000000000","message":"Done","commit_id":"f4f8f6c8f2173c715af2a9fac2c2e2eecc4818d6"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"dc171359c51b9aac6ab82c1c3dda3c91f4c8a68d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        _build_cmd.append(\u0027\"\u0027)"},{"line_number":44,"context_line":"        _build_cmd.append(\"\u0027 \u0027{print $2}\u0027\")"},{"line_number":45,"context_line":"        self.get_node_macs \u003d \u0027\u0027.join(_build_cmd)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class virsh(object):"},{"line_number":48,"context_line":"    \"\"\"set commands for basic Virsh control.\"\"\""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAM3%2F%2FbX0%3D","line":46,"updated":"2013-01-22 22:43:23.000000000","message":"2 lines between top level things.","commit_id":"f4f8f6c8f2173c715af2a9fac2c2e2eecc4818d6"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"31025c6102694b44722676c2b25c9a47f3c8080c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        _build_cmd.append(\u0027\"\u0027)"},{"line_number":44,"context_line":"        _build_cmd.append(\"\u0027 \u0027{print $2}\u0027\")"},{"line_number":45,"context_line":"        self.get_node_macs \u003d \u0027\u0027.join(_build_cmd)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class virsh(object):"},{"line_number":48,"context_line":"    \"\"\"set commands for basic Virsh control.\"\"\""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAM3%2F%2FbTI%3D","line":46,"in_reply_to":"AAAAM3%2F%2FbX0%3D","updated":"2013-01-22 23:21:31.000000000","message":"Done","commit_id":"f4f8f6c8f2173c715af2a9fac2c2e2eecc4818d6"}]}
