)]}'
{"etc/ironic/ironic.conf.sample":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"89c5aef60092d1e7b30518cd9a45389c0cd4b464","unresolved":false,"context_lines":[{"line_number":465,"context_line":"#pxe_config_template\u003d$pybasedir/drivers/modules/agent_config.template"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"# Neutron bootfile DHCP parameter. (string value)"},{"line_number":468,"context_line":"#pxe_bootfile_name\u003dpxelinux.0"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"# Maximum size (in MiB) of cache for master images, including"},{"line_number":471,"context_line":"# those in use (integer value)"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"baada198_358c802e","line":468,"updated":"2014-07-30 19:05:37.000000000","message":"I\u0027m a bit confused as to why pxe_* related options are in [agent].","commit_id":"64c8eb4c154da9c366ea98dd106eb399045591a9"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"89c5aef60092d1e7b30518cd9a45389c0cd4b464","unresolved":false,"context_lines":[{"line_number":497,"context_line":"#pxe_append_params\u003dnofb nomodeset vga\u003dnormal"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"# Neutron bootfile DHCP parameter. (string value)"},{"line_number":500,"context_line":"#pxe_bootfile_name\u003dpxelinux.0"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"[api]"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"baada198_4c7ed4b0","line":500,"updated":"2014-07-30 19:05:37.000000000","message":"Did you really want the same two options in pxe and agent files? I\u0027m not quite sure how this got changed to be under [agent].","commit_id":"64c8eb4c154da9c366ea98dd106eb399045591a9"}],"ironic/drivers/agent.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"89c5aef60092d1e7b30518cd9a45389c0cd4b464","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    This driver implements the `core` functionality, combining"},{"line_number":27,"context_line":"    :class:`ironic.drivers.modules.ipmitool.IPMIPower` for power on/off and"},{"line_number":28,"context_line":"    reboot with :class:`ironic.drivers.modules.agent.AgentDeploy` for"},{"line_number":29,"context_line":"    image deployment."},{"line_number":30,"context_line":"    Implementations are in those respective classes; this class is merely the"},{"line_number":31,"context_line":"    glue between them."}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_fd3bd836","line":28,"updated":"2014-07-30 19:05:37.000000000","message":"Maybe remove \u0027reboot with \u0027. I\u0027m not sure that it is useful.\n\nIt also does more than just implement the core functionality (eg vendor functionality is also implemented here) but not sure it is worth putting in the docstring cuz it may change.\n\nditto for the rest of the classes.","commit_id":"64c8eb4c154da9c366ea98dd106eb399045591a9"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"89c5aef60092d1e7b30518cd9a45389c0cd4b464","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.mapping \u003d {\u0027heartbeat\u0027: self.agent_vendor}"},{"line_number":39,"context_line":"        self.dl_mapping \u003d {\u0027lookup\u0027: self.agent_vendor}"},{"line_number":40,"context_line":"        self.vendor \u003d utils.MixinVendorInterface(self.mapping,"},{"line_number":41,"context_line":"                driver_passthru_mapping\u003dself.dl_mapping)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class AgentAndIPMINativeDriver(base.BaseDriver):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_fdcaf86d","line":41,"updated":"2014-07-30 19:05:37.000000000","message":"For all the classes in this file.\n\nWhy are you using a MixinVendorInterface when the only vendor interface being used is agent.AgentVendorInterface()?","commit_id":"64c8eb4c154da9c366ea98dd106eb399045591a9"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"05ae38c38d8e348227f4c5fa191534dc4ec096b1","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    This driver implements the `core` functionality, combining"},{"line_number":27,"context_line":"    :class:`ironic.drivers.modules.ipmitool.IPMIPower` for power on/off and"},{"line_number":28,"context_line":"    reboot with :class:`ironic.drivers.modules.agent.AgentDeploy` for"},{"line_number":29,"context_line":"    image deployment."},{"line_number":30,"context_line":"    Implementations are in those respective classes; this class is merely the"},{"line_number":31,"context_line":"    glue between them."}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_181893cc","line":28,"updated":"2014-07-30 20:01:55.000000000","message":"Maybe remove \u0027reboot with \u0027. I\u0027m not sure that it is useful.\n\nIt also does more than just implement the core functionality (eg vendor functionality is also implemented here) but not sure it is worth putting in the docstring cuz it may change.\n\nditto for the rest of the classes.","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    This driver implements the `core` functionality, combining"},{"line_number":27,"context_line":"    :class:`ironic.drivers.modules.ipmitool.IPMIPower` for power on/off and"},{"line_number":28,"context_line":"    reboot with :class:`ironic.drivers.modules.agent.AgentDeploy` for"},{"line_number":29,"context_line":"    image deployment."},{"line_number":30,"context_line":"    Implementations are in those respective classes; this class is merely the"},{"line_number":31,"context_line":"    glue between them."}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_4c608d34","line":28,"in_reply_to":"baada198_181893cc","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"05ae38c38d8e348227f4c5fa191534dc4ec096b1","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.mapping \u003d {\u0027heartbeat\u0027: self.agent_vendor}"},{"line_number":39,"context_line":"        self.dl_mapping \u003d {\u0027lookup\u0027: self.agent_vendor}"},{"line_number":40,"context_line":"        self.vendor \u003d utils.MixinVendorInterface(self.mapping,"},{"line_number":41,"context_line":"                driver_passthru_mapping\u003dself.dl_mapping)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class AgentAndIPMINativeDriver(base.BaseDriver):"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_3876370d","line":41,"updated":"2014-07-30 20:01:55.000000000","message":"For all the classes in this file.\n\nWhy are you using a MixinVendorInterface when the only vendor interface being used is agent.AgentVendorInterface()?","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.mapping \u003d {\u0027heartbeat\u0027: self.agent_vendor}"},{"line_number":39,"context_line":"        self.dl_mapping \u003d {\u0027lookup\u0027: self.agent_vendor}"},{"line_number":40,"context_line":"        self.vendor \u003d utils.MixinVendorInterface(self.mapping,"},{"line_number":41,"context_line":"                driver_passthru_mapping\u003dself.dl_mapping)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class AgentAndIPMINativeDriver(base.BaseDriver):"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_2c5d197d","line":41,"in_reply_to":"baada198_3876370d","updated":"2014-07-30 21:37:23.000000000","message":"This is required to use vendor_passthru and vendor_driver_passthru.","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"}],"ironic/drivers/fake.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"89c5aef60092d1e7b30518cd9a45389c0cd4b464","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class FakeAgentDriver(base.BaseDriver):"},{"line_number":102,"context_line":"    \"\"\"Example implementation of a Driver.\"\"\""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def __init__(self):"},{"line_number":105,"context_line":"        self.power \u003d fake.FakePower()"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_3db6303f","line":102,"updated":"2014-07-30 19:05:37.000000000","message":"If you feel like it, change it to something that has \u0027AgentDriver\u0027 in the docstring ;)","commit_id":"64c8eb4c154da9c366ea98dd106eb399045591a9"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"05ae38c38d8e348227f4c5fa191534dc4ec096b1","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class FakeAgentDriver(base.BaseDriver):"},{"line_number":102,"context_line":"    \"\"\"Example implementation of a Driver.\"\"\""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def __init__(self):"},{"line_number":105,"context_line":"        self.power \u003d fake.FakePower()"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_d81d3bc1","line":102,"updated":"2014-07-30 20:01:55.000000000","message":"If you feel like it, change it to something that has \u0027AgentDriver\u0027 in the docstring ;)","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class FakeAgentDriver(base.BaseDriver):"},{"line_number":102,"context_line":"    \"\"\"Example implementation of a Driver.\"\"\""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def __init__(self):"},{"line_number":105,"context_line":"        self.power \u003d fake.FakePower()"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_2cb9997c","line":102,"in_reply_to":"baada198_d81d3bc1","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"}],"ironic/drivers/modules/agent.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"89c5aef60092d1e7b30518cd9a45389c0cd4b464","unresolved":false,"context_lines":[{"line_number":58,"context_line":"               help\u003d\u0027Maximum TTL (in minutes) for old master images in cache\u0027),"},{"line_number":59,"context_line":"    cfg.IntOpt(\u0027heartbeat_timeout\u0027,"},{"line_number":60,"context_line":"               default\u003d300,"},{"line_number":61,"context_line":"               help\u003d\u0027Maximum interval for agent heartbeats.\u0027),"},{"line_number":62,"context_line":"    ]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_6c43983f","line":61,"updated":"2014-07-30 19:05:37.000000000","message":"units -- seconds?\n\nHow about \u0027Maximum time (in units) to wait for the agent heartbeat since the last check-in of the agent\u0027.","commit_id":"64c8eb4c154da9c366ea98dd106eb399045591a9"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"05ae38c38d8e348227f4c5fa191534dc4ec096b1","unresolved":false,"context_lines":[{"line_number":58,"context_line":"               help\u003d\u0027Maximum TTL (in minutes) for old master images in cache\u0027),"},{"line_number":59,"context_line":"    cfg.IntOpt(\u0027heartbeat_timeout\u0027,"},{"line_number":60,"context_line":"               default\u003d300,"},{"line_number":61,"context_line":"               help\u003d\u0027Maximum interval for agent heartbeats.\u0027),"},{"line_number":62,"context_line":"    ]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_3b71d1ab","line":61,"updated":"2014-07-30 20:01:55.000000000","message":"units -- seconds?\n\nHow about \u0027Maximum time (in units) to wait for the agent heartbeat since the last check-in of the agent\u0027.","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":58,"context_line":"               help\u003d\u0027Maximum TTL (in minutes) for old master images in cache\u0027),"},{"line_number":59,"context_line":"    cfg.IntOpt(\u0027heartbeat_timeout\u0027,"},{"line_number":60,"context_line":"               default\u003d300,"},{"line_number":61,"context_line":"               help\u003d\u0027Maximum interval for agent heartbeats.\u0027),"},{"line_number":62,"context_line":"    ]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_0ca2153f","line":61,"in_reply_to":"baada198_3b71d1ab","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"05ae38c38d8e348227f4c5fa191534dc4ec096b1","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    return {"},{"line_number":84,"context_line":"        \u0027deployment_aki_path\u0027: pxe_info[\u0027deploy_kernel\u0027][1],"},{"line_number":85,"context_line":"        \u0027deployment_ari_path\u0027: pxe_info[\u0027deploy_ramdisk\u0027][1],"},{"line_number":86,"context_line":"        \u0027pxe_append_params\u0027: CONF.agent.pxe_append_params,"},{"line_number":87,"context_line":"        \u0027ipa_api_url\u0027: ironic_api,"},{"line_number":88,"context_line":"    }"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_1b97ad46","line":86,"updated":"2014-07-30 20:01:55.000000000","message":"shouldn\u0027t this be CONF.agent.agent_pxe_append_params?","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    return {"},{"line_number":84,"context_line":"        \u0027deployment_aki_path\u0027: pxe_info[\u0027deploy_kernel\u0027][1],"},{"line_number":85,"context_line":"        \u0027deployment_ari_path\u0027: pxe_info[\u0027deploy_ramdisk\u0027][1],"},{"line_number":86,"context_line":"        \u0027pxe_append_params\u0027: CONF.agent.pxe_append_params,"},{"line_number":87,"context_line":"        \u0027ipa_api_url\u0027: ironic_api,"},{"line_number":88,"context_line":"    }"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_a7f5c2cd","line":86,"in_reply_to":"baada198_1b97ad46","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c22b64d358cadd06cbdf271d5a28ba2af94268c3","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        deploy images to the node."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        :param task: a TaskManager instance"},{"line_number":230,"context_line":"        :param node: a single Node to validate."},{"line_number":231,"context_line":"        :raises: InvalidParameterValue"},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_e6a9807d","line":230,"updated":"2014-07-30 20:37:27.000000000","message":"don\u0027t need this.","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        deploy images to the node."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        :param task: a TaskManager instance"},{"line_number":230,"context_line":"        :param node: a single Node to validate."},{"line_number":231,"context_line":"        :raises: InvalidParameterValue"},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_6723aa58","line":230,"in_reply_to":"baada198_e6a9807d","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c22b64d358cadd06cbdf271d5a28ba2af94268c3","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        node."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        :param task: a TaskManager instance."},{"line_number":245,"context_line":"        :param node: the Node to act upon."},{"line_number":246,"context_line":"        :returns: status of the deploy. One of ironic.common.states."},{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        dhcp_opts \u003d pxe_utils.dhcp_options_for_instance()"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_e61c20c5","line":245,"updated":"2014-07-30 20:37:27.000000000","message":"no node","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        node."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        :param task: a TaskManager instance."},{"line_number":245,"context_line":"        :param node: the Node to act upon."},{"line_number":246,"context_line":"        :returns: status of the deploy. One of ironic.common.states."},{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        dhcp_opts \u003d pxe_utils.dhcp_options_for_instance()"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_8726fe65","line":245,"in_reply_to":"baada198_e61c20c5","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c22b64d358cadd06cbdf271d5a28ba2af94268c3","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        \"\"\"Tear down a previous deployment on the task\u0027s node."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :param task: a TaskManager instance."},{"line_number":260,"context_line":"        :param node: the Node to act upon."},{"line_number":261,"context_line":"        :returns: status of the deploy. One of ironic.common.states."},{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_668010c0","line":260,"updated":"2014-07-30 20:37:27.000000000","message":"no node","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        \"\"\"Tear down a previous deployment on the task\u0027s node."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :param task: a TaskManager instance."},{"line_number":260,"context_line":"        :param node: the Node to act upon."},{"line_number":261,"context_line":"        :returns: status of the deploy. One of ironic.common.states."},{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_47ba26e1","line":260,"in_reply_to":"baada198_668010c0","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c22b64d358cadd06cbdf271d5a28ba2af94268c3","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        \"\"\"Prepare the deployment environment for this node."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        :param task: a TaskManager instance."},{"line_number":270,"context_line":"        :param node: the Node for which to prepare a deployment environment"},{"line_number":271,"context_line":"                     on this Conductor."},{"line_number":272,"context_line":"        \"\"\""},{"line_number":273,"context_line":"        node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_a6694828","line":270,"updated":"2014-07-30 20:37:27.000000000","message":"no node","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        \"\"\"Prepare the deployment environment for this node."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        :param task: a TaskManager instance."},{"line_number":270,"context_line":"        :param node: the Node for which to prepare a deployment environment"},{"line_number":271,"context_line":"                     on this Conductor."},{"line_number":272,"context_line":"        \"\"\""},{"line_number":273,"context_line":"        node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_87b43ef2","line":270,"in_reply_to":"baada198_a6694828","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c22b64d358cadd06cbdf271d5a28ba2af94268c3","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        pxe_options \u003d _build_pxe_config_options(pxe_info)"},{"line_number":276,"context_line":"        pxe_utils.create_pxe_config(task,"},{"line_number":277,"context_line":"                                    pxe_options,"},{"line_number":278,"context_line":"                                    CONF.agent.pxe_config_template)"},{"line_number":279,"context_line":"        _cache_tftp_images(task.context, node, pxe_info)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        node.instance_info \u003d _build_instance_info_for_deploy(task)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_06dd94dd","line":278,"updated":"2014-07-30 20:37:27.000000000","message":"should it be CONF.agent.agent_pxe_config_template?","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        pxe_options \u003d _build_pxe_config_options(pxe_info)"},{"line_number":276,"context_line":"        pxe_utils.create_pxe_config(task,"},{"line_number":277,"context_line":"                                    pxe_options,"},{"line_number":278,"context_line":"                                    CONF.agent.pxe_config_template)"},{"line_number":279,"context_line":"        _cache_tftp_images(task.context, node, pxe_info)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        node.instance_info \u003d _build_instance_info_for_deploy(task)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_e7c41a62","line":278,"in_reply_to":"baada198_06dd94dd","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c22b64d358cadd06cbdf271d5a28ba2af94268c3","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            This is performed within the `takeover` method."},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        :param task: a TaskManager instance."},{"line_number":326,"context_line":"        :param node: the Node which is now being managed by this Conductor."},{"line_number":327,"context_line":"        \"\"\""},{"line_number":328,"context_line":"        # Unnecessary for external DHCP."},{"line_number":329,"context_line":"        neutron.update_neutron(task, CONF.agent.pxe_bootfile_name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_4695cce1","line":326,"updated":"2014-07-30 20:37:27.000000000","message":"no node","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            This is performed within the `takeover` method."},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        :param task: a TaskManager instance."},{"line_number":326,"context_line":"        :param node: the Node which is now being managed by this Conductor."},{"line_number":327,"context_line":"        \"\"\""},{"line_number":328,"context_line":"        # Unnecessary for external DHCP."},{"line_number":329,"context_line":"        neutron.update_neutron(task, CONF.agent.pxe_bootfile_name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_07c02e49","line":326,"in_reply_to":"baada198_4695cce1","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c22b64d358cadd06cbdf271d5a28ba2af94268c3","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        No validation necessary."},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        :param task: a TaskManager instance"},{"line_number":357,"context_line":"        :param method: the vendor method to be called after validate"},{"line_number":358,"context_line":"        \"\"\""},{"line_number":359,"context_line":"        pass"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_e68fc0cb","line":357,"updated":"2014-07-30 20:37:27.000000000","message":"no method?","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        No validation necessary."},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        :param task: a TaskManager instance"},{"line_number":357,"context_line":"        :param method: the vendor method to be called after validate"},{"line_number":358,"context_line":"        \"\"\""},{"line_number":359,"context_line":"        pass"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_e79b3a71","line":357,"in_reply_to":"baada198_e68fc0cb","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"b4180d272f07dcafed663034e765587dabeae015","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    cfg.StrOpt(\u0027agent_pxe_bootfile_name\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027pxelinux.0\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027Neutron bootfile DHCP parameter.\u0027),"},{"line_number":52,"context_line":"    cfg.IntOpt(\u0027image_cache_size\u0027,"},{"line_number":53,"context_line":"               default\u003d1024,"},{"line_number":54,"context_line":"               help\u003d\u0027Maximum size (in MiB) of cache for master images, \u0027"},{"line_number":55,"context_line":"               \u0027including those in use\u0027),"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_4fe6bc4b","line":52,"updated":"2014-07-30 23:11:28.000000000","message":"I do not believe the image_cache_size and _ttl options should be duplicated here; just use the existing ones.","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    cfg.StrOpt(\u0027agent_pxe_bootfile_name\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027pxelinux.0\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027Neutron bootfile DHCP parameter.\u0027),"},{"line_number":52,"context_line":"    cfg.IntOpt(\u0027image_cache_size\u0027,"},{"line_number":53,"context_line":"               default\u003d1024,"},{"line_number":54,"context_line":"               help\u003d\u0027Maximum size (in MiB) of cache for master images, \u0027"},{"line_number":55,"context_line":"               \u0027including those in use\u0027),"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_cf9f2c50","line":52,"in_reply_to":"baada198_4fe6bc4b","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1d3e0c382621a08a077f46acd92e582ac38a4de","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def _time():"},{"line_number":72,"context_line":"    return time.time()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def _get_client():"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_f98cbe3b","line":72,"updated":"2014-07-30 22:51:30.000000000","message":"nit: why create a function for that?\n\nAlso _time() is used only once, I would just use time.time()","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def _time():"},{"line_number":72,"context_line":"    return time.time()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def _get_client():"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_3cdd44de","line":72,"in_reply_to":"baada198_f98cbe3b","updated":"2014-07-30 23:26:34.000000000","message":"This makes mocking time.time() easier","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1d3e0c382621a08a077f46acd92e582ac38a4de","unresolved":false,"context_lines":[{"line_number":123,"context_line":"class AgentTFTPImageCache(image_cache.ImageCache):"},{"line_number":124,"context_line":"    def __init__(self, image_service\u003dNone):"},{"line_number":125,"context_line":"        super(AgentTFTPImageCache, self).__init__("},{"line_number":126,"context_line":"            CONF.pxe.tftp_master_path,"},{"line_number":127,"context_line":"            # MiB -\u003e B"},{"line_number":128,"context_line":"            CONF.agent.image_cache_size * 1024 * 1024,"},{"line_number":129,"context_line":"            # min -\u003e sec"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_3c970447","line":126,"updated":"2014-07-30 22:51:30.000000000","message":"Wondering if it\u0027s going to somehow conflict with the TFTPImageCache in PXE, since if both drivers are active we are going to have two cache on the same dir, and if the pxe.image_cache_size is smaller than the agent.image_cache_size the sizes are going to overlap","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":123,"context_line":"class AgentTFTPImageCache(image_cache.ImageCache):"},{"line_number":124,"context_line":"    def __init__(self, image_service\u003dNone):"},{"line_number":125,"context_line":"        super(AgentTFTPImageCache, self).__init__("},{"line_number":126,"context_line":"            CONF.pxe.tftp_master_path,"},{"line_number":127,"context_line":"            # MiB -\u003e B"},{"line_number":128,"context_line":"            CONF.agent.image_cache_size * 1024 * 1024,"},{"line_number":129,"context_line":"            # min -\u003e sec"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_7ceedc8b","line":126,"in_reply_to":"baada198_3c970447","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"b4180d272f07dcafed663034e765587dabeae015","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        \"\"\"Return the properties of the interface."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        :returns: dictionary of \u003cproperty name\u003e:\u003cproperty description\u003e entries."},{"line_number":219,"context_line":"        \"\"\""},{"line_number":220,"context_line":"        return {}"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def validate(self, task):"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_6fe9c018","line":219,"updated":"2014-07-30 23:11:28.000000000","message":"could you add a #NOTE here explaining why this is {}","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        \"\"\"Return the properties of the interface."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        :returns: dictionary of \u003cproperty name\u003e:\u003cproperty description\u003e entries."},{"line_number":219,"context_line":"        \"\"\""},{"line_number":220,"context_line":"        return {}"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def validate(self, task):"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_6fb620dd","line":219,"in_reply_to":"baada198_6fe9c018","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"b4180d272f07dcafed663034e765587dabeae015","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        deploy images to the node."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        :param task: a TaskManager instance"},{"line_number":230,"context_line":"        :raises: InvalidParameterValue"},{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        pass"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_8ff0d4fe","line":230,"updated":"2014-07-30 23:11:28.000000000","message":"does not actually Raise","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        deploy images to the node."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        :param task: a TaskManager instance"},{"line_number":230,"context_line":"        :raises: InvalidParameterValue"},{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        pass"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_8fad3487","line":230,"in_reply_to":"baada198_8ff0d4fe","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1d3e0c382621a08a077f46acd92e582ac38a4de","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        :param task: a TaskManager instance"},{"line_number":230,"context_line":"        :raises: InvalidParameterValue"},{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        pass"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":235,"context_line":"    def deploy(self, task):"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_59b92a7b","line":232,"updated":"2014-07-30 22:51:30.000000000","message":"_get_tftp_image_info() ? That would validate whether deploy_kernel and deploy_ramdisk are present in the driver_info field","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        :param task: a TaskManager instance"},{"line_number":230,"context_line":"        :raises: InvalidParameterValue"},{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        pass"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":235,"context_line":"    def deploy(self, task):"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_0f3124ed","line":232,"in_reply_to":"baada198_59b92a7b","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"b4180d272f07dcafed663034e765587dabeae015","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        \"\"\""},{"line_number":392,"context_line":"        node \u003d task.node"},{"line_number":393,"context_line":"        driver_info \u003d node.driver_info"},{"line_number":394,"context_line":"        LOG.debug(_("},{"line_number":395,"context_line":"            \u0027Heartbeat from %(node)s, last heartbeat at %(heartbeat)s.\u0027),"},{"line_number":396,"context_line":"            {\u0027node\u0027: node.uuid,"},{"line_number":397,"context_line":"             \u0027heartbeat\u0027: driver_info.get(\u0027agent_last_heartbeat\u0027)})"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_aff3d807","line":394,"updated":"2014-07-30 23:11:28.000000000","message":"debug messages shouldn\u0027t be translated","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        \"\"\""},{"line_number":392,"context_line":"        node \u003d task.node"},{"line_number":393,"context_line":"        driver_info \u003d node.driver_info"},{"line_number":394,"context_line":"        LOG.debug(_("},{"line_number":395,"context_line":"            \u0027Heartbeat from %(node)s, last heartbeat at %(heartbeat)s.\u0027),"},{"line_number":396,"context_line":"            {\u0027node\u0027: node.uuid,"},{"line_number":397,"context_line":"             \u0027heartbeat\u0027: driver_info.get(\u0027agent_last_heartbeat\u0027)})"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_cfc64c4a","line":394,"in_reply_to":"baada198_aff3d807","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1d3e0c382621a08a077f46acd92e582ac38a4de","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        LOG.debug(_("},{"line_number":395,"context_line":"            \u0027Heartbeat from %(node)s, last heartbeat at %(heartbeat)s.\u0027),"},{"line_number":396,"context_line":"            {\u0027node\u0027: node.uuid,"},{"line_number":397,"context_line":"             \u0027heartbeat\u0027: driver_info.get(\u0027agent_last_heartbeat\u0027)})"},{"line_number":398,"context_line":"        driver_info[\u0027agent_last_heartbeat\u0027] \u003d int(_time())"},{"line_number":399,"context_line":"        driver_info[\u0027agent_url\u0027] \u003d kwargs[\u0027agent_url\u0027]"},{"line_number":400,"context_line":"        node.driver_info \u003d driver_info"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_39eab6a0","line":397,"updated":"2014-07-30 22:51:30.000000000","message":"ditto i18n for debug","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        LOG.debug(_("},{"line_number":395,"context_line":"            \u0027Heartbeat from %(node)s, last heartbeat at %(heartbeat)s.\u0027),"},{"line_number":396,"context_line":"            {\u0027node\u0027: node.uuid,"},{"line_number":397,"context_line":"             \u0027heartbeat\u0027: driver_info.get(\u0027agent_last_heartbeat\u0027)})"},{"line_number":398,"context_line":"        driver_info[\u0027agent_last_heartbeat\u0027] \u003d int(_time())"},{"line_number":399,"context_line":"        driver_info[\u0027agent_url\u0027] \u003d kwargs[\u0027agent_url\u0027]"},{"line_number":400,"context_line":"        node.driver_info \u003d driver_info"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_0fc1242f","line":397,"in_reply_to":"baada198_39eab6a0","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"b4180d272f07dcafed663034e765587dabeae015","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                msg \u003d _(\u0027Node failed to move to active state.\u0027)"},{"line_number":412,"context_line":"                self._reboot_to_instance(task, **kwargs)"},{"line_number":413,"context_line":"        except Exception:"},{"line_number":414,"context_line":"            LOG.exception(\u0027Async exception for %(node)s: %(msg)s\u0027,"},{"line_number":415,"context_line":"                          {\u0027node\u0027: node,"},{"line_number":416,"context_line":"                           \u0027msg\u0027: msg})"},{"line_number":417,"context_line":"            _set_failed_state(task, msg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_cfd9ec85","line":414,"updated":"2014-07-30 23:11:28.000000000","message":"exception messages *should* be translated","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                msg \u003d _(\u0027Node failed to move to active state.\u0027)"},{"line_number":412,"context_line":"                self._reboot_to_instance(task, **kwargs)"},{"line_number":413,"context_line":"        except Exception:"},{"line_number":414,"context_line":"            LOG.exception(\u0027Async exception for %(node)s: %(msg)s\u0027,"},{"line_number":415,"context_line":"                          {\u0027node\u0027: node,"},{"line_number":416,"context_line":"                           \u0027msg\u0027: msg})"},{"line_number":417,"context_line":"            _set_failed_state(task, msg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_afe758e2","line":414,"in_reply_to":"baada198_cfd9ec85","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"b4180d272f07dcafed663034e765587dabeae015","unresolved":false,"context_lines":[{"line_number":423,"context_line":"    def _continue_deploy(self, task, **kwargs):"},{"line_number":424,"context_line":"        node \u003d task.node"},{"line_number":425,"context_line":"        image_source \u003d node.instance_info.get(\u0027image_source\u0027)"},{"line_number":426,"context_line":"        LOG.debug(_(\u0027Continuing deploy for %s\u0027), node.uuid)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        image_info \u003d {"},{"line_number":429,"context_line":"            \u0027id\u0027: image_source,"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_efd4f04c","line":426,"updated":"2014-07-30 23:11:28.000000000","message":"ditto","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1d3e0c382621a08a077f46acd92e582ac38a4de","unresolved":false,"context_lines":[{"line_number":423,"context_line":"    def _continue_deploy(self, task, **kwargs):"},{"line_number":424,"context_line":"        node \u003d task.node"},{"line_number":425,"context_line":"        image_source \u003d node.instance_info.get(\u0027image_source\u0027)"},{"line_number":426,"context_line":"        LOG.debug(_(\u0027Continuing deploy for %s\u0027), node.uuid)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        image_info \u003d {"},{"line_number":429,"context_line":"            \u0027id\u0027: image_source,"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_59da0a1e","line":426,"updated":"2014-07-30 22:51:30.000000000","message":"nit: not needed _() it\u0027s debug","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":423,"context_line":"    def _continue_deploy(self, task, **kwargs):"},{"line_number":424,"context_line":"        node \u003d task.node"},{"line_number":425,"context_line":"        image_source \u003d node.instance_info.get(\u0027image_source\u0027)"},{"line_number":426,"context_line":"        LOG.debug(_(\u0027Continuing deploy for %s\u0027), node.uuid)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        image_info \u003d {"},{"line_number":429,"context_line":"            \u0027id\u0027: image_source,"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_cfcd6c60","line":426,"in_reply_to":"baada198_efd4f04c","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1d3e0c382621a08a077f46acd92e582ac38a4de","unresolved":false,"context_lines":[{"line_number":449,"context_line":"    def _reboot_to_instance(self, task, **kwargs):"},{"line_number":450,"context_line":"        node \u003d task.node"},{"line_number":451,"context_line":"        LOG.debug(_(\u0027Preparing to reboot to instance for node %s\u0027),"},{"line_number":452,"context_line":"                 node.uuid)"},{"line_number":453,"context_line":"        error \u003d self._check_deploy_success(node)"},{"line_number":454,"context_line":"        if error is not None:"},{"line_number":455,"context_line":"            # TODO(jimrollenhagen) power off if using neutron dhcp to"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_b9e7a6e2","line":452,"updated":"2014-07-30 22:51:30.000000000","message":"ditto i18n for debug","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":449,"context_line":"    def _reboot_to_instance(self, task, **kwargs):"},{"line_number":450,"context_line":"        node \u003d task.node"},{"line_number":451,"context_line":"        LOG.debug(_(\u0027Preparing to reboot to instance for node %s\u0027),"},{"line_number":452,"context_line":"                 node.uuid)"},{"line_number":453,"context_line":"        error \u003d self._check_deploy_success(node)"},{"line_number":454,"context_line":"        if error is not None:"},{"line_number":455,"context_line":"            # TODO(jimrollenhagen) power off if using neutron dhcp to"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_efc8704f","line":452,"in_reply_to":"baada198_b9e7a6e2","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1d3e0c382621a08a077f46acd92e582ac38a4de","unresolved":false,"context_lines":[{"line_number":517,"context_line":""},{"line_number":518,"context_line":"        node \u003d self._find_node_by_macs(context, mac_addresses)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        LOG.debug(_(\u0027Initial lookup for node %s succeeded.\u0027), node.uuid)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        # Only support additional hardware in v2 and above. Grab all the"},{"line_number":523,"context_line":"        # top level keys in inventory that aren\u0027t interfaces and add them."}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_19efb2b2","line":520,"updated":"2014-07-30 22:51:30.000000000","message":"ditto i18n for debug","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":517,"context_line":""},{"line_number":518,"context_line":"        node \u003d self._find_node_by_macs(context, mac_addresses)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        LOG.debug(_(\u0027Initial lookup for node %s succeeded.\u0027), node.uuid)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        # Only support additional hardware in v2 and above. Grab all the"},{"line_number":523,"context_line":"        # top level keys in inventory that aren\u0027t interfaces and add them."}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_0fd8441d","line":520,"in_reply_to":"baada198_19efb2b2","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1d3e0c382621a08a077f46acd92e582ac38a4de","unresolved":false,"context_lines":[{"line_number":558,"context_line":"                    interface.get(\u0027mac_address\u0027)))"},{"line_number":559,"context_line":"            except exception.InvalidMAC:"},{"line_number":560,"context_line":"                LOG.warning(_(\u0027Malformed MAC: %s\u0027), interface.get("},{"line_number":561,"context_line":"                    \u0027mac_address\u0027))"},{"line_number":562,"context_line":"        return mac_addresses"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    def _find_node_by_macs(self, context, mac_addresses):"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_59284aee","line":561,"updated":"2014-07-30 22:51:30.000000000","message":"_LW()","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":558,"context_line":"                    interface.get(\u0027mac_address\u0027)))"},{"line_number":559,"context_line":"            except exception.InvalidMAC:"},{"line_number":560,"context_line":"                LOG.warning(_(\u0027Malformed MAC: %s\u0027), interface.get("},{"line_number":561,"context_line":"                    \u0027mac_address\u0027))"},{"line_number":562,"context_line":"        return mac_addresses"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    def _find_node_by_macs(self, context, mac_addresses):"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_4f015c6c","line":561,"in_reply_to":"baada198_59284aee","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1d3e0c382621a08a077f46acd92e582ac38a4de","unresolved":false,"context_lines":[{"line_number":598,"context_line":"                ports.append(port_ob)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"            except exception.PortNotFound:"},{"line_number":601,"context_line":"                LOG.warning(_(\u0027MAC address %s not found in database\u0027), mac)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        return ports"},{"line_number":604,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_f9ef5eb0","line":601,"updated":"2014-07-30 22:51:30.000000000","message":"_LW()","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e4f87cedba602572c047b6de36445af918a8a426","unresolved":false,"context_lines":[{"line_number":598,"context_line":"                ports.append(port_ob)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"            except exception.PortNotFound:"},{"line_number":601,"context_line":"                LOG.warning(_(\u0027MAC address %s not found in database\u0027), mac)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        return ports"},{"line_number":604,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_6f04607d","line":601,"in_reply_to":"baada198_f9ef5eb0","updated":"2014-07-30 23:26:34.000000000","message":"Done","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"}],"ironic/drivers/modules/agent_client.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"89c5aef60092d1e7b30518cd9a45389c0cd4b464","unresolved":false,"context_lines":[{"line_number":22,"context_line":"agent_opts \u003d ["},{"line_number":23,"context_line":"    cfg.StrOpt(\u0027agent_api_version\u0027,"},{"line_number":24,"context_line":"               default\u003d\u0027v1\u0027,"},{"line_number":25,"context_line":"               help\u003d\u0027API version to communicate with the ramdisk agent over.\u0027)"},{"line_number":26,"context_line":"]"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_2c1e00bd","line":25,"updated":"2014-07-30 19:05:37.000000000","message":"How about \u0027API version to use for communicating with the ramdisk agent.\u0027","commit_id":"64c8eb4c154da9c366ea98dd106eb399045591a9"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"05ae38c38d8e348227f4c5fa191534dc4ec096b1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"agent_opts \u003d ["},{"line_number":23,"context_line":"    cfg.StrOpt(\u0027agent_api_version\u0027,"},{"line_number":24,"context_line":"               default\u003d\u0027v1\u0027,"},{"line_number":25,"context_line":"               help\u003d\u0027API version to communicate with the ramdisk agent over.\u0027)"},{"line_number":26,"context_line":"]"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_f873df13","line":25,"updated":"2014-07-30 20:01:55.000000000","message":"How about \u0027API version to use for communicating with the ramdisk agent.\u0027","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":22,"context_line":"agent_opts \u003d ["},{"line_number":23,"context_line":"    cfg.StrOpt(\u0027agent_api_version\u0027,"},{"line_number":24,"context_line":"               default\u003d\u0027v1\u0027,"},{"line_number":25,"context_line":"               help\u003d\u0027API version to communicate with the ramdisk agent over.\u0027)"},{"line_number":26,"context_line":"]"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_67964a40","line":25,"in_reply_to":"baada198_f873df13","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1d3e0c382621a08a077f46acd92e582ac38a4de","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class AgentClient(object):"},{"line_number":36,"context_line":"    \"\"\"Client for interacting with nodes via a REST API.\"\"\""},{"line_number":37,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_3cdf0468","line":34,"updated":"2014-07-30 22:51:30.000000000","message":"NOTE: This module is missing many docstrings, but I talked to Josh and this is going to be fixed in a following patch","commit_id":"f74f579f3dd2672e90145b5e8f495e87a64646d6"}],"requirements.txt":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"05ae38c38d8e348227f4c5fa191534dc4ec096b1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"pbr\u003e\u003d0.6,!\u003d0.7,\u003c1.0"},{"line_number":2,"context_line":"SQLAlchemy\u003e\u003d0.7.8,!\u003d0.9.5,\u003c\u003d0.9.99"},{"line_number":3,"context_line":"alembic\u003e\u003d0.4.1"},{"line_number":4,"context_line":"anyjson\u003e\u003d0.3.3"},{"line_number":5,"context_line":"argparse"}],"source_content_type":"text/plain","patch_set":15,"id":"baada198_db38d5cd","line":2,"updated":"2014-07-30 20:01:55.000000000","message":"I think you need to rebase, or did you purposely want this and alembic to be different?\n\nThere\u0027s a bunch of other diffs too (eg everything from line 27 in base, doesn\u0027t show up here). Not sure you meant to exclude them.","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":1,"context_line":"pbr\u003e\u003d0.6,!\u003d0.7,\u003c1.0"},{"line_number":2,"context_line":"SQLAlchemy\u003e\u003d0.7.8,!\u003d0.9.5,\u003c\u003d0.9.99"},{"line_number":3,"context_line":"alembic\u003e\u003d0.4.1"},{"line_number":4,"context_line":"anyjson\u003e\u003d0.3.3"},{"line_number":5,"context_line":"argparse"}],"source_content_type":"text/plain","patch_set":15,"id":"baada198_8cab8587","line":2,"in_reply_to":"baada198_db38d5cd","updated":"2014-07-30 21:37:23.000000000","message":"Done","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"}],"setup.cfg":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"05ae38c38d8e348227f4c5fa191534dc4ec096b1","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"ironic.drivers \u003d"},{"line_number":33,"context_line":"    agent_ipmitool \u003d ironic.drivers.agent:AgentAndIPMIToolDriver"},{"line_number":34,"context_line":"    agent_pyghmi \u003d ironic.drivers.agent:AgentAndIPMINativeDriver"},{"line_number":35,"context_line":"    agent_ssh \u003d ironic.drivers.agent:AgentAndSSHDriver"},{"line_number":36,"context_line":"    fake \u003d ironic.drivers.fake:FakeDriver"},{"line_number":37,"context_line":"    fake_agent \u003d ironic.drivers.fake:FakeAgentDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":15,"id":"baada198_78b34f9a","line":34,"updated":"2014-07-30 20:01:55.000000000","message":"your spec has agent_pyghmi, but the other drivers that use IPMINative use \u0027ipminative\u0027 in the driver name. Should this be \u0027agent_ipminative\u0027 just to be consistent with the others?","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"411dfbb36c010fa335d158c5d9523d5ace19a614","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"ironic.drivers \u003d"},{"line_number":33,"context_line":"    agent_ipmitool \u003d ironic.drivers.agent:AgentAndIPMIToolDriver"},{"line_number":34,"context_line":"    agent_pyghmi \u003d ironic.drivers.agent:AgentAndIPMINativeDriver"},{"line_number":35,"context_line":"    agent_ssh \u003d ironic.drivers.agent:AgentAndSSHDriver"},{"line_number":36,"context_line":"    fake \u003d ironic.drivers.fake:FakeDriver"},{"line_number":37,"context_line":"    fake_agent \u003d ironic.drivers.fake:FakeAgentDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":15,"id":"baada198_47ddc612","line":34,"in_reply_to":"baada198_78b34f9a","updated":"2014-07-30 21:37:23.000000000","message":"It should. But! \u0027agent_ipminative\u0027 if 16 characters, and the database column for driver has a max of 15 characters. :)","commit_id":"c0e965cc8c876c5d2f2c8e58fd8d44b0c9cd4f85"}]}
