)]}'
{"nova/privsep/__init__.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"f4963cfe629ecf1ff483c58a9b73e766f2a3d411","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \u0027nova\u0027,"},{"line_number":37,"context_line":"    cfg_section\u003d\u0027nova_privileged\u0027,"},{"line_number":38,"context_line":"    pypath\u003d__name__ + \u0027.net_admin_pctxt\u0027,"},{"line_number":39,"context_line":"    capabilities\u003d[0, 1, 2, 3, capabilities.CAP_NET_ADMIN],"},{"line_number":40,"context_line":")"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_2e0602d0","line":39,"range":{"start_line":39,"start_character":18,"end_line":39,"end_character":29},"updated":"2017-08-02 05:41:58.000000000","message":"Yup sadly all the reads/writes to any filesystem need these and the writes to /sys/***/{bridge,brport} also need CAP_NET_ADMIN.","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"}],"nova/privsep/libvirt.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0e4cee4f1b3c9f53d641e2d4e943ae47ecb7676b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"@nova.privsep.dacnet_admin_pctxt.entrypoint"},{"line_number":76,"context_line":"def disable_ipv6(interface):"},{"line_number":77,"context_line":"    \"\"\"Disable ipv6 for a bridge.\"\"\""},{"line_number":78,"context_line":"    with open(\u0027/proc/sys/net/ipv6/conf/%s/disable_ipv\u0027 % interface, \u0027w\u0027) as f:"},{"line_number":79,"context_line":"        f.write(\u00271\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_7a38caeb","line":78,"range":{"start_line":78,"start_character":42,"end_line":78,"end_character":53},"updated":"2018-10-03 19:21:48.000000000","message":"bug 1794126 - looks like this crept in because it\u0027s not tested, the code that hits this is mocking out the privsep method.","commit_id":"0952f80d013c4ab85ff82355312feb2464796e38"}],"nova/privsep/net_admin.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"f4963cfe629ecf1ff483c58a9b73e766f2a3d411","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@nova.privsep.net_admin_pctxt.entrypoint"},{"line_number":26,"context_line":"def writefile(path, mode, content):"},{"line_number":27,"context_line":"    if not os.path.exists(path):"},{"line_number":28,"context_line":"        raise exception.FileNotFound(file_path\u003dpath)"},{"line_number":29,"context_line":"    with open(path, mode) as f:"},{"line_number":30,"context_line":"        f.write(content)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_dadbb5ea","line":30,"range":{"start_line":26,"start_character":0,"end_line":30,"end_character":24},"updated":"2017-08-02 05:41:58.000000000","message":"I wonder if we can factor this into privsep/_lib to avoid the open-coding.\n\nWe only need to decorate the entry point?","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"01ee3f8049f6cb609c6a5ed7c60763e2ab0e7976","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@nova.privsep.net_admin_pctxt.entrypoint"},{"line_number":26,"context_line":"def writefile(path, mode, content):"},{"line_number":27,"context_line":"    if not os.path.exists(path):"},{"line_number":28,"context_line":"        raise exception.FileNotFound(file_path\u003dpath)"},{"line_number":29,"context_line":"    with open(path, mode) as f:"},{"line_number":30,"context_line":"        f.write(content)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_11936351","line":30,"range":{"start_line":26,"start_character":0,"end_line":30,"end_character":24},"in_reply_to":"df3967d1_dadbb5ea","updated":"2017-08-02 06:39:38.000000000","message":"Yeah, this is me hamfistedly trying to see what we need. I\u0027ll replace this with a more targeted method which only does what we need in the next revision.","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"}],"nova/tests/unit/virt/libvirt/test_vif.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a86b6447bd5df14a61b9b8544a7ee7910eb97641","unresolved":false,"context_lines":[{"line_number":948,"context_line":"        d \u003d vif.LibvirtGenericVIFDriver()"},{"line_number":949,"context_line":"        self._test_hw_veb_op(d.unplug, 0)"},{"line_number":950,"context_line":""},{"line_number":951,"context_line":"    def test_plug_ivs_hybrid(self):"},{"line_number":952,"context_line":"        calls \u003d {"},{"line_number":953,"context_line":"            \u0027device_exists\u0027: [mock.call(\u0027qbrvif-xxx-yyy\u0027),"},{"line_number":954,"context_line":"                              mock.call(\u0027qvovif-xxx-yyy\u0027)],"},{"line_number":955,"context_line":"            \u0027_create_veth_pair\u0027: [mock.call(\u0027qvbvif-xxx-yyy\u0027,"},{"line_number":956,"context_line":"                                            \u0027qvovif-xxx-yyy\u0027, None)],"},{"line_number":957,"context_line":"            \u0027execute\u0027: [mock.call(\u0027brctl\u0027, \u0027addbr\u0027, \u0027qbrvif-xxx-yyy\u0027,"},{"line_number":958,"context_line":"                                  run_as_root\u003dTrue),"},{"line_number":959,"context_line":"                        mock.call(\u0027brctl\u0027, \u0027setfd\u0027, \u0027qbrvif-xxx-yyy\u0027, 0,"},{"line_number":960,"context_line":"                                  run_as_root\u003dTrue),"},{"line_number":961,"context_line":"                        mock.call(\u0027brctl\u0027, \u0027stp\u0027, \u0027qbrvif-xxx-yyy\u0027, \u0027off\u0027,"},{"line_number":962,"context_line":"                                  run_as_root\u003dTrue),"},{"line_number":963,"context_line":"                        mock.call(\u0027tee\u0027, (\u0027/sys/class/net/qbrvif-xxx-yyy\u0027"},{"line_number":964,"context_line":"                                          \u0027/bridge/multicast_snooping\u0027),"},{"line_number":965,"context_line":"                                  process_input\u003d\u00270\u0027, run_as_root\u003dTrue,"},{"line_number":966,"context_line":"                                  check_exit_code\u003d[0, 1]),"},{"line_number":967,"context_line":"                        mock.call(\u0027tee\u0027, (\u0027/proc/sys/net/ipv6/conf\u0027"},{"line_number":968,"context_line":"                                          \u0027/qbrvif-xxx-yyy/disable_ipv6\u0027),"},{"line_number":969,"context_line":"                                  process_input\u003d\u00271\u0027, run_as_root\u003dTrue,"},{"line_number":970,"context_line":"                                  check_exit_code\u003d[0, 1]),"},{"line_number":971,"context_line":"                        mock.call(\u0027ip\u0027, \u0027link\u0027, \u0027set\u0027, \u0027qbrvif-xxx-yyy\u0027, \u0027up\u0027,"},{"line_number":972,"context_line":"                                  run_as_root\u003dTrue),"},{"line_number":973,"context_line":"                        mock.call(\u0027brctl\u0027, \u0027addif\u0027, \u0027qbrvif-xxx-yyy\u0027,"},{"line_number":974,"context_line":"                                  \u0027qvbvif-xxx-yyy\u0027, run_as_root\u003dTrue)],"},{"line_number":975,"context_line":"            \u0027create_ivs_vif_port\u0027: [mock.call(\u0027qvovif-xxx-yyy\u0027, \u0027aaa-bbb-ccc\u0027,"},{"line_number":976,"context_line":"                                    \u0027ca:fe:de:ad:be:ef\u0027,"},{"line_number":977,"context_line":"                                    \u0027f0000000-0000-0000-0000-000000000001\u0027)]"},{"line_number":978,"context_line":"        }"},{"line_number":979,"context_line":"        with test.nested("},{"line_number":980,"context_line":"                mock.patch.object(linux_net, \u0027device_exists\u0027,"},{"line_number":981,"context_line":"                                  return_value\u003dFalse),"},{"line_number":982,"context_line":"                mock.patch.object(utils, \u0027execute\u0027),"},{"line_number":983,"context_line":"                mock.patch.object(linux_net, \u0027_create_veth_pair\u0027),"},{"line_number":984,"context_line":"                mock.patch.object(linux_net, \u0027create_ivs_vif_port\u0027),"},{"line_number":985,"context_line":"                mock.patch.object(os.path, \u0027exists\u0027, return_value\u003dTrue)"},{"line_number":986,"context_line":"        ) as (device_exists, execute, _create_veth_pair, create_ivs_vif_port,"},{"line_number":987,"context_line":"              path_exists):"},{"line_number":988,"context_line":"            d \u003d vif.LibvirtGenericVIFDriver()"},{"line_number":989,"context_line":"            d.plug(self.instance, self.vif_ivs)"},{"line_number":990,"context_line":"            device_exists.assert_has_calls(calls[\u0027device_exists\u0027])"},{"line_number":991,"context_line":"            _create_veth_pair.assert_has_calls(calls[\u0027_create_veth_pair\u0027])"},{"line_number":992,"context_line":"            execute.assert_has_calls(calls[\u0027execute\u0027])"},{"line_number":993,"context_line":"            create_ivs_vif_port.assert_has_calls(calls[\u0027create_ivs_vif_port\u0027])"},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"    def test_unplug_ivs_hybrid(self):"},{"line_number":996,"context_line":"        calls \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f2577a7_13d514ba","side":"PARENT","line":993,"range":{"start_line":951,"start_character":0,"end_line":993,"end_character":78},"updated":"2017-09-08 15:55:17.000000000","message":"Why is this gone? We still use this code path for IVS, afaik? (no os-vif plugin for IVS)","commit_id":"8325d41d4e126bdd46236e687b0f109f1d9226dc"}],"nova/virt/libvirt/vif.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"f4963cfe629ecf1ff483c58a9b73e766f2a3d411","unresolved":false,"context_lines":[{"line_number":576,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027addbr\u0027, br_name, run_as_root\u003dTrue)"},{"line_number":577,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027setfd\u0027, br_name, 0, run_as_root\u003dTrue)"},{"line_number":578,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027stp\u0027, br_name, \u0027off\u0027, run_as_root\u003dTrue)"},{"line_number":579,"context_line":"            dac_admin.writefile("},{"line_number":580,"context_line":"                \u0027/sys/class/net/%s/bridge/multicast_snooping\u0027 % br_name,"},{"line_number":581,"context_line":"                \u0027w\u0027, \u00270\u0027)"},{"line_number":582,"context_line":"            disv6 \u003d \u0027/proc/sys/net/ipv6/conf/%s/disable_ipv6\u0027 % br_name"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_1aeb7d79","line":579,"range":{"start_line":579,"start_character":12,"end_line":579,"end_character":21},"updated":"2017-08-02 05:41:58.000000000","message":"net_admin","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"01ee3f8049f6cb609c6a5ed7c60763e2ab0e7976","unresolved":false,"context_lines":[{"line_number":576,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027addbr\u0027, br_name, run_as_root\u003dTrue)"},{"line_number":577,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027setfd\u0027, br_name, 0, run_as_root\u003dTrue)"},{"line_number":578,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027stp\u0027, br_name, \u0027off\u0027, run_as_root\u003dTrue)"},{"line_number":579,"context_line":"            dac_admin.writefile("},{"line_number":580,"context_line":"                \u0027/sys/class/net/%s/bridge/multicast_snooping\u0027 % br_name,"},{"line_number":581,"context_line":"                \u0027w\u0027, \u00270\u0027)"},{"line_number":582,"context_line":"            disv6 \u003d \u0027/proc/sys/net/ipv6/conf/%s/disable_ipv6\u0027 % br_name"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_b1a3779e","line":579,"range":{"start_line":579,"start_character":12,"end_line":579,"end_character":21},"in_reply_to":"df3967d1_1aeb7d79","updated":"2017-08-02 06:39:38.000000000","message":"But tests pass for this one?","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"c87df5e3f25ada973d5131c4a2fb66ea42752116","unresolved":false,"context_lines":[{"line_number":576,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027addbr\u0027, br_name, run_as_root\u003dTrue)"},{"line_number":577,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027setfd\u0027, br_name, 0, run_as_root\u003dTrue)"},{"line_number":578,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027stp\u0027, br_name, \u0027off\u0027, run_as_root\u003dTrue)"},{"line_number":579,"context_line":"            dac_admin.writefile("},{"line_number":580,"context_line":"                \u0027/sys/class/net/%s/bridge/multicast_snooping\u0027 % br_name,"},{"line_number":581,"context_line":"                \u0027w\u0027, \u00270\u0027)"},{"line_number":582,"context_line":"            disv6 \u003d \u0027/proc/sys/net/ipv6/conf/%s/disable_ipv6\u0027 % br_name"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_f4fcffb5","line":579,"range":{"start_line":579,"start_character":12,"end_line":579,"end_character":21},"in_reply_to":"df3967d1_91ad1333","updated":"2017-08-04 05:51:09.000000000","message":"I find it quite hard to tell if these are dead code or not. I guess we should ask Jay?","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"a5c0678146fd181af71d81d588ddbb446188d6fa","unresolved":false,"context_lines":[{"line_number":576,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027addbr\u0027, br_name, run_as_root\u003dTrue)"},{"line_number":577,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027setfd\u0027, br_name, 0, run_as_root\u003dTrue)"},{"line_number":578,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027stp\u0027, br_name, \u0027off\u0027, run_as_root\u003dTrue)"},{"line_number":579,"context_line":"            dac_admin.writefile("},{"line_number":580,"context_line":"                \u0027/sys/class/net/%s/bridge/multicast_snooping\u0027 % br_name,"},{"line_number":581,"context_line":"                \u0027w\u0027, \u00270\u0027)"},{"line_number":582,"context_line":"            disv6 \u003d \u0027/proc/sys/net/ipv6/conf/%s/disable_ipv6\u0027 % br_name"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_91ad1333","line":579,"range":{"start_line":579,"start_character":12,"end_line":579,"end_character":21},"in_reply_to":"df3967d1_b1a3779e","updated":"2017-08-02 07:03:25.000000000","message":"Are you certain we\u0027re calling this in dsvm?","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8e0a1fcd2829a6353afed1ccfb7173f6445743fb","unresolved":false,"context_lines":[{"line_number":576,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027addbr\u0027, br_name, run_as_root\u003dTrue)"},{"line_number":577,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027setfd\u0027, br_name, 0, run_as_root\u003dTrue)"},{"line_number":578,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027stp\u0027, br_name, \u0027off\u0027, run_as_root\u003dTrue)"},{"line_number":579,"context_line":"            dac_admin.writefile("},{"line_number":580,"context_line":"                \u0027/sys/class/net/%s/bridge/multicast_snooping\u0027 % br_name,"},{"line_number":581,"context_line":"                \u0027w\u0027, \u00270\u0027)"},{"line_number":582,"context_line":"            disv6 \u003d \u0027/proc/sys/net/ipv6/conf/%s/disable_ipv6\u0027 % br_name"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_ccacbaee","line":579,"range":{"start_line":579,"start_character":12,"end_line":579,"end_character":21},"in_reply_to":"df3967d1_f4fcffb5","updated":"2017-08-04 18:40:00.000000000","message":"These code paths are only hit for the defunct IVS vif plug type and the plug_ovs_hybrid() code path, which actually should not be used any more since os-vif handles OVS hybrid plugging.","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"f4963cfe629ecf1ff483c58a9b73e766f2a3d411","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                \u0027w\u0027, \u00270\u0027)"},{"line_number":582,"context_line":"            disv6 \u003d \u0027/proc/sys/net/ipv6/conf/%s/disable_ipv6\u0027 % br_name"},{"line_number":583,"context_line":"            if os.path.exists(disv6):"},{"line_number":584,"context_line":"                dac_admin.writefile(disv6, \u0027w\u0027, \u00271\u0027)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if not linux_net.device_exists(v2_name):"},{"line_number":587,"context_line":"            mtu \u003d vif[\u0027network\u0027].get_meta(\u0027mtu\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_baffd132","line":584,"range":{"start_line":584,"start_character":16,"end_line":584,"end_character":25},"updated":"2017-08-02 05:41:58.000000000","message":"So this is an interesting one.  AFAICT dac_admin is correct here in terms of capabilities required but it looks strange to be tweaking a networking sysctl wit dac_admin.  So perhaps a big comment to the effect of that?","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"a5c0678146fd181af71d81d588ddbb446188d6fa","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                \u0027w\u0027, \u00270\u0027)"},{"line_number":582,"context_line":"            disv6 \u003d \u0027/proc/sys/net/ipv6/conf/%s/disable_ipv6\u0027 % br_name"},{"line_number":583,"context_line":"            if os.path.exists(disv6):"},{"line_number":584,"context_line":"                dac_admin.writefile(disv6, \u0027w\u0027, \u00271\u0027)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if not linux_net.device_exists(v2_name):"},{"line_number":587,"context_line":"            mtu \u003d vif[\u0027network\u0027].get_meta(\u0027mtu\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_4446c751","line":584,"range":{"start_line":584,"start_character":16,"end_line":584,"end_character":25},"in_reply_to":"df3967d1_31b9c7cb","updated":"2017-08-02 07:03:25.000000000","message":"I\u0027m not confused about the capabilities we need.  I am confused about where we\u0027re testing/using this.\n\nMy 2mins of grepping shows _plug_bridge_with_port() is called\nfrom plug_ovs_hybrid() and plug_ivs_hybrid() but they\u0027re not used anywhere.\n\nI bet this got moved to os-vif and never axed from nova","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"01ee3f8049f6cb609c6a5ed7c60763e2ab0e7976","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                \u0027w\u0027, \u00270\u0027)"},{"line_number":582,"context_line":"            disv6 \u003d \u0027/proc/sys/net/ipv6/conf/%s/disable_ipv6\u0027 % br_name"},{"line_number":583,"context_line":"            if os.path.exists(disv6):"},{"line_number":584,"context_line":"                dac_admin.writefile(disv6, \u0027w\u0027, \u00271\u0027)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if not linux_net.device_exists(v2_name):"},{"line_number":587,"context_line":"            mtu \u003d vif[\u0027network\u0027].get_meta(\u0027mtu\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_31b9c7cb","line":584,"range":{"start_line":584,"start_character":16,"end_line":584,"end_character":25},"in_reply_to":"df3967d1_baffd132","updated":"2017-08-02 06:39:38.000000000","message":"Tests pass here too... So I\u0027m left confused about what capabilities we actually require for these two.","commit_id":"9e46b5229a33c2bd21614a3fa2d423c75c0de193"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a86b6447bd5df14a61b9b8544a7ee7910eb97641","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        return func(instance, vif, image_meta,"},{"line_number":567,"context_line":"                    inst_type, virt_type, host)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def plug_ivs_hybrid(self, instance, vif):"},{"line_number":570,"context_line":"        \"\"\"Plug using hybrid strategy (same as OVS)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"        Create a per-VIF linux bridge, then link that bridge to the OVS"},{"line_number":573,"context_line":"        integration bridge via a veth device, setting up the other end"},{"line_number":574,"context_line":"        of the veth device just like a normal IVS port.  Then boot the"},{"line_number":575,"context_line":"        VIF on the linux bridge using standard libvirt mechanisms."},{"line_number":576,"context_line":"        \"\"\""},{"line_number":577,"context_line":"        iface_id \u003d self.get_ovs_interfaceid(vif)"},{"line_number":578,"context_line":"        br_name \u003d self.get_br_name(vif[\u0027id\u0027])"},{"line_number":579,"context_line":"        v1_name, v2_name \u003d self.get_veth_pair_names(vif[\u0027id\u0027])"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        if not linux_net.device_exists(br_name):"},{"line_number":582,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027addbr\u0027, br_name, run_as_root\u003dTrue)"},{"line_number":583,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027setfd\u0027, br_name, 0, run_as_root\u003dTrue)"},{"line_number":584,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027stp\u0027, br_name, \u0027off\u0027, run_as_root\u003dTrue)"},{"line_number":585,"context_line":"            utils.execute(\u0027tee\u0027,"},{"line_number":586,"context_line":"                          (\u0027/sys/class/net/%s/bridge/multicast_snooping\u0027 %"},{"line_number":587,"context_line":"                           br_name),"},{"line_number":588,"context_line":"                          process_input\u003d\u00270\u0027,"},{"line_number":589,"context_line":"                          run_as_root\u003dTrue,"},{"line_number":590,"context_line":"                          check_exit_code\u003d[0, 1])"},{"line_number":591,"context_line":"            disv6 \u003d \u0027/proc/sys/net/ipv6/conf/%s/disable_ipv6\u0027 % br_name"},{"line_number":592,"context_line":"            if os.path.exists(disv6):"},{"line_number":593,"context_line":"                utils.execute(\u0027tee\u0027,"},{"line_number":594,"context_line":"                              disv6,"},{"line_number":595,"context_line":"                              process_input\u003d\u00271\u0027,"},{"line_number":596,"context_line":"                              run_as_root\u003dTrue,"},{"line_number":597,"context_line":"                              check_exit_code\u003d[0, 1])"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        if not linux_net.device_exists(v2_name):"},{"line_number":600,"context_line":"            mtu \u003d vif[\u0027network\u0027].get_meta(\u0027mtu\u0027)"},{"line_number":601,"context_line":"            linux_net._create_veth_pair(v1_name, v2_name, mtu)"},{"line_number":602,"context_line":"            utils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027set\u0027, br_name, \u0027up\u0027, run_as_root\u003dTrue)"},{"line_number":603,"context_line":"            utils.execute(\u0027brctl\u0027, \u0027addif\u0027, br_name, v1_name, run_as_root\u003dTrue)"},{"line_number":604,"context_line":"            linux_net.create_ivs_vif_port(v2_name, iface_id,"},{"line_number":605,"context_line":"                                          vif[\u0027address\u0027], instance.uuid)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    def plug_ivs_ethernet(self, instance, vif):"},{"line_number":608,"context_line":"        iface_id \u003d self.get_ovs_interfaceid(vif)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f2577a7_93e0e498","side":"PARENT","line":605,"range":{"start_line":569,"start_character":0,"end_line":605,"end_character":72},"updated":"2017-09-08 15:55:17.000000000","message":"This shouldn\u0027t go. It\u0027s loaded dynamically below","commit_id":"8325d41d4e126bdd46236e687b0f109f1d9226dc"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a86b6447bd5df14a61b9b8544a7ee7910eb97641","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            return"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"        # Legacy non-os-vif codepath"},{"line_number":786,"context_line":"        vif_slug \u003d self._normalize_vif_type(vif_type)"},{"line_number":787,"context_line":"        func \u003d getattr(self, \u0027plug_%s\u0027 % vif_slug, None)"},{"line_number":788,"context_line":"        if not func:"},{"line_number":789,"context_line":"            raise exception.VirtualInterfacePlugException("},{"line_number":790,"context_line":"                _(\"Plug vif failed because of unexpected \""}],"source_content_type":"text/x-python","patch_set":23,"id":"5f2577a7_13a3d451","side":"PARENT","line":787,"range":{"start_line":786,"start_character":0,"end_line":787,"end_character":56},"updated":"2017-09-08 15:55:17.000000000","message":"Here. Yay for Python\u0027s dynamicness! :/","commit_id":"8325d41d4e126bdd46236e687b0f109f1d9226dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0e4cee4f1b3c9f53d641e2d4e943ae47ecb7676b","unresolved":false,"context_lines":[{"line_number":588,"context_line":"                          process_input\u003d\u00270\u0027,"},{"line_number":589,"context_line":"                          run_as_root\u003dTrue,"},{"line_number":590,"context_line":"                          check_exit_code\u003d[0, 1])"},{"line_number":591,"context_line":"            disv6 \u003d \u0027/proc/sys/net/ipv6/conf/%s/disable_ipv6\u0027 % br_name"},{"line_number":592,"context_line":"            if os.path.exists(disv6):"},{"line_number":593,"context_line":"                utils.execute(\u0027tee\u0027,"},{"line_number":594,"context_line":"                              disv6,"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_8dfd7209","side":"PARENT","line":591,"range":{"start_line":591,"start_character":48,"end_line":591,"end_character":60},"updated":"2018-10-03 19:21:48.000000000","message":"oops","commit_id":"d83e9c0b177d63c425075438c1462cdd809baa93"}]}
