)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"defde1a2faf79ff68386139053a9c6bf1afeed8c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shivanand Tendulker \u003cstendulker@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-02-08 06:43:25 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements rescue interface for \u0027ilo\u0027 hardware type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commits adds rescue interface to \u0027ilo\u0027 hardware type."},{"line_number":10,"context_line":"The supported values for rescue interface are \u0027agent\u0027 and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"3fa0c359_67b3b94e","line":7,"updated":"2018-02-09 07:34:33.000000000","message":"Rescue interface is no longer implemented with this change.","commit_id":"cca8ed4b27a429be92696ec03405ec874cb5b34b"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"12e268e03323569cac9ad2e4f91e2ba11e15a139","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shivanand Tendulker \u003cstendulker@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-02-08 06:43:25 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements rescue interface for \u0027ilo\u0027 hardware type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commits adds rescue interface to \u0027ilo\u0027 hardware type."},{"line_number":10,"context_line":"The supported values for rescue interface are \u0027agent\u0027 and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"3fa0c359_3e693720","line":7,"in_reply_to":"3fa0c359_67b3b94e","updated":"2018-02-09 10:29:24.000000000","message":"Done","commit_id":"cca8ed4b27a429be92696ec03405ec874cb5b34b"}],"ironic/drivers/ilo.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b65a99c5bab62d2debc3dd9908c02abcddad7dd1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from ironic.drivers.modules.ilo import vendor"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class IloVirtualMediaIscsiDriver(base.BaseDriver):"},{"line_number":35,"context_line":"    \"\"\"IloDriver using IloClient interface."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    This driver implements the `core` functionality using"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_d27e006a","line":34,"range":{"start_line":34,"start_character":6,"end_line":34,"end_character":32},"updated":"2017-04-04 06:29:10.000000000","message":"Need to add rescue interface for iscsi_ilo driver as well.","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"83acc90731d28bdfdc4028a9c75981eba4d4763f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from ironic.drivers.modules.ilo import vendor"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class IloVirtualMediaIscsiDriver(base.BaseDriver):"},{"line_number":35,"context_line":"    \"\"\"IloDriver using IloClient interface."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    This driver implements the `core` functionality using"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_1290e842","line":34,"range":{"start_line":34,"start_character":6,"end_line":34,"end_character":32},"in_reply_to":"dfeb2761_d27e006a","updated":"2017-04-04 10:47:54.000000000","message":"Done","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"e01de886b9545be4f35eda01f5f2a74d03aa19bb","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @property"},{"line_number":71,"context_line":"    def supported_rescue_interfaces(self):"},{"line_number":72,"context_line":"        \"\"\"List of supported power interfaces.\"\"\""},{"line_number":73,"context_line":"        return [rescue.IloVirtualMediaRescue, agent.AgentRescue]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1f485f77_712e3644","line":72,"range":{"start_line":72,"start_character":28,"end_line":72,"end_character":35},"updated":"2017-11-14 05:45:14.000000000","message":"s/power/rescue","commit_id":"e09a131c7386da84083a8c05a670c2e35b9bf772"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"936afa30fa98eb3a327ebba13a5cafd5f22441e3","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @property"},{"line_number":71,"context_line":"    def supported_rescue_interfaces(self):"},{"line_number":72,"context_line":"        \"\"\"List of supported power interfaces.\"\"\""},{"line_number":73,"context_line":"        return [rescue.IloVirtualMediaRescue, agent.AgentRescue]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1f485f77_acf3359e","line":72,"range":{"start_line":72,"start_character":28,"end_line":72,"end_character":35},"in_reply_to":"1f485f77_712e3644","updated":"2017-11-27 06:11:07.000000000","message":"Done","commit_id":"e09a131c7386da84083a8c05a670c2e35b9bf772"},{"author":{"_account_id":14675,"name":"Hugo Nicodemos","email":"hugo.brito@windriver.com","username":"nicodemos"},"change_message_id":"b87cdf970aad4180c95c805c11b53bcdfa1f1c84","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @property"},{"line_number":71,"context_line":"    def supported_rescue_interfaces(self):"},{"line_number":72,"context_line":"        \"\"\"List of supported power interfaces.\"\"\""},{"line_number":73,"context_line":"        return [rescue.IloVirtualMediaRescue, agent.AgentRescue]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_6a712f44","line":72,"updated":"2017-11-17 12:46:13.000000000","message":"s/power/rescue","commit_id":"91c23c1b8fdad82d93bcb874d2f86b95fb901563"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"936afa30fa98eb3a327ebba13a5cafd5f22441e3","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @property"},{"line_number":71,"context_line":"    def supported_rescue_interfaces(self):"},{"line_number":72,"context_line":"        \"\"\"List of supported power interfaces.\"\"\""},{"line_number":73,"context_line":"        return [rescue.IloVirtualMediaRescue, agent.AgentRescue]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff82abbf_acde766a","line":72,"in_reply_to":"1f485f77_6a712f44","updated":"2017-11-27 06:11:07.000000000","message":"Done","commit_id":"91c23c1b8fdad82d93bcb874d2f86b95fb901563"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"21f3aa36c53df0ec35f728229e9b1c18d969b1c7","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    @property"},{"line_number":71,"context_line":"    def supported_rescue_interfaces(self):"},{"line_number":72,"context_line":"        \"\"\"List of supported rescue interfaces.\"\"\""},{"line_number":73,"context_line":"        return [rescue.IloVirtualMediaRescue, agent.AgentRescue]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @property"},{"line_number":76,"context_line":"    def supported_vendor_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f93b717_1df7418d","line":73,"updated":"2018-02-02 15:49:41.000000000","message":"please add NoRescue as this is an optional interface","commit_id":"268d3741ac4c6daa1c1f7f608631cb8ae3d2f162"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fa4c9d869eef75fcc1757eadcd7cc302745c7192","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    @property"},{"line_number":71,"context_line":"    def supported_rescue_interfaces(self):"},{"line_number":72,"context_line":"        \"\"\"List of supported rescue interfaces.\"\"\""},{"line_number":73,"context_line":"        return [rescue.IloVirtualMediaRescue, agent.AgentRescue]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @property"},{"line_number":76,"context_line":"    def supported_vendor_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f93b717_dd79d9c4","line":73,"in_reply_to":"5f93b717_1df7418d","updated":"2018-02-02 16:15:29.000000000","message":"Done","commit_id":"268d3741ac4c6daa1c1f7f608631cb8ae3d2f162"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"defde1a2faf79ff68386139053a9c6bf1afeed8c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    @property"},{"line_number":70,"context_line":"    def supported_rescue_interfaces(self):"},{"line_number":71,"context_line":"        \"\"\"List of supported rescue interfaces.\"\"\""},{"line_number":72,"context_line":"        return [agent.AgentRescue, noop.NoRescue]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @property"},{"line_number":75,"context_line":"    def supported_vendor_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa0c359_82dcb3e4","line":72,"updated":"2018-02-09 07:34:33.000000000","message":"I\u0027m not sure if this change is acceptable because ilo hardware already supports rescue if ilo-pxe boot interface is used. This change may affect an environment with ilo-pxe.","commit_id":"cca8ed4b27a429be92696ec03405ec874cb5b34b"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"12e268e03323569cac9ad2e4f91e2ba11e15a139","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    @property"},{"line_number":70,"context_line":"    def supported_rescue_interfaces(self):"},{"line_number":71,"context_line":"        \"\"\"List of supported rescue interfaces.\"\"\""},{"line_number":72,"context_line":"        return [agent.AgentRescue, noop.NoRescue]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @property"},{"line_number":75,"context_line":"    def supported_vendor_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa0c359_de3e138a","line":72,"in_reply_to":"3fa0c359_82dcb3e4","updated":"2018-02-09 10:29:24.000000000","message":"This is not an issue. But we can get rid of this. It can use the one from generic.py","commit_id":"cca8ed4b27a429be92696ec03405ec874cb5b34b"}],"ironic/drivers/modules/agent.py":[{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"e01de886b9545be4f35eda01f5f2a74d03aa19bb","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    :returns: A list of missing parameters."},{"line_number":156,"context_line":"    \"\"\""},{"line_number":157,"context_line":"    missing_params \u003d []"},{"line_number":158,"context_line":"    if node.instance_info.get(\u0027rescue_password\u0027) is None:"},{"line_number":159,"context_line":"        missing_params.append(\u0027instance_info/rescue_password\u0027)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    return missing_params"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f485f77_51bfbacf","line":158,"range":{"start_line":158,"start_character":4,"end_line":158,"end_character":57},"updated":"2017-11-14 05:45:14.000000000","message":"Better to use it as \n if not node.instance_info.get(\u0027rescue_password\u0027):","commit_id":"e09a131c7386da84083a8c05a670c2e35b9bf772"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"936afa30fa98eb3a327ebba13a5cafd5f22441e3","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    :returns: A list of missing parameters."},{"line_number":156,"context_line":"    \"\"\""},{"line_number":157,"context_line":"    missing_params \u003d []"},{"line_number":158,"context_line":"    if node.instance_info.get(\u0027rescue_password\u0027) is None:"},{"line_number":159,"context_line":"        missing_params.append(\u0027instance_info/rescue_password\u0027)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    return missing_params"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f485f77_2c350547","line":158,"range":{"start_line":158,"start_character":4,"end_line":158,"end_character":57},"in_reply_to":"1f485f77_51bfbacf","updated":"2017-11-27 06:11:07.000000000","message":"Done","commit_id":"e09a131c7386da84083a8c05a670c2e35b9bf772"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"21f3aa36c53df0ec35f728229e9b1c18d969b1c7","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    :param task: a TaskManager instance with the node being checked"},{"line_number":159,"context_line":"    :param required_properties: List of properties to be validated in"},{"line_number":160,"context_line":"        node\u0027s driver_info"},{"line_number":161,"context_line":"    :raises: InvalidParameterValue if \u0027instance_info/rescue_password\u0027 has"},{"line_number":162,"context_line":"        empty password or rescuing network UUID config option"},{"line_number":163,"context_line":"        has an invalid value when \u0027neutron\u0027 network is used."}],"source_content_type":"text/x-python","patch_set":17,"id":"5f93b717_bd464dbf","line":160,"updated":"2018-02-02 15:49:41.000000000","message":"should we mention that this is ignored if manage_agent_boot is False?","commit_id":"268d3741ac4c6daa1c1f7f608631cb8ae3d2f162"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fa4c9d869eef75fcc1757eadcd7cc302745c7192","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    :param task: a TaskManager instance with the node being checked"},{"line_number":159,"context_line":"    :param required_properties: List of properties to be validated in"},{"line_number":160,"context_line":"        node\u0027s driver_info"},{"line_number":161,"context_line":"    :raises: InvalidParameterValue if \u0027instance_info/rescue_password\u0027 has"},{"line_number":162,"context_line":"        empty password or rescuing network UUID config option"},{"line_number":163,"context_line":"        has an invalid value when \u0027neutron\u0027 network is used."}],"source_content_type":"text/x-python","patch_set":17,"id":"5f93b717_c0480e5d","line":160,"in_reply_to":"5f93b717_bd464dbf","updated":"2018-02-02 16:15:29.000000000","message":"Done","commit_id":"268d3741ac4c6daa1c1f7f608631cb8ae3d2f162"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"21f3aa36c53df0ec35f728229e9b1c18d969b1c7","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    missing_params \u003d []"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    # Validate rescuing network if node is using \u0027neutron\u0027 network"},{"line_number":171,"context_line":"    if isinstance(task.driver.network, neutron.NeutronNetwork):"},{"line_number":172,"context_line":"        task.driver.network.get_rescuing_network_uuid(task)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    if CONF.agent.manage_agent_boot:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f93b717_3d81ddc3","line":171,"range":{"start_line":171,"start_character":4,"end_line":171,"end_character":63},"updated":"2018-02-02 15:49:41.000000000","message":"OMG, this is bad. I understand it\u0027s a copy-paste, but we need to get rid of this before the release. I think we should just override get_rescuing_network_uuid to be noop for classes that don\u0027t need it.","commit_id":"268d3741ac4c6daa1c1f7f608631cb8ae3d2f162"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"fa19b136768b3783b60709e9c13eef6d97b0a41a","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    missing_params \u003d []"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    # Validate rescuing network if node is using \u0027neutron\u0027 network"},{"line_number":171,"context_line":"    if isinstance(task.driver.network, neutron.NeutronNetwork):"},{"line_number":172,"context_line":"        task.driver.network.get_rescuing_network_uuid(task)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    if CONF.agent.manage_agent_boot:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f93b717_8039a6a4","line":171,"range":{"start_line":171,"start_character":4,"end_line":171,"end_character":63},"in_reply_to":"5f93b717_3d81ddc3","updated":"2018-02-02 16:09:09.000000000","message":"Our IRC conversation today (stripped version):\n\n16:56 \u003cTheJulia\u003e dtantsur: so if the class structure can\u0027t be validated, and we shouldn\u0027t use the interface name in the db how exactly do we know what path the node should take for logic that is interface specific in other areas?\n\n16:58 \u003cdtantsur\u003e TheJulia: it means that such logic is misplaced\n\n16:58 \u003cdtantsur\u003e i.e. it should go to the interface in question\n\n16:59 \u003cTheJulia\u003e so we need to add a method to call the other interface, that will have to be abstracted off base because base would need to be something like pass\n\n17:00 \u003cTheJulia\u003e or... we just statically tag and see if the driver loaded has it\n\n17:00 \u003cdtantsur\u003e TheJulia: yep, something like task.driver.network.validate_rescue OR task.driver.network.supports_rescue_network\n\n17:01 \u003cjroll\u003e dtantsur: and the base RescueInterface.validate should be calling task.driver.network.validate_rescue\n\nIt can be done as a follow-up, but it has to be done before the release. Jim may help with it.","commit_id":"268d3741ac4c6daa1c1f7f608631cb8ae3d2f162"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8c690b729b260452a8cef02893e708ca9650b228","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    missing_params \u003d []"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    # Validate rescuing network if node is using \u0027neutron\u0027 network"},{"line_number":171,"context_line":"    if isinstance(task.driver.network, neutron.NeutronNetwork):"},{"line_number":172,"context_line":"        task.driver.network.get_rescuing_network_uuid(task)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    if CONF.agent.manage_agent_boot:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f93b717_e08aea61","line":171,"range":{"start_line":171,"start_character":4,"end_line":171,"end_character":63},"in_reply_to":"5f93b717_3d81ddc3","updated":"2018-02-02 16:05:47.000000000","message":"Since it\u0027s already in, I\u0027m okay with this landing now, and fixing it in a separate patch.\n\nAs far as how to fix it, we discussed in IRC: the base network interface should have a validate_rescue method that does any validation tasks like this. and the base rescue interface should call that, not the agent rescue interface, so that any implementation gets it for free.","commit_id":"268d3741ac4c6daa1c1f7f608631cb8ae3d2f162"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fa4c9d869eef75fcc1757eadcd7cc302745c7192","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    missing_params \u003d []"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    # Validate rescuing network if node is using \u0027neutron\u0027 network"},{"line_number":171,"context_line":"    if isinstance(task.driver.network, neutron.NeutronNetwork):"},{"line_number":172,"context_line":"        task.driver.network.get_rescuing_network_uuid(task)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    if CONF.agent.manage_agent_boot:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f93b717_2048d22a","line":171,"range":{"start_line":171,"start_character":4,"end_line":171,"end_character":63},"in_reply_to":"5f93b717_e08aea61","updated":"2018-02-02 16:15:29.000000000","message":"Ok.","commit_id":"268d3741ac4c6daa1c1f7f608631cb8ae3d2f162"}],"ironic/drivers/modules/ilo/boot.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b65a99c5bab62d2debc3dd9908c02abcddad7dd1","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        return COMMON_PROPERTIES"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    @METRICS.timer(\u0027IloVirtualMediaBoot.validate\u0027)"},{"line_number":264,"context_line":"    def validate(self, task, rescue\u003dFalse):"},{"line_number":265,"context_line":"        \"\"\"Validate the deployment information for the task\u0027s node."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        :param task: a TaskManager instance containing the node to act on."}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_57ad4286","line":264,"range":{"start_line":264,"start_character":28,"end_line":264,"end_character":41},"updated":"2017-04-04 06:29:10.000000000","message":"There is no call to boot.validate(task, rescue\u003dTrue)\nI think you need to implement rescue.validate(). May you can refactor the code in boot.validate() so that it could be used in rescue.validate() as well.","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"83acc90731d28bdfdc4028a9c75981eba4d4763f","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        return COMMON_PROPERTIES"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    @METRICS.timer(\u0027IloVirtualMediaBoot.validate\u0027)"},{"line_number":264,"context_line":"    def validate(self, task, rescue\u003dFalse):"},{"line_number":265,"context_line":"        \"\"\"Validate the deployment information for the task\u0027s node."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        :param task: a TaskManager instance containing the node to act on."}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_d835ff47","line":264,"range":{"start_line":264,"start_character":28,"end_line":264,"end_character":41},"in_reply_to":"dfeb2761_57ad4286","updated":"2017-04-04 10:47:54.000000000","message":"Done","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"730fff7495d4c95af6683d0a9c301a1b21f83eb1","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            props \u003d [\u0027kernel_id\u0027, \u0027ramdisk_id\u0027]"},{"line_number":290,"context_line":"        else:"},{"line_number":291,"context_line":"            props \u003d [\u0027kernel\u0027, \u0027ramdisk\u0027]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        deploy_utils.validate_image_properties(task.context, d_info, props)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    @METRICS.timer(\u0027IloVirtualMediaBoot.prepare_ramdisk\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_04904149","line":292,"updated":"2017-04-12 04:32:34.000000000","message":"nit: blank line added.","commit_id":"545f04a21b4354df4aa1e31abf4df90deb288f6f"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"2558734d188d4ad8de08456f7ef202b123f44433","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            props \u003d [\u0027kernel_id\u0027, \u0027ramdisk_id\u0027]"},{"line_number":290,"context_line":"        else:"},{"line_number":291,"context_line":"            props \u003d [\u0027kernel\u0027, \u0027ramdisk\u0027]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        deploy_utils.validate_image_properties(task.context, d_info, props)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    @METRICS.timer(\u0027IloVirtualMediaBoot.prepare_ramdisk\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ff52f3f_19887bc4","line":292,"in_reply_to":"bff0334d_04904149","updated":"2017-04-13 07:57:50.000000000","message":"Done","commit_id":"545f04a21b4354df4aa1e31abf4df90deb288f6f"},{"author":{"_account_id":14675,"name":"Hugo Nicodemos","email":"hugo.brito@windriver.com","username":"nicodemos"},"change_message_id":"b87cdf970aad4180c95c805c11b53bcdfa1f1c84","unresolved":false,"context_lines":[{"line_number":53,"context_line":"COMMON_PROPERTIES \u003d REQUIRED_PROPERTIES"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def is_rescuing(node):"},{"line_number":57,"context_line":"    \"\"\"Checks whether the node is in rescue mode or not\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    return (node.provision_state \u003d\u003d states.RESCUING or"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_caddc3e0","line":56,"updated":"2017-11-17 12:46:13.000000000","message":"s/is_rescuing/_is_rescuing","commit_id":"91c23c1b8fdad82d93bcb874d2f86b95fb901563"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"936afa30fa98eb3a327ebba13a5cafd5f22441e3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"COMMON_PROPERTIES \u003d REQUIRED_PROPERTIES"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def is_rescuing(node):"},{"line_number":57,"context_line":"    \"\"\"Checks whether the node is in rescue mode or not\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    return (node.provision_state \u003d\u003d states.RESCUING or"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff82abbf_4cf00aff","line":56,"in_reply_to":"1f485f77_caddc3e0","updated":"2017-11-27 06:11:07.000000000","message":"Done","commit_id":"91c23c1b8fdad82d93bcb874d2f86b95fb901563"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"33d2734331c39fe98c54a2fb561e0bbc27041234","unresolved":false,"context_lines":[{"line_number":575,"context_line":"        :returns: None"},{"line_number":576,"context_line":"        :raises: IloOperationError, if some operation on iLO failed."},{"line_number":577,"context_line":"        \"\"\""},{"line_number":578,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":579,"context_line":"        ilo_common.cleanup_vmedia_boot(task)"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"    def _configure_vmedia_boot(self, task, root_uuid):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa0c359_82f74cf6","line":578,"updated":"2018-02-05 15:07:40.000000000","message":"Unrelated? Makes sense, but additional context would be useful. For some reason, my brain is thinking power off was built into vmedia boot clean_up.","commit_id":"998f14c798bdffae2b82e1990087cd30df163ca2"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fd0e611b2082aeadb72bb6cd049b791f0731718e","unresolved":false,"context_lines":[{"line_number":575,"context_line":"        :returns: None"},{"line_number":576,"context_line":"        :raises: IloOperationError, if some operation on iLO failed."},{"line_number":577,"context_line":"        \"\"\""},{"line_number":578,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":579,"context_line":"        ilo_common.cleanup_vmedia_boot(task)"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"    def _configure_vmedia_boot(self, task, root_uuid):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa0c359_181ba81b","line":578,"in_reply_to":"3fa0c359_82f74cf6","updated":"2018-02-05 17:59:03.000000000","message":"No cleanup_vmedia_boot() do not power off node. vmedia clean up was failing in some scenario where node was not being powered off. Have kept it as original author has added code and and has test for the same. She is no more with HPE :(","commit_id":"998f14c798bdffae2b82e1990087cd30df163ca2"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"bf79e6f3d1255899fcfb9db4adeba2faae4970f2","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        # modify the state of the node due to virtual media operations."},{"line_number":449,"context_line":"        if (node.provision_state !\u003d states.DEPLOYING and"},{"line_number":450,"context_line":"                node.provision_state !\u003d states.CLEANING and"},{"line_number":451,"context_line":"                node.provision_state !\u003d states.RESCUING):"},{"line_number":452,"context_line":"            return"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        # Powering off the Node before initiating boot for node cleaning."}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa0c359_e5045a17","line":451,"updated":"2018-02-13 05:31:46.000000000","message":"nit: I prefer using:\n  node.provision_state not in [DEPLOYING, CLEANING, RESCUING]:","commit_id":"41b42b0b09c018e46751c1e90ef3485be38aa4ed"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"c80d5e0173a66df367fbabea63ca6cf602e7da22","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        # modify the state of the node due to virtual media operations."},{"line_number":449,"context_line":"        if (node.provision_state !\u003d states.DEPLOYING and"},{"line_number":450,"context_line":"                node.provision_state !\u003d states.CLEANING and"},{"line_number":451,"context_line":"                node.provision_state !\u003d states.RESCUING):"},{"line_number":452,"context_line":"            return"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        # Powering off the Node before initiating boot for node cleaning."}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa0c359_65928a59","line":451,"in_reply_to":"3fa0c359_e5045a17","updated":"2018-02-13 06:57:41.000000000","message":"Done","commit_id":"41b42b0b09c018e46751c1e90ef3485be38aa4ed"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"bf79e6f3d1255899fcfb9db4adeba2faae4970f2","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        if task.node.provision_state in (states.DEPLOYING, states.RESCUING):"},{"line_number":459,"context_line":"            prepare_node_for_deploy(task)"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        # Clear ilo_boot_iso if it\u0027s a glance image to force recreate"},{"line_number":462,"context_line":"        # another one again (or use existing one in glance)."},{"line_number":463,"context_line":"        # This is mainly for rebuild scenario."},{"line_number":464,"context_line":"        if service_utils.is_glance_image("}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa0c359_0a2dd5a6","line":461,"updated":"2018-02-13 05:31:46.000000000","message":"Is this necessary for rescue? This seems to cause re-creating boot_iso at unrescue.","commit_id":"41b42b0b09c018e46751c1e90ef3485be38aa4ed"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"c80d5e0173a66df367fbabea63ca6cf602e7da22","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        if task.node.provision_state in (states.DEPLOYING, states.RESCUING):"},{"line_number":459,"context_line":"            prepare_node_for_deploy(task)"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        # Clear ilo_boot_iso if it\u0027s a glance image to force recreate"},{"line_number":462,"context_line":"        # another one again (or use existing one in glance)."},{"line_number":463,"context_line":"        # This is mainly for rebuild scenario."},{"line_number":464,"context_line":"        if service_utils.is_glance_image("}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa0c359_a5ac129f","line":461,"in_reply_to":"3fa0c359_0a2dd5a6","updated":"2018-02-13 06:57:41.000000000","message":"Done","commit_id":"41b42b0b09c018e46751c1e90ef3485be38aa4ed"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"6caa11c1eb887da0a08f333b221588aa2c98e7db","unresolved":false,"context_lines":[{"line_number":576,"context_line":"            # be required if boot iso needs to be created during unrescue"},{"line_number":577,"context_line":"            # operation."},{"line_number":578,"context_line":"            if task.node.provision_state !\u003d states.RESCUING:"},{"line_number":579,"context_line":"                driver_internal_info.pop(\u0027root_uuid_or_disk_id\u0027, None)"},{"line_number":580,"context_line":"            ilo_common.cleanup_vmedia_boot(task)"},{"line_number":581,"context_line":"        task.node.driver_internal_info \u003d driver_internal_info"},{"line_number":582,"context_line":"        task.node.save()"}],"source_content_type":"text/x-python","patch_set":29,"id":"3fa0c359_f76130d5","line":579,"updated":"2018-02-15 08:44:54.000000000","message":"It might be better to remove this parameter in deploy interface at undeploying because this is set by deploy interface. We don\u0027t need to fix now, though.","commit_id":"628e71cec8b60c50b3fc67b0528beeb1ebd59cbb"}],"ironic/drivers/modules/ilo/rescue.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b65a99c5bab62d2debc3dd9908c02abcddad7dd1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_2c6151aa","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2017-04-04 06:29:10.000000000","message":"s/  2014/ 2017","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b65a99c5bab62d2debc3dd9908c02abcddad7dd1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_0c644db8","line":1,"range":{"start_line":1,"start_character":17,"end_line":1,"end_character":58},"updated":"2017-04-04 06:29:10.000000000","message":"s/ Hewlett-Packard Development Company, L.P/ Hewlett Packard Enterprise /","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"83acc90731d28bdfdc4028a9c75981eba4d4763f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_12b908cb","line":1,"range":{"start_line":1,"start_character":17,"end_line":1,"end_character":58},"in_reply_to":"dfeb2761_0c644db8","updated":"2017-04-04 10:47:54.000000000","message":"Done","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"83acc90731d28bdfdc4028a9c75981eba4d4763f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_f2bb44c1","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"dfeb2761_2c6151aa","updated":"2017-04-04 10:47:54.000000000","message":"Done","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b65a99c5bab62d2debc3dd9908c02abcddad7dd1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                        \"managing booting the rescue ramdisk.\")"},{"line_number":24,"context_line":"}"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"COMMON_PROPERTIES \u003d REQUIRED_PROPERTIES"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class IloVirtualMedialRescue(agent.AgentRescue):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_6c6e3996","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":39},"updated":"2017-04-04 06:29:10.000000000","message":"This is redundant.","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"83acc90731d28bdfdc4028a9c75981eba4d4763f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                        \"managing booting the rescue ramdisk.\")"},{"line_number":24,"context_line":"}"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"COMMON_PROPERTIES \u003d REQUIRED_PROPERTIES"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class IloVirtualMedialRescue(agent.AgentRescue):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_92ccf86a","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":39},"in_reply_to":"dfeb2761_6c6e3996","updated":"2017-04-04 10:47:54.000000000","message":"Done","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b65a99c5bab62d2debc3dd9908c02abcddad7dd1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"COMMON_PROPERTIES \u003d REQUIRED_PROPERTIES"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class IloVirtualMedialRescue(agent.AgentRescue):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_properties(self):"},{"line_number":32,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_cc44251e","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":28},"updated":"2017-04-04 06:29:10.000000000","message":"s/IloVirtualMedialRescue / IloVirtualMediaRescue","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"83acc90731d28bdfdc4028a9c75981eba4d4763f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"COMMON_PROPERTIES \u003d REQUIRED_PROPERTIES"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class IloVirtualMedialRescue(agent.AgentRescue):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_properties(self):"},{"line_number":32,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_b2ea5ca9","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":28},"in_reply_to":"dfeb2761_cc44251e","updated":"2017-04-04 10:47:54.000000000","message":"Done","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b65a99c5bab62d2debc3dd9908c02abcddad7dd1","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class IloVirtualMedialRescue(agent.AgentRescue):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_properties(self):"},{"line_number":32,"context_line":"        \"\"\"Return the properties of the interface."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        :returns: dictionary of \u003cproperty name\u003e:\u003cproperty description\u003e entries."}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_32b40c35","line":31,"range":{"start_line":31,"start_character":5,"end_line":31,"end_character":29},"updated":"2017-04-04 06:29:10.000000000","message":"Need to re-define validate() method here. Execution of agent.AgentRescue.validate() will wait for this class as it validates PXE based node.driver_info","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"83acc90731d28bdfdc4028a9c75981eba4d4763f","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class IloVirtualMedialRescue(agent.AgentRescue):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_properties(self):"},{"line_number":32,"context_line":"        \"\"\"Return the properties of the interface."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        :returns: dictionary of \u003cproperty name\u003e:\u003cproperty description\u003e entries."}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_58f44f86","line":31,"range":{"start_line":31,"start_character":5,"end_line":31,"end_character":29},"in_reply_to":"dfeb2761_32b40c35","updated":"2017-04-04 10:47:54.000000000","message":"Done","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e2deca27f147525c4b0efa411910c1163bc7fee2","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class IloVirtualMedialRescue(agent.AgentRescue):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_properties(self):"},{"line_number":32,"context_line":"        \"\"\"Return the properties of the interface."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        :returns: dictionary of \u003cproperty name\u003e:\u003cproperty description\u003e entries."}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_b2e01cfc","line":31,"range":{"start_line":31,"start_character":5,"end_line":31,"end_character":29},"in_reply_to":"dfeb2761_32b40c35","updated":"2017-04-04 06:33:40.000000000","message":"s/ wait/ fail","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"730fff7495d4c95af6683d0a9c301a1b21f83eb1","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                msg % {\u0027node\u0027: task.node[\u0027uuid\u0027],"},{"line_number":63,"context_line":"                       \u0027params\u0027: \u0027, \u0027.join(missing_params)})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def rescue(self, task):"},{"line_number":66,"context_line":"        \"\"\"Performs rescue operation for the virtual media based drivers."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        :param task: a TaskManager instance with the node being checked."},{"line_number":69,"context_line":"        :raises: Exception if the rescue fails."},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":72,"context_line":"        return super(IloVirtualMediaRescue, self).rescue(task)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def unrescue(self, task):"},{"line_number":75,"context_line":"        \"\"\"Performs unrescue operation for virtual media based drivers."}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_f7ee2d20","line":72,"range":{"start_line":65,"start_character":4,"end_line":72,"end_character":62},"updated":"2017-04-12 04:32:34.000000000","message":"Is this method required? \nagent.AgentRescue.rescue() does power off the node before performing any operation.","commit_id":"545f04a21b4354df4aa1e31abf4df90deb288f6f"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"2558734d188d4ad8de08456f7ef202b123f44433","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                msg % {\u0027node\u0027: task.node[\u0027uuid\u0027],"},{"line_number":63,"context_line":"                       \u0027params\u0027: \u0027, \u0027.join(missing_params)})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def rescue(self, task):"},{"line_number":66,"context_line":"        \"\"\"Performs rescue operation for the virtual media based drivers."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        :param task: a TaskManager instance with the node being checked."},{"line_number":69,"context_line":"        :raises: Exception if the rescue fails."},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":72,"context_line":"        return super(IloVirtualMediaRescue, self).rescue(task)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def unrescue(self, task):"},{"line_number":75,"context_line":"        \"\"\"Performs unrescue operation for virtual media based drivers."}],"source_content_type":"text/x-python","patch_set":4,"id":"9ff52f3f_eb061c21","line":72,"range":{"start_line":65,"start_character":4,"end_line":72,"end_character":62},"in_reply_to":"bff0334d_f7ee2d20","updated":"2017-04-13 07:57:50.000000000","message":"Removed","commit_id":"545f04a21b4354df4aa1e31abf4df90deb288f6f"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"730fff7495d4c95af6683d0a9c301a1b21f83eb1","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":72,"context_line":"        return super(IloVirtualMediaRescue, self).rescue(task)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def unrescue(self, task):"},{"line_number":75,"context_line":"        \"\"\"Performs unrescue operation for virtual media based drivers."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        :param task: a TaskManager instance with the node being checked."},{"line_number":78,"context_line":"        :raises: Exception if the unrescue fails."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":81,"context_line":"        return super(IloVirtualMediaRescue, self).unrescue(task)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def clean_up(self, task):"},{"line_number":84,"context_line":"        \"\"\"Clean up after RESCUEWAIT timeout/failure or finishing rescue."}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_d7f1e902","line":81,"range":{"start_line":74,"start_character":4,"end_line":81,"end_character":64},"updated":"2017-04-12 04:32:34.000000000","message":"Is this method required? \nagent.AgentRescue.unrescue() does power off the node before performing any operation.","commit_id":"545f04a21b4354df4aa1e31abf4df90deb288f6f"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"2558734d188d4ad8de08456f7ef202b123f44433","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":72,"context_line":"        return super(IloVirtualMediaRescue, self).rescue(task)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def unrescue(self, task):"},{"line_number":75,"context_line":"        \"\"\"Performs unrescue operation for virtual media based drivers."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        :param task: a TaskManager instance with the node being checked."},{"line_number":78,"context_line":"        :raises: Exception if the unrescue fails."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":81,"context_line":"        return super(IloVirtualMediaRescue, self).unrescue(task)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def clean_up(self, task):"},{"line_number":84,"context_line":"        \"\"\"Clean up after RESCUEWAIT timeout/failure or finishing rescue."}],"source_content_type":"text/x-python","patch_set":4,"id":"9ff52f3f_cb03580f","line":81,"range":{"start_line":74,"start_character":4,"end_line":81,"end_character":64},"in_reply_to":"bff0334d_d7f1e902","updated":"2017-04-13 07:57:50.000000000","message":"Removed","commit_id":"545f04a21b4354df4aa1e31abf4df90deb288f6f"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"730fff7495d4c95af6683d0a9c301a1b21f83eb1","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":81,"context_line":"        return super(IloVirtualMediaRescue, self).unrescue(task)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def clean_up(self, task):"},{"line_number":84,"context_line":"        \"\"\"Clean up after RESCUEWAIT timeout/failure or finishing rescue."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        :param task: a TaskManager instance with the node that timed out."},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":89,"context_line":"        return super(IloVirtualMediaRescue, self).clean_up(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_f73ced93","line":89,"range":{"start_line":83,"start_character":4,"end_line":89,"end_character":64},"updated":"2017-04-12 04:32:34.000000000","message":"This method can also be removed by moving the POWER OFF operation to \nilo.boot.clean_up_ramdisk()","commit_id":"545f04a21b4354df4aa1e31abf4df90deb288f6f"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"2558734d188d4ad8de08456f7ef202b123f44433","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":81,"context_line":"        return super(IloVirtualMediaRescue, self).unrescue(task)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def clean_up(self, task):"},{"line_number":84,"context_line":"        \"\"\"Clean up after RESCUEWAIT timeout/failure or finishing rescue."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        :param task: a TaskManager instance with the node that timed out."},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":89,"context_line":"        return super(IloVirtualMediaRescue, self).clean_up(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ff52f3f_7e03e80e","line":89,"range":{"start_line":83,"start_character":4,"end_line":89,"end_character":64},"in_reply_to":"bff0334d_f73ced93","updated":"2017-04-13 07:57:50.000000000","message":"Done","commit_id":"545f04a21b4354df4aa1e31abf4df90deb288f6f"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"f4cb7884356099dbe9b09c20f4d87784d1a8330a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            if task.node.driver_info.get(\u0027ilo_rescue_iso\u0027) is None:"},{"line_number":49,"context_line":"                missing_params.append(\u0027driver_info/ilo_rescue_iso\u0027)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        missing_params.extend(agent.validate_info(task.node))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        if missing_params:"},{"line_number":54,"context_line":"            msg \u003d (\u0027Error validating agent rescue interface. \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_16a245af","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":61},"updated":"2017-11-23 09:20:27.000000000","message":"Why is this removed from the latest patch?","commit_id":"e09a131c7386da84083a8c05a670c2e35b9bf772"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"936afa30fa98eb3a327ebba13a5cafd5f22441e3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            if task.node.driver_info.get(\u0027ilo_rescue_iso\u0027) is None:"},{"line_number":49,"context_line":"                missing_params.append(\u0027driver_info/ilo_rescue_iso\u0027)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        missing_params.extend(agent.validate_info(task.node))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        if missing_params:"},{"line_number":54,"context_line":"            msg \u003d (\u0027Error validating agent rescue interface. \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_4cd9ea7c","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":61},"in_reply_to":"ff82abbf_16a245af","updated":"2017-11-27 06:11:07.000000000","message":"This is no more required in the driver code, its being validated at API level.","commit_id":"e09a131c7386da84083a8c05a670c2e35b9bf772"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"614779cca5fab73d86cf7c5814972fc65c6cc744","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :raises: MissingParameterValue if node is missing one or more required"},{"line_number":46,"context_line":"            parameters"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        agent.validate_rescue(task, REQUIRED_PROPERTIES)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f93b717_202212ba","line":48,"updated":"2018-02-02 16:35:30.000000000","message":"what if we modify https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/agent.py#L790 to use self.get_properties() instead of RESCUE_PROPERTIES? then this call won\u0027t be needed.\n\nwhat is important, i think you should call the parent implementation of validate() otherwise you don\u0027t validate rescue_password and other things","commit_id":"f043ef6c101adb370011e0c9c78999bd3c908fbb"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"75c183ffe637a8b457d10c05088845a6cde6192b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :raises: MissingParameterValue if node is missing one or more required"},{"line_number":46,"context_line":"            parameters"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        agent.validate_rescue(task, REQUIRED_PROPERTIES)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f93b717_cc2e058b","line":48,"in_reply_to":"5f93b717_202212ba","updated":"2018-02-02 18:49:20.000000000","message":"Done","commit_id":"f043ef6c101adb370011e0c9c78999bd3c908fbb"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4af3c8eb3f7ded3759a310a38303b6f0c84b20c8","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :raises: MissingParameterValue if node is missing one or more required"},{"line_number":46,"context_line":"            parameters"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        super(IloVirtualMediaRescue, self).validate(task)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa0c359_a39a8ac2","line":48,"updated":"2018-02-05 16:19:36.000000000","message":"If we\u0027re just calling super().validate() here, we don\u0027t need to put this method here at all, right?","commit_id":"998f14c798bdffae2b82e1990087cd30df163ca2"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"59c96975e01b1d609cd531b9300035796f774dfa","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :raises: MissingParameterValue if node is missing one or more required"},{"line_number":46,"context_line":"            parameters"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        super(IloVirtualMediaRescue, self).validate(task)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa0c359_c36476bc","line":48,"in_reply_to":"3fa0c359_a39a8ac2","updated":"2018-02-05 16:22:04.000000000","message":"And now I see the conversation earlier in the review, and in IRC, seems you\u0027re on top of this :)","commit_id":"998f14c798bdffae2b82e1990087cd30df163ca2"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fd0e611b2082aeadb72bb6cd049b791f0731718e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :raises: MissingParameterValue if node is missing one or more required"},{"line_number":46,"context_line":"            parameters"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        super(IloVirtualMediaRescue, self).validate(task)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa0c359_78cc2c89","line":48,"in_reply_to":"3fa0c359_c36476bc","updated":"2018-02-05 17:59:03.000000000","message":"Yes.","commit_id":"998f14c798bdffae2b82e1990087cd30df163ca2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0b77c15dd604f30729f88bcbc7c3bcb8cdcd9a78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"3fa0c359_b4628d3d","updated":"2018-02-07 09:27:23.000000000","message":"please remove this file and IloVirtualMediaRescue. with boot.validate_rescue you have all necessary bits in place","commit_id":"46fb24acd0f1d47482dc60eb59fbff1309b1189a"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"293127083156937d9ab76cfbcaa0de27c67bab05","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"3fa0c359_ea5fad6f","in_reply_to":"3fa0c359_b4628d3d","updated":"2018-02-08 11:10:54.000000000","message":"Done","commit_id":"46fb24acd0f1d47482dc60eb59fbff1309b1189a"}],"ironic/drivers/modules/pxe.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b65a99c5bab62d2debc3dd9908c02abcddad7dd1","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        return COMMON_PROPERTIES"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    @METRICS.timer(\u0027PXEBoot.validate\u0027)"},{"line_number":334,"context_line":"    def validate(self, task, rescue\u003dFalse):"},{"line_number":335,"context_line":"        \"\"\"Validate the PXE-specific info for booting deploy/instance images."},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        This method validates the PXE-specific info for booting the"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_72d8547e","line":334,"range":{"start_line":334,"start_character":4,"end_line":334,"end_character":43},"updated":"2017-04-04 06:29:10.000000000","message":"This is incorrect. Boot interface validate method does not have rescue as its parameter.","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"83acc90731d28bdfdc4028a9c75981eba4d4763f","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        return COMMON_PROPERTIES"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    @METRICS.timer(\u0027PXEBoot.validate\u0027)"},{"line_number":334,"context_line":"    def validate(self, task, rescue\u003dFalse):"},{"line_number":335,"context_line":"        \"\"\"Validate the PXE-specific info for booting deploy/instance images."},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        This method validates the PXE-specific info for booting the"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_983f7724","line":334,"range":{"start_line":334,"start_character":4,"end_line":334,"end_character":43},"in_reply_to":"dfeb2761_72d8547e","updated":"2017-04-04 10:47:54.000000000","message":"Done","commit_id":"7d644e6f2a9e90de4b1e6aa3c9ff9dcc18ecccf1"}],"ironic/tests/unit/drivers/modules/ilo/test_boot.py":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"bf79e6f3d1255899fcfb9db4adeba2faae4970f2","unresolved":false,"context_lines":[{"line_number":684,"context_line":"                    enabled_vendor_interfaces\u003d[\u0027no-vendor\u0027])"},{"line_number":685,"context_line":"        self.config(enabled_hardware_types\u003d[\u0027ilo\u0027])"},{"line_number":686,"context_line":"        driver_info \u003d INFO_DICT"},{"line_number":687,"context_line":"        driver_info[\u0027ilo_rescue_iso\u0027] \u003d \u0027rescue-iso\u0027"},{"line_number":688,"context_line":"        self.node \u003d obj_utils.create_test_node("},{"line_number":689,"context_line":"            self.context, driver\u003d\u0027ilo\u0027, driver_info\u003ddriver_info)"},{"line_number":690,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa0c359_4a2afdda","line":687,"updated":"2018-02-13 05:31:46.000000000","message":"nit: It seems enough to set this parameter only in test_validate_rescue() because test_prepare_ramdisk_rescue() overwrites this at L757 and test_validate_rescue_no_rescue_ramdisk() deletes this.","commit_id":"41b42b0b09c018e46751c1e90ef3485be38aa4ed"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"c80d5e0173a66df367fbabea63ca6cf602e7da22","unresolved":false,"context_lines":[{"line_number":684,"context_line":"                    enabled_vendor_interfaces\u003d[\u0027no-vendor\u0027])"},{"line_number":685,"context_line":"        self.config(enabled_hardware_types\u003d[\u0027ilo\u0027])"},{"line_number":686,"context_line":"        driver_info \u003d INFO_DICT"},{"line_number":687,"context_line":"        driver_info[\u0027ilo_rescue_iso\u0027] \u003d \u0027rescue-iso\u0027"},{"line_number":688,"context_line":"        self.node \u003d obj_utils.create_test_node("},{"line_number":689,"context_line":"            self.context, driver\u003d\u0027ilo\u0027, driver_info\u003ddriver_info)"},{"line_number":690,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa0c359_258c82d5","line":687,"in_reply_to":"3fa0c359_4a2afdda","updated":"2018-02-13 06:57:41.000000000","message":"Done","commit_id":"41b42b0b09c018e46751c1e90ef3485be38aa4ed"}],"ironic/tests/unit/drivers/modules/ilo/test_rescue.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4af3c8eb3f7ded3759a310a38303b6f0c84b20c8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def test_validate(self, mock_agent_validate):"},{"line_number":50,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":51,"context_line":"            task.driver.rescue.validate(task)"},{"line_number":52,"context_line":"            mock_agent_validate.assert_called_once_with(mock.ANY, task)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa0c359_a3e84a16","line":52,"updated":"2018-02-05 16:19:36.000000000","message":"And if we drop the other method I commented on, we can drop this test (and therefore this whole test class, right?).","commit_id":"998f14c798bdffae2b82e1990087cd30df163ca2"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fd0e611b2082aeadb72bb6cd049b791f0731718e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def test_validate(self, mock_agent_validate):"},{"line_number":50,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":51,"context_line":"            task.driver.rescue.validate(task)"},{"line_number":52,"context_line":"            mock_agent_validate.assert_called_once_with(mock.ANY, task)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa0c359_58cb7052","line":52,"in_reply_to":"3fa0c359_a3e84a16","updated":"2018-02-05 17:59:03.000000000","message":"Yes.","commit_id":"998f14c798bdffae2b82e1990087cd30df163ca2"}],"releasenotes/notes/rescue-interface-for-ilo-hardware-type-2392989d0fef8849.yaml":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"defde1a2faf79ff68386139053a9c6bf1afeed8c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"3fa0c359_22c59ff1","line":7,"updated":"2018-02-09 07:34:33.000000000","message":"It would be better to mention adding rescue support to ilo-virtual-media boot interface.","commit_id":"cca8ed4b27a429be92696ec03405ec874cb5b34b"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"12e268e03323569cac9ad2e4f91e2ba11e15a139","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"3fa0c359_010c1e39","line":7,"in_reply_to":"3fa0c359_22c59ff1","updated":"2018-02-09 10:29:24.000000000","message":"Done","commit_id":"cca8ed4b27a429be92696ec03405ec874cb5b34b"}]}
