)]}'
{"doc/source/deploy/drivers.rst":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d7e67b9e02497b4f45c42d70666e20425aa16178","unresolved":false,"context_lines":[{"line_number":91,"context_line":"iRMC with PXE deploy"},{"line_number":92,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"- Add ``pxe_irmc`` to the list of ``enabled_drivers in`` ``/etc/ironic/ironic.conf``"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a961159_b3360850","line":94,"updated":"2015-01-19 23:15:50.000000000","message":"I didn\u0027t go through the spec in detail, but I see this as a dependency: This feature requires at least BX S4 or RX S8 generation of FUJITSU PRIMERGY servers.\n\nAre there other things worth noting?","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"8349529b456c813b850bd69677f31b3bb573e4f5","unresolved":false,"context_lines":[{"line_number":91,"context_line":"iRMC with PXE deploy"},{"line_number":92,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"- Add ``pxe_irmc`` to the list of ``enabled_drivers in`` ``/etc/ironic/ironic.conf``"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a961159_36f4bc87","line":94,"in_reply_to":"3a961159_b3360850","updated":"2015-01-20 09:51:52.000000000","message":"I\u0027ll add the explanation about usage and supported servers.","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0b9f45fff895a7aa801b07b872ed8fdf38602f93","unresolved":false,"context_lines":[{"line_number":114,"context_line":"- ``irmc_username``: username for iRMC with administrator privileges"},{"line_number":115,"context_line":"- ``irmc_password``: password for irmc_username"},{"line_number":116,"context_line":"- ``irmc_port``: port number of iRMC (optional)"},{"line_number":117,"context_line":"- ``irmc_auth_method``: authentication method for iRMC (optional)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Supported Platforms"},{"line_number":120,"context_line":"^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":15,"id":"fa81d914_8a12cb56","line":117,"updated":"2015-01-27 19:31:47.000000000","message":"These two are optional. What happens if they aren\u0027t specified?","commit_id":"07e479837a7c31216015f24b525ae59ee11037fc"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"dd2ac3e90f9c9ae0f6e67409845d2d444b9c1ef1","unresolved":false,"context_lines":[{"line_number":114,"context_line":"- ``irmc_username``: username for iRMC with administrator privileges"},{"line_number":115,"context_line":"- ``irmc_password``: password for irmc_username"},{"line_number":116,"context_line":"- ``irmc_port``: port number of iRMC (optional)"},{"line_number":117,"context_line":"- ``irmc_auth_method``: authentication method for iRMC (optional)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Supported Platforms"},{"line_number":120,"context_line":"^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":15,"id":"fa81d914_bb1fd808","line":117,"in_reply_to":"fa81d914_8a12cb56","updated":"2015-01-28 01:18:32.000000000","message":"The default value in conf file is used.\nI\u0027ll add that.","commit_id":"07e479837a7c31216015f24b525ae59ee11037fc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"952fe53408bc40f70500814792bcb7c054076c9b","unresolved":false,"context_lines":[{"line_number":114,"context_line":"- ``irmc_address``: hostname or IP of iRMC"},{"line_number":115,"context_line":"- ``irmc_username``: username for iRMC with administrator privileges"},{"line_number":116,"context_line":"- ``irmc_password``: password for irmc_username"},{"line_number":117,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":118,"context_line":"- ``irmc_port``: port number of iRMC (optional, either 80 or 443. defalut 443)"},{"line_number":119,"context_line":"- ``irmc_auth_method``: authentication method for iRMC (optional, either"},{"line_number":120,"context_line":"  \u0027basic\u0027 or \u0027digest\u0027. default is \u0027basic\u0027)"}],"source_content_type":"text/x-rst","patch_set":17,"id":"fa81d914_c1d8fd55","line":117,"updated":"2015-01-28 15:13:45.000000000","message":"OUCH.","commit_id":"f1d21288749c186f0bc0e9471b16cca21ad65d4c"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"2180d97ea1bfd95cfff6fa8c5a1acdc6e57d8a9b","unresolved":false,"context_lines":[{"line_number":114,"context_line":"- ``irmc_address``: hostname or IP of iRMC"},{"line_number":115,"context_line":"- ``irmc_username``: username for iRMC with administrator privileges"},{"line_number":116,"context_line":"- ``irmc_password``: password for irmc_username"},{"line_number":117,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":118,"context_line":"- ``irmc_port``: port number of iRMC (optional, either 80 or 443. defalut 443)"},{"line_number":119,"context_line":"- ``irmc_auth_method``: authentication method for iRMC (optional, either"},{"line_number":120,"context_line":"  \u0027basic\u0027 or \u0027digest\u0027. default is \u0027basic\u0027)"}],"source_content_type":"text/x-rst","patch_set":17,"id":"fa81d914_217c7920","line":117,"updated":"2015-01-28 15:03:43.000000000","message":"merge conflict left inline.","commit_id":"f1d21288749c186f0bc0e9471b16cca21ad65d4c"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"2180d97ea1bfd95cfff6fa8c5a1acdc6e57d8a9b","unresolved":false,"context_lines":[{"line_number":119,"context_line":"- ``irmc_auth_method``: authentication method for iRMC (optional, either"},{"line_number":120,"context_line":"  \u0027basic\u0027 or \u0027digest\u0027. default is \u0027basic\u0027)"},{"line_number":121,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":122,"context_line":"- ``irmc_port``: port number of iRMC (optional)"},{"line_number":123,"context_line":"- ``irmc_auth_method``: authentication method for iRMC (optional)"},{"line_number":124,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 07e4798... Add iRMC Driver and its iRMC Power module"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"fa81d914_41796d2e","line":122,"updated":"2015-01-28 15:03:43.000000000","message":"it looks like this section should be removed?","commit_id":"f1d21288749c186f0bc0e9471b16cca21ad65d4c"}],"etc/ironic/ironic.conf.sample":[{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"40841f03b31dd7d1063261f84e0105eba62e0b4b","unresolved":false,"context_lines":[{"line_number":1242,"context_line":"#swift_max_retries\u003d2"},{"line_number":1243,"context_line":""},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"[irmc]"},{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"#"},{"line_number":1248,"context_line":"# Options defined in ironic.drivers.modules.irmc.common"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"3a961159_71c75998","line":1245,"updated":"2015-01-09 04:31:07.000000000","message":"It should be generated by tools/config/generate_sample.sh.","commit_id":"88ebc9f70173f16cbfb1c0d40239ada5ee4b9646"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d7e67b9e02497b4f45c42d70666e20425aa16178","unresolved":false,"context_lines":[{"line_number":899,"context_line":"#port\u003d443"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"# Authentication method to be used for iRMC operations (string"},{"line_number":902,"context_line":"# value)"},{"line_number":903,"context_line":"#auth_method\u003dbasic"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"# Timeout (in seconds) for iRMC operations (integer value)"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"3a961159_d321d4fe","line":902,"updated":"2015-01-19 23:15:50.000000000","message":"what are the possible choices/strings? \u0027basic\u0027 and what else?","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"8349529b456c813b850bd69677f31b3bb573e4f5","unresolved":false,"context_lines":[{"line_number":899,"context_line":"#port\u003d443"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"# Authentication method to be used for iRMC operations (string"},{"line_number":902,"context_line":"# value)"},{"line_number":903,"context_line":"#auth_method\u003dbasic"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"# Timeout (in seconds) for iRMC operations (integer value)"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"3a961159_76d724ef","line":902,"in_reply_to":"3a961159_d321d4fe","updated":"2015-01-20 09:51:52.000000000","message":"I\u0027ll add the possible chooses, basic and digest","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"}],"ironic/common/exception.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"516580d9749583936cf1439eab94278fb323af57","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    message \u003d _(\u0027iRMC %(operation)s failed. Reason: %(error)s\u0027)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"class IRMCClientError(IronicException):"},{"line_number":501,"context_line":"    message \u003d _(\u0027iRMC SCCI %(operation)s failed. Reason: %(error)s\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_e01c4ac5","line":500,"updated":"2015-01-09 16:09:08.000000000","message":"As mentioned in the comment on the other file - isn\u0027t this supposed to be in scciclient package.","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"5ac1d87f614b578df330f4a7986eadff9fcc09a1","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    message \u003d _(\u0027iRMC %(operation)s failed. Reason: %(error)s\u0027)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"class IRMCClientError(IronicException):"},{"line_number":501,"context_line":"    message \u003d _(\u0027iRMC SCCI %(operation)s failed. Reason: %(error)s\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_582f95a7","line":500,"in_reply_to":"3a961159_e01c4ac5","updated":"2015-01-13 02:51:17.000000000","message":"I\u0027ll fix that.","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"}],"ironic/drivers/fake.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d7e67b9e02497b4f45c42d70666e20425aa16178","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        self.console \u003d ipmitool.IPMIShellinaboxConsole()"},{"line_number":183,"context_line":"        self.deploy \u003d fake.FakeDeploy()"},{"line_number":184,"context_line":"        self.vendor \u003d ipmitool.VendorPassthru()"},{"line_number":185,"context_line":"        self.management \u003d ipmitool.IPMIManagement()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_33a3f844","line":185,"updated":"2015-01-19 23:15:50.000000000","message":"I\u0027d prefer if this driver just used interfaces from Fake and IRMC, similar to the other drivers above. Why did you add ipmitool interfaces?","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"8349529b456c813b850bd69677f31b3bb573e4f5","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        self.console \u003d ipmitool.IPMIShellinaboxConsole()"},{"line_number":183,"context_line":"        self.deploy \u003d fake.FakeDeploy()"},{"line_number":184,"context_line":"        self.vendor \u003d ipmitool.VendorPassthru()"},{"line_number":185,"context_line":"        self.management \u003d ipmitool.IPMIManagement()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_b627cc1d","line":185,"in_reply_to":"3a961159_33a3f844","updated":"2015-01-20 09:51:52.000000000","message":"I\u0027ll remove the ipmitool modules.","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"efb94235c9dcf3a65da35610de0359b702424db2","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                    reason\u003d_(\"Unable to import python-scciclient library\"))"},{"line_number":185,"context_line":"        self.power \u003d irmc_power.IRMCPower()"},{"line_number":186,"context_line":"        self.deploy \u003d fake.FakeDeploy()"},{"line_number":187,"context_line":"        self.power \u003d irmc_power.IRMCPower()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_4048b25b","line":187,"updated":"2015-01-21 12:34:18.000000000","message":"self.power duplicated.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                    reason\u003d_(\"Unable to import python-scciclient library\"))"},{"line_number":185,"context_line":"        self.power \u003d irmc_power.IRMCPower()"},{"line_number":186,"context_line":"        self.deploy \u003d fake.FakeDeploy()"},{"line_number":187,"context_line":"        self.power \u003d irmc_power.IRMCPower()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_e02c154d","line":187,"in_reply_to":"1a930d6b_4048b25b","updated":"2015-01-22 08:48:44.000000000","message":"I\u0027ll fix that.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"}],"ironic/drivers/irmc.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"516580d9749583936cf1439eab94278fb323af57","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from ironic.drivers.modules import pxe"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class PXEiRMCDriver(base.BaseDriver):"},{"line_number":24,"context_line":"    \"\"\"iRMC driver using PXE for deploy.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_40143e9f","line":23,"updated":"2015-01-09 16:09:08.000000000","message":"Drivers using pxe as deploy are generally added to pxe.py.  I think it makes sense to add this in ironic/drivers/pxe.py.","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"5ac1d87f614b578df330f4a7986eadff9fcc09a1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from ironic.drivers.modules import pxe"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class PXEiRMCDriver(base.BaseDriver):"},{"line_number":24,"context_line":"    \"\"\"iRMC driver using PXE for deploy.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_38280997","line":23,"in_reply_to":"3a961159_40143e9f","updated":"2015-01-13 02:51:17.000000000","message":"I\u0027ll fix that.\nIt seems I just referenced DRAC implementation.","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"}],"ironic/drivers/modules/irmc/common.py":[{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"5ac1d87f614b578df330f4a7986eadff9fcc09a1","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    to do operations on the iRMC."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    :param node: an ironic node object."},{"line_number":113,"context_line":"    :returns: an IloClient object."},{"line_number":114,"context_line":"    :raises: InvalidParameterValue on invalid inputs."},{"line_number":115,"context_line":"    :raises: MissingParameterValue if some mandatory information"},{"line_number":116,"context_line":"        is missing on the node"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_13bc0e06","line":113,"updated":"2015-01-13 02:51:17.000000000","message":"I\u0027ll fix that.","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d7e67b9e02497b4f45c42d70666e20425aa16178","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ironic.common.i18n import _"},{"line_number":23,"context_line":"from ironic.openstack.common import log as logging"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"scci \u003d importutils.try_import(\u0027scciclient.irmc.scci\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"opts \u003d ["},{"line_number":28,"context_line":"    cfg.IntOpt(\u0027port\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_b3452871","line":25,"updated":"2015-01-19 23:15:50.000000000","message":"I didn\u0027t see any mention of this library in the bp spec.","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d7e67b9e02497b4f45c42d70666e20425aa16178","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.IntOpt(\u0027client_timeout\u0027,"},{"line_number":35,"context_line":"               default\u003d60,"},{"line_number":36,"context_line":"               help\u003d\u0027Timeout (in seconds) for iRMC operations\u0027),"},{"line_number":37,"context_line":"]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF \u003d cfg.CONF"},{"line_number":40,"context_line":"CONF.register_opts(opts, group\u003d\u0027irmc\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_b33c48e3","line":37,"updated":"2015-01-19 23:15:50.000000000","message":"all the help strings above should end with periods. (See code in other files if you want an example).","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d7e67b9e02497b4f45c42d70666e20425aa16178","unresolved":false,"context_lines":[{"line_number":50,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":51,"context_line":"    \u0027port\u0027: _(\"port to be used for irmc operations. Optional.\"),"},{"line_number":52,"context_line":"    \u0027auth_method\u0027: _(\"authentication method for iRMC operations. Optional.\"),"},{"line_number":53,"context_line":"    \u0027client_timeout\u0027: _(\"timeout (in seconds) for iRMC operations. Optional.\")"},{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"COMMON_PROPERTIES \u003d REQUIRED_PROPERTIES.copy()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_e558c733","line":53,"updated":"2015-01-19 23:15:50.000000000","message":"what are the default values for these, if they are all optional?","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"8349529b456c813b850bd69677f31b3bb573e4f5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":51,"context_line":"    \u0027port\u0027: _(\"port to be used for irmc operations. Optional.\"),"},{"line_number":52,"context_line":"    \u0027auth_method\u0027: _(\"authentication method for iRMC operations. Optional.\"),"},{"line_number":53,"context_line":"    \u0027client_timeout\u0027: _(\"timeout (in seconds) for iRMC operations. Optional.\")"},{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"COMMON_PROPERTIES \u003d REQUIRED_PROPERTIES.copy()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_d6c8d823","line":53,"in_reply_to":"3a961159_e558c733","updated":"2015-01-20 09:51:52.000000000","message":"I\u0027ll fix that.","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d7e67b9e02497b4f45c42d70666e20425aa16178","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def parse_driver_info(node):"},{"line_number":61,"context_line":"    \"\"\"Gets the driver specific Node driver info."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    This method validates whether the \u0027driver_info\u0027 property of the"},{"line_number":64,"context_line":"    supplied node contains the required information for this driver."}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_8597039c","line":61,"updated":"2015-01-19 23:15:50.000000000","message":"there\u0027s something odd about this sentence. I don\u0027t think you need \u0027driver\u0027 here twice...","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"8349529b456c813b850bd69677f31b3bb573e4f5","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def parse_driver_info(node):"},{"line_number":61,"context_line":"    \"\"\"Gets the driver specific Node driver info."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    This method validates whether the \u0027driver_info\u0027 property of the"},{"line_number":64,"context_line":"    supplied node contains the required information for this driver."}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_1928d332","line":61,"in_reply_to":"3a961159_8597039c","updated":"2015-01-20 09:51:52.000000000","message":"I\u0027ll fix that.","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d7e67b9e02497b4f45c42d70666e20425aa16178","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    :param node: an ironic node object."},{"line_number":67,"context_line":"    :returns: a dict containing information from driver_info"},{"line_number":68,"context_line":"        and default values."},{"line_number":69,"context_line":"    :raises: InvalidParameterValue on invalid inputs."},{"line_number":70,"context_line":"    :raises: MissingParameterValue if some mandatory information"},{"line_number":71,"context_line":"        is missing on the node"},{"line_number":72,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_853383c3","line":69,"updated":"2015-01-19 23:15:50.000000000","message":"I\u0027d prefer if you used a different description here. I don\u0027t think \u0027invalid inputs\u0027 is that helpful, what \u0027inputs\u0027 are we talking about? (We must have a better description in our code base...)","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"8349529b456c813b850bd69677f31b3bb573e4f5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    :param node: an ironic node object."},{"line_number":67,"context_line":"    :returns: a dict containing information from driver_info"},{"line_number":68,"context_line":"        and default values."},{"line_number":69,"context_line":"    :raises: InvalidParameterValue on invalid inputs."},{"line_number":70,"context_line":"    :raises: MissingParameterValue if some mandatory information"},{"line_number":71,"context_line":"        is missing on the node"},{"line_number":72,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_594dfbc4","line":69,"in_reply_to":"3a961159_853383c3","updated":"2015-01-20 09:51:52.000000000","message":"I\u0027ll that.","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d7e67b9e02497b4f45c42d70666e20425aa16178","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    if error_msgs:"},{"line_number":99,"context_line":"        msg \u003d (_(\"The following parameters were mising while parsing \""},{"line_number":100,"context_line":"                 \"driver_info:\\n%s\") % \"\\n\".join(error_msgs))"},{"line_number":101,"context_line":"        raise exception.MissingParameterValue(msg)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    return d_info"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_c50bcbd3","line":101,"updated":"2015-01-19 23:15:50.000000000","message":"This is the second patch today where I see a similar pattern being used. Same typo too (\"mising\"). If there are two or more missing parameters, the error string is going to be ugly. Please take a look at how other drivers are handling this.","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"8349529b456c813b850bd69677f31b3bb573e4f5","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    if error_msgs:"},{"line_number":99,"context_line":"        msg \u003d (_(\"The following parameters were mising while parsing \""},{"line_number":100,"context_line":"                 \"driver_info:\\n%s\") % \"\\n\".join(error_msgs))"},{"line_number":101,"context_line":"        raise exception.MissingParameterValue(msg)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    return d_info"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_7ffff7ab","line":101,"in_reply_to":"3a961159_c50bcbd3","updated":"2015-01-20 09:51:52.000000000","message":"I\u0027ll fix that by referring ipmitool.py","commit_id":"f0d5a7e7b78d35b63f6edfec907e218c81566f43"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"efb94235c9dcf3a65da35610de0359b702424db2","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    cfg.StrOpt(\u0027auth_method\u0027,"},{"line_number":32,"context_line":"               default\u003d\u0027basic\u0027,"},{"line_number":33,"context_line":"               help\u003d\u0027Authentication method to be used for iRMC operations, \u0027 +"},{"line_number":34,"context_line":"               \"either \u0027basic\u0027 or \u0027digest\u0027\"),"},{"line_number":35,"context_line":"    cfg.IntOpt(\u0027client_timeout\u0027,"},{"line_number":36,"context_line":"               default\u003d60,"},{"line_number":37,"context_line":"               help\u003d\u0027Timeout (in seconds) for iRMC operations\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_72f3bc73","line":34,"updated":"2015-01-21 12:34:18.000000000","message":"Please change to \u0027either \"basic\" or \"digest\"\u0027 for consistency with others strings, and \"+\" can be removed.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    cfg.StrOpt(\u0027auth_method\u0027,"},{"line_number":32,"context_line":"               default\u003d\u0027basic\u0027,"},{"line_number":33,"context_line":"               help\u003d\u0027Authentication method to be used for iRMC operations, \u0027 +"},{"line_number":34,"context_line":"               \"either \u0027basic\u0027 or \u0027digest\u0027\"),"},{"line_number":35,"context_line":"    cfg.IntOpt(\u0027client_timeout\u0027,"},{"line_number":36,"context_line":"               default\u003d60,"},{"line_number":37,"context_line":"               help\u003d\u0027Timeout (in seconds) for iRMC operations\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_404a4981","line":34,"in_reply_to":"1a930d6b_72f3bc73","updated":"2015-01-22 08:48:44.000000000","message":"I\u0027ll fix that.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"837a71f42c2c7911b0d84aa5f9cc535ed3f130af","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"REQUIRED_PROPERTIES \u003d {"},{"line_number":46,"context_line":"    \u0027irmc_address\u0027: _(\"IP address or hostname of the iRMC. Required.\"),"},{"line_number":47,"context_line":"    \u0027irmc_username\u0027: _(\"username for the iRMC with administrator privileges. \""},{"line_number":48,"context_line":"                       \"Required.\"),"},{"line_number":49,"context_line":"    \u0027irmc_password\u0027: _(\"password for irmc_username. Required.\")"},{"line_number":50,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_c96da606","line":47,"updated":"2015-01-21 13:50:31.000000000","message":"Should these descriptions be capitalized?","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"REQUIRED_PROPERTIES \u003d {"},{"line_number":46,"context_line":"    \u0027irmc_address\u0027: _(\"IP address or hostname of the iRMC. Required.\"),"},{"line_number":47,"context_line":"    \u0027irmc_username\u0027: _(\"username for the iRMC with administrator privileges. \""},{"line_number":48,"context_line":"                       \"Required.\"),"},{"line_number":49,"context_line":"    \u0027irmc_password\u0027: _(\"password for irmc_username. Required.\")"},{"line_number":50,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_a0584d57","line":47,"in_reply_to":"1a930d6b_c96da606","updated":"2015-01-22 08:48:44.000000000","message":"Yes, I\u0027ll fix that.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8065385bbe2dc6c8360e7ff1cf196f10e6950a13","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                     \"either \u0027basic\u0027 or \u0027digest\u0027. \""},{"line_number":56,"context_line":"                     \"Optional. The default value is \u0027digest\u0027\"),"},{"line_number":57,"context_line":"    \u0027client_timeout\u0027: _(\"timeout (in seconds) for iRMC operations. \""},{"line_number":58,"context_line":"                        \"Optional. The default value is 60.\")"},{"line_number":59,"context_line":"}"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"COMMON_PROPERTIES \u003d REQUIRED_PROPERTIES.copy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_baab3688","line":58,"updated":"2015-01-21 14:41:27.000000000","message":"shouldn\u0027t those have the irmc_ namespace as well? (See comment below on line 88)","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                     \"either \u0027basic\u0027 or \u0027digest\u0027. \""},{"line_number":56,"context_line":"                     \"Optional. The default value is \u0027digest\u0027\"),"},{"line_number":57,"context_line":"    \u0027client_timeout\u0027: _(\"timeout (in seconds) for iRMC operations. \""},{"line_number":58,"context_line":"                        \"Optional. The default value is 60.\")"},{"line_number":59,"context_line":"}"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"COMMON_PROPERTIES \u003d REQUIRED_PROPERTIES.copy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_430fb330","line":58,"in_reply_to":"1a930d6b_baab3688","updated":"2015-01-22 08:48:44.000000000","message":"Those parameter are defined in [irmc] section. so prepending irmc_ causes redundant.\nThis is reflection of the comment made in the spec review.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"837a71f42c2c7911b0d84aa5f9cc535ed3f130af","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    :raises: MissingParameterValue if some mandatory key is missing"},{"line_number":77,"context_line":"        in the \u0027driver_info\u0027 property."},{"line_number":78,"context_line":"    \"\"\""},{"line_number":79,"context_line":"    info \u003d node.driver_info or {}"},{"line_number":80,"context_line":"    missing_info \u003d [key for key in REQUIRED_PROPERTIES if not info.get(key)]"},{"line_number":81,"context_line":"    if missing_info:"},{"line_number":82,"context_line":"        raise exception.MissingParameterValue(_("}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_69ee72ee","line":79,"updated":"2015-01-21 13:50:31.000000000","message":"This check seems unnecessary, driver_info is always a dict, it cannot be set to None.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    :raises: MissingParameterValue if some mandatory key is missing"},{"line_number":77,"context_line":"        in the \u0027driver_info\u0027 property."},{"line_number":78,"context_line":"    \"\"\""},{"line_number":79,"context_line":"    info \u003d node.driver_info or {}"},{"line_number":80,"context_line":"    missing_info \u003d [key for key in REQUIRED_PROPERTIES if not info.get(key)]"},{"line_number":81,"context_line":"    if missing_info:"},{"line_number":82,"context_line":"        raise exception.MissingParameterValue(_("}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_c31ac36d","line":79,"in_reply_to":"1a930d6b_69ee72ee","updated":"2015-01-22 08:48:44.000000000","message":"I\u0027ll fix that.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8065385bbe2dc6c8360e7ff1cf196f10e6950a13","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    req \u003d {key: value for key, value in info.iteritems()"},{"line_number":87,"context_line":"           if key in REQUIRED_PROPERTIES}"},{"line_number":88,"context_line":"    opt \u003d {\u0027irmc_\u0027 + param: info.get(\u0027irmc_\u0027 + param, CONF.irmc.get(param))"},{"line_number":89,"context_line":"           for param in OPTIONAL_PROPERTIES}"},{"line_number":90,"context_line":"    d_info \u003d dict(req.items() + opt.items())"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_3adbc61c","line":88,"updated":"2015-01-21 14:41:27.000000000","message":"The OPTIONAL_PROPERTIES doesn\u0027t have the \"irmc_\" namespace on them, and it\u0027s returned to the user doing get_properties() without the namespace (see COMMON_PROPERTIES)\n\nBut here it\u0027s expecting it to be \"irmc_\" + param. Looks like we want to include the \"irmc_\" namespace to the OPTIONAL_PROPERTIES","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    req \u003d {key: value for key, value in info.iteritems()"},{"line_number":87,"context_line":"           if key in REQUIRED_PROPERTIES}"},{"line_number":88,"context_line":"    opt \u003d {\u0027irmc_\u0027 + param: info.get(\u0027irmc_\u0027 + param, CONF.irmc.get(param))"},{"line_number":89,"context_line":"           for param in OPTIONAL_PROPERTIES}"},{"line_number":90,"context_line":"    d_info \u003d dict(req.items() + opt.items())"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_63682fbb","line":88,"in_reply_to":"1a930d6b_3adbc61c","updated":"2015-01-22 08:48:44.000000000","message":"please look at the answer above.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"837a71f42c2c7911b0d84aa5f9cc535ed3f130af","unresolved":false,"context_lines":[{"line_number":87,"context_line":"           if key in REQUIRED_PROPERTIES}"},{"line_number":88,"context_line":"    opt \u003d {\u0027irmc_\u0027 + param: info.get(\u0027irmc_\u0027 + param, CONF.irmc.get(param))"},{"line_number":89,"context_line":"           for param in OPTIONAL_PROPERTIES}"},{"line_number":90,"context_line":"    d_info \u003d dict(req.items() + opt.items())"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    error_msgs \u003d []"},{"line_number":93,"context_line":"    if (d_info[\u0027irmc_auth_method\u0027].lower() not in (\u0027basic\u0027, \u0027digest\u0027)):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_09896eca","line":90,"updated":"2015-01-21 13:50:31.000000000","message":"This won\u0027t work in python 3 as items() returns view object and these objects cannot be added. You can do e.g. :\n\n  d_info \u003d req.copy().update(opt)","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8065385bbe2dc6c8360e7ff1cf196f10e6950a13","unresolved":false,"context_lines":[{"line_number":87,"context_line":"           if key in REQUIRED_PROPERTIES}"},{"line_number":88,"context_line":"    opt \u003d {\u0027irmc_\u0027 + param: info.get(\u0027irmc_\u0027 + param, CONF.irmc.get(param))"},{"line_number":89,"context_line":"           for param in OPTIONAL_PROPERTIES}"},{"line_number":90,"context_line":"    d_info \u003d dict(req.items() + opt.items())"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    error_msgs \u003d []"},{"line_number":93,"context_line":"    if (d_info[\u0027irmc_auth_method\u0027].lower() not in (\u0027basic\u0027, \u0027digest\u0027)):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_7ad0ee53","line":90,"in_reply_to":"1a930d6b_09896eca","updated":"2015-01-21 14:41:27.000000000","message":"+1\n\nan alternative:\n\nd_info \u003d dict(list(req.items()) + list(opt.items()))","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"           if key in REQUIRED_PROPERTIES}"},{"line_number":88,"context_line":"    opt \u003d {\u0027irmc_\u0027 + param: info.get(\u0027irmc_\u0027 + param, CONF.irmc.get(param))"},{"line_number":89,"context_line":"           for param in OPTIONAL_PROPERTIES}"},{"line_number":90,"context_line":"    d_info \u003d dict(req.items() + opt.items())"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    error_msgs \u003d []"},{"line_number":93,"context_line":"    if (d_info[\u0027irmc_auth_method\u0027].lower() not in (\u0027basic\u0027, \u0027digest\u0027)):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_e39b3fc7","line":90,"in_reply_to":"1a930d6b_7ad0ee53","updated":"2015-01-22 08:48:44.000000000","message":"I\u0027ll fix that.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"efb94235c9dcf3a65da35610de0359b702424db2","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    if (d_info[\u0027irmc_auth_method\u0027].lower() not in (\u0027basic\u0027, \u0027digest\u0027)):"},{"line_number":94,"context_line":"        error_msgs.append("},{"line_number":95,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_auth_method\u0027)"},{"line_number":96,"context_line":"    if d_info[\u0027irmc_port\u0027] not in (80, 443):"},{"line_number":97,"context_line":"        error_msgs.append("},{"line_number":98,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_port\u0027)"},{"line_number":99,"context_line":"    if not isinstance(d_info[\u0027irmc_client_timeout\u0027], int):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_f2ac0c38","line":96,"updated":"2015-01-21 12:34:18.000000000","message":"I think you should try conversion to int() first because user can set this parameter as string in driver_info.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"f333c046ab8c1a6e3bb5afe9ed2405ad32b3c362","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    if (d_info[\u0027irmc_auth_method\u0027].lower() not in (\u0027basic\u0027, \u0027digest\u0027)):"},{"line_number":94,"context_line":"        error_msgs.append("},{"line_number":95,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_auth_method\u0027)"},{"line_number":96,"context_line":"    if d_info[\u0027irmc_port\u0027] not in (80, 443):"},{"line_number":97,"context_line":"        error_msgs.append("},{"line_number":98,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_port\u0027)"},{"line_number":99,"context_line":"    if not isinstance(d_info[\u0027irmc_client_timeout\u0027], int):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_499c2dc1","line":96,"in_reply_to":"1a930d6b_86b524f0","updated":"2015-01-22 12:10:32.000000000","message":"I figured out that the type check is already implemented by this code.\n\nif d_info[\u0027irmc_port\u0027] not in (80, 443):\n\nbecause this condition become True is d_info[\u0027irmc_port\u0027] is str.\n\nAnd the test code is already exited in test_comon.py\n \n    def test_parse_driver_info_invalid_timeout(self):\n        self.node.driver_info[\u0027irmc_client_timeout\u0027] \u003d \u0027qwe\u0027\n        self.assertRaises(exception.InvalidParameterValue,\n                          irmc_common.parse_driver_info, self.node)","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"b8315d891319bbbc4eb684f063751af495c86c0f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    if (d_info[\u0027irmc_auth_method\u0027].lower() not in (\u0027basic\u0027, \u0027digest\u0027)):"},{"line_number":94,"context_line":"        error_msgs.append("},{"line_number":95,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_auth_method\u0027)"},{"line_number":96,"context_line":"    if d_info[\u0027irmc_port\u0027] not in (80, 443):"},{"line_number":97,"context_line":"        error_msgs.append("},{"line_number":98,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_port\u0027)"},{"line_number":99,"context_line":"    if not isinstance(d_info[\u0027irmc_client_timeout\u0027], int):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_86b524f0","line":96,"in_reply_to":"1a930d6b_a3b93730","updated":"2015-01-22 11:59:52.000000000","message":"I think checking type is necessary, but we should return and error because the parameter type is defined as int in the config file. We shouldn\u0027t convert automatically.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    if (d_info[\u0027irmc_auth_method\u0027].lower() not in (\u0027basic\u0027, \u0027digest\u0027)):"},{"line_number":94,"context_line":"        error_msgs.append("},{"line_number":95,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_auth_method\u0027)"},{"line_number":96,"context_line":"    if d_info[\u0027irmc_port\u0027] not in (80, 443):"},{"line_number":97,"context_line":"        error_msgs.append("},{"line_number":98,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_port\u0027)"},{"line_number":99,"context_line":"    if not isinstance(d_info[\u0027irmc_client_timeout\u0027], int):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_a3b93730","line":96,"in_reply_to":"1a930d6b_f2ac0c38","updated":"2015-01-22 08:48:44.000000000","message":"I\u0027ll fix that.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"efb94235c9dcf3a65da35610de0359b702424db2","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    if d_info[\u0027irmc_port\u0027] not in (80, 443):"},{"line_number":97,"context_line":"        error_msgs.append("},{"line_number":98,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_port\u0027)"},{"line_number":99,"context_line":"    if not isinstance(d_info[\u0027irmc_client_timeout\u0027], int):"},{"line_number":100,"context_line":"        error_msgs.append("},{"line_number":101,"context_line":"            _(\"\u0027%s\u0027 is not integer type.\") % \u0027irmc_client_timeout\u0027)"},{"line_number":102,"context_line":"    if error_msgs:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_12aa7819","line":99,"updated":"2015-01-21 12:34:18.000000000","message":"Ditto l96.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    if d_info[\u0027irmc_port\u0027] not in (80, 443):"},{"line_number":97,"context_line":"        error_msgs.append("},{"line_number":98,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_port\u0027)"},{"line_number":99,"context_line":"    if not isinstance(d_info[\u0027irmc_client_timeout\u0027], int):"},{"line_number":100,"context_line":"        error_msgs.append("},{"line_number":101,"context_line":"            _(\"\u0027%s\u0027 is not integer type.\") % \u0027irmc_client_timeout\u0027)"},{"line_number":102,"context_line":"    if error_msgs:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_23cb87a6","line":99,"in_reply_to":"1a930d6b_12aa7819","updated":"2015-01-22 08:48:44.000000000","message":"I\u0027ll fix that.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"b8315d891319bbbc4eb684f063751af495c86c0f","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    if d_info[\u0027irmc_port\u0027] not in (80, 443):"},{"line_number":97,"context_line":"        error_msgs.append("},{"line_number":98,"context_line":"            _(\"\u0027%s\u0027 has unsupported value.\") % \u0027irmc_port\u0027)"},{"line_number":99,"context_line":"    if not isinstance(d_info[\u0027irmc_client_timeout\u0027], int):"},{"line_number":100,"context_line":"        error_msgs.append("},{"line_number":101,"context_line":"            _(\"\u0027%s\u0027 is not integer type.\") % \u0027irmc_client_timeout\u0027)"},{"line_number":102,"context_line":"    if error_msgs:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_067854f1","line":99,"in_reply_to":"1a930d6b_23cb87a6","updated":"2015-01-22 11:59:52.000000000","message":"I think checking type is necessary, but we should return and error because the parameter type is defined as int in the config file. We shouldn\u0027t convert automatically.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0b9f45fff895a7aa801b07b872ed8fdf38602f93","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u0027irmc_password\u0027: _(\"Password for irmc_username. Required.\")"},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":52,"context_line":"    \u0027port\u0027: _(\"Port to be used for irmc operations either 80 or 443. \""},{"line_number":53,"context_line":"              \"Optional. The default value is 443\"),"},{"line_number":54,"context_line":"    \u0027auth_method\u0027: _(\"Authentication method for iRMC operations \""},{"line_number":55,"context_line":"                     \"either \u0027basic\u0027 or \u0027digest\u0027. \""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa81d914_ad9fa94f","line":52,"updated":"2015-01-27 19:31:47.000000000","message":"I was just wondering why these weren\u0027t prefixed with \u0027irmc_\u0027. I suppose it doesn\u0027t matter much except for the naming inconsistency with the required properties. I see the driver uses ipmi for console, and that has an \u0027ipmi_terminal_port\u0027 property, so your user could specify \u0027port\u0027 and \u0027ipmi_terminal_port\u0027. Are you good with that?","commit_id":"07e479837a7c31216015f24b525ae59ee11037fc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"caaf9bdef6a2e8c4b88a62db37e8fcdba4b36153","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u0027irmc_password\u0027: _(\"Password for irmc_username. Required.\")"},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":52,"context_line":"    \u0027port\u0027: _(\"Port to be used for irmc operations either 80 or 443. \""},{"line_number":53,"context_line":"              \"Optional. The default value is 443\"),"},{"line_number":54,"context_line":"    \u0027auth_method\u0027: _(\"Authentication method for iRMC operations \""},{"line_number":55,"context_line":"                     \"either \u0027basic\u0027 or \u0027digest\u0027. \""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa81d914_01b695d9","line":52,"in_reply_to":"fa81d914_809fff02","updated":"2015-01-28 15:13:33.000000000","message":"Naohiro, sorry, I missed that Thx for clarifying. This code changed the \u0027pattern\u0027 in which we use OPTIONAL_PROPERTIES. I\u0027ll point out where it breaks in power.py.","commit_id":"07e479837a7c31216015f24b525ae59ee11037fc"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"dd2ac3e90f9c9ae0f6e67409845d2d444b9c1ef1","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u0027irmc_password\u0027: _(\"Password for irmc_username. Required.\")"},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":52,"context_line":"    \u0027port\u0027: _(\"Port to be used for irmc operations either 80 or 443. \""},{"line_number":53,"context_line":"              \"Optional. The default value is 443\"),"},{"line_number":54,"context_line":"    \u0027auth_method\u0027: _(\"Authentication method for iRMC operations \""},{"line_number":55,"context_line":"                     \"either \u0027basic\u0027 or \u0027digest\u0027. \""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa81d914_809fff02","line":52,"in_reply_to":"fa81d914_ad9fa94f","updated":"2015-01-28 01:18:32.000000000","message":"This is the reflection of  the spec review comment that says  prepending \u0027irmc_\u0027 in [irmc] section of the conf file is redundant.\nPlease look at the line 88 which prepends \u0027irmc_\u0027","commit_id":"07e479837a7c31216015f24b525ae59ee11037fc"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"dd2ac3e90f9c9ae0f6e67409845d2d444b9c1ef1","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    req \u003d {key: value for key, value in info.iteritems()"},{"line_number":87,"context_line":"           if key in REQUIRED_PROPERTIES}"},{"line_number":88,"context_line":"    opt \u003d {\u0027irmc_\u0027 + param: info.get(\u0027irmc_\u0027 + param, CONF.irmc.get(param))"},{"line_number":89,"context_line":"           for param in OPTIONAL_PROPERTIES}"},{"line_number":90,"context_line":"    d_info \u003d dict(list(req.items()) + list(opt.items()))"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa81d914_40bc276d","line":88,"updated":"2015-01-28 01:18:32.000000000","message":"here is the code to prepend \u0027irmc_\u0027","commit_id":"07e479837a7c31216015f24b525ae59ee11037fc"}],"ironic/drivers/modules/irmc/power.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"516580d9749583936cf1439eab94278fb323af57","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    \"\u0027%s\u0027\") % target_state"},{"line_number":59,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    except exception.IRMCClientError as irmc_exception:"},{"line_number":62,"context_line":"        LOG.error(_LE(\"iRMC set_power_state failed to set state to %(tstate)s \""},{"line_number":63,"context_line":"                      \" for node %(node_id)s with error: %(error)s\"),"},{"line_number":64,"context_line":"                  {\u0027tstate\u0027: target_state, \u0027node_id\u0027: node.uuid,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_c0c3ce37","line":61,"updated":"2015-01-09 16:09:08.000000000","message":"I guess scciclient is a separate module independent of Ironic.  How can scciclient raise exception.IRMCClientError which is an Ironic exception ?","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"5ac1d87f614b578df330f4a7986eadff9fcc09a1","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    \"\u0027%s\u0027\") % target_state"},{"line_number":59,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    except exception.IRMCClientError as irmc_exception:"},{"line_number":62,"context_line":"        LOG.error(_LE(\"iRMC set_power_state failed to set state to %(tstate)s \""},{"line_number":63,"context_line":"                      \" for node %(node_id)s with error: %(error)s\"),"},{"line_number":64,"context_line":"                  {\u0027tstate\u0027: target_state, \u0027node_id\u0027: node.uuid,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_7300f200","line":61,"in_reply_to":"3a961159_c0c3ce37","updated":"2015-01-13 02:51:17.000000000","message":".IRMCClientError should be SCCIClientError alike.\nI\u0027ll fix that.","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"516580d9749583936cf1439eab94278fb323af57","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        supplied node contains the required information for this driver to"},{"line_number":86,"context_line":"        manage the power state of the node."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":89,"context_line":"        :raises: InvalidParameterValue if required driver_info attribute"},{"line_number":90,"context_line":"                 is missing or invalid on the node."},{"line_number":91,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ca905650","line":88,"updated":"2015-01-09 16:09:08.000000000","message":"May add MissingParameterValue as well to all these methods because they all call parse_driver_info. Ditto for _set_power_state","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"5ac1d87f614b578df330f4a7986eadff9fcc09a1","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        supplied node contains the required information for this driver to"},{"line_number":86,"context_line":"        manage the power state of the node."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":89,"context_line":"        :raises: InvalidParameterValue if required driver_info attribute"},{"line_number":90,"context_line":"                 is missing or invalid on the node."},{"line_number":91,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_b30a5a1e","line":88,"in_reply_to":"3a961159_ca905650","updated":"2015-01-13 02:51:17.000000000","message":"I\u0027ll fix that.","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"516580d9749583936cf1439eab94278fb323af57","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        :raises: IPMIFailure on an error from ipmitool (from _power_status"},{"line_number":102,"context_line":"            call)."},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        irmc_common.update_ipmi_properties(task)"},{"line_number":105,"context_line":"        ipmi_power \u003d ipmitool.IPMIPower()"},{"line_number":106,"context_line":"        return ipmi_power.get_power_state(task)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_a0cde260","line":104,"updated":"2015-01-09 16:09:08.000000000","message":"Just a question: can\u0027t scciclient help get the power state of the node ? If so, we could avoided enabling ipmi on irmc hardware (if that\u0027s possible).","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"5ac1d87f614b578df330f4a7986eadff9fcc09a1","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        :raises: IPMIFailure on an error from ipmitool (from _power_status"},{"line_number":102,"context_line":"            call)."},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        irmc_common.update_ipmi_properties(task)"},{"line_number":105,"context_line":"        ipmi_power \u003d ipmitool.IPMIPower()"},{"line_number":106,"context_line":"        return ipmi_power.get_power_state(task)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_d36526e3","line":104,"in_reply_to":"3a961159_a0cde260","updated":"2015-01-13 02:51:17.000000000","message":"No, SCCI doesn\u0027t have I/F to check power state.\n\n\u003e If so, we could avoided enabling ipmi on irmc hardware (if that\u0027s possible).\n\nYeah :-)","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"516580d9749583936cf1439eab94278fb323af57","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        :raises: IRMCClientError if the client received unexpected response."},{"line_number":131,"context_line":"        :raises: IRMCOperationError if failed to set the power state."},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        node \u003d task.node"},{"line_number":134,"context_line":"        current_pstate \u003d self.get_power_state(node)"},{"line_number":135,"context_line":"        if current_pstate \u003d\u003d states.POWER_ON:"},{"line_number":136,"context_line":"            _set_power_state(task, states.REBOOT)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_2aa2baad","line":133,"updated":"2015-01-09 16:09:08.000000000","message":"This should ideally be same as _set_power_state(task, states.REBOOT).\nDoesn\u0027t doing a reset work when the node is powered on ?","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"5ac1d87f614b578df330f4a7986eadff9fcc09a1","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        :raises: IRMCClientError if the client received unexpected response."},{"line_number":131,"context_line":"        :raises: IRMCOperationError if failed to set the power state."},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        node \u003d task.node"},{"line_number":134,"context_line":"        current_pstate \u003d self.get_power_state(node)"},{"line_number":135,"context_line":"        if current_pstate \u003d\u003d states.POWER_ON:"},{"line_number":136,"context_line":"            _set_power_state(task, states.REBOOT)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_73d1d255","line":133,"in_reply_to":"3a961159_2aa2baad","updated":"2015-01-13 02:51:17.000000000","message":"I\u0027ll fix that.\nI just did copy and paste from iLO :-)","commit_id":"a32e92c6cc0147781d346812320e8423dec8180f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"efb94235c9dcf3a65da35610de0359b702424db2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    node \u003d task.node"},{"line_number":47,"context_line":"    irmc_client \u003d irmc_common.get_irmc_client(node)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    try:"},{"line_number":50,"context_line":"        if target_state \u003d\u003d states.POWER_OFF:"},{"line_number":51,"context_line":"            irmc_client(scci.POWER_OFF)"},{"line_number":52,"context_line":"        elif target_state \u003d\u003d states.POWER_ON:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_e6461123","line":49,"updated":"2015-01-21 12:34:18.000000000","message":"What about \n\n STATES_MAP \u003d {states.POWER_OFF: scci.POWER_OFF,\n                            states.POWER_ON: scci.POWER_ON,\n                            states.REBOOT: scci.POWER_RESET}\n\n try: \n     irmc_client(STATES_MAP[target_state])\n except KeyError:\n   ....","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    node \u003d task.node"},{"line_number":47,"context_line":"    irmc_client \u003d irmc_common.get_irmc_client(node)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    try:"},{"line_number":50,"context_line":"        if target_state \u003d\u003d states.POWER_OFF:"},{"line_number":51,"context_line":"            irmc_client(scci.POWER_OFF)"},{"line_number":52,"context_line":"        elif target_state \u003d\u003d states.POWER_ON:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_607745d5","line":49,"in_reply_to":"1a930d6b_ba9fb602","updated":"2015-01-22 08:48:44.000000000","message":"I\u0027ll fix that.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8065385bbe2dc6c8360e7ff1cf196f10e6950a13","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    node \u003d task.node"},{"line_number":47,"context_line":"    irmc_client \u003d irmc_common.get_irmc_client(node)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    try:"},{"line_number":50,"context_line":"        if target_state \u003d\u003d states.POWER_OFF:"},{"line_number":51,"context_line":"            irmc_client(scci.POWER_OFF)"},{"line_number":52,"context_line":"        elif target_state \u003d\u003d states.POWER_ON:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_ba9fb602","line":49,"in_reply_to":"1a930d6b_e6461123","updated":"2015-01-21 14:41:27.000000000","message":"+1","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8065385bbe2dc6c8360e7ff1cf196f10e6950a13","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        irmc_common.update_ipmi_properties(task)"},{"line_number":106,"context_line":"        ipmi_power \u003d ipmitool.IPMIPower()"},{"line_number":107,"context_line":"        return ipmi_power.get_power_state(task)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":110,"context_line":"    def set_power_state(self, task, power_state):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_dabba270","line":107,"updated":"2015-01-21 14:41:27.000000000","message":"Q: irmc client doesn\u0027t support getting the current power state?!","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        irmc_common.update_ipmi_properties(task)"},{"line_number":106,"context_line":"        ipmi_power \u003d ipmitool.IPMIPower()"},{"line_number":107,"context_line":"        return ipmi_power.get_power_state(task)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":110,"context_line":"    def set_power_state(self, task, power_state):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_a0812d91","line":107,"in_reply_to":"1a930d6b_dabba270","updated":"2015-01-22 08:48:44.000000000","message":"No, it doesn\u0027t.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"840281b63f750a1a73ec8a68d1dfa2161e0d5e25","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    node \u003d task.node"},{"line_number":47,"context_line":"    irmc_client \u003d irmc_common.get_irmc_client(node)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    STATES_MAP \u003d {states.POWER_OFF: scci.POWER_OFF,"},{"line_number":50,"context_line":"                  states.POWER_ON: scci.POWER_ON,"},{"line_number":51,"context_line":"                  states.REBOOT: scci.POWER_RESET}"},{"line_number":52,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_680d4890","line":49,"updated":"2015-01-23 01:12:33.000000000","message":"This should be a module-level constant, not created each time within the method.","commit_id":"8f6f5fb6d8a3bef546269bd6fc3af9ad4e5f1df6"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"51b707e5a6d3d7407ecb85f9cbaf10fb80f0c6c0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    node \u003d task.node"},{"line_number":47,"context_line":"    irmc_client \u003d irmc_common.get_irmc_client(node)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    STATES_MAP \u003d {states.POWER_OFF: scci.POWER_OFF,"},{"line_number":50,"context_line":"                  states.POWER_ON: scci.POWER_ON,"},{"line_number":51,"context_line":"                  states.REBOOT: scci.POWER_RESET}"},{"line_number":52,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_9ccd4d60","line":49,"in_reply_to":"1a930d6b_680d4890","updated":"2015-01-23 09:11:02.000000000","message":"I\u0027ll fix that.","commit_id":"8f6f5fb6d8a3bef546269bd6fc3af9ad4e5f1df6"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"840281b63f750a1a73ec8a68d1dfa2161e0d5e25","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            call)."},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        irmc_common.update_ipmi_properties(task)"},{"line_number":105,"context_line":"        ipmi_power \u003d ipmitool.IPMIPower()"},{"line_number":106,"context_line":"        return ipmi_power.get_power_state(task)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @task_manager.require_exclusive_lock"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_8810b4a9","line":105,"updated":"2015-01-23 01:12:33.000000000","message":"Why does this not use scci to get the power state??","commit_id":"8f6f5fb6d8a3bef546269bd6fc3af9ad4e5f1df6"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"51b707e5a6d3d7407ecb85f9cbaf10fb80f0c6c0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            call)."},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        irmc_common.update_ipmi_properties(task)"},{"line_number":105,"context_line":"        ipmi_power \u003d ipmitool.IPMIPower()"},{"line_number":106,"context_line":"        return ipmi_power.get_power_state(task)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @task_manager.require_exclusive_lock"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_28326010","line":105,"in_reply_to":"1a930d6b_8810b4a9","updated":"2015-01-23 09:11:02.000000000","message":"Because scci doesn\u0027t have \"get power state\" function.","commit_id":"8f6f5fb6d8a3bef546269bd6fc3af9ad4e5f1df6"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"840281b63f750a1a73ec8a68d1dfa2161e0d5e25","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        :raises: IRMCOperationError if failed to set the power state."},{"line_number":116,"context_line":"        \"\"\""},{"line_number":117,"context_line":"        \"\"\""},{"line_number":118,"context_line":"        if power_state not in [states.POWER_ON, states.POWER_OFF]:"},{"line_number":119,"context_line":"            raise exception.InvalidParameterValue(_(\"set_power_state called \""},{"line_number":120,"context_line":"                    \"with an invalid power state: %s.\") % power_state)"},{"line_number":121,"context_line":"        task.node.power_state \u003d power_state"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_a8265014","line":118,"updated":"2015-01-23 01:12:33.000000000","message":"Why is this section commented out?","commit_id":"8f6f5fb6d8a3bef546269bd6fc3af9ad4e5f1df6"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"51b707e5a6d3d7407ecb85f9cbaf10fb80f0c6c0","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        :raises: IRMCOperationError if failed to set the power state."},{"line_number":116,"context_line":"        \"\"\""},{"line_number":117,"context_line":"        \"\"\""},{"line_number":118,"context_line":"        if power_state not in [states.POWER_ON, states.POWER_OFF]:"},{"line_number":119,"context_line":"            raise exception.InvalidParameterValue(_(\"set_power_state called \""},{"line_number":120,"context_line":"                    \"with an invalid power state: %s.\") % power_state)"},{"line_number":121,"context_line":"        task.node.power_state \u003d power_state"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_1c65dd44","line":118,"in_reply_to":"1a930d6b_a8265014","updated":"2015-01-23 09:11:02.000000000","message":"I\u0027ll fix that.\nHere I just forgot to remove the commented out code.\n_set_power_state(task, power_state) at the line 58 takes care of InvalidParameterValue.","commit_id":"8f6f5fb6d8a3bef546269bd6fc3af9ad4e5f1df6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"952fe53408bc40f70500814792bcb7c054076c9b","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        :returns: dictionary of \u003cproperty name\u003e:\u003cproperty description\u003e entries."},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        return irmc_common.COMMON_PROPERTIES"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def validate(self, task):"},{"line_number":85,"context_line":"        \"\"\"Validate the driver-specific Node power info."}],"source_content_type":"text/x-python","patch_set":17,"id":"fa81d914_9c4d8e75","line":82,"updated":"2015-01-28 15:13:45.000000000","message":"This is used for generating the information that \u0027GET /v1/drivers/properties\u0027 returns. The optional properties will not be displayed with \u0027irmc_\u0027 prefixes :-(","commit_id":"f1d21288749c186f0bc0e9471b16cca21ad65d4c"}],"ironic/drivers/pxe.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"feaf4e1edf5a39f84dc2b349d32538f5a0b9eb43","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                    driver\u003dself.__class__.__name__,"},{"line_number":206,"context_line":"                    reason\u003d_(\"Unable to import python-scciclient library\"))"},{"line_number":207,"context_line":"        self.power \u003d irmc_power.IRMCPower()"},{"line_number":208,"context_line":"        self.console \u003d ipmitool.IPMIShellinaboxConsole()"},{"line_number":209,"context_line":"        self.deploy \u003d pxe.PXEDeploy()"},{"line_number":210,"context_line":"        self.management \u003d ipmitool.IPMIToolManagement()"},{"line_number":211,"context_line":"        self.vendor \u003d pxe.VendorPassthru()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_5e6334b1","line":208,"updated":"2015-01-21 07:23:37.000000000","message":"I have no idea about IRMC, so do you make sure the IRMC support shellinabox console, it is based on ipmitool?","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                    driver\u003dself.__class__.__name__,"},{"line_number":206,"context_line":"                    reason\u003d_(\"Unable to import python-scciclient library\"))"},{"line_number":207,"context_line":"        self.power \u003d irmc_power.IRMCPower()"},{"line_number":208,"context_line":"        self.console \u003d ipmitool.IPMIShellinaboxConsole()"},{"line_number":209,"context_line":"        self.deploy \u003d pxe.PXEDeploy()"},{"line_number":210,"context_line":"        self.management \u003d ipmitool.IPMIToolManagement()"},{"line_number":211,"context_line":"        self.vendor \u003d pxe.VendorPassthru()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_e0633518","line":208,"in_reply_to":"1a930d6b_5e6334b1","updated":"2015-01-22 08:48:44.000000000","message":"It should work. I confirmed that the following command worked.\nipmitool -v -I lanplus -H host -L ADMINISTRATOR -U id -P pw sol activate","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"}],"ironic/tests/db/utils.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0b9f45fff895a7aa801b07b872ed8fdf38602f93","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        \"irmc_username\": \"admin0\","},{"line_number":111,"context_line":"        \"irmc_password\": \"fake0\","},{"line_number":112,"context_line":"        \"irmc_port\": 80,"},{"line_number":113,"context_line":"        \"irmc_auth_method\": \"digest\","},{"line_number":114,"context_line":"    }"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa81d914_f0c0982c","line":113,"updated":"2015-01-27 19:31:47.000000000","message":"this doesn\u0027t seem right. The code in common.py has \u0027port\u0027, \u0027auth_method\u0027, and \u0027client_timeout\u0027.","commit_id":"07e479837a7c31216015f24b525ae59ee11037fc"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"dd2ac3e90f9c9ae0f6e67409845d2d444b9c1ef1","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        \"irmc_username\": \"admin0\","},{"line_number":111,"context_line":"        \"irmc_password\": \"fake0\","},{"line_number":112,"context_line":"        \"irmc_port\": 80,"},{"line_number":113,"context_line":"        \"irmc_auth_method\": \"digest\","},{"line_number":114,"context_line":"    }"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa81d914_dbe3ac03","line":113,"in_reply_to":"fa81d914_f0c0982c","updated":"2015-01-28 01:18:32.000000000","message":"This is intended so.\nPlease look at the line 88 in common.py.","commit_id":"07e479837a7c31216015f24b525ae59ee11037fc"}],"ironic/tests/drivers/irmc/test_power.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8065385bbe2dc6c8360e7ff1cf196f10e6950a13","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        expected.update(ipmitool.CONSOLE_PROPERTIES)"},{"line_number":117,"context_line":"        with task_manager.acquire(self.context, self.node.uuid,"},{"line_number":118,"context_line":"                                  shared\u003dTrue) as task:"},{"line_number":119,"context_line":"            self.assertEqual(expected, task.driver.get_properties())"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @mock.patch.object(irmc_common, \u0027parse_driver_info\u0027)"},{"line_number":122,"context_line":"    def test_validate(self, mock_drvinfo):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_1a6a8a1a","line":119,"updated":"2015-01-21 14:41:27.000000000","message":"If you don\u0027t wanna to test the ipmitool.*_PROPERTIES you can just assertIn the IRMC properties are there. E.g:\n\n properties \u003d task.driver.get_properties()\n for prop in irmc_common.COMMON_PROPERTIES:\n     self.assertIn(prop, properties)","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"28c00bfa4552091ac4edcb3fd9983fffccb85db0","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        expected.update(ipmitool.CONSOLE_PROPERTIES)"},{"line_number":117,"context_line":"        with task_manager.acquire(self.context, self.node.uuid,"},{"line_number":118,"context_line":"                                  shared\u003dTrue) as task:"},{"line_number":119,"context_line":"            self.assertEqual(expected, task.driver.get_properties())"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @mock.patch.object(irmc_common, \u0027parse_driver_info\u0027)"},{"line_number":122,"context_line":"    def test_validate(self, mock_drvinfo):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_6020254a","line":119,"in_reply_to":"1a930d6b_1a6a8a1a","updated":"2015-01-22 08:48:44.000000000","message":"I\u0027ll fix that.","commit_id":"907a9c8585be6893deb23dbd2c56e3e13546abb3"}],"ironic/tests/drivers/third_party_driver_mocks.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0b9f45fff895a7aa801b07b872ed8fdf38602f93","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"# if anything has loaded the iRMC driver yet, reload it now that the"},{"line_number":148,"context_line":"# external library has been mocked"},{"line_number":149,"context_line":"scciclient \u003d importutils.try_import(\u0027scciclient\u0027)"},{"line_number":150,"context_line":"if not scciclient:"},{"line_number":151,"context_line":"    mock_scciclient \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa81d914_30307056","line":148,"updated":"2015-01-27 19:31:47.000000000","message":"This comment seems out of sync with the code below. I think this refers to the last \u0027if ...\u0027 below.","commit_id":"07e479837a7c31216015f24b525ae59ee11037fc"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"dd2ac3e90f9c9ae0f6e67409845d2d444b9c1ef1","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"# if anything has loaded the iRMC driver yet, reload it now that the"},{"line_number":148,"context_line":"# external library has been mocked"},{"line_number":149,"context_line":"scciclient \u003d importutils.try_import(\u0027scciclient\u0027)"},{"line_number":150,"context_line":"if not scciclient:"},{"line_number":151,"context_line":"    mock_scciclient \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa81d914_a0f883e6","line":148,"in_reply_to":"fa81d914_30307056","updated":"2015-01-28 01:18:32.000000000","message":"I\u0027ll fix that.","commit_id":"07e479837a7c31216015f24b525ae59ee11037fc"}]}
