)]}'
{"ironic_python_agent/errors.py":[{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"052ace1067ce0e5b6439eb2b61489110a935b9f2","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"class CleanVersionMismatch(RESTError):"},{"line_number":288,"context_line":"    \"\"\"Error raised when Ironic and the Agent have different versions.\"\"\""},{"line_number":289,"context_line":"    message \u003d \u0027Clean version mismatch, reboot to new agent\u0027"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def __init__(self, agent_version, node_version):"},{"line_number":292,"context_line":"        self.status_code \u003d 409"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_8abfc2fa","line":289,"updated":"2015-03-05 22:31:23.000000000","message":"minor NIt: \"reboot to new agent\" -\u003e \"reload agent with correct version\"","commit_id":"fee8d2f884871880ad488a53c56e70734fddb08b"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"acf7425a8f17a47f31996e047758c0eba01f8f72","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"class CleanVersionMismatch(RESTError):"},{"line_number":288,"context_line":"    \"\"\"Error raised when Ironic and the Agent have different versions.\"\"\""},{"line_number":289,"context_line":"    message \u003d \u0027Clean version mismatch, reboot to new agent\u0027"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def __init__(self, agent_version, node_version):"},{"line_number":292,"context_line":"        self.status_code \u003d 409"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_2977b6d5","line":289,"in_reply_to":"9a80dd14_8abfc2fa","updated":"2015-03-12 16:26:39.000000000","message":"Done","commit_id":"fee8d2f884871880ad488a53c56e70734fddb08b"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5eb292455bf7a5e445d8d878da8a60bf97259349","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"class CleanVersionMismatch(RESTError):"},{"line_number":288,"context_line":"    \"\"\"Error raised when Ironic and the Agent have different versions.\"\"\""},{"line_number":289,"context_line":"    message \u003d \u0027Clean version mismatch, reload agent with correct version\u0027"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def __init__(self, agent_version, node_version):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_8b8fb222","line":288,"updated":"2015-03-12 18:24:53.000000000","message":"We should be very clear about what this does in the exception messages and dev docs. From our conversation in meatspace:\n\n1) IPA starts cleaning, sets clean version in driver_info\n2) IPA gets upgraded while cleaning is in progress, on reboot new agent is running\n3) Next clean step, IPA clean version mismatches with what\u0027s stored (due to new agent), errors to Ironic with this error\n4) Ironic restarts cleaning from the beginning with the new IPA clean version.\n\nAlso do the other drivers have a similar concept of clean version? It\u0027s possible for a conductor to get upgraded during cleaning as well... hrm","commit_id":"55a9798050ed3224a42b2975f8fedb5f5610704e"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"106a0ec21147c78b9eb22cf8de953aa08021faba","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"class CleanVersionMismatch(RESTError):"},{"line_number":288,"context_line":"    \"\"\"Error raised when Ironic and the Agent have different versions.\"\"\""},{"line_number":289,"context_line":"    message \u003d \u0027Clean version mismatch, reload agent with correct version\u0027"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def __init__(self, agent_version, node_version):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_4a6e8630","line":288,"in_reply_to":"9a80dd14_8b8fb222","updated":"2015-03-13 00:31:05.000000000","message":"Agreed. FWIW, it is spelled out pretty clearly in HardwareManager.get_version()\n\nThey don\u0027t, unless encoded in the drivers, unfortunately.","commit_id":"55a9798050ed3224a42b2975f8fedb5f5610704e"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"05545e002c263d3def6f5db86398a157fca1bea2","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    message \u003d \u0027Clean version mismatch, reload agent with correct version\u0027"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def __init__(self, agent_version, node_version):"},{"line_number":301,"context_line":"        self.status_code \u003d 409"},{"line_number":302,"context_line":"        details \u003d (\u0027Agent clean version: {0}, node clean version: {1}\u0027"},{"line_number":303,"context_line":"                   .format(agent_version, node_version))"},{"line_number":304,"context_line":"        super(CleanVersionMismatch, self).__init__(details)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_54eb64db","line":301,"updated":"2015-03-13 16:49:10.000000000","message":"Just a random thought:\n\n self.status_code \u003d httplib.CONFLICT","commit_id":"61e2c0b06d6ac54ba9c37e3b4a9e083e318879b8"}],"ironic_python_agent/extensions/clean.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"dca3fd4b7a629b575791d1841ada54db4d140fc7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"            reboot_requested"},{"line_number":27,"context_line":"        \"\"\""},{"line_number":28,"context_line":"        # Results should be a dict, not a list"},{"line_number":29,"context_line":"        steps \u003d hardware.dispatch_to_all_managers(\u0027get_clean_steps\u0027,"},{"line_number":30,"context_line":"                                                  node, ports)"},{"line_number":31,"context_line":"        return {"},{"line_number":32,"context_line":"            \u0027clean_steps\u0027: steps,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_d4042f80","line":29,"updated":"2015-03-05 07:45:36.000000000","message":"If there are multiple hardware managers, i think each one will return a list and we might have steps as a list of lists.  We need to flatten them into a single list.","commit_id":"47589534d332c8547332602545ac891aacc53cf6"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"dca3fd4b7a629b575791d1841ada54db4d140fc7","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    if clean_version is None:"},{"line_number":66,"context_line":"        return"},{"line_number":67,"context_line":"    agent_version \u003d _get_current_clean_version()"},{"line_number":68,"context_line":"    if clean_version !\u003d agent_version:"},{"line_number":69,"context_line":"        raise errors.CleanVersionMismatch(agent_version\u003dagent_version,"},{"line_number":70,"context_line":"                                          node_version\u003dclean_version)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b7b6dd3b","line":68,"updated":"2015-03-05 07:45:36.000000000","message":"Shouldn\u0027t it be possible that things work if clean_version \u003c agent_version, in that case it should be fine, right ?","commit_id":"47589534d332c8547332602545ac891aacc53cf6"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5eb292455bf7a5e445d8d878da8a60bf97259349","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        steps \u003d [step for sublist in steps for step in sublist]"},{"line_number":35,"context_line":"        return {"},{"line_number":36,"context_line":"            \u0027clean_steps\u0027: steps,"},{"line_number":37,"context_line":"            \u0027hardware_manager_version\u0027: _get_current_clean_version()"},{"line_number":38,"context_line":"        }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @base.async_command(\u0027execute_clean_step\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_0bd102fb","line":37,"updated":"2015-03-12 18:24:53.000000000","message":"hardware_manager_version should be stored separately for each hardware manager, right? Or are we just assuming any hw manager change should cause a restart of cleaning?","commit_id":"55a9798050ed3224a42b2975f8fedb5f5610704e"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"106a0ec21147c78b9eb22cf8de953aa08021faba","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        steps \u003d [step for sublist in steps for step in sublist]"},{"line_number":35,"context_line":"        return {"},{"line_number":36,"context_line":"            \u0027clean_steps\u0027: steps,"},{"line_number":37,"context_line":"            \u0027hardware_manager_version\u0027: _get_current_clean_version()"},{"line_number":38,"context_line":"        }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @base.async_command(\u0027execute_clean_step\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_eae3bad6","line":37,"in_reply_to":"9a80dd14_0bd102fb","updated":"2015-03-13 00:31:05.000000000","message":"This will be a dictionary of different versions of all the hardware managers.","commit_id":"55a9798050ed3224a42b2975f8fedb5f5610704e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5eb292455bf7a5e445d8d878da8a60bf97259349","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                \u0027clean_step\u0027: step"},{"line_number":65,"context_line":"            }"},{"line_number":66,"context_line":"        except Exception as e:"},{"line_number":67,"context_line":"            raise errors.CleaningError("},{"line_number":68,"context_line":"                \u0027Error performing clean_step %(step)s: %(err)s\u0027 %"},{"line_number":69,"context_line":"                {\u0027step\u0027: step[\u0027step\u0027], \u0027err\u0027: e})"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_cb352a47","line":67,"updated":"2015-03-12 18:24:53.000000000","message":"Is there a reason we\u0027re collapsing all exceptions down? I think it\u0027d be more interesting to let the HardwareManager exceptions bubble up from dispatch_to_managers()","commit_id":"55a9798050ed3224a42b2975f8fedb5f5610704e"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"106a0ec21147c78b9eb22cf8de953aa08021faba","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                \u0027clean_step\u0027: step"},{"line_number":65,"context_line":"            }"},{"line_number":66,"context_line":"        except Exception as e:"},{"line_number":67,"context_line":"            raise errors.CleaningError("},{"line_number":68,"context_line":"                \u0027Error performing clean_step %(step)s: %(err)s\u0027 %"},{"line_number":69,"context_line":"                {\u0027step\u0027: step[\u0027step\u0027], \u0027err\u0027: e})"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_ca1356b6","line":67,"in_reply_to":"9a80dd14_cb352a47","updated":"2015-03-13 00:31:05.000000000","message":"I think since the underlying exception message is getting passed into the message, this is useful (adds context about which step was active).","commit_id":"55a9798050ed3224a42b2975f8fedb5f5610704e"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"1783175ba05cdf0aa5ca2fce9e4ee84d452c3919","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class CleanExtension(base.BaseAgentExtension):"},{"line_number":21,"context_line":"    @base.async_command(\u0027get_clean_steps\u0027)"},{"line_number":22,"context_line":"    def get_clean_steps(self, node, ports):"},{"line_number":23,"context_line":"        \"\"\"Get the list of clean steps supported for the node and ports"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_d10e818b","line":21,"updated":"2015-03-13 18:03:31.000000000","message":"Should this be synchronous?","commit_id":"61e2c0b06d6ac54ba9c37e3b4a9e083e318879b8"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"4d53932b365224e50b307e467796895f91f7218a","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class CleanExtension(base.BaseAgentExtension):"},{"line_number":21,"context_line":"    @base.async_command(\u0027get_clean_steps\u0027)"},{"line_number":22,"context_line":"    def get_clean_steps(self, node, ports):"},{"line_number":23,"context_line":"        \"\"\"Get the list of clean steps supported for the node and ports"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_a7ce2f2b","line":21,"in_reply_to":"9a80dd14_d10e818b","updated":"2015-03-13 18:43:01.000000000","message":"Done","commit_id":"61e2c0b06d6ac54ba9c37e3b4a9e083e318879b8"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"ecd91c12ec5d21cfbfdecfba9d6d1738948fb087","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    def get_clean_steps(self, node, ports):"},{"line_number":23,"context_line":"        \"\"\"Get the list of clean steps supported for the node and ports"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        :return: A list of clean steps with keys step, priority, and"},{"line_number":26,"context_line":"            reboot_requested"},{"line_number":27,"context_line":"        \"\"\""},{"line_number":28,"context_line":"        # Results should be a dict, not a list"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_8edead0f","line":25,"updated":"2015-03-13 16:15:46.000000000","message":"nit: :param line for node and port","commit_id":"61e2c0b06d6ac54ba9c37e3b4a9e083e318879b8"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"1783175ba05cdf0aa5ca2fce9e4ee84d452c3919","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    def get_clean_steps(self, node, ports):"},{"line_number":23,"context_line":"        \"\"\"Get the list of clean steps supported for the node and ports"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        :return: A list of clean steps with keys step, priority, and"},{"line_number":26,"context_line":"            reboot_requested"},{"line_number":27,"context_line":"        \"\"\""},{"line_number":28,"context_line":"        # Results should be a dict, not a list"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_91e329d8","line":25,"in_reply_to":"9a80dd14_8edead0f","updated":"2015-03-13 18:03:31.000000000","message":"Another nit: s/return/returns/","commit_id":"61e2c0b06d6ac54ba9c37e3b4a9e083e318879b8"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"4d53932b365224e50b307e467796895f91f7218a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    def get_clean_steps(self, node, ports):"},{"line_number":23,"context_line":"        \"\"\"Get the list of clean steps supported for the node and ports"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        :return: A list of clean steps with keys step, priority, and"},{"line_number":26,"context_line":"            reboot_requested"},{"line_number":27,"context_line":"        \"\"\""},{"line_number":28,"context_line":"        # Results should be a dict, not a list"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_c7d323d3","line":25,"in_reply_to":"9a80dd14_91e329d8","updated":"2015-03-13 18:43:01.000000000","message":"Done","commit_id":"61e2c0b06d6ac54ba9c37e3b4a9e083e318879b8"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"05545e002c263d3def6f5db86398a157fca1bea2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            result \u003d hardware.dispatch_to_managers(step[\u0027step\u0027], node, ports)"},{"line_number":59,"context_line":"            # Return the step that was executed so we can dispatch"},{"line_number":60,"context_line":"            # to the appropriate Ironic interface"},{"line_number":61,"context_line":"            return {"},{"line_number":62,"context_line":"                \u0027clean_result\u0027: result,"},{"line_number":63,"context_line":"                \u0027clean_step\u0027: step"},{"line_number":64,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_f4b0d88c","line":61,"updated":"2015-03-13 16:49:10.000000000","message":"nit: I think return should be outside of try loop, assuming that the expected exception would occur from line above","commit_id":"61e2c0b06d6ac54ba9c37e3b4a9e083e318879b8"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"4d53932b365224e50b307e467796895f91f7218a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            result \u003d hardware.dispatch_to_managers(step[\u0027step\u0027], node, ports)"},{"line_number":59,"context_line":"            # Return the step that was executed so we can dispatch"},{"line_number":60,"context_line":"            # to the appropriate Ironic interface"},{"line_number":61,"context_line":"            return {"},{"line_number":62,"context_line":"                \u0027clean_result\u0027: result,"},{"line_number":63,"context_line":"                \u0027clean_step\u0027: step"},{"line_number":64,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_87cdab33","line":61,"in_reply_to":"9a80dd14_f4b0d88c","updated":"2015-03-13 18:43:01.000000000","message":"Done","commit_id":"61e2c0b06d6ac54ba9c37e3b4a9e083e318879b8"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"5aebc2a2af5d5c7da5b8c5c91ba4c883b4cbb600","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        return {"},{"line_number":36,"context_line":"            \u0027clean_steps\u0027: steps,"},{"line_number":37,"context_line":"            \u0027hardware_manager_version\u0027: _get_current_clean_version()"},{"line_number":38,"context_line":"        }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @base.async_command(\u0027execute_clean_step\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_bdfe8903","line":37,"updated":"2015-03-18 16:14:35.000000000","message":"may-be-nit: better if it was hardware_manager_versions as it contains versions about multiple hardware managers. (I know this requires change in Ironic)","commit_id":"5f4fa7f27ef33ca0c8ce4fe6917b1866ce8a8f56"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"5aebc2a2af5d5c7da5b8c5c91ba4c883b4cbb600","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :param node: A dict representation of a node"},{"line_number":46,"context_line":"        :param ports: A dict representation of ports attached to node"},{"line_number":47,"context_line":"        :param clean_version: The clean version as returned by"},{"line_number":48,"context_line":"            _get_current_clean_version() at the beginning of cleaning/zapping"},{"line_number":49,"context_line":"        :returns: a CommandResult object with command_result set to whatever"},{"line_number":50,"context_line":"            the step returns."},{"line_number":51,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_401f6609","line":48,"updated":"2015-03-18 16:14:35.000000000","message":"nit: missing raises","commit_id":"5f4fa7f27ef33ca0c8ce4fe6917b1866ce8a8f56"}],"ironic_python_agent/hardware.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5eb292455bf7a5e445d8d878da8a60bf97259349","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        }"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        Note: multiple hardware managers may return the same step name. The"},{"line_number":175,"context_line":"        priority of the step will be the largest priority of steps with"},{"line_number":176,"context_line":"        the same name. The steps will be called using"},{"line_number":177,"context_line":"        `hardware.dispatch_to_managers` and handled by the best suited"},{"line_number":178,"context_line":"        hardware manager. If you need a step to be executed by only your"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_cb9fea01","line":175,"updated":"2015-03-12 18:24:53.000000000","message":"instead of largest, can we say highest or lowest?","commit_id":"55a9798050ed3224a42b2975f8fedb5f5610704e"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"106a0ec21147c78b9eb22cf8de953aa08021faba","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        }"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        Note: multiple hardware managers may return the same step name. The"},{"line_number":175,"context_line":"        priority of the step will be the largest priority of steps with"},{"line_number":176,"context_line":"        the same name. The steps will be called using"},{"line_number":177,"context_line":"        `hardware.dispatch_to_managers` and handled by the best suited"},{"line_number":178,"context_line":"        hardware manager. If you need a step to be executed by only your"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_caa276ad","line":175,"in_reply_to":"9a80dd14_cb9fea01","updated":"2015-03-13 00:31:05.000000000","message":"I had it as highest, but \"highest\" for priority got called out as being ambiguous (first priority? priority\u003d100?).","commit_id":"55a9798050ed3224a42b2975f8fedb5f5610704e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5eb292455bf7a5e445d8d878da8a60bf97259349","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            \u0027name\u0027: getattr(self, \u0027HARDWARE_MANAGER_NAME\u0027,"},{"line_number":218,"context_line":"                            type(self).__name__),"},{"line_number":219,"context_line":"            \u0027version\u0027: getattr(self, \u0027HARDWARE_MANAGER_VERSION\u0027, \u00271.0\u0027)"},{"line_number":220,"context_line":"        }"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"class GenericHardwareManager(HardwareManager):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_cb6d2a06","line":220,"updated":"2015-03-12 18:24:53.000000000","message":"This is (another) breaking change to the hardware manager API, right?","commit_id":"55a9798050ed3224a42b2975f8fedb5f5610704e"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"106a0ec21147c78b9eb22cf8de953aa08021faba","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            \u0027name\u0027: getattr(self, \u0027HARDWARE_MANAGER_NAME\u0027,"},{"line_number":218,"context_line":"                            type(self).__name__),"},{"line_number":219,"context_line":"            \u0027version\u0027: getattr(self, \u0027HARDWARE_MANAGER_VERSION\u0027, \u00271.0\u0027)"},{"line_number":220,"context_line":"        }"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"class GenericHardwareManager(HardwareManager):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_ca90b645","line":220,"in_reply_to":"9a80dd14_cb6d2a06","updated":"2015-03-13 00:31:05.000000000","message":"It\u0027s a new function, yes, but has reasonable defaults, and doesn\u0027t break previous functionality.","commit_id":"55a9798050ed3224a42b2975f8fedb5f5610704e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"c6e34a65bfbff915480e7f6fe545d014c2bd33aa","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        }"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        Note: multiple hardware managers may return the same step name. The"},{"line_number":177,"context_line":"        priority of the step will be the largest priority of steps with"},{"line_number":178,"context_line":"        the same name. The steps will be called using"},{"line_number":179,"context_line":"        `hardware.dispatch_to_managers` and handled by the best suited"},{"line_number":180,"context_line":"        hardware manager. If you need a step to be executed by only your"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_82034775","line":177,"updated":"2015-03-18 00:09:52.000000000","message":"nit: after talking about my comments on patchset 6 in meatspace, we said \"largest integer priority\" would perhaps be clearer","commit_id":"5f4fa7f27ef33ca0c8ce4fe6917b1866ce8a8f56"}],"ironic_python_agent/tests/extensions/clean.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"dca3fd4b7a629b575791d1841ada54db4d140fc7","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @mock.patch(\u0027ironic_python_agent.extensions.clean.\u0027"},{"line_number":34,"context_line":"                \u0027_get_current_clean_version\u0027)"},{"line_number":35,"context_line":"    @mock.patch(\u0027ironic_python_agent.hardware.dispatch_to_all_managers\u0027)"},{"line_number":36,"context_line":"    def test_get_clean_steps(self, mock_dispatch, mock_version):"},{"line_number":37,"context_line":"        mock_version.return_value \u003d self.version"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b7697d8d","line":35,"updated":"2015-03-05 07:45:36.000000000","message":"Better to add a test case where we get back a list of lists (with multiple hardware managers)","commit_id":"47589534d332c8547332602545ac891aacc53cf6"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"5aebc2a2af5d5c7da5b8c5c91ba4c883b4cbb600","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        self.assertEqual(self.version, clean._get_current_clean_version())"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    @mock.patch(\u0027ironic_python_agent.hardware.dispatch_to_all_managers\u0027)"},{"line_number":151,"context_line":"    def test__check_clean_version_fail(self, mock_dispatch):"},{"line_number":152,"context_line":"        mock_dispatch.return_value \u003d {\u0027SpecificHardwareManager\u0027:"},{"line_number":153,"context_line":"                                      {\u0027name\u0027: \u0027specific\u0027, \u0027version\u0027: \u00271\u0027}}"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_1d15d548","line":151,"updated":"2015-03-18 16:14:35.000000000","message":"may be we should have a test case when _check_clean_version goes through fine as well. :)","commit_id":"5f4fa7f27ef33ca0c8ce4fe6917b1866ce8a8f56"}]}
