)]}'
{"nova/api/openstack/compute/contrib/baremetal_nodes.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"c15a70a09a02e77fd3bcbbbfee4850a8f53f8c76","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import webob"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from ironicclient import client as ironic_client"},{"line_number":22,"context_line":"from ironicclient import exc as ironic_exception"},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":"from nova.openstack.common import log as logging"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_3ce1bafe","line":22,"updated":"2014-09-10 14:34:59.000000000","message":"we probably need conditional import here so that it doesn\u0027t explode if the user hasn\u0027t installed the ironic client yet as part of the upgrade.","commit_id":"738e1e6a3bdcafdb5a97845e64672d62a695e30c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"42a3470b51c4b1e73c7262e89bfb9bb4710c3aca","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import webob"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from ironicclient import client as ironic_client"},{"line_number":22,"context_line":"from ironicclient import exc as ironic_exception"},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":"from nova.openstack.common import log as logging"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_dc042e80","line":22,"in_reply_to":"fa98f980_3ce1bafe","updated":"2014-09-10 14:46:15.000000000","message":"+1","commit_id":"738e1e6a3bdcafdb5a97845e64672d62a695e30c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"42a3470b51c4b1e73c7262e89bfb9bb4710c3aca","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        if \u0027ironic\u0027 in CONF.compute_driver:"},{"line_number":232,"context_line":"            raise webob.exc.HTTPBadRequest("},{"line_number":233,"context_line":"                    explanation\u003d_(\"Command Not supported. Please use Ironic \""},{"line_number":234,"context_line":"                                  \"to perform this action.\"))"},{"line_number":235,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":236,"context_line":"        authorize(context)"},{"line_number":237,"context_line":"        values \u003d body[\u0027node\u0027].copy()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_bca84a78","line":234,"updated":"2014-09-10 14:46:15.000000000","message":"s/Not/not/\n\nMaybe worth mentioning the equivalent ironic command for this operation? ``ironic node-create``\n\nAlso this conditional checking whether it\u0027s supported or not is duplicated all over, making it a helper method and just calling it at the start of each function looks a bit more tidy","commit_id":"738e1e6a3bdcafdb5a97845e64672d62a695e30c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"42a3470b51c4b1e73c7262e89bfb9bb4710c3aca","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        if \u0027ironic\u0027 in CONF.compute_driver:"},{"line_number":260,"context_line":"            raise webob.exc.HTTPBadRequest("},{"line_number":261,"context_line":"                    explanation\u003d_(\"Command Not supported. Please use Ironic \""},{"line_number":262,"context_line":"                                  \"to perform this action.\"))"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":265,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_1cb156e1","line":262,"updated":"2014-09-10 14:46:15.000000000","message":"ditto\n\ncommand is: ``ironic node-delete``","commit_id":"738e1e6a3bdcafdb5a97845e64672d62a695e30c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"42a3470b51c4b1e73c7262e89bfb9bb4710c3aca","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        if \u0027ironic\u0027 in CONF.compute_driver:"},{"line_number":282,"context_line":"            raise webob.exc.HTTPBadRequest("},{"line_number":283,"context_line":"                    explanation\u003d_(\"Command Not supported. Please use Ironic \""},{"line_number":284,"context_line":"                                  \"to perform this action.\"))"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":287,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_7cc5023c","line":284,"updated":"2014-09-10 14:46:15.000000000","message":"ditto\n\ncommand is: ``ironic port-create``","commit_id":"738e1e6a3bdcafdb5a97845e64672d62a695e30c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"42a3470b51c4b1e73c7262e89bfb9bb4710c3aca","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        if \u0027ironic\u0027 in CONF.compute_driver:"},{"line_number":309,"context_line":"            raise webob.exc.HTTPBadRequest("},{"line_number":310,"context_line":"                    explanation\u003d_(\"Command Not supported. Please use Ironic \""},{"line_number":311,"context_line":"                                  \"to perform this action.\"))"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":314,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_1ce876b3","line":311,"updated":"2014-09-10 14:46:15.000000000","message":"ditto\n\ncommand is: ``ironic port-delete``","commit_id":"738e1e6a3bdcafdb5a97845e64672d62a695e30c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a0f8420796b20943bca32ea5da64370c9239a263","unresolved":false,"context_lines":[{"line_number":30,"context_line":"try:"},{"line_number":31,"context_line":"    from ironicclient import client as ironic_client"},{"line_number":32,"context_line":"except ImportError:"},{"line_number":33,"context_line":"    pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027baremetal_nodes\u0027)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_6e94448b","line":33,"updated":"2014-09-11 12:54:08.000000000","message":"I think a more OpenStack-ish way to do it would be:\n\n from nova.openstack.common import importutils\n\n ironic_client \u003d importutils.try_import(\u0027ironicclient.client\u0027)","commit_id":"fc68bad3172b50130e64451fa4b4402eae6a7097"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a0f8420796b20943bca32ea5da64370c9239a263","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        return True"},{"line_number":88,"context_line":"    else:"},{"line_number":89,"context_line":"        return False"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"def _get_ironic_client():"},{"line_number":93,"context_line":"    \"\"\"return an Ironic client.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_0e0d78e8","line":90,"updated":"2014-09-11 12:54:08.000000000","message":"nit: to not duplicate the exceptions\n\ndef _ensure_ironic(ironic_cmd):\n    raise webob.exc.HTTPBadRequest(_(\u0027Command Not supported. Please use  \u0027\n                                     \u0027Ironic command \"%s\" to perform this \u0027\n                                     \u0027action.\u0027) % ironic_cmd)","commit_id":"fc68bad3172b50130e64451fa4b4402eae6a7097"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a0f8420796b20943bca32ea5da64370c9239a263","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @wsgi.serializers(xml\u003dNodeTemplate)"},{"line_number":240,"context_line":"    def create(self, req, body):"},{"line_number":241,"context_line":"        if _use_ironic():"},{"line_number":242,"context_line":"            raise webob.exc.HTTPBadRequest("},{"line_number":243,"context_line":"                    explanation\u003d_(\"Create Not supported. Please use Ironic \""},{"line_number":244,"context_line":"                                  \"command node-create to perform this \""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_8eeec8eb","line":241,"updated":"2014-09-11 12:54:08.000000000","message":"Continuing comment on L90:\n\nThe it would look like, e.g\n\n if _use_ironic():\n     _ensure_ironic(\"node-create\")","commit_id":"fc68bad3172b50130e64451fa4b4402eae6a7097"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a0f8420796b20943bca32ea5da64370c9239a263","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return {\u0027node\u0027: node}"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def delete(self, req, id):"},{"line_number":270,"context_line":"        if _use_ironic():"},{"line_number":271,"context_line":"            raise webob.exc.HTTPBadRequest("},{"line_number":272,"context_line":"                    explanation\u003d_(\"Delete Not supported. Please use Ironic \""},{"line_number":273,"context_line":"                                  \"command node-delete to perform this \""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_cebb70e3","line":270,"updated":"2014-09-11 12:54:08.000000000","message":"Continuing comment on L90:\n\nThe it would look like, e.g\n\n if _use_ironic():\n      _ensure_ironic(\"node-delete\")\n\n\nand so on...","commit_id":"fc68bad3172b50130e64451fa4b4402eae6a7097"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"cd81fd9586f8950593a86da1f81b86d75d3a8483","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    raise webob.exc.HTTPBadRequest("},{"line_number":107,"context_line":"                    explanation\u003d_(\"Command Not supported. Please use Ironic \""},{"line_number":108,"context_line":"                                  \"command %(cmd)s to perform this \""},{"line_number":109,"context_line":"                                  \"action.\") % cmd)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def is_valid_mac(address):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_7627ba12","line":109,"updated":"2014-09-11 14:27:16.000000000","message":"this is going to fail...\n\n%(cmd)s is a mapping so you should use \"% {\u0027cmd\u0027: cmd}\"","commit_id":"e105f649c83afb969f803c76cabd38fad1c7c4ce"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2e0fd5ea100ce61e596a302b77d4fed84e5dcd55","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        elem.set(f)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def _use_ironic():"},{"line_number":84,"context_line":"    if \u0027ironic\u0027 in CONF.compute_driver:"},{"line_number":85,"context_line":"        return True"},{"line_number":86,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_72509432","line":83,"updated":"2014-09-11 23:18:54.000000000","message":"This presumably goes away once we actually nuke nova-bm from the tree, right?\n\nAs much as I don\u0027t like this kind of stuff in the API, it\u0027s basically what we do for neutron as well, and I think it\u0027s okay here especially since it\u0027s transitional. We should include details about the fact that compute_driver is required in the API node\u0027s config in order for this to work.","commit_id":"acff1c4062e8a96e7161dd6d8d263f86be06ac5f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2402d5810ca0bb0df7de0f3c5fc3a4cbe94bdfd0","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        elem.set(f)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def _use_ironic():"},{"line_number":84,"context_line":"    if \u0027ironic\u0027 in CONF.compute_driver:"},{"line_number":85,"context_line":"        return True"},{"line_number":86,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_e10e5e8b","line":83,"in_reply_to":"fa98f980_0f4396af","updated":"2014-09-12 14:17:45.000000000","message":"We need a section for Ironic in the release notes anyway, so I would put information in there about needing the compute driver in the API node\u0027s config:\n\nhttps://wiki.openstack.org/wiki/ReleaseNotes/Juno#Compute_Drivers\n\nAlso, probably worth adding a comment here in the code to say that this should be removed when baremetal is removed is worthwhile.\n\nIf you do it real fast, ping me and I\u0027ll re-+2 this immediately.\n\nThanks!","commit_id":"acff1c4062e8a96e7161dd6d8d263f86be06ac5f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1f771d675c113f7e377b25481d47899f71c5d3a","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        elem.set(f)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def _use_ironic():"},{"line_number":84,"context_line":"    if \u0027ironic\u0027 in CONF.compute_driver:"},{"line_number":85,"context_line":"        return True"},{"line_number":86,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_0f4396af","line":83,"in_reply_to":"fa98f980_72509432","updated":"2014-09-12 08:49:48.000000000","message":"Yeah it should def go away once nova-bm is removed from the tree.\n\nYou mean include details in the code here? Like a comment/docstring? I can do that, as you +2ed it already I will do in case it happen to us to submit a new patch set for this change, is that ok?\n\n\nnote*: I also will simplify this function here since that if..else block is redundant, e.g:\n\n def _use_ironic():\n     return \u0027ironic\u0027 in CONF.compute_driver","commit_id":"acff1c4062e8a96e7161dd6d8d263f86be06ac5f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2e0fd5ea100ce61e596a302b77d4fed84e5dcd55","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    @wsgi.serializers(xml\u003dNodeTemplate)"},{"line_number":245,"context_line":"    def create(self, req, body):"},{"line_number":246,"context_line":"        if _use_ironic():"},{"line_number":247,"context_line":"            _no_ironic_proxy(\"node-create\")"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":250,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_5232b010","line":247,"updated":"2014-09-11 23:18:54.000000000","message":"Nicely done with the \"use this instead\" stuff :)","commit_id":"acff1c4062e8a96e7161dd6d8d263f86be06ac5f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a1f771d675c113f7e377b25481d47899f71c5d3a","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    @wsgi.serializers(xml\u003dNodeTemplate)"},{"line_number":245,"context_line":"    def create(self, req, body):"},{"line_number":246,"context_line":"        if _use_ironic():"},{"line_number":247,"context_line":"            _no_ironic_proxy(\"node-create\")"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":250,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_8f0ea68a","line":247,"in_reply_to":"fa98f980_5232b010","updated":"2014-09-12 08:49:48.000000000","message":":) yup","commit_id":"acff1c4062e8a96e7161dd6d8d263f86be06ac5f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d9ae2613324f04588f1f5bda5f3f412e89af9cf4","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"def _no_ironic_proxy(cmd):"},{"line_number":107,"context_line":"    raise webob.exc.HTTPBadRequest("},{"line_number":108,"context_line":"                    explanation\u003d_(\"Command Not supported. Please use Ironic \""},{"line_number":109,"context_line":"                                  \"command %(cmd)s to perform this \""},{"line_number":110,"context_line":"                                  \"action.\") % {\u0027cmd\u0027: cmd})"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_4c8d9ed2","line":108,"updated":"2014-09-12 16:12:46.000000000","message":"Probably need to notify the i18n team about the string change here.","commit_id":"e7b121c3e5a5ef09a5133e9b4e8451fabe3ab3ca"}]}
