)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"c10dd19e9c88232d7c3386c85f19083b940b5658","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sen Yang \u003csen.yang@windriver.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-11-15 13:45:04 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement hypervisor hostname exact patten match for server cold migrate"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1667794"},{"line_number":10,"context_line":"Change-Id: I5610efa160864b0d91cd67961883a6bec5bb8dd0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1f485f77_2cf12996","line":7,"updated":"2017-11-16 19:53:15.000000000","message":"needs a bit more information in the commit message.  please leave a blank line after the summary line, and add a new paragraph explaining the problem and how the change will help.","commit_id":"33d50ce3b428880e7155adfe4eae1705eee95a66"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"0a4c02a067a9626109f1088fb5a3926dfab7418a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sen Yang \u003csen.yang@windriver.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-01-29 10:03:34 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement hypervisor hostname exact patten match for server cold migrate"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    When starting cold migration with nova command \"nova host-"},{"line_number":10,"context_line":"    servers-migrate compute-1\", the migration started from all"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f93b717_90aad3cf","line":7,"updated":"2018-01-29 18:17:21.000000000","message":"\"patten\" should be \"pattern\".\n\nAlso, since we\u0027re actually covering multiple commands we might want to remove \"for server cold migrate\" from the topic line.","commit_id":"1dd138d8d0e7e4dffe2ac953efcf225bbf51167b"},{"author":{"_account_id":26991,"name":"Louie Kwan","email":"louie.kwan@windriver.com","username":"lkwan"},"change_message_id":"ed407531f46394bcf154bfa88317be7615aad1d2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sen Yang \u003csen.yang@windriver.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-01-29 10:03:34 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement hypervisor hostname exact patten match for server cold migrate"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    When starting cold migration with nova command \"nova host-"},{"line_number":10,"context_line":"    servers-migrate compute-1\", the migration started from all"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f93b717_30adff87","line":7,"in_reply_to":"5f93b717_90aad3cf","updated":"2018-01-29 18:36:11.000000000","message":"Agree, should clean it up.","commit_id":"1dd138d8d0e7e4dffe2ac953efcf225bbf51167b"}],"novaclient/tests/unit/v2/fakes.py":[{"author":{"_account_id":26991,"name":"Louie Kwan","email":"louie.kwan@windriver.com","username":"lkwan"},"change_message_id":"bf022b573fe3e2363c8f39877a9a0ab2bada7fe4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyrigt (c) 2011 X.commerce, a business unit of eBay Inc.h"},{"line_number":2,"context_line":"# Copyright 2011 OpenStack Foundation"},{"line_number":3,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_6a6c2708","line":1,"range":{"start_line":1,"start_character":60,"end_line":1,"end_character":61},"updated":"2018-01-22 20:07:17.000000000","message":"extra h, here?","commit_id":"3681f8eb533e2388dc12890016a2c1eabf438088"},{"author":{"_account_id":26991,"name":"Louie Kwan","email":"louie.kwan@windriver.com","username":"lkwan"},"change_message_id":"bf022b573fe3e2363c8f39877a9a0ab2bada7fe4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyrigt (c) 2011 X.commerce, a business unit of eBay Inc.h"},{"line_number":2,"context_line":"# Copyright 2011 OpenStack Foundation"},{"line_number":3,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":6,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":7,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_ca4e9b95","line":4,"range":{"start_line":4,"start_character":0,"end_line":4,"end_character":1},"updated":"2018-01-22 20:07:17.000000000","message":"Should the copyright get updated? 2018 WindRiver Systems etc.","commit_id":"3681f8eb533e2388dc12890016a2c1eabf438088"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c59160f110bb55997df7ee2a5862a6e692066dbf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyrigt (c) 2011 X.commerce, a business unit of eBay Inc.h"},{"line_number":2,"context_line":"# Copyright 2011 OpenStack Foundation"},{"line_number":3,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":6,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":7,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_4b3b6dc7","line":4,"range":{"start_line":4,"start_character":0,"end_line":4,"end_character":1},"in_reply_to":"7f96bb07_ca4e9b95","updated":"2018-01-22 21:51:08.000000000","message":"I think this was an accidental edit that should be reverted.","commit_id":"3681f8eb533e2388dc12890016a2c1eabf438088"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"d22a056fe97c358ef626a0f956623fb38b6cac5b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyrigt (c) 2011 X.commerce, a business unit of eBay Inc."},{"line_number":2,"context_line":"# Copyright 2011 OpenStack Foundation"},{"line_number":3,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":4,"context_line":"# Copyright 2018 Wind River Systems, Inc."}],"source_content_type":"text/x-python","patch_set":3,"id":"5f93b717_d4095d95","line":1,"updated":"2018-01-26 18:43:28.000000000","message":"This isn\u0027t fully reverted.  The \u0027h\u0027 in \u0027Copyright\u0027 got moved to the end of the line.  You\u0027ve removed it, but you haven\u0027t restored it to its rightful place.","commit_id":"ebb6c05aff9d564903a2f992ca9c525fff85d184"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"d22a056fe97c358ef626a0f956623fb38b6cac5b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyrigt (c) 2011 X.commerce, a business unit of eBay Inc."},{"line_number":2,"context_line":"# Copyright 2011 OpenStack Foundation"},{"line_number":3,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":4,"context_line":"# Copyright 2018 Wind River Systems, Inc."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":7,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":3,"id":"5f93b717_b42b71e9","line":4,"updated":"2018-01-26 18:43:28.000000000","message":"I would have to go look in the wiki to determine exactly what our current policies are on adding copyright indications…but I don\u0027t believe the changes in this file are sufficient to warrant the addition of this copyright line.","commit_id":"ebb6c05aff9d564903a2f992ca9c525fff85d184"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"40162715851ce959827cda846abea0b2fe49e60d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2011 X.commerce, a business unit of eBay Inc."},{"line_number":2,"context_line":"# Copyright 2011 OpenStack Foundation"},{"line_number":3,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":4,"context_line":"# Copyright 2018 Wind River Systems, Inc."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":7,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_ad5d60ea","line":4,"updated":"2018-01-26 21:08:56.000000000","message":"I\u0027m still not certain that the changes in this file warrant the addition of a copyright notice for Wind River Systems, Inc.  However, I have endeavored to conduct some research into the guidance we provide for this, and what I have found is that we don\u0027t have any specific guidance on when such headers should or should not be added[1].  So, while I\u0027ll suggest it\u0027s probably not needed, I\u0027ll not hold up the change just for this issue.\n\n[1] https://wiki.openstack.org/wiki/LegalIssuesFAQ#Copyright_Headers","commit_id":"5e081f0c12b7a291eaca80fe366f2cb3644b449d"}],"novaclient/tests/unit/v2/test_shell.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b6222a881e7930b317d26553b849038faceb78e4","unresolved":false,"context_lines":[{"line_number":1778,"context_line":""},{"line_number":1779,"context_line":"    def test_set_host_meta_with_no_servers(self):"},{"line_number":1780,"context_line":"        cmd \u003d \u0027host-meta hyper_no_servers --strict set key1\u003dval1 key2\u003dval2\u0027"},{"line_number":1781,"context_line":"        self.assertRaises(exceptions.NotFound, self.run_command, cmd)"},{"line_number":1782,"context_line":""},{"line_number":1783,"context_line":"    def test_delete_host_meta(self):"},{"line_number":1784,"context_line":"        self.run_command(\u0027host-meta hyper delete key1\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_853374f6","line":1781,"updated":"2017-11-15 21:56:06.000000000","message":"so you\u0027ve changed this test case by adding ``--strict`` and dropping the ``assert_called()``?  Are we deliberately abandoning the old behavior then?","commit_id":"33d50ce3b428880e7155adfe4eae1705eee95a66"}],"novaclient/v2/shell.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b6222a881e7930b317d26553b849038faceb78e4","unresolved":false,"context_lines":[{"line_number":4884,"context_line":"            for hyper in hypervisors:"},{"line_number":4885,"context_line":"                if hasattr(hyper, \u0027servers\u0027):"},{"line_number":4886,"context_line":"                    for server in hyper.servers:"},{"line_number":4887,"context_line":"                        response.append(_server_evacuate(cs, server, args))"},{"line_number":4888,"context_line":"            utils.print_list(response, [\"Server UUID\","},{"line_number":4889,"context_line":"                             \"Evacuate Accepted\", \"Error Message\"])"},{"line_number":4890,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_856134d6","line":4887,"updated":"2017-11-15 21:56:06.000000000","message":"It looks to me like you can deal with the \u0027if strict\u0027 behavior at a lower level and eliminate the duplication; e.g., make the condition at line 4872 something along the lines of:\n\n    if not strict or hyper.hypervisor_hostname \u003d\u003d args.host:","commit_id":"33d50ce3b428880e7155adfe4eae1705eee95a66"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b6222a881e7930b317d26553b849038faceb78e4","unresolved":false,"context_lines":[{"line_number":4992,"context_line":"                for server in getattr(hyper, \u0027servers\u0027, []):"},{"line_number":4993,"context_line":"                    response.append(_server_live_migrate(cs, server, args))"},{"line_number":4994,"context_line":"                    migrating \u003d migrating + 1"},{"line_number":4995,"context_line":"                    if args.max_servers is not None and \\"},{"line_number":4996,"context_line":"                       migrating \u003e\u003d args.max_servers:"},{"line_number":4997,"context_line":"                        break"},{"line_number":4998,"context_line":"            utils.print_list(response, [\"Server UUID\","}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_655e3813","line":4995,"updated":"2017-11-15 21:56:06.000000000","message":"Please use parentheses to eliminate the backslash continuation","commit_id":"33d50ce3b428880e7155adfe4eae1705eee95a66"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b6222a881e7930b317d26553b849038faceb78e4","unresolved":false,"context_lines":[{"line_number":5052,"context_line":"            for hyper in hypervisors:"},{"line_number":5053,"context_line":"                if hasattr(hyper, \u0027servers\u0027):"},{"line_number":5054,"context_line":"                    for server in hyper.servers:"},{"line_number":5055,"context_line":"                        response.append(_server_migrate(cs, server))"},{"line_number":5056,"context_line":"            utils.print_list(response, [\"Server UUID\","},{"line_number":5057,"context_line":"                             \"Migration Accepted\", \"Error Message\"])"},{"line_number":5058,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_c5b04c46","line":5055,"updated":"2017-11-15 21:56:06.000000000","message":"This is a lot of duplicated logic.  Can\u0027t we create a generator function that encapsulates the logic and loops above and just iterate over that in these command functions?","commit_id":"33d50ce3b428880e7155adfe4eae1705eee95a66"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c59160f110bb55997df7ee2a5862a6e692066dbf","unresolved":false,"context_lines":[{"line_number":4710,"context_line":"    hypervisors \u003d cs.hypervisors.search(args.host, servers\u003dTrue)"},{"line_number":4711,"context_line":"    if hypervisors:"},{"line_number":4712,"context_line":"        response \u003d []"},{"line_number":4713,"context_line":"        strict \u003d getattr(args, \u0027strict\u0027, None)"},{"line_number":4714,"context_line":"        for hyper in hypervisors:"},{"line_number":4715,"context_line":"            if strict and (hyper.hypervisor_hostname !\u003d args.host):"},{"line_number":4716,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_4bf36de8","line":4713,"updated":"2018-01-22 21:51:08.000000000","message":"There\u0027s no point using getattr() on args like this.  The way it was specified above ensures that args will always have a \u0027strict\u0027 attribute, which will be False unless the user passed --strict, in which case it will be True.","commit_id":"3681f8eb533e2388dc12890016a2c1eabf438088"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c59160f110bb55997df7ee2a5862a6e692066dbf","unresolved":false,"context_lines":[{"line_number":4712,"context_line":"        response \u003d []"},{"line_number":4713,"context_line":"        strict \u003d getattr(args, \u0027strict\u0027, None)"},{"line_number":4714,"context_line":"        for hyper in hypervisors:"},{"line_number":4715,"context_line":"            if strict and (hyper.hypervisor_hostname !\u003d args.host):"},{"line_number":4716,"context_line":"                continue"},{"line_number":4717,"context_line":"            if hasattr(hyper, \u0027servers\u0027):"},{"line_number":4718,"context_line":"                for server in hyper.servers:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_8b72d5ac","line":4715,"updated":"2018-01-22 21:51:08.000000000","message":"For the record, the parentheses are not required here.","commit_id":"3681f8eb533e2388dc12890016a2c1eabf438088"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c59160f110bb55997df7ee2a5862a6e692066dbf","unresolved":false,"context_lines":[{"line_number":4722,"context_line":"        else:"},{"line_number":4723,"context_line":"            if strict:"},{"line_number":4724,"context_line":"                msg \u003d (_(\"No hypervisor matching \u0027%s\u0027 could be found.\") %"},{"line_number":4725,"context_line":"                       (args.host))"},{"line_number":4726,"context_line":"                raise exceptions.NotFound(404, msg)"},{"line_number":4727,"context_line":"        utils.print_list(response,"},{"line_number":4728,"context_line":"                         [\"Server UUID\", \"Evacuate Accepted\", \"Error Message\"])"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_0b5ec511","line":4725,"range":{"start_line":4725,"start_character":23,"end_line":4725,"end_character":34},"updated":"2018-01-22 21:51:08.000000000","message":"Again, for the record, the parentheses are redundant in this case.","commit_id":"3681f8eb533e2388dc12890016a2c1eabf438088"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c59160f110bb55997df7ee2a5862a6e692066dbf","unresolved":false,"context_lines":[{"line_number":4827,"context_line":"                       (args.host))"},{"line_number":4828,"context_line":"                raise exceptions.NotFound(404, msg)"},{"line_number":4829,"context_line":"        utils.print_list(response, [\"Server UUID\","},{"line_number":4830,"context_line":"                         \"Live Migration Accepted\", \"Error Message\"])"},{"line_number":4831,"context_line":""},{"line_number":4832,"context_line":""},{"line_number":4833,"context_line":"class HostServersMigrateResponse(base.Resource):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_eb903998","line":4830,"updated":"2018-01-22 21:51:08.000000000","message":"I don\u0027t think you need to move the \"Live Migration Accepted\" to the next line.  The original line length was 73 columns, and the indentation change only added 4 columns to that, which is still below the maximum limit of 79 columns.  If you still choose to break it across lines, I\u0027d recommend something that looks like:\n\n    utils.print_list(response, [\n        \"Server UUID\",\n        \"Live Migration Accepted\",\n        \"Error Message\",\n    ])\n\nNote: This is just a style suggestion, not something you need to do to get my vote.","commit_id":"3681f8eb533e2388dc12890016a2c1eabf438088"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c59160f110bb55997df7ee2a5862a6e692066dbf","unresolved":false,"context_lines":[{"line_number":5038,"context_line":"            if strict:"},{"line_number":5039,"context_line":"                msg \u003d (_(\"No hypervisor matching \u0027%s\u0027 could be found.\") %"},{"line_number":5040,"context_line":"                        (args.host))"},{"line_number":5041,"context_line":"                raise exceptions.NotFound(404, msg)"},{"line_number":5042,"context_line":""},{"line_number":5043,"context_line":""},{"line_number":5044,"context_line":"def _print_migrations(cs, migrations):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_6b0e69e6","line":5041,"updated":"2018-01-22 21:51:08.000000000","message":"This same logic is repeated a lot.  Let me again suggest using a generator function to reduce the repetition.  That function could look something like:\n\n    def _hyper_servers(cs, host, strict):\n        hypervisors \u003d cs.hypervisors.search(host, servers\u003dTrue)\n        for hyper in hypervisors:\n            if strict and hyper.hypervisor_hostname !\u003d host:\n                continue\n            if hasattr(hyper, \u0027servers\u0027):\n                for server in hyper.servers:\n                    yield server\n            if strict:\n                break\n        else:\n            if strict:\n                msg \u003d (_(\"No hypervisor matching \u0027%s\u0027 could be found.\") %\n                       host)\n                raise exceptions.NotFound(404, msg)\n\nFor do_host_meta(), this could be used like so:\n\n    def do_host_meta(cs, args):\n        …\n        for server in _hyper_servers(cs, args.host, args.strict):\n            metadata \u003d _extract_metadata(args)\n            if args.action \u003d\u003d \u0027set\u0027:\n                cs.servers.set_meta(server[\u0027uuid\u0027], metadata)\n            elif args.action \u003d\u003d \u0027delete\u0027:\n                cs.servers.delete_meta(server[\u0027uuid\u0027], metadata.keys())","commit_id":"3681f8eb533e2388dc12890016a2c1eabf438088"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"a8bce90088461890755967397073aa1d9222afb9","unresolved":false,"context_lines":[{"line_number":4725,"context_line":"def do_host_evacuate(cs, args):"},{"line_number":4726,"context_line":"    \"\"\"Evacuate all instances from failed host.\"\"\""},{"line_number":4727,"context_line":"    response \u003d []"},{"line_number":4728,"context_line":"    for server in _hyper_servers(cs, args.host, args.strict):"},{"line_number":4729,"context_line":"        response.append(_server_evacuate(cs, server, args))"},{"line_number":4730,"context_line":"    utils.print_list(response, ["},{"line_number":4731,"context_line":"        \"Server UUID\","},{"line_number":4732,"context_line":"        \"Evacuate Accepted\","}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa0c359_620ec0e6","line":4729,"range":{"start_line":4728,"start_character":4,"end_line":4729,"end_character":59},"updated":"2018-02-05 14:59:26.000000000","message":"I hope that someday we will move it manager class...","commit_id":"9213ec2d32fa173ec9943c28fb6c3ba5c196015d"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"95a38e79cb84b271e6d9604d26e28de23886e828","unresolved":false,"context_lines":[{"line_number":4725,"context_line":"def do_host_evacuate(cs, args):"},{"line_number":4726,"context_line":"    \"\"\"Evacuate all instances from failed host.\"\"\""},{"line_number":4727,"context_line":"    response \u003d []"},{"line_number":4728,"context_line":"    for server in _hyper_servers(cs, args.host, args.strict):"},{"line_number":4729,"context_line":"        response.append(_server_evacuate(cs, server, args))"},{"line_number":4730,"context_line":"    utils.print_list(response, ["},{"line_number":4731,"context_line":"        \"Server UUID\","},{"line_number":4732,"context_line":"        \"Evacuate Accepted\","}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa0c359_c22f94f4","line":4729,"range":{"start_line":4728,"start_character":4,"end_line":4729,"end_character":59},"in_reply_to":"3fa0c359_620ec0e6","updated":"2018-02-05 15:09:14.000000000","message":"Sorry, could you elaborate?  It\u0027s unclear what you would like to see moved.","commit_id":"9213ec2d32fa173ec9943c28fb6c3ba5c196015d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"514c068c4b0c7f57393d48b09bc8af7b52cdaf8e","unresolved":false,"context_lines":[{"line_number":4725,"context_line":"def do_host_evacuate(cs, args):"},{"line_number":4726,"context_line":"    \"\"\"Evacuate all instances from failed host.\"\"\""},{"line_number":4727,"context_line":"    response \u003d []"},{"line_number":4728,"context_line":"    for server in _hyper_servers(cs, args.host, args.strict):"},{"line_number":4729,"context_line":"        response.append(_server_evacuate(cs, server, args))"},{"line_number":4730,"context_line":"    utils.print_list(response, ["},{"line_number":4731,"context_line":"        \"Server UUID\","},{"line_number":4732,"context_line":"        \"Evacuate Accepted\","}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa0c359_a27848f8","line":4729,"range":{"start_line":4728,"start_character":4,"end_line":4729,"end_character":59},"in_reply_to":"3fa0c359_c22f94f4","updated":"2018-02-05 15:12:06.000000000","message":"I mean CLI should be simple as possible and do not contain any logic which can be useful for novaclient-as-a-lib. Ideally, all the logic (filtering hosts, servers and calling evacuate) should leave somewhere here - https://github.com/openstack/python-novaclient/blob/master/novaclient/v2/hypervisors.py#L34","commit_id":"9213ec2d32fa173ec9943c28fb6c3ba5c196015d"}]}
