)]}'
{"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"05b5f701dfd40a53cfa64df5fac018d3c31a2f1b","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        # once it does more than update the Node attributes in the db,"},{"line_number":581,"context_line":"        # for example, in the future we should be using Nova notification"},{"line_number":582,"context_line":"        # to notify Nova that the Node is now in maintenance mode so it"},{"line_number":583,"context_line":"        # doesn\u0027t try to schedule an instance onto it."},{"line_number":584,"context_line":"        pecan.request.rpcapi.update_node(pecan.request.context,"},{"line_number":585,"context_line":"                                         rpc_node, topic\u003dtopic)"},{"line_number":586,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_6427d9b6","line":583,"updated":"2014-10-16 15:17:39.000000000","message":"I tend to think if we update a node, we might want to notify nova of the change anyway (in case properties changed or something). Maybe we should remove this TODO?","commit_id":"3b6bb182f1726f2b6e273e97405a339731be99a0"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"e5f65487a0f7c069c097667ae8c92a7e399bf88b","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        # once it does more than update the Node attributes in the db,"},{"line_number":581,"context_line":"        # for example, in the future we should be using Nova notification"},{"line_number":582,"context_line":"        # to notify Nova that the Node is now in maintenance mode so it"},{"line_number":583,"context_line":"        # doesn\u0027t try to schedule an instance onto it."},{"line_number":584,"context_line":"        pecan.request.rpcapi.update_node(pecan.request.context,"},{"line_number":585,"context_line":"                                         rpc_node, topic\u003dtopic)"},{"line_number":586,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_241791ef","line":583,"in_reply_to":"baa201ad_6427d9b6","updated":"2014-10-16 15:26:15.000000000","message":"+1","commit_id":"3b6bb182f1726f2b6e273e97405a339731be99a0"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"d906a0cd7b1c616fe772a7adce91fe0af2b586df","unresolved":false,"context_lines":[{"line_number":572,"context_line":"class NodeMaintenanceController(rest.RestController):"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    def _set_maintenance(self, node_uuid, maintenance_mode, reason\u003dNone):"},{"line_number":575,"context_line":"        rpc_node \u003d objects.Node.get_by_uuid(pecan.request.context, node_uuid)"},{"line_number":576,"context_line":"        rpc_node.maintenance \u003d maintenance_mode"},{"line_number":577,"context_line":"        rpc_node.maintenance_reason \u003d reason"},{"line_number":578,"context_line":"        topic \u003d pecan.request.rpcapi.get_topic_for(rpc_node)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_639053ed","line":575,"updated":"2014-10-20 13:58:41.000000000","message":"Hmm, do we need to handle NodeNotFound, or will that automatically be a 404?","commit_id":"61842daa05d4992d6946ce73290bfa03505597e9"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f556b88d905a1dade250a5a1b03b0e4fe2d1371d","unresolved":false,"context_lines":[{"line_number":572,"context_line":"class NodeMaintenanceController(rest.RestController):"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    def _set_maintenance(self, node_uuid, maintenance_mode, reason\u003dNone):"},{"line_number":575,"context_line":"        rpc_node \u003d objects.Node.get_by_uuid(pecan.request.context, node_uuid)"},{"line_number":576,"context_line":"        rpc_node.maintenance \u003d maintenance_mode"},{"line_number":577,"context_line":"        rpc_node.maintenance_reason \u003d reason"},{"line_number":578,"context_line":"        topic \u003d pecan.request.rpcapi.get_topic_for(rpc_node)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_5cdb0eed","line":575,"in_reply_to":"9aa7fdbe_639053ed","updated":"2014-10-21 10:07:08.000000000","message":"Yeah NodeNotFound is already 404\n\nstack@vm:~/devstack$ curl -i -X PUT -H \u0027X-Auth-Token: ab72216f3c87493c849e2a4c0aa28b0a\u0027 -H \u0027Content-Type: application/json\u0027 -H \u0027Accept: application/json\u0027 -H \u0027User-Agent: python-ironicclient\u0027 -d \u0027{\"reason\": \"ahhh\"}\u0027 http://192.168.122.156:6385/v1/nodes/f8999894-beee-44c1-b197-7106fa48b4d1/maintenance\n\n HTTP/1.0 404 Not Found\n Date: Tue, 21 Oct 2014 10:05:38 GMT\n Server: WSGIServer/0.1 Python/2.7.6\n Content-Type: application/json\n Content-Length: 153\n\n{\"error_message\": \"{\\\"debuginfo\\\": null, \\\"faultcode\\\": \\\"Client\\\", \\\"faultstring\\\": \\\"Node f8999894-beee-44c1-b197-7106fa48b4d1 could not be found.\\\"}\"}stack@vm:~/devstack$","commit_id":"61842daa05d4992d6946ce73290bfa03505597e9"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"d906a0cd7b1c616fe772a7adce91fe0af2b586df","unresolved":false,"context_lines":[{"line_number":575,"context_line":"        rpc_node \u003d objects.Node.get_by_uuid(pecan.request.context, node_uuid)"},{"line_number":576,"context_line":"        rpc_node.maintenance \u003d maintenance_mode"},{"line_number":577,"context_line":"        rpc_node.maintenance_reason \u003d reason"},{"line_number":578,"context_line":"        topic \u003d pecan.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":579,"context_line":"        pecan.request.rpcapi.update_node(pecan.request.context,"},{"line_number":580,"context_line":"                                         rpc_node, topic\u003dtopic)"},{"line_number":581,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_63a77350","line":578,"updated":"2014-10-20 13:58:41.000000000","message":"Probably want to handle this and 400 if NoValidHost is raised, like node.update does.","commit_id":"61842daa05d4992d6946ce73290bfa03505597e9"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f556b88d905a1dade250a5a1b03b0e4fe2d1371d","unresolved":false,"context_lines":[{"line_number":575,"context_line":"        rpc_node \u003d objects.Node.get_by_uuid(pecan.request.context, node_uuid)"},{"line_number":576,"context_line":"        rpc_node.maintenance \u003d maintenance_mode"},{"line_number":577,"context_line":"        rpc_node.maintenance_reason \u003d reason"},{"line_number":578,"context_line":"        topic \u003d pecan.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":579,"context_line":"        pecan.request.rpcapi.update_node(pecan.request.context,"},{"line_number":580,"context_line":"                                         rpc_node, topic\u003dtopic)"},{"line_number":581,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_9ce576aa","line":578,"in_reply_to":"9aa7fdbe_63a77350","updated":"2014-10-21 10:07:08.000000000","message":"+1","commit_id":"61842daa05d4992d6946ce73290bfa03505597e9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f8b7228867c83f9ec937afae726b928b184671ad","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        defaults \u003d types.JsonPatchType.internal_attrs()"},{"line_number":49,"context_line":"        # TODO(lucasagomes): Include maintenance and maintenance_reason"},{"line_number":50,"context_line":"        # once the endpoint v1/nodes/\u003cuuid\u003e/maintenance do more things"},{"line_number":51,"context_line":"        # than updating the DB."},{"line_number":52,"context_line":"        return defaults + [\u0027/console_enabled\u0027, \u0027/last_error\u0027,"},{"line_number":53,"context_line":"                           \u0027/power_state\u0027, \u0027/provision_state\u0027, \u0027/reservation\u0027,"},{"line_number":54,"context_line":"                           \u0027/target_power_state\u0027, \u0027/target_provision_state\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_f0a063f6","line":51,"updated":"2014-10-21 12:22:02.000000000","message":"Again, I think we should include maintenance_reason right now, so that people do not rely on it and switch to new API.","commit_id":"2f9be957e5b4563f6d2fefd61c1ed1cf6ba5ff60"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"87bdee9fb0e3fe38a1df3e801e1868f9c6d69146","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        defaults \u003d types.JsonPatchType.internal_attrs()"},{"line_number":49,"context_line":"        # TODO(lucasagomes): Include maintenance and maintenance_reason"},{"line_number":50,"context_line":"        # once the endpoint v1/nodes/\u003cuuid\u003e/maintenance do more things"},{"line_number":51,"context_line":"        # than updating the DB."},{"line_number":52,"context_line":"        return defaults + [\u0027/console_enabled\u0027, \u0027/last_error\u0027,"},{"line_number":53,"context_line":"                           \u0027/power_state\u0027, \u0027/provision_state\u0027, \u0027/reservation\u0027,"},{"line_number":54,"context_line":"                           \u0027/target_power_state\u0027, \u0027/target_provision_state\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_361c9ec1","line":51,"in_reply_to":"9aa7fdbe_f0a063f6","updated":"2014-10-21 16:09:35.000000000","message":"Done","commit_id":"2f9be957e5b4563f6d2fefd61c1ed1cf6ba5ff60"}]}
