)]}'
{"doc/source/dev/api-spec-v1.rst":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c317bc04c6ebf793d2111b6d4e3ff96bb5972de4","unresolved":false,"context_lines":[{"line_number":434,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":435,"context_line":"Verb     Path             Response"},{"line_number":436,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":437,"context_line":"GET      /nodes           List nodes"},{"line_number":438,"context_line":"GET      /nodes/detail    Lists all details for all nodes"},{"line_number":439,"context_line":"GET      /nodes/validate  Validate the `core` and `standardized` interfaces for driver"},{"line_number":440,"context_line":"GET      /nodes/\u003cid\u003e      Retrieve a specific node"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F%2FERE%3D","line":437,"updated":"2013-11-14 22:33:07.000000000","message":"Nit. \"List all nodes\"? Or for /nodes/detail, don\u0027t mention \u0027all nodes\u0027 there?","commit_id":"ec188d71a03fd2cd90860f27156a64f6ae8cd5f0"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c317bc04c6ebf793d2111b6d4e3ff96bb5972de4","unresolved":false,"context_lines":[{"line_number":435,"context_line":"Verb     Path             Response"},{"line_number":436,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":437,"context_line":"GET      /nodes           List nodes"},{"line_number":438,"context_line":"GET      /nodes/detail    Lists all details for all nodes"},{"line_number":439,"context_line":"GET      /nodes/validate  Validate the `core` and `standardized` interfaces for driver"},{"line_number":440,"context_line":"GET      /nodes/\u003cid\u003e      Retrieve a specific node"},{"line_number":441,"context_line":"POST     /nodes           Create a new node"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F%2FERM%3D","line":438,"updated":"2013-11-14 22:33:07.000000000","message":"Nit. Just to be consistent with verb tense of others, \u0027List\u0027 instead of \u0027Lists\u0027.","commit_id":"ec188d71a03fd2cd90860f27156a64f6ae8cd5f0"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c317bc04c6ebf793d2111b6d4e3ff96bb5972de4","unresolved":false,"context_lines":[{"line_number":436,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":437,"context_line":"GET      /nodes           List nodes"},{"line_number":438,"context_line":"GET      /nodes/detail    Lists all details for all nodes"},{"line_number":439,"context_line":"GET      /nodes/validate  Validate the `core` and `standardized` interfaces for driver"},{"line_number":440,"context_line":"GET      /nodes/\u003cid\u003e      Retrieve a specific node"},{"line_number":441,"context_line":"POST     /nodes           Create a new node"},{"line_number":442,"context_line":"PATCH    /nodes/\u003cid\u003e      Update a node"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAATn%2F%2FEKQ%3D","line":439,"updated":"2013-11-14 22:33:07.000000000","message":"Will this validate all nodes, or just one node? Ah, should it be \u0027nodes/\u003cid\u003e/validate\u0027 (from your commit msg)","commit_id":"ec188d71a03fd2cd90860f27156a64f6ae8cd5f0"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"e66dcaa86463040d7146fa4c063a4ff74e2d98e4","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, wtypes.text)"},{"line_number":428,"context_line":"    def validate(self, node_uuid):"},{"line_number":429,"context_line":"        \"\"\"Validate the driver interfaces.\"\"\""},{"line_number":430,"context_line":"        node \u003d objects.Node.get_by_uuid(pecan.request.context, node_uuid)"},{"line_number":431,"context_line":"        return pecan.request.rpcapi.validate_driver_interfaces("},{"line_number":432,"context_line":"                                        pecan.request.context, node)"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BMVI%3D","line":430,"updated":"2013-11-29 12:03:49.000000000","message":"Lucas, what you think about pass only node_uuid via rpcapi? We will have a node object as task.node.  Yes, this solution have “pros and cons”, your opinion?","commit_id":"c1cbb98092c940e77bd632f45950e4a78233809c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ac051880a71c4e09d5a635b8d814503c33a688ce","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, wtypes.text)"},{"line_number":428,"context_line":"    def validate(self, node_uuid):"},{"line_number":429,"context_line":"        \"\"\"Validate the driver interfaces.\"\"\""},{"line_number":430,"context_line":"        node \u003d objects.Node.get_by_uuid(pecan.request.context, node_uuid)"},{"line_number":431,"context_line":"        return pecan.request.rpcapi.validate_driver_interfaces("},{"line_number":432,"context_line":"                                        pecan.request.context, node)"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BGuA%3D","line":430,"in_reply_to":"AAAATn%2F%2BHD0%3D","updated":"2013-12-02 15:11:15.000000000","message":"Hi Ruby, that\u0027s a very good point. I agree with u on that, and for this patch sending the whole node object is kinda overkill because only the uuid is needed on the other point. So I will update this to check for the existence of the node but only send the node uuid in the rpci call.\n\nTa much!","commit_id":"c1cbb98092c940e77bd632f45950e4a78233809c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"280948270864fe8f069099ac3ffea24dfd4819bb","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, wtypes.text)"},{"line_number":428,"context_line":"    def validate(self, node_uuid):"},{"line_number":429,"context_line":"        \"\"\"Validate the driver interfaces.\"\"\""},{"line_number":430,"context_line":"        node \u003d objects.Node.get_by_uuid(pecan.request.context, node_uuid)"},{"line_number":431,"context_line":"        return pecan.request.rpcapi.validate_driver_interfaces("},{"line_number":432,"context_line":"                                        pecan.request.context, node)"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BHD0%3D","line":430,"in_reply_to":"AAAATn%2F%2BHzM%3D","updated":"2013-12-02 14:24:47.000000000","message":"I\u0027ve been mulling over this. It is somewhat dangerous to pass the node object, because you need to be aware, when the rpcapi call returns, that the info in the node object may be incorrect (the rpcapi call could have caused the node info to change, but not updated it in this particular node instance). It might be safer to pass the node_uuid, as a bit of a reminder to eg do a node.refresh() later if you want to access it. (This is a general comment for most of the other methods too, not just this one.)\n\nSo yes, do the db call to check if the resource exists, but pass the uuid in the rpcapi call? Or not. Or do it in a different change set.","commit_id":"c1cbb98092c940e77bd632f45950e4a78233809c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"42244374f3e17ea57bda6a120c53ec3bf5bb287e","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, wtypes.text)"},{"line_number":428,"context_line":"    def validate(self, node_uuid):"},{"line_number":429,"context_line":"        \"\"\"Validate the driver interfaces.\"\"\""},{"line_number":430,"context_line":"        node \u003d objects.Node.get_by_uuid(pecan.request.context, node_uuid)"},{"line_number":431,"context_line":"        return pecan.request.rpcapi.validate_driver_interfaces("},{"line_number":432,"context_line":"                                        pecan.request.context, node)"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BHzM%3D","line":430,"in_reply_to":"AAAATn%2F%2BMVI%3D","updated":"2013-12-02 11:18:20.000000000","message":"Yea, just passing the node_uuid would save a db call in case the node exist, but I think that it\u0027s part of the API job to check if the resource exist or not before issuing a RPC call to try to validate it. I see more value checking for the existence of the node on the API side, so I vote to keep it as-is, but I can see benefits on both sides.","commit_id":"c1cbb98092c940e77bd632f45950e4a78233809c"}],"ironic/conductor/manager.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b465e86cd6a2419da71da9a6e80885c2879459e6","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        driver_name \u003d node_obj.get(\u0027driver\u0027)"},{"line_number":324,"context_line":"        result \u003d {}"},{"line_number":325,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue,"},{"line_number":326,"context_line":"                                  driver_name\u003ddriver_name) as task:"},{"line_number":327,"context_line":"            for iface in [\u0027power\u0027, \u0027deploy\u0027, \u0027console\u0027, \u0027rescue\u0027]:"},{"line_number":328,"context_line":"                driver \u003d getattr(task.driver, iface, None)"},{"line_number":329,"context_line":"                if not driver:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqZM%3D","line":326,"updated":"2013-10-30 17:55:11.000000000","message":"driver_name parameter not needed here\n\nhttps://github.com/openstack/ironic/blob/master/ironic/conductor/resource_manager.py#L58","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6ef2d5b851706afd9fe789e11b3dcb35337f7535","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        driver_name \u003d node_obj.get(\u0027driver\u0027)"},{"line_number":324,"context_line":"        result \u003d {}"},{"line_number":325,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue,"},{"line_number":326,"context_line":"                                  driver_name\u003ddriver_name) as task:"},{"line_number":327,"context_line":"            for iface in [\u0027power\u0027, \u0027deploy\u0027, \u0027console\u0027, \u0027rescue\u0027]:"},{"line_number":328,"context_line":"                driver \u003d getattr(task.driver, iface, None)"},{"line_number":329,"context_line":"                if not driver:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqQE%3D","line":326,"in_reply_to":"AAAATn%2F%2FqZM%3D","updated":"2013-10-30 18:42:34.000000000","message":"Thanks, done!","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"caa11fa3702c2a863c7ea48bc51f7f144e382fe1","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        result \u003d {}"},{"line_number":325,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue,"},{"line_number":326,"context_line":"                                  driver_name\u003ddriver_name) as task:"},{"line_number":327,"context_line":"            for iface in [\u0027power\u0027, \u0027deploy\u0027, \u0027console\u0027, \u0027rescue\u0027]:"},{"line_number":328,"context_line":"                driver \u003d getattr(task.driver, iface, None)"},{"line_number":329,"context_line":"                if not driver:"},{"line_number":330,"context_line":"                    result.update({iface: \u0027not supported\u0027})"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqUQ%3D","line":327,"updated":"2013-10-30 18:01:26.000000000","message":"+ \u0027vendor\u0027 ?","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6ef2d5b851706afd9fe789e11b3dcb35337f7535","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        result \u003d {}"},{"line_number":325,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue,"},{"line_number":326,"context_line":"                                  driver_name\u003ddriver_name) as task:"},{"line_number":327,"context_line":"            for iface in [\u0027power\u0027, \u0027deploy\u0027, \u0027console\u0027, \u0027rescue\u0027]:"},{"line_number":328,"context_line":"                driver \u003d getattr(task.driver, iface, None)"},{"line_number":329,"context_line":"                if not driver:"},{"line_number":330,"context_line":"                    result.update({iface: \u0027not supported\u0027})"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqO0%3D","line":327,"in_reply_to":"AAAATn%2F%2FqUQ%3D","updated":"2013-10-30 18:42:34.000000000","message":"the vendor interface depends on the method name + data to be validated, so that\u0027s this method tests the \u0027core\u0027 and \u0027standardized\u0027 interfaces but not the \u0027vendor\u0027 one","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b465e86cd6a2419da71da9a6e80885c2879459e6","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            for iface in [\u0027power\u0027, \u0027deploy\u0027, \u0027console\u0027, \u0027rescue\u0027]:"},{"line_number":328,"context_line":"                driver \u003d getattr(task.driver, iface, None)"},{"line_number":329,"context_line":"                if not driver:"},{"line_number":330,"context_line":"                    result.update({iface: \u0027not supported\u0027})"},{"line_number":331,"context_line":"                    continue"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqYI%3D","line":330,"updated":"2013-10-30 17:55:11.000000000","message":"result[iface]\u003d\u0027not supported\u0027 IMO more clean","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6ef2d5b851706afd9fe789e11b3dcb35337f7535","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            for iface in [\u0027power\u0027, \u0027deploy\u0027, \u0027console\u0027, \u0027rescue\u0027]:"},{"line_number":328,"context_line":"                driver \u003d getattr(task.driver, iface, None)"},{"line_number":329,"context_line":"                if not driver:"},{"line_number":330,"context_line":"                    result.update({iface: \u0027not supported\u0027})"},{"line_number":331,"context_line":"                    continue"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqOw%3D","line":330,"in_reply_to":"AAAATn%2F%2FqYI%3D","updated":"2013-10-30 18:42:34.000000000","message":"indeed, done","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b465e86cd6a2419da71da9a6e80885c2879459e6","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                driver \u003d getattr(task.driver, iface, None)"},{"line_number":329,"context_line":"                if not driver:"},{"line_number":330,"context_line":"                    result.update({iface: \u0027not supported\u0027})"},{"line_number":331,"context_line":"                    continue"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"                try:"},{"line_number":334,"context_line":"                    driver.validate(node_obj)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqXg%3D","line":331,"updated":"2013-10-30 17:55:11.000000000","message":"else: ?","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6ef2d5b851706afd9fe789e11b3dcb35337f7535","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                driver \u003d getattr(task.driver, iface, None)"},{"line_number":329,"context_line":"                if not driver:"},{"line_number":330,"context_line":"                    result.update({iface: \u0027not supported\u0027})"},{"line_number":331,"context_line":"                    continue"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"                try:"},{"line_number":334,"context_line":"                    driver.validate(node_obj)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqI0%3D","line":331,"in_reply_to":"AAAATn%2F%2FqXg%3D","updated":"2013-10-30 18:42:34.000000000","message":"could be :)","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b465e86cd6a2419da71da9a6e80885c2879459e6","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"                try:"},{"line_number":334,"context_line":"                    driver.validate(node_obj)"},{"line_number":335,"context_line":"                    result.update({iface: True})"},{"line_number":336,"context_line":"                except exception.InvalidParameterValue as e:"},{"line_number":337,"context_line":"                    LOG.exception(e)"},{"line_number":338,"context_line":"                    result.update({iface: False})"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqX8%3D","line":335,"updated":"2013-10-30 17:55:11.000000000","message":"ditto as l330","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6ef2d5b851706afd9fe789e11b3dcb35337f7535","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"                try:"},{"line_number":334,"context_line":"                    driver.validate(node_obj)"},{"line_number":335,"context_line":"                    result.update({iface: True})"},{"line_number":336,"context_line":"                except exception.InvalidParameterValue as e:"},{"line_number":337,"context_line":"                    LOG.exception(e)"},{"line_number":338,"context_line":"                    result.update({iface: False})"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqOo%3D","line":335,"in_reply_to":"AAAATn%2F%2FqX8%3D","updated":"2013-10-30 18:42:34.000000000","message":"done","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b465e86cd6a2419da71da9a6e80885c2879459e6","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                    driver.validate(node_obj)"},{"line_number":335,"context_line":"                    result.update({iface: True})"},{"line_number":336,"context_line":"                except exception.InvalidParameterValue as e:"},{"line_number":337,"context_line":"                    LOG.exception(e)"},{"line_number":338,"context_line":"                    result.update({iface: False})"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqWw%3D","line":337,"updated":"2013-10-30 17:55:11.000000000","message":"Not sure that it is needed","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6ef2d5b851706afd9fe789e11b3dcb35337f7535","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                    driver.validate(node_obj)"},{"line_number":335,"context_line":"                    result.update({iface: True})"},{"line_number":336,"context_line":"                except exception.InvalidParameterValue as e:"},{"line_number":337,"context_line":"                    LOG.exception(e)"},{"line_number":338,"context_line":"                    result.update({iface: False})"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqOc%3D","line":337,"in_reply_to":"AAAATn%2F%2FqWw%3D","updated":"2013-10-30 18:42:34.000000000","message":"I logged the error so that users could check the log to see why exactly i failed, another approach would be to add the error to the body message somethig like:\n\n{\u0027power: {\u0027result\u0027: False, \u0027reason\u0027: \u003creason\u003e}, ..}\n\nThoughts?","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b465e86cd6a2419da71da9a6e80885c2879459e6","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                    result.update({iface: True})"},{"line_number":336,"context_line":"                except exception.InvalidParameterValue as e:"},{"line_number":337,"context_line":"                    LOG.exception(e)"},{"line_number":338,"context_line":"                    result.update({iface: False})"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqXk%3D","line":338,"updated":"2013-10-30 17:55:11.000000000","message":"ditto as l330","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6ef2d5b851706afd9fe789e11b3dcb35337f7535","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                    result.update({iface: True})"},{"line_number":336,"context_line":"                except exception.InvalidParameterValue as e:"},{"line_number":337,"context_line":"                    LOG.exception(e)"},{"line_number":338,"context_line":"                    result.update({iface: False})"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FqOU%3D","line":338,"in_reply_to":"AAAATn%2F%2FqXk%3D","updated":"2013-10-30 18:42:34.000000000","message":"done","commit_id":"73410621f95b223f1534e2076d8c6881cf1b48ca"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"e655b1d4173cc9c1a52966b235f9994af8126b08","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        result \u003d {}"},{"line_number":324,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"},{"line_number":325,"context_line":"            for iface in [\u0027power\u0027, \u0027deploy\u0027, \u0027console\u0027, \u0027rescue\u0027]:"},{"line_number":326,"context_line":"                driver \u003d getattr(task.driver, iface, None)"},{"line_number":327,"context_line":"                if driver:"},{"line_number":328,"context_line":"                    try:"},{"line_number":329,"context_line":"                        driver.validate(node_obj)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FoHw%3D","line":326,"updated":"2013-10-31 08:14:55.000000000","message":"nit: Maybe rename driver -\u003e iface, iface -\u003e iface_name for better understanding this code.","commit_id":"725f022bcd3032f5d7372ea372f9341f351b09f4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"887eff5bbe0e945fbe67dbc228c51bae2f5eae83","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        result \u003d {}"},{"line_number":324,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"},{"line_number":325,"context_line":"            for iface in [\u0027power\u0027, \u0027deploy\u0027, \u0027console\u0027, \u0027rescue\u0027]:"},{"line_number":326,"context_line":"                driver \u003d getattr(task.driver, iface, None)"},{"line_number":327,"context_line":"                if driver:"},{"line_number":328,"context_line":"                    try:"},{"line_number":329,"context_line":"                        driver.validate(node_obj)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FnuY%3D","line":326,"in_reply_to":"AAAATn%2F%2FoHw%3D","updated":"2013-10-31 10:19:15.000000000","message":"fair :)","commit_id":"725f022bcd3032f5d7372ea372f9341f351b09f4"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"21b745fc0b06132aee71b705168c8acf4155073d","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        :param context: request context."},{"line_number":317,"context_line":"        :param node_obj: an RPC style node obj."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        \"\"\""},{"line_number":320,"context_line":"        node_id \u003d node_obj.get(\u0027uuid\u0027)"},{"line_number":321,"context_line":"        LOG.debug(_(\"RPC validate_drivers called for node %s.\") % node_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2Fmvk%3D","line":318,"updated":"2013-10-31 16:09:36.000000000","message":"missed :returns:?","commit_id":"f08c80c4cd305b9afa509e7e5f84fe8a8fae8d2c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"41a6ab4ef20d75df18fa15fc39a1ca3af850ce84","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        :param context: request context."},{"line_number":317,"context_line":"        :param node_obj: an RPC style node obj."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        \"\"\""},{"line_number":320,"context_line":"        node_id \u003d node_obj.get(\u0027uuid\u0027)"},{"line_number":321,"context_line":"        LOG.debug(_(\"RPC validate_drivers called for node %s.\") % node_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2Fjww%3D","line":318,"in_reply_to":"AAAATn%2F%2Fmvk%3D","updated":"2013-11-01 11:39:24.000000000","message":"ops, yea forgot haha I think I add it to the rpcapi only, will add here too!","commit_id":"f08c80c4cd305b9afa509e7e5f84fe8a8fae8d2c"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"21b745fc0b06132aee71b705168c8acf4155073d","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        result \u003d {}"},{"line_number":324,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"},{"line_number":325,"context_line":"            for iface_name in [\u0027power\u0027, \u0027deploy\u0027, \u0027console\u0027, \u0027rescue\u0027]:"},{"line_number":326,"context_line":"                iface \u003d getattr(task.driver, iface_name, None)"},{"line_number":327,"context_line":"                if iface:"},{"line_number":328,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FmeE%3D","line":325,"updated":"2013-10-31 16:09:36.000000000","message":"Straightforward, but If someone will work on creation of yet another `core` or `standardized` interface I\u0027m 99% sure he will forget to update this list here. So I\u0027d like to suggest to move this enumeration of \u0027core\u0027 and \u0027standardized\u0027 interfaces closer to their definition - to the /ironic/drivers/base.py BaseDriver class.\n\n- To be simple we could just add two lists to the BaseDriver like:\n\nclass BaseDriver(object):\n\n    core_ifaces \u003d []\n    standardized_ifaces \u003d []\n\n    power \u003d None\n    _core_ifaces.append(\u0027power\u0027)\n\n    deploy \u003d None\n    _core_ifaces.append(\u0027deploy\u0027)\n\n    console \u003d None\n    _standardized_ifaces.append(\u0027console\u0027)\n\n... etc. Then in this code we would use:\n\nfor iface_name in (task.driver.core_ifaces + task.driver.standardized_ifaces):\n\nwhich is even more self-documenting IMO than current.\n\n\n- Or, to be Cool, you could check how folks doing such things \u003d)\nhttp://stackoverflow.com/questions/13532780/python-decorator-for-field\n\nHonestly I prefer the first one because of simplicity \u003d)","commit_id":"f08c80c4cd305b9afa509e7e5f84fe8a8fae8d2c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"41a6ab4ef20d75df18fa15fc39a1ca3af850ce84","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        result \u003d {}"},{"line_number":324,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"},{"line_number":325,"context_line":"            for iface_name in [\u0027power\u0027, \u0027deploy\u0027, \u0027console\u0027, \u0027rescue\u0027]:"},{"line_number":326,"context_line":"                iface \u003d getattr(task.driver, iface_name, None)"},{"line_number":327,"context_line":"                if iface:"},{"line_number":328,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FjuY%3D","line":325,"in_reply_to":"AAAATn%2F%2FmeE%3D","updated":"2013-11-01 11:39:24.000000000","message":"haha indeed, 99,9999%!","commit_id":"f08c80c4cd305b9afa509e7e5f84fe8a8fae8d2c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c317bc04c6ebf793d2111b6d4e3ff96bb5972de4","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        :param context: request context."},{"line_number":317,"context_line":"        :param node_obj: an RPC style node obj."},{"line_number":318,"context_line":"        :returns: a dictonary containing the results of each"},{"line_number":319,"context_line":"                  interface validation."},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FEO8%3D","line":318,"updated":"2013-11-14 22:33:07.000000000","message":"typo: dictionary","commit_id":"ec188d71a03fd2cd90860f27156a64f6ae8cd5f0"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c317bc04c6ebf793d2111b6d4e3ff96bb5972de4","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        \"\"\""},{"line_number":322,"context_line":"        node_id \u003d node_obj.get(\u0027uuid\u0027)"},{"line_number":323,"context_line":"        LOG.debug(_(\"RPC validate_drivers called for node %s.\") % node_id)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        result \u003d {}"},{"line_number":326,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FEPo%3D","line":323,"updated":"2013-11-14 22:33:07.000000000","message":"validate_driver_interfaces?","commit_id":"ec188d71a03fd2cd90860f27156a64f6ae8cd5f0"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c317bc04c6ebf793d2111b6d4e3ff96bb5972de4","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                iface \u003d getattr(task.driver, iface_name, None)"},{"line_number":330,"context_line":"                if iface:"},{"line_number":331,"context_line":"                    try:"},{"line_number":332,"context_line":"                        iface.validate(node_obj)"},{"line_number":333,"context_line":"                        result[iface_name] \u003d True"},{"line_number":334,"context_line":"                    except exception.InvalidParameterValue as e:"},{"line_number":335,"context_line":"                        LOG.exception(e)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FEN8%3D","line":332,"updated":"2013-11-14 22:33:07.000000000","message":"I found out that it is more accurate to use task.node, instead of node_obj, because task.node will have the more recent info for the node.","commit_id":"ec188d71a03fd2cd90860f27156a64f6ae8cd5f0"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e51a286503550db2b86db93570e220cbeb4e6e42","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    def _conductor_service_record_keepalive(self, context):"},{"line_number":364,"context_line":"        self.dbapi.touch_conductor(self.host)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def validate_driver_interfaces(self, context, node_obj):"},{"line_number":367,"context_line":"        \"\"\"Validate the `core` and `standardized` interfaces for drivers."},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BXFI%3D","line":366,"updated":"2013-11-26 22:55:22.000000000","message":"Should the comment and RPC_API_VERSION (see beginning of this file) be updated?","commit_id":"edac12bc473718031649167c1bf736f463df264e"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"6eb700ca0b2a227c017afd4700a403cb5c399afb","unresolved":false,"context_lines":[{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        \"\"\""},{"line_number":375,"context_line":"        LOG.debug(_(\u0027RPC validate_driver_interfaces called for node %s.\u0027) %"},{"line_number":376,"context_line":"                    node_id)"},{"line_number":377,"context_line":"        result \u003d {}"},{"line_number":378,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"},{"line_number":379,"context_line":"            for iface_name in (task.driver.core_interfaces +"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9TE4%3D","line":376,"updated":"2013-12-12 22:08:20.000000000","message":"Do we need to use dict-based substitution instead of index-based for i18n?\nFor example:\n\nLOG.debug(_(\u0027RPC validate_driver_interfaces called for node %(node)s.\u0027) % node_id)","commit_id":"0aad52ab04d4a0a9849ec2d656b27220055f1c43"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a12528f11852d5850efcad019a12f278fcda7526","unresolved":false,"context_lines":[{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        \"\"\""},{"line_number":375,"context_line":"        LOG.debug(_(\u0027RPC validate_driver_interfaces called for node %s.\u0027) %"},{"line_number":376,"context_line":"                    node_id)"},{"line_number":377,"context_line":"        result \u003d {}"},{"line_number":378,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"},{"line_number":379,"context_line":"            for iface_name in (task.driver.core_interfaces +"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9RQQ%3D","line":376,"in_reply_to":"AAAATn%2F9SKc%3D","updated":"2013-12-13 09:25:19.000000000","message":"Nice good to have a doc saying about it as well :)","commit_id":"0aad52ab04d4a0a9849ec2d656b27220055f1c43"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"810318d279281d810e3559929363cc3434b18bbc","unresolved":false,"context_lines":[{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        \"\"\""},{"line_number":375,"context_line":"        LOG.debug(_(\u0027RPC validate_driver_interfaces called for node %s.\u0027) %"},{"line_number":376,"context_line":"                    node_id)"},{"line_number":377,"context_line":"        result \u003d {}"},{"line_number":378,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"},{"line_number":379,"context_line":"            for iface_name in (task.driver.core_interfaces +"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9SKc%3D","line":376,"in_reply_to":"AAAATn%2F9TE4%3D","updated":"2013-12-13 02:27:15.000000000","message":"The correct answer for us is not in this case.\nThe I18n team pointed me to this link:\nhttp://docs.openstack.org/developer/hacking/#internationalization-i18n-strings","commit_id":"0aad52ab04d4a0a9849ec2d656b27220055f1c43"}],"ironic/conductor/rpcapi.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c317bc04c6ebf793d2111b6d4e3ff96bb5972de4","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        :param context: request context."},{"line_number":168,"context_line":"        :param node_obj: an RPC style node obj."},{"line_number":169,"context_line":"        :returns: a dictonary containing the results of each"},{"line_number":170,"context_line":"                  interface validation."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FENQ%3D","line":169,"updated":"2013-11-14 22:33:07.000000000","message":"See my comments in manager.py","commit_id":"ec188d71a03fd2cd90860f27156a64f6ae8cd5f0"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"76349127cce2f4758c9bcc1361b5a9b314e914d8","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        1.1 - Added update_node and start_power_state_change."},{"line_number":56,"context_line":"        1.2 - Added vendor_passhthru."},{"line_number":57,"context_line":"        1.3 - Rename start_power_state_change to change_node_power_state."},{"line_number":58,"context_line":"        1.4 - Add do_node_deploy and do_node_tear_down."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F%2BTvI%3D","side":"PARENT","line":58,"updated":"2013-11-27 15:30:07.000000000","message":"Should there be a \u00271.5 - Added (or add?) validate_driver_interfaces.\u0027?","commit_id":"e55928526f59ed7b178b5e6e242f986b90aa2a82"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"09ff8f5acc4a67b496d9a041749f68332a87434f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        1.1 - Added update_node and start_power_state_change."},{"line_number":56,"context_line":"        1.2 - Added vendor_passhthru."},{"line_number":57,"context_line":"        1.3 - Rename start_power_state_change to change_node_power_state."},{"line_number":58,"context_line":"        1.4 - Add do_node_deploy and do_node_tear_down."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F%2BTsk%3D","side":"PARENT","line":58,"in_reply_to":"AAAATn%2F%2BTvI%3D","updated":"2013-11-27 15:39:14.000000000","message":"Oh yes, I think it would be good to document it, I will add it to this docstring :D","commit_id":"e55928526f59ed7b178b5e6e242f986b90aa2a82"}],"ironic/drivers/base.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f60253522d4394118a07d4a8fbf2005cc9a16a96","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    the interfaces are appropriate."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    core_ifaces \u003d []"},{"line_number":37,"context_line":"    standardized_ifaces \u003d []"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    power \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BSxY%3D","line":36,"updated":"2013-11-27 19:30:31.000000000","message":"I like this!\n\nBut I think \"ifaces\" is an overloaded term -- at first glance in other files, I thought this meant network interfaces. Perhaps it\u0027s sufficient merely to use \"core\" and \"standard\"?\n\nAlternately, the full name might be clearer, eg, \"core_interfaces\" and \"standard_interfaces\".","commit_id":"c30fbcfc4cbb8f76e934a5641068d2df7bfccd20"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2dc20c630475ee2e62b233d1ee804f1523b1ffff","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    the interfaces are appropriate."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    core_ifaces \u003d []"},{"line_number":37,"context_line":"    standardized_ifaces \u003d []"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    power \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BQOE%3D","line":36,"in_reply_to":"AAAATn%2F%2BSxY%3D","updated":"2013-11-28 10:04:00.000000000","message":"Agree.\n\nI will go with the second suggestion, \"core_interfaces\" and \"standard_interfaces\" looks more clearer indeed, the code just looks more straight forward for things like:\n\nwith task_manager.acquire(...\n     task.driver.core_interfaces\n\nThanks for the suggestions!","commit_id":"c30fbcfc4cbb8f76e934a5641068d2df7bfccd20"}]}
