)]}'
{"ironic/drivers/modules/ilo/inspect.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"3f5fcae9088b435e4c78e55a16dec2e6d609ffc3","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                _delete_ports_if_macs_not_exist(task.node, result[\u0027macs\u0027])"},{"line_number":262,"context_line":"                _create_ports_if_not_exist(task.node, macs_input_given)"},{"line_number":263,"context_line":"        else:"},{"line_number":264,"context_line":"            LOG.info(_LI(\"Server didn\u0027t return mac address details with \""},{"line_number":265,"context_line":"                         \"inspetion.\"))"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        task.node.save()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b4e1292c","side":"PARENT","line":264,"updated":"2015-03-12 23:06:38.000000000","message":"this line should be a DEBUG log, or not logged at all","commit_id":"12746ac15a7a8f38eb1694434c18e9c364e87f43"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"818b490fded56ad4865a84dd3e86d99af2786556","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    \"\"\""},{"line_number":138,"context_line":"    valid_cap \u003d {}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    valid_keys \u003d set(CAPABILITIES_KEYS)"},{"line_number":141,"context_line":"    received_keys \u003d capabilities"},{"line_number":142,"context_line":"    for key in received_keys:"},{"line_number":143,"context_line":"        if key in valid_keys:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b9f870c5","line":140,"updated":"2015-03-12 05:02:20.000000000","message":"This line isn\u0027t needed as CAPABILITIES_KEYS already is a set.","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"916997a7bedd974551ce9c9c878c0346f40eaa49","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    \"\"\""},{"line_number":138,"context_line":"    valid_cap \u003d {}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    valid_keys \u003d set(CAPABILITIES_KEYS)"},{"line_number":141,"context_line":"    received_keys \u003d capabilities"},{"line_number":142,"context_line":"    for key in received_keys:"},{"line_number":143,"context_line":"        if key in valid_keys:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_53d36cd4","line":140,"in_reply_to":"9a80dd14_b9f870c5","updated":"2015-03-13 22:43:06.000000000","message":"ok","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"818b490fded56ad4865a84dd3e86d99af2786556","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    valid_cap \u003d {}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    valid_keys \u003d set(CAPABILITIES_KEYS)"},{"line_number":141,"context_line":"    received_keys \u003d capabilities"},{"line_number":142,"context_line":"    for key in received_keys:"},{"line_number":143,"context_line":"        if key in valid_keys:"},{"line_number":144,"context_line":"            value \u003d capabilities.get(key)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b9cdd088","line":141,"updated":"2015-03-12 05:02:20.000000000","message":"Not sure why need temporary variable.","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"916997a7bedd974551ce9c9c878c0346f40eaa49","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    valid_cap \u003d {}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    valid_keys \u003d set(CAPABILITIES_KEYS)"},{"line_number":141,"context_line":"    received_keys \u003d capabilities"},{"line_number":142,"context_line":"    for key in received_keys:"},{"line_number":143,"context_line":"        if key in valid_keys:"},{"line_number":144,"context_line":"            value \u003d capabilities.get(key)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b3e3c8a2","line":141,"in_reply_to":"9a80dd14_b9cdd088","updated":"2015-03-13 22:43:06.000000000","message":"i will remove it.","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"818b490fded56ad4865a84dd3e86d99af2786556","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    valid_keys \u003d set(CAPABILITIES_KEYS)"},{"line_number":141,"context_line":"    received_keys \u003d capabilities"},{"line_number":142,"context_line":"    for key in received_keys:"},{"line_number":143,"context_line":"        if key in valid_keys:"},{"line_number":144,"context_line":"            value \u003d capabilities.get(key)"},{"line_number":145,"context_line":"            valid_cap[key] \u003d value"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_79827801","line":142,"updated":"2015-03-12 05:02:20.000000000","message":"How about:\n for key in CAPABILITIES_KEYS.intersection(capabilities):\n   valid_cap[key] \u003d capabilities.get(key)\n\nhttps://docs.python.org/2/library/stdtypes.html#set-types-set-frozenset","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"916997a7bedd974551ce9c9c878c0346f40eaa49","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    valid_keys \u003d set(CAPABILITIES_KEYS)"},{"line_number":141,"context_line":"    received_keys \u003d capabilities"},{"line_number":142,"context_line":"    for key in received_keys:"},{"line_number":143,"context_line":"        if key in valid_keys:"},{"line_number":144,"context_line":"            value \u003d capabilities.get(key)"},{"line_number":145,"context_line":"            valid_cap[key] \u003d value"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_7304f049","line":142,"in_reply_to":"9a80dd14_79827801","updated":"2015-03-13 22:43:06.000000000","message":"looks good:) will use this","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"d06efe308d176e545a0684b0740e232cfd87512c","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            # properties/capabilities\u003d\u0027boot_mode:bios,boot_option\u0027."},{"line_number":174,"context_line":"            msg \u003d _(\"Node has invalid capabilities string %s, \""},{"line_number":175,"context_line":"                    \"unable to modify the node\u0027s capabilities \""},{"line_number":176,"context_line":"                    \"string\") % node_capabilities"},{"line_number":177,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":178,"context_line":"    if isinstance(new_capabilities, dict):"},{"line_number":179,"context_line":"        for key, val in new_capabilities.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_2b21614d","line":176,"updated":"2015-03-12 20:06:48.000000000","message":"I would like to see node.uuid too.","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"916997a7bedd974551ce9c9c878c0346f40eaa49","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            # properties/capabilities\u003d\u0027boot_mode:bios,boot_option\u0027."},{"line_number":174,"context_line":"            msg \u003d _(\"Node has invalid capabilities string %s, \""},{"line_number":175,"context_line":"                    \"unable to modify the node\u0027s capabilities \""},{"line_number":176,"context_line":"                    \"string\") % node_capabilities"},{"line_number":177,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":178,"context_line":"    if isinstance(new_capabilities, dict):"},{"line_number":179,"context_line":"        for key, val in new_capabilities.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b3fae840","line":176,"in_reply_to":"9a80dd14_2b21614d","updated":"2015-03-13 22:43:06.000000000","message":"ok","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"3f5fcae9088b435e4c78e55a16dec2e6d609ffc3","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        for key, val in new_capabilities.items():"},{"line_number":180,"context_line":"            cap_dict[key] \u003d val"},{"line_number":181,"context_line":"    else:"},{"line_number":182,"context_line":"        LOG.warn(_LW(\"The expected format of capabilities from inspection \""},{"line_number":183,"context_line":"                     \"is dictionary, returning umodified node\u0027s \""},{"line_number":184,"context_line":"                     \"capabilities\"))"},{"line_number":185,"context_line":"    return \u0027,\u0027.join([\u0027%(key)s:%(value)s\u0027 % {\u0027key\u0027: key, \u0027value\u0027: value}"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_94eee5eb","line":182,"updated":"2015-03-12 23:06:38.000000000","message":"why is this a log warning, but online 177 an exception is thrown?","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"916997a7bedd974551ce9c9c878c0346f40eaa49","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        for key, val in new_capabilities.items():"},{"line_number":180,"context_line":"            cap_dict[key] \u003d val"},{"line_number":181,"context_line":"    else:"},{"line_number":182,"context_line":"        LOG.warn(_LW(\"The expected format of capabilities from inspection \""},{"line_number":183,"context_line":"                     \"is dictionary, returning umodified node\u0027s \""},{"line_number":184,"context_line":"                     \"capabilities\"))"},{"line_number":185,"context_line":"    return \u0027,\u0027.join([\u0027%(key)s:%(value)s\u0027 % {\u0027key\u0027: key, \u0027value\u0027: value}"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_d3511c31","line":182,"in_reply_to":"9a80dd14_94eee5eb","updated":"2015-03-13 22:43:06.000000000","message":"Line 177 is when already existing capabilities are malformed. \nI just threw warning because capabilities are not essential properties for a node and dont want to fail inspection for that. what do you say?","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"3f5fcae9088b435e4c78e55a16dec2e6d609ffc3","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            cap_dict[key] \u003d val"},{"line_number":181,"context_line":"    else:"},{"line_number":182,"context_line":"        LOG.warn(_LW(\"The expected format of capabilities from inspection \""},{"line_number":183,"context_line":"                     \"is dictionary, returning umodified node\u0027s \""},{"line_number":184,"context_line":"                     \"capabilities\"))"},{"line_number":185,"context_line":"    return \u0027,\u0027.join([\u0027%(key)s:%(value)s\u0027 % {\u0027key\u0027: key, \u0027value\u0027: value}"},{"line_number":186,"context_line":"                     for key, value in six.iteritems(cap_dict)])"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_1424b55e","line":183,"updated":"2015-03-12 23:06:38.000000000","message":"typo  \"unmodified\"","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"916997a7bedd974551ce9c9c878c0346f40eaa49","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            cap_dict[key] \u003d val"},{"line_number":181,"context_line":"    else:"},{"line_number":182,"context_line":"        LOG.warn(_LW(\"The expected format of capabilities from inspection \""},{"line_number":183,"context_line":"                     \"is dictionary, returning umodified node\u0027s \""},{"line_number":184,"context_line":"                     \"capabilities\"))"},{"line_number":185,"context_line":"    return \u0027,\u0027.join([\u0027%(key)s:%(value)s\u0027 % {\u0027key\u0027: key, \u0027value\u0027: value}"},{"line_number":186,"context_line":"                     for key, value in six.iteritems(cap_dict)])"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_f3338011","line":183,"in_reply_to":"9a80dd14_1424b55e","updated":"2015-03-13 22:43:06.000000000","message":"ok","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"d06efe308d176e545a0684b0740e232cfd87512c","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    else:"},{"line_number":182,"context_line":"        LOG.warn(_LW(\"The expected format of capabilities from inspection \""},{"line_number":183,"context_line":"                     \"is dictionary, returning umodified node\u0027s \""},{"line_number":184,"context_line":"                     \"capabilities\"))"},{"line_number":185,"context_line":"    return \u0027,\u0027.join([\u0027%(key)s:%(value)s\u0027 % {\u0027key\u0027: key, \u0027value\u0027: value}"},{"line_number":186,"context_line":"                     for key, value in six.iteritems(cap_dict)])"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_abd47120","line":184,"updated":"2015-03-12 20:06:48.000000000","message":"ditto","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"916997a7bedd974551ce9c9c878c0346f40eaa49","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    else:"},{"line_number":182,"context_line":"        LOG.warn(_LW(\"The expected format of capabilities from inspection \""},{"line_number":183,"context_line":"                     \"is dictionary, returning umodified node\u0027s \""},{"line_number":184,"context_line":"                     \"capabilities\"))"},{"line_number":185,"context_line":"    return \u0027,\u0027.join([\u0027%(key)s:%(value)s\u0027 % {\u0027key\u0027: key, \u0027value\u0027: value}"},{"line_number":186,"context_line":"                     for key, value in six.iteritems(cap_dict)])"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_732790ca","line":184,"in_reply_to":"9a80dd14_abd47120","updated":"2015-03-13 22:43:06.000000000","message":"ok will add node uuid","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"d06efe308d176e545a0684b0740e232cfd87512c","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    try:"},{"line_number":263,"context_line":"        capabilities \u003d ilo_object.get_server_capabilities()"},{"line_number":264,"context_line":"    except ilo_error.IloError:"},{"line_number":265,"context_line":"        LOG.info(_LI(\"Server was unable to get any additional capabilities\"))"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    return capabilities"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_4be5b507","line":265,"updated":"2015-03-12 20:06:48.000000000","message":"ditto","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"916997a7bedd974551ce9c9c878c0346f40eaa49","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    try:"},{"line_number":263,"context_line":"        capabilities \u003d ilo_object.get_server_capabilities()"},{"line_number":264,"context_line":"    except ilo_error.IloError:"},{"line_number":265,"context_line":"        LOG.info(_LI(\"Server was unable to get any additional capabilities\"))"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    return capabilities"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_d3283c99","line":265,"in_reply_to":"9a80dd14_4be5b507","updated":"2015-03-13 22:43:06.000000000","message":"ok will add","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"3f5fcae9088b435e4c78e55a16dec2e6d609ffc3","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                                                         valid_cap)"},{"line_number":358,"context_line":"            task.node.properties[\u0027capabilities\u0027] \u003d capabilities"},{"line_number":359,"context_line":"        else:"},{"line_number":360,"context_line":"            LOG.info(_LI(\"No extra capabilities returned by server\"))"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        task.node.save()"},{"line_number":363,"context_line":"        LOG.debug((\"Node.properties updated are %(properties)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_345b79f7","line":360,"updated":"2015-03-12 23:06:38.000000000","message":"I\u0027m not sure this should be logged at all, but if it is, it should be a DEBUG.\n\nSee definitions and examples here:\nhttps://github.com/openstack/openstack-specs/blob/master/specs/log-guidelines.rst#definition-of-log-levels","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"d06efe308d176e545a0684b0740e232cfd87512c","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                                                         valid_cap)"},{"line_number":358,"context_line":"            task.node.properties[\u0027capabilities\u0027] \u003d capabilities"},{"line_number":359,"context_line":"        else:"},{"line_number":360,"context_line":"            LOG.info(_LI(\"No extra capabilities returned by server\"))"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        task.node.save()"},{"line_number":363,"context_line":"        LOG.debug((\"Node.properties updated are %(properties)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_8beb2ddb","line":360,"updated":"2015-03-12 20:06:48.000000000","message":"ditto","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"916997a7bedd974551ce9c9c878c0346f40eaa49","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                                                         valid_cap)"},{"line_number":358,"context_line":"            task.node.properties[\u0027capabilities\u0027] \u003d capabilities"},{"line_number":359,"context_line":"        else:"},{"line_number":360,"context_line":"            LOG.info(_LI(\"No extra capabilities returned by server\"))"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        task.node.save()"},{"line_number":363,"context_line":"        LOG.debug((\"Node.properties updated are %(properties)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b304a818","line":360,"in_reply_to":"9a80dd14_345b79f7","updated":"2015-03-13 22:43:06.000000000","message":"ok","commit_id":"a797c8fde662eeaabd2e38278a2e114c86d817f5"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"2958ff6a7c24dbc2d1f478a264b1f0328b5cded3","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                    % {\u0027node\u0027: node.uuid, \u0027capabilities\u0027: node_capabilities})"},{"line_number":178,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":179,"context_line":"    if isinstance(new_capabilities, dict):"},{"line_number":180,"context_line":"        for key, val in new_capabilities.items():"},{"line_number":181,"context_line":"            cap_dict[key] \u003d val"},{"line_number":182,"context_line":"    else:"},{"line_number":183,"context_line":"        msg \u003d (_(\"The expected format of capabilities from inspection \""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_ad6a7c17","line":180,"updated":"2015-03-14 15:45:38.000000000","message":"I think this could just be:\n\n cap_dict.update(new_capabilities)","commit_id":"2216085576807b4ca84531f2dbbdcda29be2e48f"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"780b04bc1ba37293778ed0ca82bf818881becb6a","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    This method adds/updates a given property to the capabilities string."},{"line_number":159,"context_line":"    Currently the capabilities are recorded as a string in"},{"line_number":160,"context_line":"    properties/capbilities of a Node. It\u0027s of the below format:"},{"line_number":161,"context_line":"    properties/capabilities\u003d\u0027boot_mode:bios,boot_option:local\u0027"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    :param node: Node object."}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_2a33a414","line":160,"updated":"2015-03-16 16:16:27.000000000","message":"s/capbilities/capabilities/","commit_id":"c0b2a1ca9fe928e9fdeaa41ae0a87189e7f1e77f"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"141da4b0f4b8ff1a50ad6b72b5ff82d01f0e7d52","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    This method adds/updates a given property to the capabilities string."},{"line_number":159,"context_line":"    Currently the capabilities are recorded as a string in"},{"line_number":160,"context_line":"    properties/capbilities of a Node. It\u0027s of the below format:"},{"line_number":161,"context_line":"    properties/capabilities\u003d\u0027boot_mode:bios,boot_option:local\u0027"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    :param node: Node object."}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_cae203a0","line":160,"in_reply_to":"9a80dd14_2a33a414","updated":"2015-03-16 17:26:34.000000000","message":"ok","commit_id":"c0b2a1ca9fe928e9fdeaa41ae0a87189e7f1e77f"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"28f0ca9f4df255f1e51c55cfbd024c0ec87c4ee3","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    try:"},{"line_number":269,"context_line":"        capabilities \u003d ilo_object.get_server_capabilities()"},{"line_number":270,"context_line":"    except ilo_error.IloError:"},{"line_number":271,"context_line":"        LOG.info(_LI(\"Node %s did not return any additional capabilities.\"),"},{"line_number":272,"context_line":"                      node.uuid)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    return capabilities"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_8fb102e2","line":271,"updated":"2015-03-16 15:53:22.000000000","message":"I think LOG.debug is fine here.","commit_id":"c0b2a1ca9fe928e9fdeaa41ae0a87189e7f1e77f"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"141da4b0f4b8ff1a50ad6b72b5ff82d01f0e7d52","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    try:"},{"line_number":269,"context_line":"        capabilities \u003d ilo_object.get_server_capabilities()"},{"line_number":270,"context_line":"    except ilo_error.IloError:"},{"line_number":271,"context_line":"        LOG.info(_LI(\"Node %s did not return any additional capabilities.\"),"},{"line_number":272,"context_line":"                      node.uuid)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    return capabilities"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_2acabf1a","line":271,"in_reply_to":"9a80dd14_8fb102e2","updated":"2015-03-16 17:26:34.000000000","message":"ok","commit_id":"c0b2a1ca9fe928e9fdeaa41ae0a87189e7f1e77f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    return valid_cap"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"def _add_or_update_capability_str(node, node_capabilities, new_capabilities):"},{"line_number":129,"context_line":"    \"\"\"Add or update a capability to the capabilities string."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    This method adds/updates a given property to the capabilities string."}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_2a25295c","line":128,"updated":"2015-03-17 16:21:57.000000000","message":"nit: I\u0027d just call this _update_capabilities(). I wouldn\u0027t bother with the _str() part. I think at some point, we should modify capabilities so it isn\u0027t a string anyway.","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    return valid_cap"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"def _add_or_update_capability_str(node, node_capabilities, new_capabilities):"},{"line_number":129,"context_line":"    \"\"\"Add or update a capability to the capabilities string."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    This method adds/updates a given property to the capabilities string."}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_03d5a6b6","line":128,"in_reply_to":"9a80dd14_2a25295c","updated":"2015-03-17 20:31:17.000000000","message":"ok","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":128,"context_line":"def _add_or_update_capability_str(node, node_capabilities, new_capabilities):"},{"line_number":129,"context_line":"    \"\"\"Add or update a capability to the capabilities string."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    This method adds/updates a given property to the capabilities string."},{"line_number":132,"context_line":"    Currently the capabilities are recorded as a string in"},{"line_number":133,"context_line":"    properties/capabilities of a Node. It\u0027s of the below format:"},{"line_number":134,"context_line":"    properties/capabilities\u003d\u0027boot_mode:bios,boot_option:local\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_6f23b3be","line":131,"updated":"2015-03-17 16:21:57.000000000","message":"by \u0027capabilities\u0027 you mean \u0027node_capabilities\u0027 right?","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":128,"context_line":"def _add_or_update_capability_str(node, node_capabilities, new_capabilities):"},{"line_number":129,"context_line":"    \"\"\"Add or update a capability to the capabilities string."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    This method adds/updates a given property to the capabilities string."},{"line_number":132,"context_line":"    Currently the capabilities are recorded as a string in"},{"line_number":133,"context_line":"    properties/capabilities of a Node. It\u0027s of the below format:"},{"line_number":134,"context_line":"    properties/capabilities\u003d\u0027boot_mode:bios,boot_option:local\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_83f0b667","line":131,"in_reply_to":"9a80dd14_6f23b3be","updated":"2015-03-17 20:31:17.000000000","message":"yes","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    :param node: Node object."},{"line_number":137,"context_line":"    :param node_capabilities: capabilities string as present on node."},{"line_number":138,"context_line":"    :param new_capabilities: the capabilities returned by baremetal"},{"line_number":139,"context_line":"                             with inspection."},{"line_number":140,"context_line":"    :returns: The capability string after adding/updating the"},{"line_number":141,"context_line":"              new_capabilities"},{"line_number":142,"context_line":"    :raises: InvalidParameterValue, if node_capabilities is malformed."}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_6af721d5","line":139,"updated":"2015-03-17 16:21:57.000000000","message":"is this a string too?","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    :param node: Node object."},{"line_number":137,"context_line":"    :param node_capabilities: capabilities string as present on node."},{"line_number":138,"context_line":"    :param new_capabilities: the capabilities returned by baremetal"},{"line_number":139,"context_line":"                             with inspection."},{"line_number":140,"context_line":"    :returns: The capability string after adding/updating the"},{"line_number":141,"context_line":"              new_capabilities"},{"line_number":142,"context_line":"    :raises: InvalidParameterValue, if node_capabilities is malformed."}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e3009237","line":139,"in_reply_to":"9a80dd14_6af721d5","updated":"2015-03-17 20:31:17.000000000","message":"No it should be a dictionary","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    :param new_capabilities: the capabilities returned by baremetal"},{"line_number":139,"context_line":"                             with inspection."},{"line_number":140,"context_line":"    :returns: The capability string after adding/updating the"},{"line_number":141,"context_line":"              new_capabilities"},{"line_number":142,"context_line":"    :raises: InvalidParameterValue, if node_capabilities is malformed."},{"line_number":143,"context_line":"    \"\"\""},{"line_number":144,"context_line":"    cap_dict \u003d {}"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_8a6d359c","line":141,"updated":"2015-03-17 16:21:57.000000000","message":"how about \u0027The capability string after adding/updating node_capabilities with new_capabilities\u0027","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    :param new_capabilities: the capabilities returned by baremetal"},{"line_number":139,"context_line":"                             with inspection."},{"line_number":140,"context_line":"    :returns: The capability string after adding/updating the"},{"line_number":141,"context_line":"              new_capabilities"},{"line_number":142,"context_line":"    :raises: InvalidParameterValue, if node_capabilities is malformed."},{"line_number":143,"context_line":"    \"\"\""},{"line_number":144,"context_line":"    cap_dict \u003d {}"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_23fb8a48","line":141,"in_reply_to":"9a80dd14_8a6d359c","updated":"2015-03-17 20:31:17.000000000","message":"sounds good","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        msg \u003d (_(\"The expected format of capabilities from inspection \""},{"line_number":162,"context_line":"                \"is dictionary while node %(node)s returned %(capabilities)s.\")"},{"line_number":163,"context_line":"                % {\u0027node\u0027: node.uuid, \u0027capabilities\u0027: new_capabilities})"},{"line_number":164,"context_line":"        raise exception.InvalidParameterValue(msg)"},{"line_number":165,"context_line":"    return \u0027,\u0027.join([\u0027%(key)s:%(value)s\u0027 % {\u0027key\u0027: key, \u0027value\u0027: value}"},{"line_number":166,"context_line":"                     for key, value in six.iteritems(cap_dict)])"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_4aeb3db0","line":164,"updated":"2015-03-17 16:21:57.000000000","message":"Shouldn\u0027t this be some sort of HardwareInspectionFailure?","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        msg \u003d (_(\"The expected format of capabilities from inspection \""},{"line_number":162,"context_line":"                \"is dictionary while node %(node)s returned %(capabilities)s.\")"},{"line_number":163,"context_line":"                % {\u0027node\u0027: node.uuid, \u0027capabilities\u0027: new_capabilities})"},{"line_number":164,"context_line":"        raise exception.InvalidParameterValue(msg)"},{"line_number":165,"context_line":"    return \u0027,\u0027.join([\u0027%(key)s:%(value)s\u0027 % {\u0027key\u0027: key, \u0027value\u0027: value}"},{"line_number":166,"context_line":"                     for key, value in six.iteritems(cap_dict)])"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_7e7b55f4","line":164,"in_reply_to":"9a80dd14_4aeb3db0","updated":"2015-03-17 20:31:17.000000000","message":"hmmm yes. will change.","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    :param ilo_object: an instance of ilo drivers."},{"line_number":240,"context_line":"    :returns : a string of capabilities like"},{"line_number":241,"context_line":"               \u0027key1:value1,key2:value2,key3:value3\u0027"},{"line_number":242,"context_line":"               or None."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    \"\"\""},{"line_number":245,"context_line":"    capabilities \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_6a7561cb","line":242,"updated":"2015-03-17 16:21:57.000000000","message":"looks like you might also return \u0027\u0027.","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    :param ilo_object: an instance of ilo drivers."},{"line_number":240,"context_line":"    :returns : a string of capabilities like"},{"line_number":241,"context_line":"               \u0027key1:value1,key2:value2,key3:value3\u0027"},{"line_number":242,"context_line":"               or None."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    \"\"\""},{"line_number":245,"context_line":"    capabilities \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_1ea97924","line":242,"in_reply_to":"9a80dd14_6a7561cb","updated":"2015-03-17 20:31:17.000000000","message":"Changed the initialization to None.","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        capabilities \u003d ilo_object.get_server_capabilities()"},{"line_number":248,"context_line":"    except ilo_error.IloError:"},{"line_number":249,"context_line":"        LOG.debug((\"Node %s did not return any additional capabilities.\"),"},{"line_number":250,"context_line":"                   node.uuid)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    return capabilities"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_2ad0c9c8","line":250,"updated":"2015-03-17 16:21:57.000000000","message":"I find it strange that this is only a debug. Just want to make sure this is really the log level you want. Don\u0027t you think the error might be important?","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        capabilities \u003d ilo_object.get_server_capabilities()"},{"line_number":248,"context_line":"    except ilo_error.IloError:"},{"line_number":249,"context_line":"        LOG.debug((\"Node %s did not return any additional capabilities.\"),"},{"line_number":250,"context_line":"                   node.uuid)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    return capabilities"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_be46ad79","line":250,"in_reply_to":"9a80dd14_2ad0c9c8","updated":"2015-03-17 20:31:17.000000000","message":"Reason is these capabilities are not mandatory to be returned by the hardware. if hardware doesnt return any capabilities then also inspection for essential scheduling properties is done.","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        \"\"\"Inspect hardware to get the hardware properties."},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        Inspects hardware to get the essential and additional hardware"},{"line_number":292,"context_line":"        properties."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        :param task: a TaskManager instance."},{"line_number":295,"context_line":"        :raises: HardwareInspectionfailure if essential properties"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_9ec65667","line":292,"updated":"2015-03-17 16:21:57.000000000","message":"I can\u0027t remember. Is it all or nothing? Ie, if there is an error in something, does it mean nothing gets updated, or you update as much as you can? Because it isn\u0027t clear to me what the code is/should be doing.","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        \"\"\"Inspect hardware to get the hardware properties."},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        Inspects hardware to get the essential and additional hardware"},{"line_number":292,"context_line":"        properties."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        :param task: a TaskManager instance."},{"line_number":295,"context_line":"        :raises: HardwareInspectionfailure if essential properties"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e9c23185","line":292,"in_reply_to":"9a80dd14_9ec65667","updated":"2015-03-17 20:31:17.000000000","message":"Added comment here.","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        if capabilities:"},{"line_number":351,"context_line":"            valid_cap \u003d _create_supported_capabilities_dict(capabilities)"},{"line_number":352,"context_line":"            node_capabilities \u003d task.node.properties.get(\u0027capabilities\u0027)"},{"line_number":353,"context_line":"            capabilities \u003d _add_or_update_capability_str(task.node,"},{"line_number":354,"context_line":"                                                         node_capabilities,"},{"line_number":355,"context_line":"                                                         valid_cap)"},{"line_number":356,"context_line":"            if capabilities:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_be715a46","line":353,"updated":"2015-03-17 16:21:57.000000000","message":"if this raises an exception, then the ports may have been created, but none of the properties are updated. Is that what you want?","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        if capabilities:"},{"line_number":351,"context_line":"            valid_cap \u003d _create_supported_capabilities_dict(capabilities)"},{"line_number":352,"context_line":"            node_capabilities \u003d task.node.properties.get(\u0027capabilities\u0027)"},{"line_number":353,"context_line":"            capabilities \u003d _add_or_update_capability_str(task.node,"},{"line_number":354,"context_line":"                                                         node_capabilities,"},{"line_number":355,"context_line":"                                                         valid_cap)"},{"line_number":356,"context_line":"            if capabilities:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_49b89d11","line":353,"in_reply_to":"9a80dd14_be715a46","updated":"2015-03-17 20:31:17.000000000","message":"moved the capabilities code next to essential properties.","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            node_capabilities \u003d task.node.properties.get(\u0027capabilities\u0027)"},{"line_number":353,"context_line":"            capabilities \u003d _add_or_update_capability_str(task.node,"},{"line_number":354,"context_line":"                                                         node_capabilities,"},{"line_number":355,"context_line":"                                                         valid_cap)"},{"line_number":356,"context_line":"            if capabilities:"},{"line_number":357,"context_line":"                task.node.properties[\u0027capabilities\u0027] \u003d capabilities"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_1e57c6cb","line":355,"updated":"2015-03-17 16:21:57.000000000","message":"Wondering why you didn\u0027t get node_capabilites in the _add_or_update_capacity_str() method vs doing that here and passing it in as a parameter.","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            node_capabilities \u003d task.node.properties.get(\u0027capabilities\u0027)"},{"line_number":353,"context_line":"            capabilities \u003d _add_or_update_capability_str(task.node,"},{"line_number":354,"context_line":"                                                         node_capabilities,"},{"line_number":355,"context_line":"                                                         valid_cap)"},{"line_number":356,"context_line":"            if capabilities:"},{"line_number":357,"context_line":"                task.node.properties[\u0027capabilities\u0027] \u003d capabilities"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_a9403908","line":355,"in_reply_to":"9a80dd14_1e57c6cb","updated":"2015-03-17 20:31:17.000000000","message":"done.","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fcea3d18c834e9fa0e7e2bc84d3e7a218f168370","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                                                         node_capabilities,"},{"line_number":355,"context_line":"                                                         valid_cap)"},{"line_number":356,"context_line":"            if capabilities:"},{"line_number":357,"context_line":"                task.node.properties[\u0027capabilities\u0027] \u003d capabilities"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        task.node.save()"},{"line_number":360,"context_line":"        LOG.debug((\"Node properties for %(node)s are updated as \""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_3e872ad9","line":357,"updated":"2015-03-17 16:21:57.000000000","message":"This happens to work because above, you did task.node.properties \u003d node_properties. Otherwise, directly modifying a dictionary won\u0027t trigger to the node, that its .properties has been updated and it won\u0027t be saved.\n\nI think it is cleaner if you did node_properties[\u0027capabilities\u0027] \u003d capabilities\nthen\ntask.node.properties \u003d node_properties\ntask.node.save()\n\nbut it may depend on how this method is handling exceptions (if any).","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"306d5eb88fd351fd259bf005e167b6bfbcfd7e19","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                                                         node_capabilities,"},{"line_number":355,"context_line":"                                                         valid_cap)"},{"line_number":356,"context_line":"            if capabilities:"},{"line_number":357,"context_line":"                task.node.properties[\u0027capabilities\u0027] \u003d capabilities"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        task.node.save()"},{"line_number":360,"context_line":"        LOG.debug((\"Node properties for %(node)s are updated as \""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_0976a53f","line":357,"in_reply_to":"9a80dd14_3e872ad9","updated":"2015-03-17 20:31:17.000000000","message":"changed as suggested","commit_id":"2fe345e97edf96ba44001596b45bd3b08852527c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"688937a43a4df9a45ec46c47e10fe3bd865ee9c4","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                             by baremetal with inspection."},{"line_number":156,"context_line":"    :returns: The capability string after adding/updating the"},{"line_number":157,"context_line":"              node_capabilities with new_capabilities"},{"line_number":158,"context_line":"    :raises: InvalidParameterValue, if node_capabilities is malformed."},{"line_number":159,"context_line":"    \"\"\""},{"line_number":160,"context_line":"    cap_dict \u003d {}"},{"line_number":161,"context_line":"    node_capabilities \u003d node.properties.get(\u0027capabilities\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_04176246","line":158,"updated":"2015-03-18 01:44:42.000000000","message":":raises HardwareInspectionFailure","commit_id":"97aa7d81ce6a0e137cc166befd83f4b0e311c68d"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"bf7bcfaf37e4bcaf87a49d1eca658616e7b1fc91","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                             by baremetal with inspection."},{"line_number":156,"context_line":"    :returns: The capability string after adding/updating the"},{"line_number":157,"context_line":"              node_capabilities with new_capabilities"},{"line_number":158,"context_line":"    :raises: InvalidParameterValue, if node_capabilities is malformed."},{"line_number":159,"context_line":"    \"\"\""},{"line_number":160,"context_line":"    cap_dict \u003d {}"},{"line_number":161,"context_line":"    node_capabilities \u003d node.properties.get(\u0027capabilities\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_5b8211c9","line":158,"in_reply_to":"9a80dd14_04176246","updated":"2015-03-18 05:41:51.000000000","message":"ughh","commit_id":"97aa7d81ce6a0e137cc166befd83f4b0e311c68d"}],"ironic/tests/drivers/ilo/test_inspect.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"688937a43a4df9a45ec46c47e10fe3bd865ee9c4","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        cap_string \u003d \u0027ilo_firmware_version:xyz,foo:bar,somekey:value\u0027"},{"line_number":484,"context_line":"        cap_returned \u003d ilo_inspect._update_capabilities(self.node,"},{"line_number":485,"context_line":"                                                        capabilities)"},{"line_number":486,"context_line":"        self.assertEqual(sorted(cap_string), sorted(cap_returned))"},{"line_number":487,"context_line":"        self.assertIsInstance(cap_returned, str)"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def test__update_capabilities_invalid_capabilities(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_a175a8cd","line":486,"updated":"2015-03-18 01:44:42.000000000","message":"sorted(cap_string) will sort the letters in this string. Which seems odd. Is that what you wanted? If the string was \u0027ilo_firmware_version:bar,foo:value,somekey:xyz\u0027, it would also pass the test :-(","commit_id":"97aa7d81ce6a0e137cc166befd83f4b0e311c68d"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"bf7bcfaf37e4bcaf87a49d1eca658616e7b1fc91","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        cap_string \u003d \u0027ilo_firmware_version:xyz,foo:bar,somekey:value\u0027"},{"line_number":484,"context_line":"        cap_returned \u003d ilo_inspect._update_capabilities(self.node,"},{"line_number":485,"context_line":"                                                        capabilities)"},{"line_number":486,"context_line":"        self.assertEqual(sorted(cap_string), sorted(cap_returned))"},{"line_number":487,"context_line":"        self.assertIsInstance(cap_returned, str)"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def test__update_capabilities_invalid_capabilities(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_db1e01bb","line":486,"in_reply_to":"9a80dd14_a175a8cd","updated":"2015-03-18 05:41:51.000000000","message":"no wanted to assert if the expected and transformed keys are same. I will modify it","commit_id":"97aa7d81ce6a0e137cc166befd83f4b0e311c68d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"688937a43a4df9a45ec46c47e10fe3bd865ee9c4","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        self.assertRaises(exception.HardwareInspectionFailure,"},{"line_number":498,"context_line":"                          ilo_inspect._update_capabilities,"},{"line_number":499,"context_line":"                          self.node, capabilities)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def test__get_macs_for_desired_ports(self):"},{"line_number":502,"context_line":"        driver_info_mock \u003d {\u0027inspect_ports\u0027: \u00271,2\u0027}"},{"line_number":503,"context_line":"        self.node.driver_info \u003d driver_info_mock"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_44395aa2","line":500,"updated":"2015-03-18 01:44:42.000000000","message":"do you have a test where the node has a capability already, and it is updated with a new capability value. These all look like they are adding new capabilities.","commit_id":"97aa7d81ce6a0e137cc166befd83f4b0e311c68d"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"bf7bcfaf37e4bcaf87a49d1eca658616e7b1fc91","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        self.assertRaises(exception.HardwareInspectionFailure,"},{"line_number":498,"context_line":"                          ilo_inspect._update_capabilities,"},{"line_number":499,"context_line":"                          self.node, capabilities)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def test__get_macs_for_desired_ports(self):"},{"line_number":502,"context_line":"        driver_info_mock \u003d {\u0027inspect_ports\u0027: \u00271,2\u0027}"},{"line_number":503,"context_line":"        self.node.driver_info \u003d driver_info_mock"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_5b34d149","line":500,"in_reply_to":"9a80dd14_44395aa2","updated":"2015-03-18 05:41:51.000000000","message":"Yes the test case is there test_inspect_essential_capabilities_exist_ok.\nI will add one more here.","commit_id":"97aa7d81ce6a0e137cc166befd83f4b0e311c68d"}]}
