)]}'
{"octavia/amphorae/backends/agent/api_server/plug.py":[{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"d259744ae2d85c809b9b4941e67a9a9d5a737403","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            interface\u003dinterface,"},{"line_number":93,"context_line":"            vip\u003dvip,"},{"line_number":94,"context_line":"            broadcast\u003dbroadcast,"},{"line_number":95,"context_line":"            netmask\u003dnetmask,"},{"line_number":96,"context_line":"            ipv6\u003dip.version is 6,"},{"line_number":97,"context_line":"        )"},{"line_number":98,"context_line":"        text_file.write(text)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fad55976_69f34f74","line":95,"range":{"start_line":95,"start_character":20,"end_line":95,"end_character":27},"updated":"2016-07-16 03:27:06.000000000","message":"Very good to finally stop assuming this will always be an ipv4 /24, eh!","commit_id":"f22f7d3259a68c40243e53161e7ed1e4206091b6"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"9307818eaf70ed35dab8e24db3fa10e309874a3a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from octavia.common import constants as consts"},{"line_number":30,"context_line":"from octavia.i18n import _LE, _LI"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import ipaddress"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"ETH_X_VIP_CONF \u003d \u0027plug_vip_ethX.conf.j2\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_e851f963","line":32,"updated":"2016-07-18 21:06:28.000000000","message":"Exactly","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"25c599705c5298898fa06d125789f5e0ba3edd25","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from octavia.common import constants as consts"},{"line_number":30,"context_line":"from octavia.i18n import _LE, _LI"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import ipaddress"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"ETH_X_VIP_CONF \u003d \u0027plug_vip_ethX.conf.j2\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_c7dd0844","line":32,"updated":"2016-07-18 19:55:48.000000000","message":"This import not suppose to be here","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"84f16a26306e59c5ef679b22e2a1b5759d56486d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from octavia.common import constants as consts"},{"line_number":30,"context_line":"from octavia.i18n import _LE, _LI"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import ipaddress"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"ETH_X_VIP_CONF \u003d \u0027plug_vip_ethX.conf.j2\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_6d307b57","line":32,"in_reply_to":"dada55a8_c7dd0844","updated":"2016-07-18 20:46:20.000000000","message":"Do you mean it should be up around line 20?","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"5fffa46450736736b7902b813390121baa7dc7eb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from octavia.common import constants as consts"},{"line_number":30,"context_line":"from octavia.i18n import _LE, _LI"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import ipaddress"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"ETH_X_VIP_CONF \u003d \u0027plug_vip_ethX.conf.j2\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_ee4c4e72","line":32,"in_reply_to":"dada55a8_e851f963","updated":"2016-07-19 08:51:45.000000000","message":"So, the problem is that ipaddress is a weird library -- it exists as a system lib in py33+ but it is third-party in py27. So, it needs to be imported in the 4th group (ignored by pep8) or else it will fail when pep8 is run on one or the other of py27/py34. I put it here very explicitly.","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2a9c83f6212f669f8ee7cfe105c69cd77047889c","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from octavia.common import constants as consts"},{"line_number":30,"context_line":"from octavia.i18n import _LE, _LI"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import ipaddress"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"ETH_X_VIP_CONF \u003d \u0027plug_vip_ethX.conf.j2\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_2ed4a61e","line":32,"in_reply_to":"dada55a8_ee4c4e72","updated":"2016-07-19 10:11:28.000000000","message":"I did some more testing around this, and it looks like it\u0027s not going to work right with py34 pep8 anyway, so I may as well cater to the gate and put it where it\u0027d need to be for py27 pep8...","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"}],"octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"9307818eaf70ed35dab8e24db3fa10e309874a3a","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    @mock.patch(\u0027os.makedirs\u0027)"},{"line_number":588,"context_line":"    def test_plug_vip(self, mock_makedirs, mock_copytree, mock_check_output,"},{"line_number":589,"context_line":"                      mock_netns, mock_netns_create, mock_pyroute2,"},{"line_number":590,"context_line":"                      mock_ifaddress, mock_interfaces):"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        subnet_info_ipv4 \u003d {"},{"line_number":593,"context_line":"            \u0027subnet_cidr\u0027: \u0027203.0.113.0/24\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_a85f0171","line":590,"updated":"2016-07-18 21:06:28.000000000","message":"I thing that we should split it up into separate tests is because when we\u0027re running this code on gate we don\u0027t really know which functionality broke this up - IPv4 or IPv6 - so it will be much clear to understand what is going one plus always test suppose to as simple as possible because it\u0027s easier to understand, change and debug that - especially when you\u0027re working in TDD methodology you\u0027re producing much cleaner and easier to maintain, understand and read code","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"25c599705c5298898fa06d125789f5e0ba3edd25","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    @mock.patch(\u0027os.makedirs\u0027)"},{"line_number":588,"context_line":"    def test_plug_vip(self, mock_makedirs, mock_copytree, mock_check_output,"},{"line_number":589,"context_line":"                      mock_netns, mock_netns_create, mock_pyroute2,"},{"line_number":590,"context_line":"                      mock_ifaddress, mock_interfaces):"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        subnet_info_ipv4 \u003d {"},{"line_number":593,"context_line":"            \u0027subnet_cidr\u0027: \u0027203.0.113.0/24\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_87d31038","line":590,"updated":"2016-07-18 19:55:48.000000000","message":"Personally I would prefare to see two separate tests for that. We not suppose to mix IPv4/v6 tests. Please split it into two separate parts.","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"84f16a26306e59c5ef679b22e2a1b5759d56486d","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    @mock.patch(\u0027os.makedirs\u0027)"},{"line_number":588,"context_line":"    def test_plug_vip(self, mock_makedirs, mock_copytree, mock_check_output,"},{"line_number":589,"context_line":"                      mock_netns, mock_netns_create, mock_pyroute2,"},{"line_number":590,"context_line":"                      mock_ifaddress, mock_interfaces):"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        subnet_info_ipv4 \u003d {"},{"line_number":593,"context_line":"            \u0027subnet_cidr\u0027: \u0027203.0.113.0/24\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_adbb9371","line":590,"in_reply_to":"dada55a8_87d31038","updated":"2016-07-18 20:46:20.000000000","message":"Does combining the tests save a significant amount of code? If it doesn\u0027t save code, it probably does make sense to split this into separate test_plug_vip_ipv4 and test_plug_vip_ipv6 tests. Otherwise, it makes sense to leave them combined.","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"5fffa46450736736b7902b813390121baa7dc7eb","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    @mock.patch(\u0027os.makedirs\u0027)"},{"line_number":588,"context_line":"    def test_plug_vip(self, mock_makedirs, mock_copytree, mock_check_output,"},{"line_number":589,"context_line":"                      mock_netns, mock_netns_create, mock_pyroute2,"},{"line_number":590,"context_line":"                      mock_ifaddress, mock_interfaces):"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        subnet_info_ipv4 \u003d {"},{"line_number":593,"context_line":"            \u0027subnet_cidr\u0027: \u0027203.0.113.0/24\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_2e9ca6bf","line":590,"in_reply_to":"dada55a8_a85f0171","updated":"2016-07-19 08:51:45.000000000","message":"I agree diltram -- I will split this into two tests.","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"25c599705c5298898fa06d125789f5e0ba3edd25","unresolved":false,"context_lines":[{"line_number":595,"context_line":"            \u0027mac_address\u0027: \u0027123\u0027"},{"line_number":596,"context_line":"        }"},{"line_number":597,"context_line":"        subnet_info_ipv6 \u003d {"},{"line_number":598,"context_line":"            \u0027subnet_cidr\u0027: \u00272001:db8::/32\u0027,"},{"line_number":599,"context_line":"            \u0027gateway\u0027: \u00272001:db8::1\u0027,"},{"line_number":600,"context_line":"            \u0027mac_address\u0027: \u0027123\u0027"},{"line_number":601,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_67d89c54","line":598,"updated":"2016-07-18 19:55:48.000000000","message":"Neutron code require /64 currently. Maybe we should do the same because it will not work in that way with our Neutron driver","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"9307818eaf70ed35dab8e24db3fa10e309874a3a","unresolved":false,"context_lines":[{"line_number":595,"context_line":"            \u0027mac_address\u0027: \u0027123\u0027"},{"line_number":596,"context_line":"        }"},{"line_number":597,"context_line":"        subnet_info_ipv6 \u003d {"},{"line_number":598,"context_line":"            \u0027subnet_cidr\u0027: \u00272001:db8::/32\u0027,"},{"line_number":599,"context_line":"            \u0027gateway\u0027: \u00272001:db8::1\u0027,"},{"line_number":600,"context_line":"            \u0027mac_address\u0027: \u0027123\u0027"},{"line_number":601,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_08556d4f","line":598,"updated":"2016-07-18 21:06:28.000000000","message":"On weekend I was trying to add new subnet with IPv6 and they have a restriction to use /64 mask - it\u0027s because in that way is IPv6 created. When you\u0027re requesting for a subnet there is 48 bits of prefix, 16 bits on subnet number and 64 for addressing namespace (RFC 6177)","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"99e640020b9482a20f945bcdb18c15a915bd6a51","unresolved":false,"context_lines":[{"line_number":595,"context_line":"            \u0027mac_address\u0027: \u0027123\u0027"},{"line_number":596,"context_line":"        }"},{"line_number":597,"context_line":"        subnet_info_ipv6 \u003d {"},{"line_number":598,"context_line":"            \u0027subnet_cidr\u0027: \u00272001:db8::/32\u0027,"},{"line_number":599,"context_line":"            \u0027gateway\u0027: \u00272001:db8::1\u0027,"},{"line_number":600,"context_line":"            \u0027mac_address\u0027: \u0027123\u0027"},{"line_number":601,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_ff89b0cb","line":598,"in_reply_to":"dada55a8_08556d4f","updated":"2016-07-18 22:01:45.000000000","message":"In practice, I\u0027ve seen people deploying provider networks that are larger than a /64. (Which doesn\u0027t make sense, I know-- but people do it anyway.) Since this is \"in the wild\" behavior, and since VIPs might be taken from subnets deployed this way, it doesn\u0027t make any sense to hard-code a /64 in here.","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"84f16a26306e59c5ef679b22e2a1b5759d56486d","unresolved":false,"context_lines":[{"line_number":595,"context_line":"            \u0027mac_address\u0027: \u0027123\u0027"},{"line_number":596,"context_line":"        }"},{"line_number":597,"context_line":"        subnet_info_ipv6 \u003d {"},{"line_number":598,"context_line":"            \u0027subnet_cidr\u0027: \u00272001:db8::/32\u0027,"},{"line_number":599,"context_line":"            \u0027gateway\u0027: \u00272001:db8::1\u0027,"},{"line_number":600,"context_line":"            \u0027mac_address\u0027: \u0027123\u0027"},{"line_number":601,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_083badd2","line":598,"in_reply_to":"dada55a8_67d89c54","updated":"2016-07-18 20:46:20.000000000","message":"What do you mean \"neutron code requires /64 currently\"?  Neutron doesn\u0027t support IPv6 subnets of any size other than a /64? That seems both odd and like bad design to me. :/\n\nIn any case, I\u0027d almost advocate using something other than a /64 (if it works out off the bat) specifically because I\u0027d like us to catch it if someone does something stupid elsewhere, like hard-code a netmask in there somewhere... and with IPv6, it is awfully tempting for people to hard code /64 assumptions into the code. ;)","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"5fffa46450736736b7902b813390121baa7dc7eb","unresolved":false,"context_lines":[{"line_number":595,"context_line":"            \u0027mac_address\u0027: \u0027123\u0027"},{"line_number":596,"context_line":"        }"},{"line_number":597,"context_line":"        subnet_info_ipv6 \u003d {"},{"line_number":598,"context_line":"            \u0027subnet_cidr\u0027: \u00272001:db8::/32\u0027,"},{"line_number":599,"context_line":"            \u0027gateway\u0027: \u00272001:db8::1\u0027,"},{"line_number":600,"context_line":"            \u0027mac_address\u0027: \u0027123\u0027"},{"line_number":601,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_aec5368f","line":598,"in_reply_to":"dada55a8_ff89b0cb","updated":"2016-07-19 08:51:45.000000000","message":"This test shouldn\u0027t be measurably worse than one that uses a /64 and I like it this way because it actually already caught one bug when I was working on this, as Stephen alluded to hardcoding /64 in places. I would prefer to leave it as-is.","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"}],"octavia/tests/functional/amphorae/backend/agent/api_server/test_server_sysvinit.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"25c599705c5298898fa06d125789f5e0ba3edd25","unresolved":false,"context_lines":[{"line_number":593,"context_line":"    @mock.patch(\u0027os.makedirs\u0027)"},{"line_number":594,"context_line":"    def test_plug_vip(self, mock_makedirs, mock_copytree, mock_check_output,"},{"line_number":595,"context_line":"                      mock_netns, mock_netns_create, mock_pyroute2,"},{"line_number":596,"context_line":"                      mock_ifaddress, mock_interfaces):"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        subnet_info_ipv4 \u003d {"},{"line_number":599,"context_line":"            \u0027subnet_cidr\u0027: \u0027203.0.113.0/24\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_a7e29401","line":596,"updated":"2016-07-18 19:55:48.000000000","message":"The same like in test_server.py","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"}],"octavia/tests/unit/amphorae/backends/agent/api_server/test_plug.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2dbfa96f2c8ad5d01cf55af671ca078db33e3c96","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(TestPlug, self).setUp()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        # These mocks seem dumb but I\u0027m not sure how else to do this"},{"line_number":38,"context_line":"        self.mock_netifaces \u003d mock.patch.object(plug, \"netifaces\").start()"},{"line_number":39,"context_line":"        self.addCleanup(self.mock_netifaces.stop)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_cf21a2b6","line":37,"updated":"2016-07-08 22:06:50.000000000","message":"You could use the mock decorator at the class level right?","commit_id":"64bcf58cfef5859be6f291a6b5b21927807301d9"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"bab445cafff21e00606eaca2d2ddb073b2a907e3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(TestPlug, self).setUp()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        # These mocks seem dumb but I\u0027m not sure how else to do this"},{"line_number":38,"context_line":"        self.mock_netifaces \u003d mock.patch.object(plug, \"netifaces\").start()"},{"line_number":39,"context_line":"        self.addCleanup(self.mock_netifaces.stop)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_e630080a","line":37,"in_reply_to":"1aa78d24_6677f8d4","updated":"2016-07-08 23:16:05.000000000","message":"Also, then EVERYTHING has to include it in their sigs, when this is the only thing that uses it in this case.","commit_id":"64bcf58cfef5859be6f291a6b5b21927807301d9"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7705b5c3e1b94137d0d82323a54f8436e5138d9a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(TestPlug, self).setUp()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        # These mocks seem dumb but I\u0027m not sure how else to do this"},{"line_number":38,"context_line":"        self.mock_netifaces \u003d mock.patch.object(plug, \"netifaces\").start()"},{"line_number":39,"context_line":"        self.addCleanup(self.mock_netifaces.stop)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_6677f8d4","line":37,"in_reply_to":"1aa78d24_cf21a2b6","updated":"2016-07-08 23:14:36.000000000","message":"If you do that here it complains a bit about the setUp() signature not matching the superclass... which is ... maybe OK, but I didn\u0027t want to do that.","commit_id":"64bcf58cfef5859be6f291a6b5b21927807301d9"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2dbfa96f2c8ad5d01cf55af671ca078db33e3c96","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.mock_netifaces \u003d mock.patch.object(plug, \"netifaces\").start()"},{"line_number":39,"context_line":"        self.addCleanup(self.mock_netifaces.stop)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        # Set up our face interface"},{"line_number":42,"context_line":"        self.mock_netifaces.AF_LINK \u003d netifaces.AF_LINK"},{"line_number":43,"context_line":"        mock_interface \u003d \u0027eth0\u0027"},{"line_number":44,"context_line":"        self.mock_netifaces.interfaces.return_value \u003d [mock_interface]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_6fbb4e76","line":41,"range":{"start_line":41,"start_character":21,"end_line":41,"end_character":25},"updated":"2016-07-08 22:06:50.000000000","message":"face-\u003efake","commit_id":"64bcf58cfef5859be6f291a6b5b21927807301d9"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7705b5c3e1b94137d0d82323a54f8436e5138d9a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.mock_netifaces \u003d mock.patch.object(plug, \"netifaces\").start()"},{"line_number":39,"context_line":"        self.addCleanup(self.mock_netifaces.stop)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        # Set up our face interface"},{"line_number":42,"context_line":"        self.mock_netifaces.AF_LINK \u003d netifaces.AF_LINK"},{"line_number":43,"context_line":"        mock_interface \u003d \u0027eth0\u0027"},{"line_number":44,"context_line":"        self.mock_netifaces.interfaces.return_value \u003d [mock_interface]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_867ca4b6","line":41,"range":{"start_line":41,"start_character":21,"end_line":41,"end_character":25},"in_reply_to":"1aa78d24_6fbb4e76","updated":"2016-07-08 23:14:36.000000000","message":"lol fixed","commit_id":"64bcf58cfef5859be6f291a6b5b21927807301d9"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"25c599705c5298898fa06d125789f5e0ba3edd25","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"import netifaces"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_07e8c0e1","line":16,"updated":"2016-07-18 19:55:48.000000000","message":"You don\u0027t need that empty line - all imports are from python stdlib","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ac061246f01bc594b88f1b1eab0c6861dd88bc79","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"import netifaces"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_34dcf0e3","line":16,"in_reply_to":"dada55a8_07e8c0e1","updated":"2016-07-19 12:19:17.000000000","message":"That\u0027s incorrect. mock and netifaces are third-party.","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"25c599705c5298898fa06d125789f5e0ba3edd25","unresolved":false,"context_lines":[{"line_number":23,"context_line":"FAKE_CIDR_IPV4 \u003d \u002710.0.0.0/24\u0027"},{"line_number":24,"context_line":"FAKE_GATEWAY_IPV4 \u003d \u002710.0.0.1\u0027"},{"line_number":25,"context_line":"FAKE_IP_IPV4 \u003d \u002710.0.0.2\u0027"},{"line_number":26,"context_line":"FAKE_CIDR_IPV6 \u003d \u00272001:db8::/32\u0027"},{"line_number":27,"context_line":"FAKE_GATEWAY_IPV6 \u003d \u00272001:db8::1\u0027"},{"line_number":28,"context_line":"FAKE_IP_IPV6 \u003d \u00272001:db8::2\u0027"},{"line_number":29,"context_line":"FAKE_IP_IPV6_EXPANDED \u003d \u00272001:0db8:0000:0000:0000:0000:0000:0002\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_e7e48c0e","line":26,"updated":"2016-07-18 19:55:48.000000000","message":"The same here - Neutron require /64","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ac061246f01bc594b88f1b1eab0c6861dd88bc79","unresolved":false,"context_lines":[{"line_number":23,"context_line":"FAKE_CIDR_IPV4 \u003d \u002710.0.0.0/24\u0027"},{"line_number":24,"context_line":"FAKE_GATEWAY_IPV4 \u003d \u002710.0.0.1\u0027"},{"line_number":25,"context_line":"FAKE_IP_IPV4 \u003d \u002710.0.0.2\u0027"},{"line_number":26,"context_line":"FAKE_CIDR_IPV6 \u003d \u00272001:db8::/32\u0027"},{"line_number":27,"context_line":"FAKE_GATEWAY_IPV6 \u003d \u00272001:db8::1\u0027"},{"line_number":28,"context_line":"FAKE_IP_IPV6 \u003d \u00272001:db8::2\u0027"},{"line_number":29,"context_line":"FAKE_IP_IPV6_EXPANDED \u003d \u00272001:0db8:0000:0000:0000:0000:0000:0002\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_f4e8987e","line":26,"in_reply_to":"dada55a8_e7e48c0e","updated":"2016-07-19 12:19:17.000000000","message":"Opting to leave it as a /32 on purpose.","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"25c599705c5298898fa06d125789f5e0ba3edd25","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.mock_netifaces \u003d mock.patch.object(plug, \"netifaces\").start()"},{"line_number":38,"context_line":"        self.addCleanup(self.mock_netifaces.stop)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        # Set up our fake interface"},{"line_number":41,"context_line":"        self.mock_netifaces.AF_LINK \u003d netifaces.AF_LINK"},{"line_number":42,"context_line":"        mock_interface \u003d \u0027eth0\u0027"},{"line_number":43,"context_line":"        self.mock_netifaces.interfaces.return_value \u003d [mock_interface]"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_47f2b8d3","line":40,"updated":"2016-07-18 19:55:48.000000000","message":"Maybe we should create a ContextManager responsible for that? It will be more easy to use and readable","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ac061246f01bc594b88f1b1eab0c6861dd88bc79","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.mock_netifaces \u003d mock.patch.object(plug, \"netifaces\").start()"},{"line_number":38,"context_line":"        self.addCleanup(self.mock_netifaces.stop)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        # Set up our fake interface"},{"line_number":41,"context_line":"        self.mock_netifaces.AF_LINK \u003d netifaces.AF_LINK"},{"line_number":42,"context_line":"        mock_interface \u003d \u0027eth0\u0027"},{"line_number":43,"context_line":"        self.mock_netifaces.interfaces.return_value \u003d [mock_interface]"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_741b081c","line":40,"in_reply_to":"dada55a8_47f2b8d3","updated":"2016-07-19 12:19:17.000000000","message":"I can do SOME work around this, but I don\u0027t honestly think it\u0027s incredibly necessary, and I actually think writing a context-manager might make it LESS easy to read. The setUp function is *for* things like this, isn\u0027t it?\nI will definitely move eth0 out to FAKE_INTERFACE though, I missed that on my first pass. T_T","commit_id":"2af77e4b43d7ca117892b91fc5a341b1a880dfab"}],"releasenotes/notes/IPv6-support-953ef81ed8555fce.yaml":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"819639b713a2038bcc74bbb53e5304b51e2b35c0","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds support for IPv6"},{"line_number":4,"context_line":"upgrade:"},{"line_number":5,"context_line":"  - To support IPv6 a databse migration and amphora image update are required."},{"line_number":6,"context_line":"fixes:"},{"line_number":7,"context_line":"  - Resolves an issue with subnets larger than /24"}],"source_content_type":"text/x-yaml","patch_set":27,"id":"9ad45d7e_78cfe455","line":5,"updated":"2016-08-11 22:45:44.000000000","message":"Typo\u0027d database, don\u0027t care.","commit_id":"8c50a35850a62b922f3ad7f753df4d1ce53f2815"}],"requirements.txt":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2dbfa96f2c8ad5d01cf55af671ca078db33e3c96","unresolved":false,"context_lines":[{"line_number":38,"context_line":"#for the amphora api"},{"line_number":39,"context_line":"Flask!\u003d0.11,\u003c1.0,\u003e\u003d0.10 # BSD"},{"line_number":40,"context_line":"netifaces\u003e\u003d0.10.4 # MIT"},{"line_number":41,"context_line":"ipaddress\u003e\u003d1.0.7"},{"line_number":42,"context_line":"cryptography!\u003d1.3.0,\u003e\u003d1.0 # BSD/Apache-2.0"}],"source_content_type":"text/plain","patch_set":1,"id":"1aa78d24_4f7db2e6","line":41,"updated":"2016-07-08 22:06:50.000000000","message":"This has to match the global-requirements format I think.\nipaddress\u003e\u003d1.0.7;python_version\u003c\u00273.3\u0027  # PSF","commit_id":"64bcf58cfef5859be6f291a6b5b21927807301d9"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7705b5c3e1b94137d0d82323a54f8436e5138d9a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"#for the amphora api"},{"line_number":39,"context_line":"Flask!\u003d0.11,\u003c1.0,\u003e\u003d0.10 # BSD"},{"line_number":40,"context_line":"netifaces\u003e\u003d0.10.4 # MIT"},{"line_number":41,"context_line":"ipaddress\u003e\u003d1.0.7"},{"line_number":42,"context_line":"cryptography!\u003d1.3.0,\u003e\u003d1.0 # BSD/Apache-2.0"}],"source_content_type":"text/plain","patch_set":1,"id":"1aa78d24_06b9d479","line":41,"in_reply_to":"1aa78d24_4f7db2e6","updated":"2016-07-08 23:14:36.000000000","message":"Yeah I wasn\u0027t sure, I actually copied this line from that file, but I was going to let the req-bot fix it if it was necessary.","commit_id":"64bcf58cfef5859be6f291a6b5b21927807301d9"}]}
