)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ea12f0cb5597735a063d05bb6be8d989dd9ea0f3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-06-04 17:01:42 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"get_supported_boot_devices() returns static device list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I5ae70ee84309dffb7d7bca4ac5cba28b01b7c414"},{"line_number":10,"context_line":"Closes-Bug: #1391598"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3afb71cf_2d06f520","line":8,"updated":"2015-06-04 21:06:58.000000000","message":"It would be good to describe what this patch does -- I\u0027m assuming it doesn\u0027t return a static device list?\n\nThis [1] might be useful to give you an idea of the kind of information we\u0027d like to see in a commit message.\n\n[1] https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"688d625ee0725c199f77cd8f19c62175506f98a7"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"c789b4e7a9f008844a6a588fb5121669b778df3e","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-06-04 17:01:42 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"get_supported_boot_devices() returns static device list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I5ae70ee84309dffb7d7bca4ac5cba28b01b7c414"},{"line_number":10,"context_line":"Closes-Bug: #1391598"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3afb71cf_508d327a","line":8,"in_reply_to":"3afb71cf_2d06f520","updated":"2015-06-05 09:58:03.000000000","message":"Will submit another patch changing task to an optional argument and will provide more detail in comment.","commit_id":"688d625ee0725c199f77cd8f19c62175506f98a7"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3b7fe2a16e2650ef9b77bcc6ab906be1ded50714","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2015-06-04 17:01:42 +0100"},{"line_number":4,"context_line":"Commit:     Matt Keeann \u003cmatt.keenan@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-05 16:40:58 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"get_supported_boot_devices() returns static device list"},{"line_number":8,"context_line":"which is only applicable to x86 based architectures."},{"line_number":9,"context_line":"If a node references for instance sparc architecture, then"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3afb71cf_99b15292","line":6,"updated":"2015-06-08 14:17:00.000000000","message":"You should add a \u0027summary\u0027 line that is 50 chars or less (no period at the end) followed by a blank line, then your description.","commit_id":"d9e92e6a25b60e917415bbcb5876a8efe817da0b"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"22dd5d7fe1b0e9208660701f8afd68620edaa8d8","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2015-06-04 17:01:42 +0100"},{"line_number":4,"context_line":"Commit:     Matt Keeann \u003cmatt.keenan@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-05 16:40:58 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"get_supported_boot_devices() returns static device list"},{"line_number":8,"context_line":"which is only applicable to x86 based architectures."},{"line_number":9,"context_line":"If a node references for instance sparc architecture, then"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fa32b979_3bb934ea","line":6,"in_reply_to":"3afb71cf_99b15292","updated":"2015-06-15 10:42:21.000000000","message":"Will update message as noted in my next patch set.","commit_id":"d9e92e6a25b60e917415bbcb5876a8efe817da0b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0076ca1c079ff946361a6b637e5381b44af4ffe9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"get_supported_boot_devices() returns static device list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Returning a static device list currently is only"},{"line_number":10,"context_line":"only applicable to x86 based architectures."},{"line_number":11,"context_line":"If a node references for instance sparc architecture, then"},{"line_number":12,"context_line":"\"pxe\" boot is not supported, however \"wanboot\" is. The driver"},{"line_number":13,"context_line":"referenced by the node should be able to return a custom"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_0f396d41","line":10,"updated":"2015-06-15 21:40:32.000000000","message":"extra \u0027only\u0027","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"93ba6ba8f40f3bc2a519f55dcd29a959db91d945","unresolved":false,"context_lines":[{"line_number":7,"context_line":"get_supported_boot_devices() returns static device list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Returning a static device list currently is only"},{"line_number":10,"context_line":"only applicable to x86 based architectures."},{"line_number":11,"context_line":"If a node references for instance sparc architecture, then"},{"line_number":12,"context_line":"\"pxe\" boot is not supported, however \"wanboot\" is. The driver"},{"line_number":13,"context_line":"referenced by the node should be able to return a custom"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_a5488488","line":10,"in_reply_to":"fa32b979_0f396d41","updated":"2015-06-16 12:23:56.000000000","message":"Done","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0076ca1c079ff946361a6b637e5381b44af4ffe9","unresolved":false,"context_lines":[{"line_number":11,"context_line":"If a node references for instance sparc architecture, then"},{"line_number":12,"context_line":"\"pxe\" boot is not supported, however \"wanboot\" is. The driver"},{"line_number":13,"context_line":"referenced by the node should be able to return a custom"},{"line_number":14,"context_line":"boot device list dependent on the architecture of the node."},{"line_number":15,"context_line":"However to achieve this the task needs to be passed as an"},{"line_number":16,"context_line":"argument in get_supported_boot_devices()"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_e40f8b2c","line":14,"updated":"2015-06-15 21:40:32.000000000","message":"I\u0027m not totally sure I understand what you want to do.\n\nNote that .get_supported_boot_devices() should only return a (sub)set of ironic.common.boot_devices.py\n\nSo even with this change, you\u0027d only be able to return something in that .py. Were you going to add \u0027wanboot\u0027 to that file?","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"93ba6ba8f40f3bc2a519f55dcd29a959db91d945","unresolved":false,"context_lines":[{"line_number":11,"context_line":"If a node references for instance sparc architecture, then"},{"line_number":12,"context_line":"\"pxe\" boot is not supported, however \"wanboot\" is. The driver"},{"line_number":13,"context_line":"referenced by the node should be able to return a custom"},{"line_number":14,"context_line":"boot device list dependent on the architecture of the node."},{"line_number":15,"context_line":"However to achieve this the task needs to be passed as an"},{"line_number":16,"context_line":"argument in get_supported_boot_devices()"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_7051dc61","line":14,"in_reply_to":"fa32b979_e40f8b2c","updated":"2015-06-16 12:23:56.000000000","message":"I didn\u0027t realize there was a restriction to only return a (sub)set of the devices listed in boot_devices.py. On this basis I\u0027ve added WANBOOT.","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"fdbfa496c45420024e611efaa6832e591f6cd0cd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"to return a custom boot device list dependent on the architecture"},{"line_number":14,"context_line":"of the node. However to achieve this the task needs to be passed"},{"line_number":15,"context_line":"as an argument in get_supported_boot_devices()"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I5ae70ee84309dffb7d7bca4ac5cba28b01b7c414"},{"line_number":18,"context_line":"Closes-Bug: #1391598"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1a4dcd0f_b81df767","line":16,"updated":"2015-08-11 11:06:00.000000000","message":"Implements: blueprint supported-boot-device-list\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"c2c5366c49879930b2693151a07152cff8b5369e"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"3adea4c76a021968df6c12837a5eae20eba61c75","unresolved":false,"context_lines":[{"line_number":13,"context_line":"to return a custom boot device list dependent on the architecture"},{"line_number":14,"context_line":"of the node. However to achieve this the task needs to be passed"},{"line_number":15,"context_line":"as an argument in get_supported_boot_devices()"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I5ae70ee84309dffb7d7bca4ac5cba28b01b7c414"},{"line_number":18,"context_line":"Closes-Bug: #1391598"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1a4dcd0f_4e050378","line":16,"in_reply_to":"1a4dcd0f_b81df767","updated":"2015-08-11 15:25:55.000000000","message":"Done","commit_id":"c2c5366c49879930b2693151a07152cff8b5369e"}],"ironic/conductor/manager.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"9f27690460b7e47ea4b45aaa33f9958b76a5285c","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            if not getattr(task.driver, \u0027management\u0027, None):"},{"line_number":1652,"context_line":"                raise exception.UnsupportedDriverExtension("},{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"    @messaging.expected_exceptions(exception.NoFreeConductorWorker,"},{"line_number":1657,"context_line":"                                   exception.NodeLocked,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_cbe17700","line":1654,"updated":"2015-06-05 09:57:04.000000000","message":"\u003e\"Adding a mandatory task argument I agree could break legacy drivers. However adding the task as an optional parameter e.g. task\u003dNone, should not break anything\"\n\nMatt, this is not true. You pass this extra parameter here for all drivers.","commit_id":"36e98cf58fe2e02af97587dbd11169ba2dfe6672"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"6c4525f37c34de85aeedba7ad80eb6824f5f474e","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            if not getattr(task.driver, \u0027management\u0027, None):"},{"line_number":1652,"context_line":"                raise exception.UnsupportedDriverExtension("},{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"    @messaging.expected_exceptions(exception.NoFreeConductorWorker,"},{"line_number":1657,"context_line":"                                   exception.NodeLocked,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afb71cf_a8ee37ea","line":1654,"in_reply_to":"3afb71cf_cbe17700","updated":"2015-06-05 14:08:13.000000000","message":"Agreed, I just can\u0027t see an obvious means of making this conditional as the conductor manager will call all drivers with a task paramater.\n\nI could attempt to change this code to have kwargs dict passed instead of task, however to some conditional would be required to determine if task\u003dtask was added to kwargs or not, this potentially adds some logic the manager.py which I\u0027m not sure is acceptable. Unless someone else can think of something.","commit_id":"36e98cf58fe2e02af97587dbd11169ba2dfe6672"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3b7fe2a16e2650ef9b77bcc6ab906be1ded50714","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            if not getattr(task.driver, \u0027management\u0027, None):"},{"line_number":1652,"context_line":"                raise exception.UnsupportedDriverExtension("},{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"    @messaging.expected_exceptions(exception.NoFreeConductorWorker,"},{"line_number":1657,"context_line":"                                   exception.NodeLocked,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afb71cf_d4dd4f43","line":1654,"updated":"2015-06-08 14:17:00.000000000","message":"I can think of two ways to handle this (don\u0027t know if task needs to be optional but haven\u0027t thought it through):\n\n1. put the call to task.driver.management.get_supported_boot_devices(task) in a try block. If it fails due to the added argument, you can try a call to .get_supported_boot_devices() -- and also log some deprecation warning, eg [1] has a warning for some other deprecation.\n\n2. write python code to find out if .get_supported_boot_devices has a task argument or not. (Off the top of my head I don\u0027t know how but hey, this is python, I\u0027m sure there is a way.)\n\n[1] https://github.com/openstack/ironic/blob/309707bab00a8a30d473815687515ac906ffbeb2/ironic/conductor/manager.py#L478","commit_id":"d9e92e6a25b60e917415bbcb5876a8efe817da0b"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"22dd5d7fe1b0e9208660701f8afd68620edaa8d8","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            if not getattr(task.driver, \u0027management\u0027, None):"},{"line_number":1652,"context_line":"                raise exception.UnsupportedDriverExtension("},{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"    @messaging.expected_exceptions(exception.NoFreeConductorWorker,"},{"line_number":1657,"context_line":"                                   exception.NodeLocked,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_7bd81c54","line":1654,"in_reply_to":"3afb71cf_d4dd4f43","updated":"2015-06-15 10:42:21.000000000","message":"In thinking about this 2nd option is achievable using Pythons inspect module which is already imported here. We can used Inspect\u0027s getargspec() method and check if \"task\" is in the argument list, if not call get_supported_boot_devices() without task and log a warning indicating deprecated and a task argument is recommended.","commit_id":"d9e92e6a25b60e917415bbcb5876a8efe817da0b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0076ca1c079ff946361a6b637e5381b44af4ffe9","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            if not getattr(task.driver, \u0027management\u0027, None):"},{"line_number":1652,"context_line":"                raise exception.UnsupportedDriverExtension("},{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            argspec \u003d inspect.getargspec("},{"line_number":1655,"context_line":"                task.driver.management.get_supported_boot_devices)"},{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_a15e5510","line":1654,"updated":"2015-06-15 21:40:32.000000000","message":"good idea. I was reading though[1], that this has been deprecated in 3.0. Maybe use inspect.getfullargspec instead? Hmm, but I don\u0027t think that is avail in 2.7. Oh well, we can stick with this I think.\n\n[1] https://docs.python.org/3/library/inspect.html","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"990ddbbf2447f47a298627b73522f9fe6ae5ac51","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            if not getattr(task.driver, \u0027management\u0027, None):"},{"line_number":1652,"context_line":"                raise exception.UnsupportedDriverExtension("},{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            argspec \u003d inspect.getargspec("},{"line_number":1655,"context_line":"                task.driver.management.get_supported_boot_devices)"},{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_91ebf4db","line":1654,"in_reply_to":"fa32b979_1a74e6fb","updated":"2015-06-24 12:53:16.000000000","message":"This comment and the next one, to me conflict with each other :)\n\n2nd comment suggests changing to just len(argspec.args) \u003d\u003d 2. However I\u0027m a little slow to change this, as it really is the \u0027task\u0027 argument I want to ensure is being passed in here, and forces this specific variable name, which is consistently named throughout. If I changed to len(argspec.args), then I\u0027d need to add a specific comment as to why the check was being made.\n\nThe other suggestion in this comment to add a wrapper class to Management interface has merit and I agree would allow for the check to be reused. Just wondering what\u0027s the best means of implementation.\n\nI think a simple property method would suffice e.g. :\n\n  @property\n  def get_boot_devices_supports_task_arg(self):\n      argspec \u003d inspect.getargspec(self.get_supported_boot_devices)\n      if \u0027task\u0027 in argspec.args:\n          return True\n      else:\n          return False\n\nThis solution would then allow for following code in conductor/manager.py:\n\n  if task.driver.management.get_supported_boot_devices_supports_task_arg\n      task.driver.management.get_supported_boot_devices(task)\n  else:\n      task.driver.management.get_supported_boot_devices()\n\nI\u0027m just wondering other than in conductor/manager.py when or where do you think this might need to be referenced ? If no where then just leaving the logic in one place e.g. in conductor/manager.py as it currently lies might be the right way to go. I\u0027m not knowledgeable enough of the ironic code base to make a call.. :)","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"6a8665d8c1e63530dcc142fc3bc1fcff582dc988","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            if not getattr(task.driver, \u0027management\u0027, None):"},{"line_number":1652,"context_line":"                raise exception.UnsupportedDriverExtension("},{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            argspec \u003d inspect.getargspec("},{"line_number":1655,"context_line":"                task.driver.management.get_supported_boot_devices)"},{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_6d0d298e","line":1654,"in_reply_to":"fa32b979_46efed1d","updated":"2015-06-24 15:28:41.000000000","message":"Ok great, just one slight change from above:\n\n   if len(argspec.args) \u003e 1:\n\nAs self is counted as an argument, so count needs to be greater than one.","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"2d6fdbb9c2a93904a69eca702aa8c3dd2eadd553","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            if not getattr(task.driver, \u0027management\u0027, None):"},{"line_number":1652,"context_line":"                raise exception.UnsupportedDriverExtension("},{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            argspec \u003d inspect.getargspec("},{"line_number":1655,"context_line":"                task.driver.management.get_supported_boot_devices)"},{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_1a74e6fb","line":1654,"in_reply_to":"fa32b979_70ff9c34","updated":"2015-06-24 10:10:00.000000000","message":"Can we move this part of the code to a wrapper method in ManagementInterface\n\n  def get_supported_boot_devices_wrapper(task):\n\nor something like that.  We should be able to cache this in task.driver.management so that i can be reused across all nodes.\n\n  if get_boot_devices_supports_task_arg is True:\n    task.driver.management.get_supported_boot_devices(task)\n  else\n    task.driver.management.get_supported_boot_devices()\n\n  \n(Not sure if we would save something)","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"8766155ebf6eb6812915f4761f4f729907b18dd2","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            if not getattr(task.driver, \u0027management\u0027, None):"},{"line_number":1652,"context_line":"                raise exception.UnsupportedDriverExtension("},{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            argspec \u003d inspect.getargspec("},{"line_number":1655,"context_line":"                task.driver.management.get_supported_boot_devices)"},{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_46efed1d","line":1654,"in_reply_to":"fa32b979_91ebf4db","updated":"2015-06-24 13:20:45.000000000","message":"Matt, why do you say 1 and 2 conflict with each other. I think both are independent.  \n\nYes, task name is universal across Ironic, but nothing stops someone from writing the name as\n\n  def get_supported_boot_devices(task_manager):\n    \u003c\u003e\n\nThe above is perfectly acceptable as per python as well.\n\nMy only concern was, we don\u0027t want to break anyone\u0027s code because they don\u0027t put the variable name that we recommended in the base class.  Worse, it has to be exactly \u0027task\u0027 itself since we are looking for it in a list.\n\n  \u003e\u003e\u003e \u0027task\u0027 in [\u0027task_manager\u0027]\n  False\n\nSo the above thing about property seems good to me \nand we can place it in ManagementInterface itself as \nyou suggested.  So it would look like:\n  \n  @property\n  def get_boot_devices_supports_task_arg(self):\n    argspec \u003d inspect.getargspec(self.get_supported_boot_devices)\n    if len(argspec.args) \u003e 0:\n      return True\n    else:\n      return False","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"93ba6ba8f40f3bc2a519f55dcd29a959db91d945","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            if not getattr(task.driver, \u0027management\u0027, None):"},{"line_number":1652,"context_line":"                raise exception.UnsupportedDriverExtension("},{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            argspec \u003d inspect.getargspec("},{"line_number":1655,"context_line":"                task.driver.management.get_supported_boot_devices)"},{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_70ff9c34","line":1654,"in_reply_to":"fa32b979_a15e5510","updated":"2015-06-16 12:23:56.000000000","message":"Done","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0076ca1c079ff946361a6b637e5381b44af4ffe9","unresolved":false,"context_lines":[{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            argspec \u003d inspect.getargspec("},{"line_number":1655,"context_line":"                task.driver.management.get_supported_boot_devices)"},{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_c173597f","line":1656,"updated":"2015-06-15 21:40:32.000000000","message":"don\u0027t know if I\u0027m being too paranoid here. Should we also check that it is the only (needed) arg, in case it changes in the future to take a second argument? (I\u0027m not thinking too clearly now so I could be not-right.)","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"2d6fdbb9c2a93904a69eca702aa8c3dd2eadd553","unresolved":false,"context_lines":[{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            argspec \u003d inspect.getargspec("},{"line_number":1655,"context_line":"                task.driver.management.get_supported_boot_devices)"},{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_fabfc2cd","line":1656,"in_reply_to":"fa32b979_906ee0ff","updated":"2015-06-24 10:10:00.000000000","message":"Instead of relying on name I would suggest to get to just check number of args instead - it allows people can put crazy names for args as well ;-)","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"93ba6ba8f40f3bc2a519f55dcd29a959db91d945","unresolved":false,"context_lines":[{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            argspec \u003d inspect.getargspec("},{"line_number":1655,"context_line":"                task.driver.management.get_supported_boot_devices)"},{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_906ee0ff","line":1656,"in_reply_to":"fa32b979_c173597f","updated":"2015-06-16 12:23:56.000000000","message":"If more arguments get added in the future, and they are required, then this logic would have to get changed either way. I think it\u0027s fine for now.","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"990ddbbf2447f47a298627b73522f9fe6ae5ac51","unresolved":false,"context_lines":[{"line_number":1653,"context_line":"                    driver\u003dtask.node.driver, extension\u003d\u0027management\u0027)"},{"line_number":1654,"context_line":"            argspec \u003d inspect.getargspec("},{"line_number":1655,"context_line":"                task.driver.management.get_supported_boot_devices)"},{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_b042b63c","line":1656,"in_reply_to":"fa32b979_fabfc2cd","updated":"2015-06-24 12:53:16.000000000","message":"See response to previous comment.","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0076ca1c079ff946361a6b637e5381b44af4ffe9","unresolved":false,"context_lines":[{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""},{"line_number":1660,"context_line":"                                \"method get_supported_boot_devices() \""},{"line_number":1661,"context_line":"                                \"has been deprecated. \""},{"line_number":1662,"context_line":"                                \"Please update the code to include a task \""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_0f716de0","line":1659,"updated":"2015-06-15 21:40:32.000000000","message":"I think it might be better worded as s/missing/without/\n\nNot sure, but it might be helpful to put task in quotes, eg \u0027task\u0027.","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"93ba6ba8f40f3bc2a519f55dcd29a959db91d945","unresolved":false,"context_lines":[{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""},{"line_number":1660,"context_line":"                                \"method get_supported_boot_devices() \""},{"line_number":1661,"context_line":"                                \"has been deprecated. \""},{"line_number":1662,"context_line":"                                \"Please update the code to include a task \""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_7009dc30","line":1659,"in_reply_to":"fa32b979_0f716de0","updated":"2015-06-16 12:23:56.000000000","message":"How about the following wordingL\n\n\"Drivers without a \u0027task\u0027 argument in method get_supported_boot_devices() is deprecated as of Liberty and will be removed in M.\"","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"990ddbbf2447f47a298627b73522f9fe6ae5ac51","unresolved":false,"context_lines":[{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""},{"line_number":1660,"context_line":"                                \"method get_supported_boot_devices() \""},{"line_number":1661,"context_line":"                                \"has been deprecated. \""},{"line_number":1662,"context_line":"                                \"Please update the code to include a task \""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_9629aa9d","line":1659,"in_reply_to":"fa32b979_5a558e4d","updated":"2015-06-24 12:53:16.000000000","message":"New message, which includes driver name in single quotes :\n\n                LOG.warning(_LW(\"Driver \u0027%s\u0027 is missing a task \"\n                                \"argument to the method \"\n                                \"get_supported_boot_devices() which \"\n                                \"has been deprecated. Please update the code \"\n                                \"to include a task argument.\"),\n                                task.node.driver)","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"2d6fdbb9c2a93904a69eca702aa8c3dd2eadd553","unresolved":false,"context_lines":[{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""},{"line_number":1660,"context_line":"                                \"method get_supported_boot_devices() \""},{"line_number":1661,"context_line":"                                \"has been deprecated. \""},{"line_number":1662,"context_line":"                                \"Please update the code to include a task \""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_5a558e4d","line":1659,"in_reply_to":"fa32b979_7009dc30","updated":"2015-06-24 10:10:00.000000000","message":"Please print driver name as well.","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"8766155ebf6eb6812915f4761f4f729907b18dd2","unresolved":false,"context_lines":[{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""},{"line_number":1660,"context_line":"                                \"method get_supported_boot_devices() \""},{"line_number":1661,"context_line":"                                \"has been deprecated. \""},{"line_number":1662,"context_line":"                                \"Please update the code to include a task \""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_c6c21d85","line":1659,"in_reply_to":"fa32b979_9629aa9d","updated":"2015-06-24 13:20:45.000000000","message":"+1","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"6a8665d8c1e63530dcc142fc3bc1fcff582dc988","unresolved":false,"context_lines":[{"line_number":1656,"context_line":"            if \u0027task\u0027 in argspec.args:"},{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""},{"line_number":1660,"context_line":"                                \"method get_supported_boot_devices() \""},{"line_number":1661,"context_line":"                                \"has been deprecated. \""},{"line_number":1662,"context_line":"                                \"Please update the code to include a task \""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_0dfb3d7a","line":1659,"in_reply_to":"fa32b979_c6c21d85","updated":"2015-06-24 15:28:41.000000000","message":"Done","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0076ca1c079ff946361a6b637e5381b44af4ffe9","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""},{"line_number":1660,"context_line":"                                \"method get_supported_boot_devices() \""},{"line_number":1661,"context_line":"                                \"has been deprecated. \""},{"line_number":1662,"context_line":"                                \"Please update the code to include a task \""},{"line_number":1663,"context_line":"                                \"argument.\"))"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_e169bd26","line":1660,"updated":"2015-06-15 21:40:32.000000000","message":"I wonder if we should do something like \u0027ManagementInterface.get_supported_boot_devices()\u0027 or would that be more confusing.","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"93ba6ba8f40f3bc2a519f55dcd29a959db91d945","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"                return task.driver.management.get_supported_boot_devices(task)"},{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""},{"line_number":1660,"context_line":"                                \"method get_supported_boot_devices() \""},{"line_number":1661,"context_line":"                                \"has been deprecated. \""},{"line_number":1662,"context_line":"                                \"Please update the code to include a task \""},{"line_number":1663,"context_line":"                                \"argument.\"))"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_f035ecf6","line":1660,"in_reply_to":"fa32b979_e169bd26","updated":"2015-06-16 12:23:56.000000000","message":"I think that would be more confusing :)","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0076ca1c079ff946361a6b637e5381b44af4ffe9","unresolved":false,"context_lines":[{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""},{"line_number":1660,"context_line":"                                \"method get_supported_boot_devices() \""},{"line_number":1661,"context_line":"                                \"has been deprecated. \""},{"line_number":1662,"context_line":"                                \"Please update the code to include a task \""},{"line_number":1663,"context_line":"                                \"argument.\"))"},{"line_number":1664,"context_line":"                return task.driver.management.get_supported_boot_devices()"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_612fedf6","line":1661,"updated":"2015-06-15 21:40:32.000000000","message":"maybe we should be more specific here, eg: \u0027is deprecated as of Liberty and will be removed in M\u0027.","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"93ba6ba8f40f3bc2a519f55dcd29a959db91d945","unresolved":false,"context_lines":[{"line_number":1658,"context_line":"            else:"},{"line_number":1659,"context_line":"                LOG.warning(_LW(\"Drivers missing a task argument to the \""},{"line_number":1660,"context_line":"                                \"method get_supported_boot_devices() \""},{"line_number":1661,"context_line":"                                \"has been deprecated. \""},{"line_number":1662,"context_line":"                                \"Please update the code to include a task \""},{"line_number":1663,"context_line":"                                \"argument.\"))"},{"line_number":1664,"context_line":"                return task.driver.management.get_supported_boot_devices()"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_70223cbb","line":1661,"in_reply_to":"fa32b979_612fedf6","updated":"2015-06-16 12:23:56.000000000","message":"See above for full new wording.","commit_id":"11da43fdc218cdfdbc18d5629c4290bf1d761feb"}],"ironic/drivers/base.py":[{"author":{"_account_id":10765,"name":"Andre Aranha","email":"afaranha@lsd.ufcg.edu.br","username":"afaranha"},"change_message_id":"9c98b2e9a86d6cd6ce252d635ba8e8a85ed27c9b","unresolved":false,"context_lines":[{"line_number":638,"context_line":"        \"\"\""},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"    @abc.abstractmethod"},{"line_number":641,"context_line":"    def get_supported_boot_devices(self, task):"},{"line_number":642,"context_line":"        \"\"\"Get a list of the supported boot devices."},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"        :param task: a task from TaskManager."}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_4737d0e3","line":641,"updated":"2015-06-04 19:11:18.000000000","message":"You also need to change in the driver implementations and in the tests.","commit_id":"688d625ee0725c199f77cd8f19c62175506f98a7"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"c789b4e7a9f008844a6a588fb5121669b778df3e","unresolved":false,"context_lines":[{"line_number":638,"context_line":"        \"\"\""},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"    @abc.abstractmethod"},{"line_number":641,"context_line":"    def get_supported_boot_devices(self, task):"},{"line_number":642,"context_line":"        \"\"\"Get a list of the supported boot devices."},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"        :param task: a task from TaskManager."}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_f0c9bead","line":641,"in_reply_to":"3afb71cf_4737d0e3","updated":"2015-06-05 09:58:03.000000000","message":"My marking this as an optional paramater e.g. task\u003dNone, do the unit tests still require changing ?","commit_id":"688d625ee0725c199f77cd8f19c62175506f98a7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e4fb114330dc85f9926dd5e9f28be17b1ee19a0b","unresolved":false,"context_lines":[{"line_number":640,"context_line":"    @property"},{"line_number":641,"context_line":"    def get_supported_boot_devices_task_arg(self):"},{"line_number":642,"context_line":"        argspec \u003d inspect.getargspec(self.get_supported_boot_devices)"},{"line_number":643,"context_line":"        if len(argspec.args) \u003e 1:"},{"line_number":644,"context_line":"            return True"},{"line_number":645,"context_line":"        else:"},{"line_number":646,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_bef32408","line":643,"updated":"2015-06-25 15:50:11.000000000","message":"return len(argsspec.args) \u003e 1","commit_id":"c2c5366c49879930b2693151a07152cff8b5369e"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"1eeff5a18a576099037edb8f054b1bd08b31f20e","unresolved":false,"context_lines":[{"line_number":640,"context_line":"    @property"},{"line_number":641,"context_line":"    def get_supported_boot_devices_task_arg(self):"},{"line_number":642,"context_line":"        argspec \u003d inspect.getargspec(self.get_supported_boot_devices)"},{"line_number":643,"context_line":"        if len(argspec.args) \u003e 1:"},{"line_number":644,"context_line":"            return True"},{"line_number":645,"context_line":"        else:"},{"line_number":646,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_9ee500a5","line":643,"in_reply_to":"fa32b979_bef32408","updated":"2015-07-01 12:42:22.000000000","message":"Done","commit_id":"c2c5366c49879930b2693151a07152cff8b5369e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"fdbfa496c45420024e611efaa6832e591f6cd0cd","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        if len(argspec.args) \u003e 1:"},{"line_number":644,"context_line":"            return True"},{"line_number":645,"context_line":"        else:"},{"line_number":646,"context_line":"            return False"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    @abc.abstractmethod"},{"line_number":649,"context_line":"    def get_supported_boot_devices(self, task):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_1d365de7","line":646,"updated":"2015-08-11 11:06:00.000000000","message":"perhaps just a note saying that xthis code should be removed in the next cycle (Mitaka) since not accepting the task parameter has been deprecated would be good","commit_id":"c2c5366c49879930b2693151a07152cff8b5369e"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"3adea4c76a021968df6c12837a5eae20eba61c75","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        if len(argspec.args) \u003e 1:"},{"line_number":644,"context_line":"            return True"},{"line_number":645,"context_line":"        else:"},{"line_number":646,"context_line":"            return False"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    @abc.abstractmethod"},{"line_number":649,"context_line":"    def get_supported_boot_devices(self, task):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_aef6075b","line":646,"in_reply_to":"1a4dcd0f_1d365de7","updated":"2015-08-11 15:25:55.000000000","message":"Done","commit_id":"c2c5366c49879930b2693151a07152cff8b5369e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"3819d0b0423d728117be9c8543874ab840afa32b","unresolved":false,"context_lines":[{"line_number":640,"context_line":"    @property"},{"line_number":641,"context_line":"    def get_supported_boot_devices_task_arg(self):"},{"line_number":642,"context_line":"        # NOTE(MattMan): remove this method in next cycle as task parameter"},{"line_number":643,"context_line":"        #                will be mandatory then."},{"line_number":644,"context_line":"        argspec \u003d inspect.getargspec(self.get_supported_boot_devices)"},{"line_number":645,"context_line":"        return len(argspec.args) \u003e 1"},{"line_number":646,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_1795c785","line":643,"updated":"2015-08-11 15:27:52.000000000","message":"next cycle (Mitaka)","commit_id":"666aac22e8017d3f2c1e3fab61dd1c59e0b74e8c"},{"author":{"_account_id":12547,"name":"Matt Keenan","email":"matt.keenan@gmail.com","username":"MattMan"},"change_message_id":"bba80d7769d7fa2029f839136b10e836ad2f83c5","unresolved":false,"context_lines":[{"line_number":640,"context_line":"    @property"},{"line_number":641,"context_line":"    def get_supported_boot_devices_task_arg(self):"},{"line_number":642,"context_line":"        # NOTE(MattMan): remove this method in next cycle as task parameter"},{"line_number":643,"context_line":"        #                will be mandatory then."},{"line_number":644,"context_line":"        argspec \u003d inspect.getargspec(self.get_supported_boot_devices)"},{"line_number":645,"context_line":"        return len(argspec.args) \u003e 1"},{"line_number":646,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_2812e257","line":643,"in_reply_to":"1a4dcd0f_1795c785","updated":"2015-08-12 13:54:18.000000000","message":"Done","commit_id":"666aac22e8017d3f2c1e3fab61dd1c59e0b74e8c"}]}
