)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"046284e413f86762f7f31fcca303ab402da56e3a","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"As part of the work to add tests to the FakeManagement interface, other"},{"line_number":12,"context_line":"tests in test_fake.py were modified in order to remove the DB calls."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"blueprint: promote-set-boot-device"},{"line_number":15,"context_line":"Change-Id: If2e8074f2e0fbcf962d224024347a0319ac174cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"AAAAXX%2F%2F0zc%3D","line":13,"updated":"2014-04-26 00:50:46.000000000","message":"There\u0027s no mention of the new file that is added by this patch, which is a list of acceptable boot devices, and no mention of the methods implemented by the new ManagementInterface (namely, set/get boot device). I think these all should be called out here.","commit_id":"51f7d9ea82ccfeae9351fc081c8a7c51616f9eab"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"67385a3c63fbc8a0980cb2349a18c8c1256521a6","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"As part of the work to add tests to the FakeManagement interface, other"},{"line_number":12,"context_line":"tests in test_fake.py were modified in order to remove the DB calls."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"blueprint: promote-set-boot-device"},{"line_number":15,"context_line":"Change-Id: If2e8074f2e0fbcf962d224024347a0319ac174cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"AAAAXX%2F%2FuNA%3D","line":13,"in_reply_to":"AAAAXX%2F%2F0zc%3D","updated":"2014-04-28 13:13:46.000000000","message":"Agreed, I will improve the commit message.","commit_id":"51f7d9ea82ccfeae9351fc081c8a7c51616f9eab"}],"ironic/common/boot_devices.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"702240ff914afd965b4410a22b7adea67fdc42f5","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"Mapping of boot devices used when requesting the system to boot from an"},{"line_number":19,"context_line":"alternate device."},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"PXE \u003d \u0027pxe\u0027"},{"line_number":23,"context_line":"\"Boot from PXE boot\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2F8Ak%3D","line":20,"updated":"2014-04-09 11:24:15.000000000","message":"Why would you need list of constants literally equal to their names? Do you expect them to change? :) One may advocate having a list of possible boot devices to do some validation (which is not done in the following patch btw)...","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db1474bbf59b5dc995dcded60e77fb0ee5ca1bde","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"Mapping of boot devices used when requesting the system to boot from an"},{"line_number":19,"context_line":"alternate device."},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"PXE \u003d \u0027pxe\u0027"},{"line_number":23,"context_line":"\"Boot from PXE boot\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2F710%3D","line":20,"in_reply_to":"AAAAW3%2F%2F77M%3D","updated":"2014-04-09 11:43:23.000000000","message":"Still this constant will be called DISK and it\u0027s content will be exactly \"disk\" and internally some drives will change it to whatever, right? I\u0027m really against using constants that are equal to strings with their names, as to me there\u0027s no difference between inputting constant or constants with two quotes. I\u0027m changing to +1, but please consider again whether we need this, thanks :)","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"73beecd3a1187ba51161f653b7b4a179229d087d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"Mapping of boot devices used when requesting the system to boot from an"},{"line_number":19,"context_line":"alternate device."},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"PXE \u003d \u0027pxe\u0027"},{"line_number":23,"context_line":"\"Boot from PXE boot\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2F77M%3D","line":20,"in_reply_to":"AAAAW3%2F%2F79M%3D","updated":"2014-04-09 11:32:23.000000000","message":"The idea is to have a standard way of telling the node to boot from the local disk, or network, or cdrom etc... Without knowing how each driver would call it internally.","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"65c804a63487cad1949fcdf72f8f0c3e9ff6d93c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"Mapping of boot devices used when requesting the system to boot from an"},{"line_number":19,"context_line":"alternate device."},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"PXE \u003d \u0027pxe\u0027"},{"line_number":23,"context_line":"\"Boot from PXE boot\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2F79M%3D","line":20,"in_reply_to":"AAAAW3%2F%2F8Ak%3D","updated":"2014-04-09 11:30:23.000000000","message":"Hi Dmitry,\n\nSome drivers might use different names, take the seamicro driver as an example, it uses \u0027hd0\u0027 instead of \u0027disk\u0027[1], some other drivers might use \u0027net\u0027 instead of \u0027pxe\u0027, so by default I thought about using the IPMI names (as it is our default power interface) but other drivers can then map the IPMI names to their specific ones internally.\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/seamicro.py#L483-L484","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"4470f633b85781ce9d47136b21fdd0d0d9d8e009","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\"Boot from PXE boot\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"DISK \u003d \u0027disk\u0027"},{"line_number":26,"context_line":"\"Boot from BIOS default boot device\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CDROM \u003d \u0027cdrom\u0027"},{"line_number":29,"context_line":"\"Boot from CD/DVD\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Fg%2Fc%3D","line":26,"updated":"2014-04-14 02:54:21.000000000","message":"Lucas, we can not assume the BIOS default boot device is disk, for  most server BIOS, the default boot device is PXE I think, so this L26 comments is not exactly for DISK definition.","commit_id":"edfbfa1f5877e7f531c87485ed70ede08a85339e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4887804f238afafdaab162ab88e10cce310418b7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\"Boot from PXE boot\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"DISK \u003d \u0027disk\u0027"},{"line_number":26,"context_line":"\"Boot from BIOS default boot device\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CDROM \u003d \u0027cdrom\u0027"},{"line_number":29,"context_line":"\"Boot from CD/DVD\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FVKo%3D","line":26,"in_reply_to":"AAAAW3%2F%2FWWc%3D","updated":"2014-04-15 11:06:34.000000000","message":"Right, yeah, I got the strings from the ipmitool but I also agree they are a bit confusing... I can try to reword it to make it less confuse and add improve the module doc header as well to say that the options are _based_ on the ipmitool options.\n\nAbout adding the other option I would prefer to do it in another patch (if needed) as you stated I can\u0027t see the use of having a NONE option for e.g... so I might just leave it for future work.\n\nThanks for the suggestion","commit_id":"edfbfa1f5877e7f531c87485ed70ede08a85339e"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"339f1b0c3c1e9c3dbf3fea19df67ac832c906671","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\"Boot from PXE boot\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"DISK \u003d \u0027disk\u0027"},{"line_number":26,"context_line":"\"Boot from BIOS default boot device\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CDROM \u003d \u0027cdrom\u0027"},{"line_number":29,"context_line":"\"Boot from CD/DVD\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FWWc%3D","line":26,"in_reply_to":"AAAAW3%2F%2FWeg%3D","updated":"2014-04-15 08:30:22.000000000","message":"Oh, I see now that you preserved this list from the list in drivers/modules/ipmitool.py.  So I\u0027d be fine _not_ changing the list in this patch, if you prefer that. Or change it. Either way.\n\nFWIW, I didn\u0027t include those options originally with the ipmitool driver because they didn\u0027t make sense in the limited context of nova baremetal. They make more sense in a broad context with other drivers that may eg. leverage the floppy channel.","commit_id":"edfbfa1f5877e7f531c87485ed70ede08a85339e"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f60a9c60d7582deec94f4fd31c629da7131d74c4","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\"Boot from PXE boot\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"DISK \u003d \u0027disk\u0027"},{"line_number":26,"context_line":"\"Boot from BIOS default boot device\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CDROM \u003d \u0027cdrom\u0027"},{"line_number":29,"context_line":"\"Boot from CD/DVD\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FWeg%3D","line":26,"in_reply_to":"AAAAW3%2F%2Fg%2Fc%3D","updated":"2014-04-15 08:21:15.000000000","message":"This is actually the documented string from ipmitool -- http://linux.die.net/man/1/ipmitool\n\nI would suggest adding a link to that page in the module doc header, both as a general reference, and to help avoid confusion about the doc string wording :)\n\nAlso, to be complete, I think the following missing options should be included here: DIAG and FLOPPY and NONE.","commit_id":"edfbfa1f5877e7f531c87485ed70ede08a85339e"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"4470f633b85781ce9d47136b21fdd0d0d9d8e009","unresolved":false,"context_lines":[{"line_number":32,"context_line":"\"Boot into BIOS setup\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"SAFE \u003d \u0027safe\u0027"},{"line_number":35,"context_line":"\"Boot from BIOS default boot device, request Safe Mode\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Fg%2Fg%3D","line":35,"updated":"2014-04-14 02:54:21.000000000","message":"ditto","commit_id":"edfbfa1f5877e7f531c87485ed70ede08a85339e"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f33f718bfc7f1656a34dbc017e6cfb28ea463ff4","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Mapping of boot devices used when requesting the system to boot"},{"line_number":19,"context_line":"from an alternate device."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The options presented were based on the IPMItool chassis"},{"line_number":22,"context_line":"bootdev command. You can find the documentation at:"},{"line_number":23,"context_line":"http://ipmitool.sourceforge.net/manpage.html"},{"line_number":24,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2F7nM%3D","line":21,"updated":"2014-04-16 12:42:44.000000000","message":"Lucas, there is more options for ipmitool at least\n  none  : Do not change boot device order\n  pxe   : Force PXE boot\n  disk  : Force boot from default Hard-drive\n  safe  : Force boot from default Hard-drive, request Safe Mode\n  diag  : Force boot from Diagnostic Partition\n  cdrom : Force boot from CD/DVD\n  bios  : Force boot into BIOS Setup\n  floppy: Force boot from Floppy/primary removable media","commit_id":"14a07ea8e3d19033675e04b18377f0ce7daa4f42"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"aab326cc7ec311c699a0aa11ca714007b02f518f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Mapping of boot devices used when requesting the system to boot"},{"line_number":19,"context_line":"from an alternate device."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The options presented were based on the IPMItool chassis"},{"line_number":22,"context_line":"bootdev command. You can find the documentation at:"},{"line_number":23,"context_line":"http://ipmitool.sourceforge.net/manpage.html"},{"line_number":24,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2F7fU%3D","line":21,"in_reply_to":"AAAAXH%2F%2F7nM%3D","updated":"2014-04-16 12:56:26.000000000","message":"Hi Yuriy,\n\nYes, devananda pointed it out on patch-set #7 [1], I didn\u0027t include them in this patch for 2 reasons:\n\n* To preserve the original list from ipmitool.py, since this patch is a port.\n* These options weren\u0027t included in the ipmitool driver because they didn\u0027t make sense in the limited context of nova baremetal [1] (as per deva comment), so I don\u0027t know whether it also doesn\u0027t make sense to include it for Ironic (for e.g, having the \u0027none\u0027 option), so I decided to leave it out, and in case we think they are useful for Ironic it can be added in a later patch. \n\n[1] https://review.openstack.org/#/c/86063/7/ironic/common/boot_devices.py\n\nThanks for pointing it out.","commit_id":"14a07ea8e3d19033675e04b18377f0ce7daa4f42"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"a686597238ce64cf625ced59ea884e4912cee263","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Mapping of boot devices used when requesting the system to boot"},{"line_number":19,"context_line":"from an alternate device."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The options presented were based on the IPMItool chassis"},{"line_number":22,"context_line":"bootdev command. You can find the documentation at:"},{"line_number":23,"context_line":"http://ipmitool.sourceforge.net/manpage.html"},{"line_number":24,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FJfI%3D","line":21,"updated":"2014-04-23 17:52:14.000000000","message":"Just a suggestion since there was mention that none, floppy, diag aren\u0027t here. To prevent future readers from asking the same question, it might be worth adding a note/comment about the \"missing\" options.","commit_id":"49260986532ed793508bb22f3a8a8a9b6aff2508"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c1b4b0a53c2ea38fbe6977b48e7b6da458c12522","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Mapping of boot devices used when requesting the system to boot"},{"line_number":19,"context_line":"from an alternate device."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The options presented were based on the IPMItool chassis"},{"line_number":22,"context_line":"bootdev command. You can find the documentation at:"},{"line_number":23,"context_line":"http://ipmitool.sourceforge.net/manpage.html"},{"line_number":24,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FEkY%3D","line":21,"in_reply_to":"AAAAXH%2F%2FJfI%3D","updated":"2014-04-24 08:37:18.000000000","message":"+1 will fix","commit_id":"49260986532ed793508bb22f3a8a8a9b6aff2508"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"a686597238ce64cf625ced59ea884e4912cee263","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The options presented were based on the IPMItool chassis"},{"line_number":22,"context_line":"bootdev command. You can find the documentation at:"},{"line_number":23,"context_line":"http://ipmitool.sourceforge.net/manpage.html"},{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"PXE \u003d \u0027pxe\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FJig%3D","line":23,"updated":"2014-04-23 17:52:14.000000000","message":"this URL didn\u0027t work for me?","commit_id":"49260986532ed793508bb22f3a8a8a9b6aff2508"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c1b4b0a53c2ea38fbe6977b48e7b6da458c12522","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The options presented were based on the IPMItool chassis"},{"line_number":22,"context_line":"bootdev command. You can find the documentation at:"},{"line_number":23,"context_line":"http://ipmitool.sourceforge.net/manpage.html"},{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"PXE \u003d \u0027pxe\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FEkI%3D","line":23,"in_reply_to":"AAAAXH%2F%2FJig%3D","updated":"2014-04-24 08:37:18.000000000","message":"Err, yeah it\u0027s not working for me anymore as well, will change it.","commit_id":"49260986532ed793508bb22f3a8a8a9b6aff2508"}],"ironic/common/exception.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"49ae8afd0945643ffc2d62cb53574aab0752de64","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class NotSupported(NotImplemented):"},{"line_number":173,"context_line":"    message \u003d _(\"%(action)s is not supported by the %(driver)s driver.\")"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class NotFound(IronicException):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2Fv9M%3D","line":173,"updated":"2014-04-10 16:42:38.000000000","message":"The message is specific to drivers, but the exception name isn\u0027t. Also, the message seems quite similar to the UnsupportedDriverExtension message. Do you see these two exceptions as being different?","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f60a9c60d7582deec94f4fd31c629da7131d74c4","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    message \u003d _(\"%(err)s\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class NotSupportedByDriverError(NotImplemented):"},{"line_number":173,"context_line":"    message \u003d _(\"%(action)s is not supported by the %(driver)s driver.\")"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FWkY%3D","line":172,"updated":"2014-04-15 08:21:15.000000000","message":"I don\u0027t think we need to include \"Error\" in the exception name. I know it\u0027s a tiny nit, but it is redundant.","commit_id":"edfbfa1f5877e7f531c87485ed70ede08a85339e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4887804f238afafdaab162ab88e10cce310418b7","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    message \u003d _(\"%(err)s\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class NotSupportedByDriverError(NotImplemented):"},{"line_number":173,"context_line":"    message \u003d _(\"%(action)s is not supported by the %(driver)s driver.\")"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FVF0%3D","line":172,"in_reply_to":"AAAAW3%2F%2FWkY%3D","updated":"2014-04-15 11:06:34.000000000","message":"+1 yeah it\u0027s a bit redundant, will fix","commit_id":"edfbfa1f5877e7f531c87485ed70ede08a85339e"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"d35a5db9f693f0df8b2a9a39e7c14090a9407412","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    message \u003d _(\"%(err)s\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class NotSupportedByDriver(NotImplemented):"},{"line_number":173,"context_line":"    message \u003d _(\"%(action)s is not supported by the %(driver)s driver.\")"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXX%2F%2F3tA%3D","line":172,"updated":"2014-04-25 16:43:51.000000000","message":"We should not add this exception -- If a driver does not implement all methods of a core or common interface, it is not implementing the interface according to the contract. A partial implementation of a driver interface is insufficient and shouldn\u0027t be considered \"implemented\".\n\nIf the problem is with the hardware -- the BMC does not respond to get_bootdev -- we can\u0027t do anything besides inform the user that Ironic does not know. That is not the same as NotSupportedByDriver, though.","commit_id":"610d50586f4dd78245037a5002c520f004a1edb3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"21ac1b7911d61d417cd9d97007ef3eb8d66911ea","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    message \u003d _(\"%(err)s\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class NotSupportedByDriver(NotImplemented):"},{"line_number":173,"context_line":"    message \u003d _(\"%(action)s is not supported by the %(driver)s driver.\")"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXX%2F%2F3eE%3D","line":172,"in_reply_to":"AAAAXX%2F%2F3tA%3D","updated":"2014-04-25 17:11:37.000000000","message":"Agreed... As talked in IRC, I will remove those exceptions and in case we can\u0027t get the current boot device from that hardware specific we can just return None/NULL.","commit_id":"610d50586f4dd78245037a5002c520f004a1edb3"}],"ironic/drivers/base.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"49ae8afd0945643ffc2d62cb53574aab0752de64","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        \"\"\"Set the boot device for a node."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        Set the boot device to use on next reboot of the node. Be aware"},{"line_number":363,"context_line":"        that not all drivers may support this."},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        :param task: a task from TaskManager."},{"line_number":366,"context_line":"        :param node: a single Node."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FwEQ%3D","line":363,"updated":"2014-04-10 16:42:38.000000000","message":"nit, either \u0027not all drivers support this\u0027, or \u0027some drivers may not support this\u0027.","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"49ae8afd0945643ffc2d62cb53574aab0752de64","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        :param task: a task from TaskManager."},{"line_number":366,"context_line":"        :param node: a single Node."},{"line_number":367,"context_line":"        :param device: the boot device."},{"line_number":368,"context_line":"        :param kwargs: extra driver-specific paramenters."},{"line_number":369,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is specified."},{"line_number":370,"context_line":"        :raises: NotSupported if setting the boot device is not"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FwDw%3D","line":367,"updated":"2014-04-10 16:42:38.000000000","message":"does the value of this have to be one of common.boot_devices.something?","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"49ae8afd0945643ffc2d62cb53574aab0752de64","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        :param task: a task from TaskManager."},{"line_number":366,"context_line":"        :param node: a single Node."},{"line_number":367,"context_line":"        :param device: the boot device."},{"line_number":368,"context_line":"        :param kwargs: extra driver-specific paramenters."},{"line_number":369,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is specified."},{"line_number":370,"context_line":"        :raises: NotSupported if setting the boot device is not"},{"line_number":371,"context_line":"                 supported by the driver."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FwDg%3D","line":368,"updated":"2014-04-10 16:42:38.000000000","message":"typo: paramenters -\u003e parameters","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"49ae8afd0945643ffc2d62cb53574aab0752de64","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        \"\"\"Get the current boot device for a node."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        Provides the current boot device of the node. Be aware that not"},{"line_number":379,"context_line":"        all drivers may support this."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param task: a task from TaskManager."},{"line_number":382,"context_line":"        :param node: a single Node."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FwCg%3D","line":379,"updated":"2014-04-10 16:42:38.000000000","message":"\u0027not all drivers support this\u0027.","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"49ae8afd0945643ffc2d62cb53574aab0752de64","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param task: a task from TaskManager."},{"line_number":382,"context_line":"        :param node: a single Node."},{"line_number":383,"context_line":"        :returns: the boot device."},{"line_number":384,"context_line":"        :raises: NotSupported if getting the boot device is not"},{"line_number":385,"context_line":"                 supported by the driver."},{"line_number":386,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FwCI%3D","line":383,"updated":"2014-04-10 16:42:38.000000000","message":"is this value one of common.boot_devices.something?","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5839d544d74cd05afe62a644f6e069eb90e42230","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        \"\"\"Get a list of the supported boot devices."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        :returns: A list with the supported boot devices defined"},{"line_number":356,"context_line":"                  in :class:`ironic.common.states`."},{"line_number":357,"context_line":"        \"\"\""},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2Fp2I%3D","line":356,"updated":"2014-04-11 11:56:25.000000000","message":"Shouldn\u0027t it be :class:`ironic.common.boot_devices`?","commit_id":"d82420a55ad7270b0349b1e817f5a5d7bfac2692"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4433306e6bbc42ac1b026da6b42584aea48e2252","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        \"\"\"Get a list of the supported boot devices."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        :returns: A list with the supported boot devices defined"},{"line_number":356,"context_line":"                  in :class:`ironic.common.states`."},{"line_number":357,"context_line":"        \"\"\""},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2FpyQ%3D","line":356,"in_reply_to":"AAAAW3%2F%2Fp2I%3D","updated":"2014-04-11 12:04:55.000000000","message":":( yes! Thanks for poinitng that out, will fix","commit_id":"d82420a55ad7270b0349b1e817f5a5d7bfac2692"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"40846eb0e57e9bdd7d5985b66cf789e24c13ef94","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        \"\"\"Get a list of the supported boot devices."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        :returns: A list with the supported boot devices defined"},{"line_number":356,"context_line":"                  in :class:`ironic.common.boot_devices`."},{"line_number":357,"context_line":"        \"\"\""},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAXH%2F%2FMf4%3D","line":356,"updated":"2014-04-23 12:28:57.000000000","message":"I am not too familiar with ReST. Can keyword `class` be used with modules? I thought it should be :module:`...`","commit_id":"85f22393d6fd0d7067842dde6c0ebd4e7d2ea0f4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"3cb919b31773bb433b6cced0ae1df2c94f96cd49","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        \"\"\"Get a list of the supported boot devices."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        :returns: A list with the supported boot devices defined"},{"line_number":356,"context_line":"                  in :class:`ironic.common.boot_devices`."},{"line_number":357,"context_line":"        \"\"\""},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAXH%2F%2FLIo%3D","line":356,"in_reply_to":"AAAAXH%2F%2FMf4%3D","updated":"2014-04-23 15:02:21.000000000","message":"I think ur correct[1], it\u0027s :mod:`...`  \n\n[1] https://pythonhosted.org/an_example_pypi_project/sphinx.html#python-cross-referencing-syntax","commit_id":"85f22393d6fd0d7067842dde6c0ebd4e7d2ea0f4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"40846eb0e57e9bdd7d5985b66cf789e24c13ef94","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        :param task: a task from TaskManager."},{"line_number":367,"context_line":"        :param node: a single Node."},{"line_number":368,"context_line":"        :param device: the boot device, one of"},{"line_number":369,"context_line":"                       :class:`ironic.common.boot_devices`."},{"line_number":370,"context_line":"        :param kwargs: extra driver-specific parameters."},{"line_number":371,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":372,"context_line":"                 specified."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAXH%2F%2FMec%3D","line":369,"updated":"2014-04-23 12:28:57.000000000","message":"ditto, also `one of` is not exactly correct for a module, better `one of the constants defined in`","commit_id":"85f22393d6fd0d7067842dde6c0ebd4e7d2ea0f4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"40846eb0e57e9bdd7d5985b66cf789e24c13ef94","unresolved":false,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        :param task: a task from TaskManager."},{"line_number":385,"context_line":"        :param node: a single Node."},{"line_number":386,"context_line":"        :returns: the boot device, one of :class:`ironic.common.boot_devices`."},{"line_number":387,"context_line":"        :raises: NotSupportedByDriver if getting the boot device is"},{"line_number":388,"context_line":"                 not supported by the driver."},{"line_number":389,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAXH%2F%2FMeY%3D","line":386,"updated":"2014-04-23 12:28:57.000000000","message":"ditto","commit_id":"85f22393d6fd0d7067842dde6c0ebd4e7d2ea0f4"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"02233bde0085da75abd34d069bdb9a97c5c04b06","unresolved":false,"context_lines":[{"line_number":340,"context_line":"    \"\"\"Interface for management related actions.\"\"\""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    @abc.abstractmethod"},{"line_number":343,"context_line":"    def validate(self, task, node):"},{"line_number":344,"context_line":"        \"\"\"Validate the driver-specific management information."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        :param task: a task from TaskManager."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F7iY%3D","line":343,"updated":"2014-04-25 08:24:26.000000000","message":"node is redundant. It\u0027s already in the \u0027task\u0027.","commit_id":"fd3c5ca6d929d2db6b891f12187da2298c3d3843"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"264afb6071aa5fba03454c690a19f4aedacafb24","unresolved":false,"context_lines":[{"line_number":340,"context_line":"    \"\"\"Interface for management related actions.\"\"\""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    @abc.abstractmethod"},{"line_number":343,"context_line":"    def validate(self, task, node):"},{"line_number":344,"context_line":"        \"\"\"Validate the driver-specific management information."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        :param task: a task from TaskManager."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F6%2Bw%3D","line":343,"in_reply_to":"AAAAXX%2F%2F7B0%3D","updated":"2014-04-25 09:22:07.000000000","message":"Right, there\u0027s only one problem, some part of the code assumes that node is being passed to these methods[1], I think that the refactor to remove these node arguments should happen before this patch (or after it...) \n\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/conductor/manager.py#L710","commit_id":"fd3c5ca6d929d2db6b891f12187da2298c3d3843"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"651bce8d47b0b3b41dd6a285413a1555fe9ea589","unresolved":false,"context_lines":[{"line_number":340,"context_line":"    \"\"\"Interface for management related actions.\"\"\""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    @abc.abstractmethod"},{"line_number":343,"context_line":"    def validate(self, task, node):"},{"line_number":344,"context_line":"        \"\"\"Validate the driver-specific management information."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        :param task: a task from TaskManager."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F7B0%3D","line":343,"in_reply_to":"AAAAXX%2F%2F7Fo%3D","updated":"2014-04-25 09:15:47.000000000","message":"Yeah, I figured that was the reason. :)  I see a *lot* of passing both \u0027task\u0027 and \u0027node\u0027 in the code. It\u0027s on my mental list, also, of something to clean up. It would be great maybe to not add more of it... and work towards removing them, as you said.  Thanks!","commit_id":"fd3c5ca6d929d2db6b891f12187da2298c3d3843"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"37877fe782c62519cbf4b380057f7e85dec28e7f","unresolved":false,"context_lines":[{"line_number":340,"context_line":"    \"\"\"Interface for management related actions.\"\"\""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    @abc.abstractmethod"},{"line_number":343,"context_line":"    def validate(self, task, node):"},{"line_number":344,"context_line":"        \"\"\"Validate the driver-specific management information."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        :param task: a task from TaskManager."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F7Fo%3D","line":343,"in_reply_to":"AAAAXX%2F%2F7iY%3D","updated":"2014-04-25 09:09:45.000000000","message":"Right, I agree, but I wanted to be consistent with the rest of the interfaces, they all pass task and node for historical reasons and I wanted to stick to it.\n\nBut, yeah maybe I should just use task here and come up with another patch removing the node from the other interfaces. Will do it.\n\nThanks","commit_id":"fd3c5ca6d929d2db6b891f12187da2298c3d3843"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"02233bde0085da75abd34d069bdb9a97c5c04b06","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        \"\"\""},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    @abc.abstractmethod"},{"line_number":360,"context_line":"    def set_boot_device(self, task, node, device, **kwargs):"},{"line_number":361,"context_line":"        \"\"\"Set the boot device for a node."},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        Set the boot device to use on next reboot of the node. Be aware"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F7iM%3D","line":360,"updated":"2014-04-25 08:24:26.000000000","message":"Ditto.","commit_id":"fd3c5ca6d929d2db6b891f12187da2298c3d3843"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"02233bde0085da75abd34d069bdb9a97c5c04b06","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        \"\"\""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    @abc.abstractmethod"},{"line_number":378,"context_line":"    def get_boot_device(self, task, node):"},{"line_number":379,"context_line":"        \"\"\"Get the current boot device for a node."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        Provides the current boot device of the node. Be aware that not"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F7iE%3D","line":378,"updated":"2014-04-25 08:24:26.000000000","message":"Ditto.","commit_id":"fd3c5ca6d929d2db6b891f12187da2298c3d3843"}],"ironic/drivers/modules/fake.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"49ae8afd0945643ffc2d62cb53574aab0752de64","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_boot_device(self, task, node):"},{"line_number":161,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2Fv%2FM%3D","line":161,"updated":"2014-04-10 16:42:38.000000000","message":"hey, do you think it matters if the docstring says it returns the boot device or raises an exception, to \u0027pass\u0027 instead?","commit_id":"91243990712e6cd2e11c2d092a82a4256e11e768"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f60a9c60d7582deec94f4fd31c629da7131d74c4","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_boot_device(self, task, node):"},{"line_number":161,"context_line":"        raise exception.NotSupportedByDriverError("},{"line_number":162,"context_line":"                                action\u003d_(\u0027Getting the boot device\u0027),"},{"line_number":163,"context_line":"                                driver\u003dtask.node.driver)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FWi0%3D","line":161,"updated":"2014-04-15 08:21:15.000000000","message":"following the examples in the rest of this module, I would prefer to have each method implemented in a way which succeeds (or passes) by default. Unit tests can mock the returns to test exception handling, where necessary, or the method can do actual checking.\n\nEg, perhaps get_supported_boot_devices could just return [boot_devives.NONE], and then set_boot_device would raise an exception if passed any other value.\n\nI know there aren\u0027t unit tests for this in this patch, and I haven\u0027t gotten to the rest of the series, which is probably where you add tests ... so take this for what it\u0027s worth (just a suggestion)","commit_id":"edfbfa1f5877e7f531c87485ed70ede08a85339e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4887804f238afafdaab162ab88e10cce310418b7","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_boot_device(self, task, node):"},{"line_number":161,"context_line":"        raise exception.NotSupportedByDriverError("},{"line_number":162,"context_line":"                                action\u003d_(\u0027Getting the boot device\u0027),"},{"line_number":163,"context_line":"                                driver\u003dtask.node.driver)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FVFU%3D","line":161,"in_reply_to":"AAAAW3%2F%2FWi0%3D","updated":"2014-04-15 11:06:34.000000000","message":"Ack, I will add some logic on the methods here + tests.","commit_id":"edfbfa1f5877e7f531c87485ed70ede08a85339e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"a686597238ce64cf625ced59ea884e4912cee263","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                \"Invalid boot device %s specified.\") % device)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def get_boot_device(self, task, node):"},{"line_number":164,"context_line":"        raise exception.NotSupportedByDriver("},{"line_number":165,"context_line":"                                action\u003d_(\u0027Getting the boot device\u0027),"},{"line_number":166,"context_line":"                                driver\u003dtask.node.driver)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FJTI%3D","line":164,"updated":"2014-04-23 17:52:14.000000000","message":"Might be that I\u0027m misinterpreting Deva\u0027s comments from https://review.openstack.org/#/c/86063/7/ironic/drivers/modules/fake.py, but I think he meant that this should return a boot device.\n\nSo eg, if set_boot_device() is called, save/store the specified device, and return it here.","commit_id":"49260986532ed793508bb22f3a8a8a9b6aff2508"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8787c829c3191d2ef4aed22291bd012d818ac655","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                \"Invalid boot device %s specified.\") % device)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def get_boot_device(self, task, node):"},{"line_number":164,"context_line":"        raise exception.NotSupportedByDriver("},{"line_number":165,"context_line":"                                action\u003d_(\u0027Getting the boot device\u0027),"},{"line_number":166,"context_line":"                                driver\u003dtask.node.driver)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FEDE%3D","line":164,"in_reply_to":"AAAAXH%2F%2FEj4%3D","updated":"2014-04-24 09:34:08.000000000","message":"Actually not, he was talking about the get_supported_boot_devices(), but it\u0027s fine I think it could apply for the get_boot_device() method as well, to by default pass.","commit_id":"49260986532ed793508bb22f3a8a8a9b6aff2508"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c1b4b0a53c2ea38fbe6977b48e7b6da458c12522","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                \"Invalid boot device %s specified.\") % device)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def get_boot_device(self, task, node):"},{"line_number":164,"context_line":"        raise exception.NotSupportedByDriver("},{"line_number":165,"context_line":"                                action\u003d_(\u0027Getting the boot device\u0027),"},{"line_number":166,"context_line":"                                driver\u003dtask.node.driver)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FEj4%3D","line":164,"in_reply_to":"AAAAXH%2F%2FJTI%3D","updated":"2014-04-24 08:37:18.000000000","message":"Yeah I re-read the comment, I think ur correct. I will update it.","commit_id":"49260986532ed793508bb22f3a8a8a9b6aff2508"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"1fec7b516da77d2bd5ba420474adf34ac86a41d0","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    def set_boot_device(self, task, device, **kwargs):"},{"line_number":159,"context_line":"        if device not in self.get_supported_boot_devices():"},{"line_number":160,"context_line":"            raise exception.InvalidParameterValue(_("},{"line_number":161,"context_line":"                \"Invalid boot device %s specified.\") % device)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def get_boot_device(self, task):"},{"line_number":164,"context_line":"        return boot_devices.PXE"}],"source_content_type":"text/x-python","patch_set":15,"id":"bad4c104_a3bb27c3","line":161,"updated":"2014-04-29 21:39:15.000000000","message":"...specified.\") % device) -\u003e specified.\"), device)","commit_id":"b96fc97eef8345d58ffe6fa94397b802537b7bc9"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"06725e4b3b8dcdde26035027373e4fdeed075bec","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    def set_boot_device(self, task, device, **kwargs):"},{"line_number":159,"context_line":"        if device not in self.get_supported_boot_devices():"},{"line_number":160,"context_line":"            raise exception.InvalidParameterValue(_("},{"line_number":161,"context_line":"                \"Invalid boot device %s specified.\") % device)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def get_boot_device(self, task):"},{"line_number":164,"context_line":"        return boot_devices.PXE"}],"source_content_type":"text/x-python","patch_set":15,"id":"bad4c104_9e2bd881","line":161,"in_reply_to":"bad4c104_a3bb27c3","updated":"2014-04-29 21:51:06.000000000","message":"Hi Chris,\n\nThanks for the review.\n\nSo it doesn\u0027t work for execeptions, using \u0027, \u0027 just works to the logging module.\n\ne.g\n\nIn [3]: raise Exception(_(\"test %s\"), \"test\")\n\n---------------------------------------------------------------------------\n\nException                                 Traceback (most recent call last)\n\n\u003cipython-input-3-272b4729ebe5\u003e in \u003cmodule\u003e()\n\n----\u003e 1 raise Exception(_(\"test %s\"), \"test\")\n\nException: (\u0027test %s\u0027, \u0027test\u0027)","commit_id":"b96fc97eef8345d58ffe6fa94397b802537b7bc9"}],"ironic/tests/drivers/test_fake.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"02233bde0085da75abd34d069bdb9a97c5c04b06","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def test_management_interface_set_boot_device_good(self):"},{"line_number":79,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":80,"context_line":"            self.driver.management.set_boot_device(task, self.node,"},{"line_number":81,"context_line":"                                                   boot_devices.PXE)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def test_management_interface_set_boot_device_fail(self):"},{"line_number":84,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F7hE%3D","line":81,"updated":"2014-04-25 08:24:26.000000000","message":"I\u0027d rather not see us use the DB in tests. You can easily just pass a \u0027task\u0027 Mock.  See other patches in this series for an example of how.\n\nDitto with the tests below.","commit_id":"fd3c5ca6d929d2db6b891f12187da2298c3d3843"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"37877fe782c62519cbf4b380057f7e85dec28e7f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def test_management_interface_set_boot_device_good(self):"},{"line_number":79,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":80,"context_line":"            self.driver.management.set_boot_device(task, self.node,"},{"line_number":81,"context_line":"                                                   boot_devices.PXE)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def test_management_interface_set_boot_device_fail(self):"},{"line_number":84,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F7E8%3D","line":81,"in_reply_to":"AAAAXX%2F%2F7hE%3D","updated":"2014-04-25 09:09:45.000000000","message":"ack, will take a look","commit_id":"fd3c5ca6d929d2db6b891f12187da2298c3d3843"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"af4d7ab31dde988731c7a389c9f9617fc2cad747","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":39,"context_line":"        mgr_utils.mock_the_extension_manager()"},{"line_number":40,"context_line":"        self.driver \u003d driver_factory.get_driver(\"fake\")"},{"line_number":41,"context_line":"        self.node \u003d obj_utils.get_test_node(self.context)"},{"line_number":42,"context_line":"        self.task \u003d mock.Mock(spec\u003dtask_manager.TaskManager)"},{"line_number":43,"context_line":"        self.task.shared \u003d False"},{"line_number":44,"context_line":"        self.task.node \u003d self.node"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAXX%2F%2F0eQ%3D","line":41,"updated":"2014-04-26 04:43:10.000000000","message":"Thank you very much for this! :)","commit_id":"51f7d9ea82ccfeae9351fc081c8a7c51616f9eab"}]}
