)]}'
{"ironic_python_agent/hardware.py":[{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d2aa59f790a3666076d396b644ca39f74a16acf9","unresolved":false,"context_lines":[{"line_number":1154,"context_line":""},{"line_number":1155,"context_line":"        null_address \u003d \u0027::/0\u0027"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        def get_dynamic(_channel):"},{"line_number":1158,"context_line":"            out, e \u003d utils.execute(\"ipmitool lan6 print {} \""},{"line_number":1159,"context_line":"                                   \"dynamic_addr\".format(_channel),"},{"line_number":1160,"context_line":"                                   shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_b92f433d","line":1157,"range":{"start_line":1157,"start_character":24,"end_line":1157,"end_character":32},"updated":"2019-03-28 05:19:48.000000000","message":"nit: channel\n\nditto for the _address","commit_id":"80d3b30158d839bed2a47545530e3603a01554ee"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d2aa59f790a3666076d396b644ca39f74a16acf9","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"        null_address \u003d \u0027::/0\u0027"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        def get_dynamic(_channel):"},{"line_number":1158,"context_line":"            out, e \u003d utils.execute(\"ipmitool lan6 print {} \""},{"line_number":1159,"context_line":"                                   \"dynamic_addr\".format(_channel),"},{"line_number":1160,"context_line":"                                   shell\u003dTrue)"},{"line_number":1161,"context_line":"            out \u003d out.strip()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_d9932f4e","line":1158,"range":{"start_line":1158,"start_character":27,"end_line":1158,"end_character":34},"updated":"2019-03-28 05:19:48.000000000","message":"I don\u0027t have a environment with bmc supports IPv6, here is the output I got from the machine:\n\n  # ipmitool lan6 print 3 dynamic_addr\n  Getting parameter(s)...\n  Failed to get IPv6 Dynamic Address: Parameter not supported\n\nand the errno is 1\n\nIs there a possibility that querying dynamic address fails but static address works, or vice visa?","commit_id":"80d3b30158d839bed2a47545530e3603a01554ee"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"8da8587b698150484d6500b2dfa1d625eea0e682","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"        null_address \u003d \u0027::/0\u0027"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        def get_dynamic(_channel):"},{"line_number":1158,"context_line":"            out, e \u003d utils.execute(\"ipmitool lan6 print {} \""},{"line_number":1159,"context_line":"                                   \"dynamic_addr\".format(_channel),"},{"line_number":1160,"context_line":"                                   shell\u003dTrue)"},{"line_number":1161,"context_line":"            out \u003d out.strip()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_4f25fb5b","line":1158,"range":{"start_line":1158,"start_character":27,"end_line":1158,"end_character":34},"in_reply_to":"5fc1f717_b83bb499","updated":"2019-04-01 01:19:32.000000000","message":"So I think we need handle the exception of command execution and yaml parsing, with return code checking, so that we can continue iterating other channels or for other dynamic/static addresses.","commit_id":"80d3b30158d839bed2a47545530e3603a01554ee"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"2c12c039821e7697c54e1fadc7eec39e419f9a0f","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"        null_address \u003d \u0027::/0\u0027"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        def get_dynamic(_channel):"},{"line_number":1158,"context_line":"            out, e \u003d utils.execute(\"ipmitool lan6 print {} \""},{"line_number":1159,"context_line":"                                   \"dynamic_addr\".format(_channel),"},{"line_number":1160,"context_line":"                                   shell\u003dTrue)"},{"line_number":1161,"context_line":"            out \u003d out.strip()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_b83bb499","line":1158,"range":{"start_line":1158,"start_character":27,"end_line":1158,"end_character":34},"in_reply_to":"5fc1f717_d9932f4e","updated":"2019-03-29 09:54:38.000000000","message":"I do not know. Do you mean if errno is 1 the utils.execute raises exception and need to handle it?  \n\nIf server supports IPv6 BMS address the output is different but return code 1 too.\n\n~]# ipmitool lan6 print 3 dynamic_addr\nGetting parameter(s)...\nFailed to get IPv6 Dynamic Address: Invalid data field in request\n~]# echo $?\n1\n\nValid output http://paste.openstack.org/show/748533/","commit_id":"80d3b30158d839bed2a47545530e3603a01554ee"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"2c12c039821e7697c54e1fadc7eec39e419f9a0f","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"                    r\"awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/\""},{"line_number":1199,"context_line":"                    r\"{{print $NF}}\u0027\".format(channel), shell\u003dTrue)"},{"line_number":1200,"context_line":"                if addr_mode.strip() not in [\u0027ipv6\u0027, \u0027both\u0027]:"},{"line_number":1201,"context_line":"                    continue"},{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":"                address \u003d get_dynamic(channel) or get_static(channel)"},{"line_number":1204,"context_line":"                if not address:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_8999ba1f","line":1201,"updated":"2019-03-29 09:54:38.000000000","message":"]# ipmitool lan6 print 1 enables\nGetting parameter(s)...\nFailed to get IPv6/IPv4 Addressing Enables: Parameter not supported\n]# echo $?\n1\n\nHere ipmitool could return 1 too. Do you mind if I add \"check_exit_code\u003dFalse\" argument to execute call? In case code 1 the stdout (addr_mode variable) does not equal to neither ipv6 nor both (it is empty) and IF (line #1200) catches that.","commit_id":"80d3b30158d839bed2a47545530e3603a01554ee"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d2aa59f790a3666076d396b644ca39f74a16acf9","unresolved":false,"context_lines":[{"line_number":1205,"context_line":"                    continue"},{"line_number":1206,"context_line":""},{"line_number":1207,"context_line":"                try:"},{"line_number":1208,"context_line":"                    address \u003d str(netaddr.IPNetwork(address).ip)"},{"line_number":1209,"context_line":"                except netaddr.AddrFormatError:"},{"line_number":1210,"context_line":"                    LOG.warning(\u0027Invalid IP address: %s\u0027, address)"},{"line_number":1211,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_99dda742","line":1208,"range":{"start_line":1208,"start_character":20,"end_line":1208,"end_character":64},"updated":"2019-03-28 05:19:48.000000000","message":"it also works for \"::\", AIUI we need to keep querying channels in case of invalid addresses, and return null only when there is no valid ipv6 address.","commit_id":"80d3b30158d839bed2a47545530e3603a01554ee"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"2c12c039821e7697c54e1fadc7eec39e419f9a0f","unresolved":false,"context_lines":[{"line_number":1205,"context_line":"                    continue"},{"line_number":1206,"context_line":""},{"line_number":1207,"context_line":"                try:"},{"line_number":1208,"context_line":"                    address \u003d str(netaddr.IPNetwork(address).ip)"},{"line_number":1209,"context_line":"                except netaddr.AddrFormatError:"},{"line_number":1210,"context_line":"                    LOG.warning(\u0027Invalid IP address: %s\u0027, address)"},{"line_number":1211,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_e9287ee2","line":1208,"range":{"start_line":1208,"start_character":20,"end_line":1208,"end_character":64},"in_reply_to":"5fc1f717_99dda742","updated":"2019-03-29 09:54:38.000000000","message":"Ok. I will update IFs at lines #1173 and #1189","commit_id":"80d3b30158d839bed2a47545530e3603a01554ee"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8437d9bc0438801f0a7baabfffec95e436110252","unresolved":false,"context_lines":[{"line_number":1146,"context_line":"        \"\"\"Attempt to detect BMC v6 address"},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        :return: IPv6 address of lan channel or ::/0 in case none of them is"},{"line_number":1149,"context_line":"                 configured properly"},{"line_number":1150,"context_line":"        \"\"\""},{"line_number":1151,"context_line":"        # These modules are rarely loaded automatically"},{"line_number":1152,"context_line":"        utils.try_execute(\u0027modprobe\u0027, \u0027ipmi_msghandler\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_8ea75c0c","line":1149,"updated":"2019-04-01 14:22:51.000000000","message":"Please add a mention for None if no BMC address is found.","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"29beae524427793e9ad4c7c2a8c850fa749acb14","unresolved":false,"context_lines":[{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        :return: IPv6 address of lan channel or ::/0 in case none of them is"},{"line_number":1149,"context_line":"                 configured properly"},{"line_number":1150,"context_line":"        \"\"\""},{"line_number":1151,"context_line":"        # These modules are rarely loaded automatically"},{"line_number":1152,"context_line":"        utils.try_execute(\u0027modprobe\u0027, \u0027ipmi_msghandler\u0027)"},{"line_number":1153,"context_line":"        utils.try_execute(\u0027modprobe\u0027, \u0027ipmi_devintf\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_44395dd6","line":1150,"updated":"2019-04-01 09:31:31.000000000","message":"can you please add raises statements to the docstring ?","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"0c1829b4af3f5f03f832f6075906bfcb1fb78d91","unresolved":false,"context_lines":[{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        :return: IPv6 address of lan channel or ::/0 in case none of them is"},{"line_number":1149,"context_line":"                 configured properly"},{"line_number":1150,"context_line":"        \"\"\""},{"line_number":1151,"context_line":"        # These modules are rarely loaded automatically"},{"line_number":1152,"context_line":"        utils.try_execute(\u0027modprobe\u0027, \u0027ipmi_msghandler\u0027)"},{"line_number":1153,"context_line":"        utils.try_execute(\u0027modprobe\u0027, \u0027ipmi_devintf\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_d4ec1691","line":1150,"in_reply_to":"5fc1f717_44395dd6","updated":"2019-04-01 16:51:46.000000000","message":"It does not raise any exceptions. Return ::/0 or None if any occurs.","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"28c99949865c9d247c0278a53f2c6875c9f0c3b5","unresolved":false,"context_lines":[{"line_number":1174,"context_line":"                        and not null_address_re.match(address):"},{"line_number":1175,"context_line":"                    return address"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"        def get_static(channel):"},{"line_number":1178,"context_line":"            try:"},{"line_number":1179,"context_line":"                out, e \u003d utils.execute(\"ipmitool lan6 print {} \""},{"line_number":1180,"context_line":"                                       \"static_addr\".format(channel),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_67fcae0c","line":1177,"range":{"start_line":1177,"start_character":12,"end_line":1177,"end_character":22},"updated":"2019-03-30 12:24:00.000000000","message":"nit: It\u0027s shorter if you merge the two functions to one, say \"def get_addr(channel, dynamic\u003dTrue/False)\". Just an idea as I see these two share most of the code.","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"0c1829b4af3f5f03f832f6075906bfcb1fb78d91","unresolved":false,"context_lines":[{"line_number":1174,"context_line":"                        and not null_address_re.match(address):"},{"line_number":1175,"context_line":"                    return address"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"        def get_static(channel):"},{"line_number":1178,"context_line":"            try:"},{"line_number":1179,"context_line":"                out, e \u003d utils.execute(\"ipmitool lan6 print {} \""},{"line_number":1180,"context_line":"                                       \"static_addr\".format(channel),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_54f82648","line":1177,"range":{"start_line":1177,"start_character":12,"end_line":1177,"end_character":22},"in_reply_to":"5fc1f717_3008102c","updated":"2019-04-01 16:51:46.000000000","message":"ok","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"29beae524427793e9ad4c7c2a8c850fa749acb14","unresolved":false,"context_lines":[{"line_number":1174,"context_line":"                        and not null_address_re.match(address):"},{"line_number":1175,"context_line":"                    return address"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"        def get_static(channel):"},{"line_number":1178,"context_line":"            try:"},{"line_number":1179,"context_line":"                out, e \u003d utils.execute(\"ipmitool lan6 print {} \""},{"line_number":1180,"context_line":"                                       \"static_addr\".format(channel),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_3008102c","line":1177,"range":{"start_line":1177,"start_character":12,"end_line":1177,"end_character":22},"in_reply_to":"5fc1f717_67fcae0c","updated":"2019-04-01 09:31:31.000000000","message":"++","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"28c99949865c9d247c0278a53f2c6875c9f0c3b5","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"                    r\"ipmitool lan6 print {} enables | \""},{"line_number":1199,"context_line":"                    r\"awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/\""},{"line_number":1200,"context_line":"                    r\"{{print $NF}}\u0027\".format(channel),"},{"line_number":1201,"context_line":"                    shell\u003dTrue, check_exit_code\u003dFalse)"},{"line_number":1202,"context_line":"                if addr_mode.strip() not in [\u0027ipv6\u0027, \u0027both\u0027]:"},{"line_number":1203,"context_line":"                    continue"},{"line_number":1204,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_3bda3a4b","line":1201,"range":{"start_line":1201,"start_character":32,"end_line":1201,"end_character":53},"updated":"2019-03-30 12:24:00.000000000","message":"Could you give more info why you don\u0027t check exit code as I see the get_bmc_address() function doesn\u0027t use this argument?","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"6db233bae3e199ae6297fec75860946af31dada0","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"                    r\"ipmitool lan6 print {} enables | \""},{"line_number":1199,"context_line":"                    r\"awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/\""},{"line_number":1200,"context_line":"                    r\"{{print $NF}}\u0027\".format(channel),"},{"line_number":1201,"context_line":"                    shell\u003dTrue, check_exit_code\u003dFalse)"},{"line_number":1202,"context_line":"                if addr_mode.strip() not in [\u0027ipv6\u0027, \u0027both\u0027]:"},{"line_number":1203,"context_line":"                    continue"},{"line_number":1204,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_b432aa5d","line":1201,"range":{"start_line":1201,"start_character":32,"end_line":1201,"end_character":53},"in_reply_to":"5fc1f717_3bda3a4b","updated":"2019-04-01 16:33:03.000000000","message":"I thought of ignoring exit_code returned by ipmtool. If ipmitool fails the stdout (addr_mode valriable) is empty and that is checked in IF at line #1202 . \nBut here the command string made of two calls ipmitool and awk. Thus utils.execute fails if only AWK fails which never happens here. \nI will remove \u0027check_exit_code\u003dFalse\u0027 in next patch. Agree?","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8437d9bc0438801f0a7baabfffec95e436110252","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"                    r\"ipmitool lan6 print {} enables | \""},{"line_number":1199,"context_line":"                    r\"awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/\""},{"line_number":1200,"context_line":"                    r\"{{print $NF}}\u0027\".format(channel),"},{"line_number":1201,"context_line":"                    shell\u003dTrue, check_exit_code\u003dFalse)"},{"line_number":1202,"context_line":"                if addr_mode.strip() not in [\u0027ipv6\u0027, \u0027both\u0027]:"},{"line_number":1203,"context_line":"                    continue"},{"line_number":1204,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_ae4a5858","line":1201,"range":{"start_line":1201,"start_character":32,"end_line":1201,"end_character":53},"in_reply_to":"5fc1f717_3bda3a4b","updated":"2019-04-01 14:22:51.000000000","message":"lan6 might not exist or raise an error since it is less standardized. This makes sense to me.","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"0c1829b4af3f5f03f832f6075906bfcb1fb78d91","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"                    r\"ipmitool lan6 print {} enables | \""},{"line_number":1199,"context_line":"                    r\"awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/\""},{"line_number":1200,"context_line":"                    r\"{{print $NF}}\u0027\".format(channel),"},{"line_number":1201,"context_line":"                    shell\u003dTrue, check_exit_code\u003dFalse)"},{"line_number":1202,"context_line":"                if addr_mode.strip() not in [\u0027ipv6\u0027, \u0027both\u0027]:"},{"line_number":1203,"context_line":"                    continue"},{"line_number":1204,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_d772d8ad","line":1201,"range":{"start_line":1201,"start_character":32,"end_line":1201,"end_character":53},"in_reply_to":"5fc1f717_ae4a5858","updated":"2019-04-01 16:51:46.000000000","message":"\u003e lan6 might not exist or raise an error since it is less\n \u003e standardized. This makes sense to me.\n\nBy the way the first patch checked ipmitool version. See lines #1193-1202. lan6 command added in version 1.8.18. I removed it later becuuse distutils.version fails to parse 1.8.18-devXX version installed in tinycore.   Moreover 1.8.18 is released almost two years. \nWould you like me to get the check back?","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"ca2e4b69e22e11d13f6ed9b6547be8c6775ba814","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"                    r\"ipmitool lan6 print {} enables | \""},{"line_number":1199,"context_line":"                    r\"awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/\""},{"line_number":1200,"context_line":"                    r\"{{print $NF}}\u0027\".format(channel),"},{"line_number":1201,"context_line":"                    shell\u003dTrue, check_exit_code\u003dFalse)"},{"line_number":1202,"context_line":"                if addr_mode.strip() not in [\u0027ipv6\u0027, \u0027both\u0027]:"},{"line_number":1203,"context_line":"                    continue"},{"line_number":1204,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_6ee219a3","line":1201,"range":{"start_line":1201,"start_character":32,"end_line":1201,"end_character":53},"in_reply_to":"5fc1f717_d772d8ad","updated":"2019-04-02 14:25:31.000000000","message":"ipmitool 1.8.18 is the latest version, even if 2 years old :/\nyou could use LooseVersion from distutils.version or parse 1.8.18-devXX to get only the numerical version","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"28c99949865c9d247c0278a53f2c6875c9f0c3b5","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"                    address \u003d str(netaddr.IPNetwork(address).ip)"},{"line_number":1211,"context_line":"                except netaddr.AddrFormatError:"},{"line_number":1212,"context_line":"                    LOG.warning(\u0027Invalid IP address: %s\u0027, address)"},{"line_number":1213,"context_line":"                    continue"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"                return address"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"        except (processutils.ProcessExecutionError, OSError) as e:"},{"line_number":1218,"context_line":"            # Not error, because it\u0027s normal in virtual environment"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_b653ae39","line":1215,"range":{"start_line":1213,"start_character":0,"end_line":1215,"end_character":30},"updated":"2019-03-30 12:24:00.000000000","message":"nit: you can use \"return\" keyword at L1210 and remove these lines.","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"0c1829b4af3f5f03f832f6075906bfcb1fb78d91","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"                    address \u003d str(netaddr.IPNetwork(address).ip)"},{"line_number":1211,"context_line":"                except netaddr.AddrFormatError:"},{"line_number":1212,"context_line":"                    LOG.warning(\u0027Invalid IP address: %s\u0027, address)"},{"line_number":1213,"context_line":"                    continue"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"                return address"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"        except (processutils.ProcessExecutionError, OSError) as e:"},{"line_number":1218,"context_line":"            # Not error, because it\u0027s normal in virtual environment"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_7401a239","line":1215,"range":{"start_line":1213,"start_character":0,"end_line":1215,"end_character":30},"in_reply_to":"5fc1f717_b653ae39","updated":"2019-04-01 16:51:46.000000000","message":"ok","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"28c99949865c9d247c0278a53f2c6875c9f0c3b5","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"        except (processutils.ProcessExecutionError, OSError) as e:"},{"line_number":1218,"context_line":"            # Not error, because it\u0027s normal in virtual environment"},{"line_number":1219,"context_line":"            LOG.warning(\"Cannot get BMC v6 address: %s\", e)"},{"line_number":1220,"context_line":"            return"},{"line_number":1221,"context_line":""},{"line_number":1222,"context_line":"        return \u0027::/0\u0027"},{"line_number":1223,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_363d7edd","line":1220,"updated":"2019-03-30 12:24:00.000000000","message":"The above doc string does not mention this function can return None. This confuses me which is correct.","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"0c1829b4af3f5f03f832f6075906bfcb1fb78d91","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"        except (processutils.ProcessExecutionError, OSError) as e:"},{"line_number":1218,"context_line":"            # Not error, because it\u0027s normal in virtual environment"},{"line_number":1219,"context_line":"            LOG.warning(\"Cannot get BMC v6 address: %s\", e)"},{"line_number":1220,"context_line":"            return"},{"line_number":1221,"context_line":""},{"line_number":1222,"context_line":"        return \u0027::/0\u0027"},{"line_number":1223,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_34fb1a48","line":1220,"in_reply_to":"5fc1f717_363d7edd","updated":"2019-04-01 16:51:46.000000000","message":"ok","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"dce580c91a9c140b930382369a14ba343001c95e","unresolved":false,"context_lines":[{"line_number":1189,"context_line":"            # From all the channels 0-15, only 1-7 can be assigned to different"},{"line_number":1190,"context_line":"            # types of communication media and protocols and effectively used"},{"line_number":1191,"context_line":"            for channel in range(1, 8):"},{"line_number":1192,"context_line":"                addr_mode, e \u003d utils.execute("},{"line_number":1193,"context_line":"                    r\"ipmitool lan6 print {} enables | \""},{"line_number":1194,"context_line":"                    r\"awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/\""},{"line_number":1195,"context_line":"                    r\"{{print $NF}}\u0027\".format(channel), shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_83524011","line":1192,"range":{"start_line":1192,"start_character":37,"end_line":1192,"end_character":44},"updated":"2019-04-09 07:32:05.000000000","message":"If the execution fails for one channel, then iteration stopped, I guess it\u0027s common that several channels don\u0027t support the option while supported by channels followed them.\nFor example: ipmitool lan print {channel}\n\nI got error for channel 1, 2, 6, 7, and valid output for channel 3~5 for a bmc at hand.","commit_id":"518c338ca3ce749ccf73ce0a357fc081e1593f7a"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"29ecc1b3f20d08cf0a5a1c88aed654034955d2a6","unresolved":false,"context_lines":[{"line_number":1189,"context_line":"            # From all the channels 0-15, only 1-7 can be assigned to different"},{"line_number":1190,"context_line":"            # types of communication media and protocols and effectively used"},{"line_number":1191,"context_line":"            for channel in range(1, 8):"},{"line_number":1192,"context_line":"                addr_mode, e \u003d utils.execute("},{"line_number":1193,"context_line":"                    r\"ipmitool lan6 print {} enables | \""},{"line_number":1194,"context_line":"                    r\"awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/\""},{"line_number":1195,"context_line":"                    r\"{{print $NF}}\u0027\".format(channel), shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_5ec2ef86","line":1192,"range":{"start_line":1192,"start_character":37,"end_line":1192,"end_character":44},"in_reply_to":"5fc1f717_4355384f","updated":"2019-04-09 08:45:07.000000000","message":"Yep, you are right! I forgot the awk one..","commit_id":"518c338ca3ce749ccf73ce0a357fc081e1593f7a"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"953cfb22c15ebc53055ae48bb674483de653c188","unresolved":false,"context_lines":[{"line_number":1189,"context_line":"            # From all the channels 0-15, only 1-7 can be assigned to different"},{"line_number":1190,"context_line":"            # types of communication media and protocols and effectively used"},{"line_number":1191,"context_line":"            for channel in range(1, 8):"},{"line_number":1192,"context_line":"                addr_mode, e \u003d utils.execute("},{"line_number":1193,"context_line":"                    r\"ipmitool lan6 print {} enables | \""},{"line_number":1194,"context_line":"                    r\"awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/\""},{"line_number":1195,"context_line":"                    r\"{{print $NF}}\u0027\".format(channel), shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_4355384f","line":1192,"range":{"start_line":1192,"start_character":37,"end_line":1192,"end_character":44},"in_reply_to":"5fc1f717_83524011","updated":"2019-04-09 08:16:25.000000000","message":"Exit code of whole bash command is going to be an exit code of the last command, isn\u0027t it?\nimpitool may fail but awk would not fail in any case. Correct? \n\n~]# ipmitool lan6 print 6 enables \nGetting parameter(s)...\nFailed to get IPv6/IPv4 Addressing Enables: Invalid data field in request\n~]# echo $?\n1\n~]# ipmitool lan6 print 6 enables | awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/{print $NF}\u0027\nGetting parameter(s)...\nFailed to get IPv6/IPv4 Addressing Enables: Invalid data field in request\n~]# echo $?\n0\n~]#\n\nThe loop continue iterating if error occurs\n(py27) [root@m ironic-python-agent]# python\nPython 2.7.5 (default, Sep 12 2018, 05:31:16) \n[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\u003e\u003e\u003e from ironic_python_agent import utils\n\u003e\u003e\u003e for channel in range(1, 8):\n...     addr_mode, e \u003d utils.execute(r\"ipmitool lan6 print {} enables | awk \u0027/IPv6\\/IPv4 Addressing Enables[ \\t]*:/{{print $NF}}\u0027\".format(channel), shell\u003dTrue)\n...     print(\u0027channel: {}, addr_mode: [{}]\u0027.format(channel, addr_mode))\n...     print(\u0027e: \u0027 + e)\n... \nchannel: 1, addr_mode: []\ne: Getting parameter(s)...\nFailed to get IPv6/IPv4 Addressing Enables: Parameter not supported\n\nchannel: 2, addr_mode: []\ne: Getting parameter(s)...\nFailed to get IPv6/IPv4 Addressing Enables: Invalid data field in request\n\nchannel: 3, addr_mode: []\ne: Getting parameter(s)...\nFailed to get IPv6/IPv4 Addressing Enables: Invalid data field in request\n\nchannel: 4, addr_mode: []\ne: Getting parameter(s)...\nFailed to get IPv6/IPv4 Addressing Enables: Invalid data field in request\n\nchannel: 5, addr_mode: []\ne: Getting parameter(s)...\nFailed to get IPv6/IPv4 Addressing Enables: Invalid data field in request\n\nchannel: 6, addr_mode: []\ne: Getting parameter(s)...\nFailed to get IPv6/IPv4 Addressing Enables: Invalid data field in request\n\nchannel: 7, addr_mode: []\ne: Getting parameter(s)...\nFailed to get IPv6/IPv4 Addressing Enables: Invalid data field in request\n\n\u003e\u003e\u003e","commit_id":"518c338ca3ce749ccf73ce0a357fc081e1593f7a"}],"ironic_python_agent/tests/unit/test_hardware.py":[{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d2aa59f790a3666076d396b644ca39f74a16acf9","unresolved":false,"context_lines":[{"line_number":2173,"context_line":""},{"line_number":2174,"context_line":"        mocked_execute.side_effect \u003d side_effect"},{"line_number":2175,"context_line":"        self.assertEqual(\u0027::/0\u0027, self.hardware.get_bmc_v6address())"},{"line_number":2176,"context_line":""},{"line_number":2177,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027, autospec\u003dTrue)"},{"line_number":2178,"context_line":"    def test_get_system_vendor_info(self, mocked_execute):"},{"line_number":2179,"context_line":"        mocked_execute.return_value \u003d LSHW_JSON_OUTPUT"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_dce1ddd1","line":2176,"updated":"2019-03-28 05:19:48.000000000","message":"we also need a test case for the channel iteration.","commit_id":"80d3b30158d839bed2a47545530e3603a01554ee"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"2c12c039821e7697c54e1fadc7eec39e419f9a0f","unresolved":false,"context_lines":[{"line_number":2173,"context_line":""},{"line_number":2174,"context_line":"        mocked_execute.side_effect \u003d side_effect"},{"line_number":2175,"context_line":"        self.assertEqual(\u0027::/0\u0027, self.hardware.get_bmc_v6address())"},{"line_number":2176,"context_line":""},{"line_number":2177,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027, autospec\u003dTrue)"},{"line_number":2178,"context_line":"    def test_get_system_vendor_info(self, mocked_execute):"},{"line_number":2179,"context_line":"        mocked_execute.return_value \u003d LSHW_JSON_OUTPUT"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_df04544c","line":2176,"in_reply_to":"5fc1f717_dce1ddd1","updated":"2019-03-29 09:54:38.000000000","message":"Ok","commit_id":"80d3b30158d839bed2a47545530e3603a01554ee"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"dce580c91a9c140b930382369a14ba343001c95e","unresolved":false,"context_lines":[{"line_number":2177,"context_line":"    @mock.patch.object(hardware, \u0027LOG\u0027, autospec\u003dTrue)"},{"line_number":2178,"context_line":"    @mock.patch.object(utils, \u0027try_execute\u0027, autospec\u003dTrue)"},{"line_number":2179,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027, autospec\u003dTrue)"},{"line_number":2180,"context_line":"    def test_get_bmc_v6address_impitool_invalid_stdout_format("},{"line_number":2181,"context_line":"            self, mocked_execute, mte, mocked_log):"},{"line_number":2182,"context_line":"        def side_effect(*args, **kwargs):"},{"line_number":2183,"context_line":"            if args[0].startswith(\u0027ipmitool lan6 print\u0027):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_98686ff4","line":2180,"range":{"start_line":2180,"start_character":31,"end_line":2180,"end_character":39},"updated":"2019-04-09 07:32:05.000000000","message":"nit: ipmitool","commit_id":"518c338ca3ce749ccf73ce0a357fc081e1593f7a"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"953cfb22c15ebc53055ae48bb674483de653c188","unresolved":false,"context_lines":[{"line_number":2177,"context_line":"    @mock.patch.object(hardware, \u0027LOG\u0027, autospec\u003dTrue)"},{"line_number":2178,"context_line":"    @mock.patch.object(utils, \u0027try_execute\u0027, autospec\u003dTrue)"},{"line_number":2179,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027, autospec\u003dTrue)"},{"line_number":2180,"context_line":"    def test_get_bmc_v6address_impitool_invalid_stdout_format("},{"line_number":2181,"context_line":"            self, mocked_execute, mte, mocked_log):"},{"line_number":2182,"context_line":"        def side_effect(*args, **kwargs):"},{"line_number":2183,"context_line":"            if args[0].startswith(\u0027ipmitool lan6 print\u0027):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_6352b469","line":2180,"range":{"start_line":2180,"start_character":31,"end_line":2180,"end_character":39},"in_reply_to":"5fc1f717_98686ff4","updated":"2019-04-09 08:16:25.000000000","message":"Thanks","commit_id":"518c338ca3ce749ccf73ce0a357fc081e1593f7a"}],"releasenotes/notes/discover-ipv6-bmc-address-b3b357ff6c5d822c.yaml":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"29beae524427793e9ad4c7c2a8c850fa749acb14","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The IPA can discover IPv6 BMC address. The address sent back"},{"line_number":5,"context_line":"    to inspector inside full hardware inventory dictionary."},{"line_number":6,"context_line":"    Address value has a key \u0027bmc_v6address\u0027"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5fc1f717_44107d50","line":4,"updated":"2019-04-01 09:31:31.000000000","message":"maybe rewrite this like \"Adds collection of IPv6 BMC address and stores it in the ``bmc_v6address`` field of the inventory sent back to inspector\"","commit_id":"89fb611f65193b3bf504464193e13867446c1e77"}]}
