)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"68118bd547b1eb3cfd67068c7c92ee45f0ce6bf9","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Note that the API is returning string floating ip identifiers when neutron"},{"line_number":13,"context_line":"is in use, as opposed to the integer ones returned when nova-network is in"},{"line_number":14,"context_line":"use. This patch does not address that problem, but uses the external_id"},{"line_number":15,"context_line":"field of the floating_ip object to keep the current behavior unchanged."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Needed for blueprint rm-object-dict-compat-newton"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a061dce_9491709c","line":14,"range":{"start_line":14,"start_character":60,"end_line":14,"end_character":71},"updated":"2016-04-05 13:56:00.000000000","message":"not anymore","commit_id":"bef95f82c1a3456e4f7dc9713edecb00897f743d"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"ae3cc12853b148403086f6aa9386ae7a318c6ed3","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Note that the API is returning string floating ip identifiers when neutron"},{"line_number":13,"context_line":"is in use, as opposed to the integer ones returned when nova-network is in"},{"line_number":14,"context_line":"use. This patch does not address that problem, but uses the external_id"},{"line_number":15,"context_line":"field of the floating_ip object to keep the current behavior unchanged."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Needed for blueprint rm-object-dict-compat-newton"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a061dce_9791729c","line":14,"range":{"start_line":14,"start_character":60,"end_line":14,"end_character":71},"in_reply_to":"9a061dce_9491709c","updated":"2016-04-05 21:55:00.000000000","message":"woops","commit_id":"bef95f82c1a3456e4f7dc9713edecb00897f743d"}],"nova/api/openstack/compute/contrib/floating_ips.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0b144612c61dd1b8a3a53a380b25a5576e3f245a","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def _translate_floating_ip_view(floating_ip):"},{"line_number":64,"context_line":"    result \u003d {"},{"line_number":65,"context_line":"        \u0027id\u0027: floating_ip.get(\u0027id\u0027, None) or floating_ip.get(\u0027external_id\u0027),"},{"line_number":66,"context_line":"        \u0027ip\u0027: floating_ip[\u0027address\u0027],"},{"line_number":67,"context_line":"        \u0027pool\u0027: floating_ip[\u0027pool\u0027],"},{"line_number":68,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_a30e6a30","line":65,"updated":"2014-11-20 23:50:19.000000000","message":"Should we add a note for why this is? \"Because Neutron?\"","commit_id":"a44cabe8d4b02f61b31f1f9701488ae049b2c194"}],"nova/api/openstack/compute/floating_ips.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dca23c9874f627175b24332e74b41e720bd6b20b","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        # disassociate if associated"},{"line_number":287,"context_line":"        if (instance and"},{"line_number":288,"context_line":"            floating_ip.get(\u0027fixed_ip_id\u0027) and"},{"line_number":289,"context_line":"            (uuidutils.is_uuid_like(id) and"},{"line_number":290,"context_line":"             [instance.uuid \u003d\u003d id] or"},{"line_number":291,"context_line":"             [instance.id \u003d\u003d id])[0]):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_7e6169d3","line":288,"range":{"start_line":288,"start_character":12,"end_line":288,"end_character":42},"updated":"2016-04-01 19:23:07.000000000","message":"This is getting lazy-loaded and blowing up in the neutron job:\n\nhttp://logs.openstack.org/49/115749/9/check/gate-tempest-dsvm-neutron-full/96d224f/logs/screen-n-api.txt.gz?level\u003dTRACE#_2016-04-01_15_01_35_592","commit_id":"32977a76e7db88f13685352bdef6e3e71c039792"}],"nova/network/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0b144612c61dd1b8a3a53a380b25a5576e3f245a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        # (from neutronapi) then that\u0027s fine, else gracefully look for"},{"line_number":200,"context_line":"        # a truthy fixed_ip_id (from nova-network) without causing the"},{"line_number":201,"context_line":"        # object to potentially lazy-load."},{"line_number":202,"context_line":"        if \u0027fixed_ip\u0027 in floating_ip or floating_ip.get(\u0027fixed_ip_id\u0027, None):"},{"line_number":203,"context_line":"            # was associated to a fixed ip, so disassociate"},{"line_number":204,"context_line":"            try:"},{"line_number":205,"context_line":"                self.disassociate_floating_ip(context, instance, address)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_23035a0e","line":202,"updated":"2014-11-20 23:50:19.000000000","message":"We should add a unit test for this.","commit_id":"a44cabe8d4b02f61b31f1f9701488ae049b2c194"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0747fea73f7df711d54244d51f995e1e988e88ef","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        \"\"\""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        address \u003d floating_ip[\u0027address\u0027]"},{"line_number":196,"context_line":"        # NOTE(danms): If we\u0027re an object and have the fixed_ip object"},{"line_number":197,"context_line":"        # (from neutronapi) then that\u0027s fine, else gracefully look for"},{"line_number":198,"context_line":"        # a truthy fixed_ip_id (from nova-network) without causing the"},{"line_number":199,"context_line":"        # object to potentially lazy-load."},{"line_number":200,"context_line":"        if \u0027fixed_ip\u0027 in floating_ip or floating_ip.get(\u0027fixed_ip_id\u0027, None):"},{"line_number":201,"context_line":"            # was associated to a fixed ip, so disassociate"},{"line_number":202,"context_line":"            try:"},{"line_number":203,"context_line":"                self.disassociate_floating_ip(context, instance, address)"},{"line_number":204,"context_line":"            except exception.FloatingIpNotAssociated:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba0121b8_2b240a5c","line":201,"range":{"start_line":196,"start_character":8,"end_line":201,"end_character":59},"updated":"2016-03-31 20:01:23.000000000","message":"Why do we need to handle this as part of this change? This is the nova-network API, not neutron, so I\u0027d think things should just continue working as before.","commit_id":"c3ce7b61b1f5c01e8381eae3322388cb98160a29"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"617e04bbb6f4c52abe21a4d7d402bcee3d322173","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        \"\"\""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        address \u003d floating_ip[\u0027address\u0027]"},{"line_number":196,"context_line":"        # NOTE(danms): If we\u0027re an object and have the fixed_ip object"},{"line_number":197,"context_line":"        # (from neutronapi) then that\u0027s fine, else gracefully look for"},{"line_number":198,"context_line":"        # a truthy fixed_ip_id (from nova-network) without causing the"},{"line_number":199,"context_line":"        # object to potentially lazy-load."},{"line_number":200,"context_line":"        if \u0027fixed_ip\u0027 in floating_ip or floating_ip.get(\u0027fixed_ip_id\u0027, None):"},{"line_number":201,"context_line":"            # was associated to a fixed ip, so disassociate"},{"line_number":202,"context_line":"            try:"},{"line_number":203,"context_line":"                self.disassociate_floating_ip(context, instance, address)"},{"line_number":204,"context_line":"            except exception.FloatingIpNotAssociated:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba0121b8_9d2e188a","line":201,"range":{"start_line":196,"start_character":8,"end_line":201,"end_character":59},"in_reply_to":"ba0121b8_2b240a5c","updated":"2016-04-01 13:12:31.000000000","message":"That\u0027s a good question. I also do not see a purpose for this.","commit_id":"c3ce7b61b1f5c01e8381eae3322388cb98160a29"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0747fea73f7df711d54244d51f995e1e988e88ef","unresolved":false,"context_lines":[{"line_number":1393,"context_line":"        if fip[\u0027port_id\u0027]:"},{"line_number":1394,"context_line":"            instance_uuid \u003d port_dict[fip[\u0027port_id\u0027]][\u0027device_id\u0027]"},{"line_number":1395,"context_line":"            # NOTE(danms): This could be .refresh()d, so give it context"},{"line_number":1396,"context_line":"            floating.instance \u003d objects.Instance(context\u003dcontext,"},{"line_number":1397,"context_line":"                                                 uuid\u003dinstance_uuid)"},{"line_number":1398,"context_line":"        else:"},{"line_number":1399,"context_line":"            floating.instance \u003d None"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba0121b8_0b94a640","line":1396,"updated":"2016-03-31 20:01:23.000000000","message":"I seem to remember something about this change breaking the ec2 API, which is now out of tree, but still, we might need to think about whether or not we\u0027re breaking that.","commit_id":"c3ce7b61b1f5c01e8381eae3322388cb98160a29"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"617e04bbb6f4c52abe21a4d7d402bcee3d322173","unresolved":false,"context_lines":[{"line_number":1393,"context_line":"        if fip[\u0027port_id\u0027]:"},{"line_number":1394,"context_line":"            instance_uuid \u003d port_dict[fip[\u0027port_id\u0027]][\u0027device_id\u0027]"},{"line_number":1395,"context_line":"            # NOTE(danms): This could be .refresh()d, so give it context"},{"line_number":1396,"context_line":"            floating.instance \u003d objects.Instance(context\u003dcontext,"},{"line_number":1397,"context_line":"                                                 uuid\u003dinstance_uuid)"},{"line_number":1398,"context_line":"        else:"},{"line_number":1399,"context_line":"            floating.instance \u003d None"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba0121b8_021bc781","line":1396,"in_reply_to":"ba0121b8_0b94a640","updated":"2016-04-01 13:12:31.000000000","message":"Now I don\u0027t know the ec2 api at all, but this seems like a pretty non-dangerous change. The ec2 api can see the instance object just fine, so this shouldn\u0027t change how that works.","commit_id":"c3ce7b61b1f5c01e8381eae3322388cb98160a29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8db6eac5089a0496e2cd8eb2b47e59a21f836adb","unresolved":false,"context_lines":[{"line_number":1382,"context_line":"                  \u0027pool\u0027: pool[\u0027name\u0027] or pool[\u0027id\u0027],"},{"line_number":1383,"context_line":"                  \u0027project_id\u0027: fip[\u0027tenant_id\u0027],"},{"line_number":1384,"context_line":"                  # In Neutron v2, an exact fixed_ip_id does not exist."},{"line_number":1385,"context_line":"                  \u0027fixed_ip_id\u0027: fip[\u0027port_id\u0027],"},{"line_number":1386,"context_line":"                  }"},{"line_number":1387,"context_line":"        # In Neutron v2 API fixed_ip_address and instance uuid"},{"line_number":1388,"context_line":"        # (\u003d device_id) are known here, so pass it as a result."}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_7ec7a964","side":"PARENT","line":1385,"range":{"start_line":1385,"start_character":18,"end_line":1385,"end_character":48},"updated":"2016-04-01 19:28:21.000000000","message":"OK, so the API is blowing up because you\u0027re not setting this now:\n\nhttp://logs.openstack.org/49/115749/9/check/gate-tempest-dsvm-neutron-full/96d224f/logs/screen-n-api.txt.gz?level\u003dTRACE#_2016-04-01_15_01_35_592\n\nBut you can\u0027t set FloatingIP.fixed_ip_id to port_id because the field is an integer type and port id is a uuid.\n\nWhat you could do, is put the port uuid in a VirtualInterface.uuid field, set that on the FixedIP object that you then set in the FloatingIP object. I think that would be fine since a VIF in nova-network is the same as a port in neutron.","commit_id":"9cae1f82761a73b28b7804ba5cad733a5c46e42f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ad3c8f5beb97d09780c6fc8cd5099f3df268579d","unresolved":false,"context_lines":[{"line_number":1382,"context_line":"                  \u0027pool\u0027: pool[\u0027name\u0027] or pool[\u0027id\u0027],"},{"line_number":1383,"context_line":"                  \u0027project_id\u0027: fip[\u0027tenant_id\u0027],"},{"line_number":1384,"context_line":"                  # In Neutron v2, an exact fixed_ip_id does not exist."},{"line_number":1385,"context_line":"                  \u0027fixed_ip_id\u0027: fip[\u0027port_id\u0027],"},{"line_number":1386,"context_line":"                  }"},{"line_number":1387,"context_line":"        # In Neutron v2 API fixed_ip_address and instance uuid"},{"line_number":1388,"context_line":"        # (\u003d device_id) are known here, so pass it as a result."}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_dea2354b","side":"PARENT","line":1385,"range":{"start_line":1385,"start_character":18,"end_line":1385,"end_character":48},"in_reply_to":"ba0121b8_7ec7a964","updated":"2016-04-01 19:35:54.000000000","message":"The problem with this, of course, is the consumer of this anywhere has to be smart enough to get it either way, which sucks.\n\nWe could add a helper method to the FloatingIP object though...like special-case fixed_ip_id in obj_load_attr to return it if it\u0027s set, but if not, then check down the FixedIP-\u003eVirtualInterface chain and return that uuid.","commit_id":"9cae1f82761a73b28b7804ba5cad733a5c46e42f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8d266ea0573c033c724acb8faedd71135af6b582","unresolved":false,"context_lines":[{"line_number":1430,"context_line":"            # NOTE(danms): This could be .refresh()d, so give it context"},{"line_number":1431,"context_line":"            floating.instance \u003d objects.Instance(context\u003dcontext,"},{"line_number":1432,"context_line":"                                                 uuid\u003dinstance_uuid)"},{"line_number":1433,"context_line":"            floating.fixed_ip.instance_uuid \u003d instance_uuid"},{"line_number":1434,"context_line":"        else:"},{"line_number":1435,"context_line":"            floating.instance \u003d None"},{"line_number":1436,"context_line":"        return floating"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_518a4ac0","line":1433,"range":{"start_line":1433,"start_character":12,"end_line":1433,"end_character":29},"updated":"2016-04-05 13:55:36.000000000","message":"How do we know this isn\u0027t None?","commit_id":"bef95f82c1a3456e4f7dc9713edecb00897f743d"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"ae3cc12853b148403086f6aa9386ae7a318c6ed3","unresolved":false,"context_lines":[{"line_number":1430,"context_line":"            # NOTE(danms): This could be .refresh()d, so give it context"},{"line_number":1431,"context_line":"            floating.instance \u003d objects.Instance(context\u003dcontext,"},{"line_number":1432,"context_line":"                                                 uuid\u003dinstance_uuid)"},{"line_number":1433,"context_line":"            floating.fixed_ip.instance_uuid \u003d instance_uuid"},{"line_number":1434,"context_line":"        else:"},{"line_number":1435,"context_line":"            floating.instance \u003d None"},{"line_number":1436,"context_line":"        return floating"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_547d181b","line":1433,"range":{"start_line":1433,"start_character":12,"end_line":1433,"end_character":29},"in_reply_to":"9a061dce_518a4ac0","updated":"2016-04-05 21:55:00.000000000","message":"In the same reasoning that we knew it wasn\u0027t None before :)","commit_id":"bef95f82c1a3456e4f7dc9713edecb00897f743d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a750a3e6cf47b39947ea23a1afd12835dfc23605","unresolved":false,"context_lines":[{"line_number":1425,"context_line":"        if fip[\u0027port_id\u0027]:"},{"line_number":1426,"context_line":"            instance_uuid \u003d port_dict[fip[\u0027port_id\u0027]][\u0027device_id\u0027]"},{"line_number":1427,"context_line":"            result[\u0027instance\u0027] \u003d {\u0027uuid\u0027: instance_uuid}"},{"line_number":1428,"context_line":"            # TODO(mriedem): remove this workaround once the get_floating_ip*"},{"line_number":1429,"context_line":"            # API methods are converted to use nova objects."},{"line_number":1430,"context_line":"            result[\u0027fixed_ip\u0027][\u0027instance_uuid\u0027] \u003d instance_uuid"},{"line_number":1431,"context_line":"        else:"},{"line_number":1432,"context_line":"            result[\u0027instance\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a1b2928_48048116","side":"PARENT","line":1429,"range":{"start_line":1428,"start_character":12,"end_line":1429,"end_character":60},"updated":"2016-04-11 17:58:37.000000000","message":"I need to look up whatever this workaround was, maybe we don\u0027t even need this being set now since we set floating.instance.","commit_id":"f71eae17e4481de053e460345f6ca0f0316182a0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b7dcadadb56c77bb337b8e30630e360ea731dc69","unresolved":false,"context_lines":[{"line_number":1425,"context_line":"        if fip[\u0027port_id\u0027]:"},{"line_number":1426,"context_line":"            instance_uuid \u003d port_dict[fip[\u0027port_id\u0027]][\u0027device_id\u0027]"},{"line_number":1427,"context_line":"            result[\u0027instance\u0027] \u003d {\u0027uuid\u0027: instance_uuid}"},{"line_number":1428,"context_line":"            # TODO(mriedem): remove this workaround once the get_floating_ip*"},{"line_number":1429,"context_line":"            # API methods are converted to use nova objects."},{"line_number":1430,"context_line":"            result[\u0027fixed_ip\u0027][\u0027instance_uuid\u0027] \u003d instance_uuid"},{"line_number":1431,"context_line":"        else:"},{"line_number":1432,"context_line":"            result[\u0027instance\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a1b2928_eb41070d","side":"PARENT","line":1429,"range":{"start_line":1428,"start_character":12,"end_line":1429,"end_character":60},"in_reply_to":"7a1b2928_48048116","updated":"2016-04-11 18:03:57.000000000","message":"The change was 48c24dbb6bc1e55973dce2b8bc3e74105b0020ce that introduced this.\n\nBecause the REST API is using it here:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/floating_ips.py#L52\n\nSo you probably handle that later in the series, but for now we\u0027re still passing this workaround to the REST API, and since floating.fixed_ip can be None, we can\u0027t just set instance_uuid on it - so add an:\n\n if floating.fixed_ip is not None:\n\ncheck to the code before setting that.\n\nAnd leave the TODO in there to remove it later in the series.","commit_id":"f71eae17e4481de053e460345f6ca0f0316182a0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30b5971bfe63b00a8077c2d6616bf7dafdecb9a1","unresolved":false,"context_lines":[{"line_number":1425,"context_line":"        if fip[\u0027port_id\u0027]:"},{"line_number":1426,"context_line":"            instance_uuid \u003d port_dict[fip[\u0027port_id\u0027]][\u0027device_id\u0027]"},{"line_number":1427,"context_line":"            result[\u0027instance\u0027] \u003d {\u0027uuid\u0027: instance_uuid}"},{"line_number":1428,"context_line":"            # TODO(mriedem): remove this workaround once the get_floating_ip*"},{"line_number":1429,"context_line":"            # API methods are converted to use nova objects."},{"line_number":1430,"context_line":"            result[\u0027fixed_ip\u0027][\u0027instance_uuid\u0027] \u003d instance_uuid"},{"line_number":1431,"context_line":"        else:"},{"line_number":1432,"context_line":"            result[\u0027instance\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a1b2928_2b6e5f2f","side":"PARENT","line":1429,"range":{"start_line":1428,"start_character":12,"end_line":1429,"end_character":60},"in_reply_to":"7a1b2928_eb41070d","updated":"2016-04-11 18:12:23.000000000","message":"Actually I don\u0027t think we can get rid of the workaround, that\u0027s what the API uses (floating_ip.fixed_ip.instance_uuid) which is what it\u0027s getting from nova-network when using the object model for floating IPs:\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/floating_ip.py#L60-L63","commit_id":"f71eae17e4481de053e460345f6ca0f0316182a0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ff8fa9a0aeab09c44547a8288757d83521888321","unresolved":false,"context_lines":[{"line_number":1430,"context_line":"            # NOTE(danms): This could be .refresh()d, so give it context"},{"line_number":1431,"context_line":"            floating.instance \u003d objects.Instance(context\u003dcontext,"},{"line_number":1432,"context_line":"                                                 uuid\u003dinstance_uuid)"},{"line_number":1433,"context_line":"            floating.fixed_ip.instance_uuid \u003d instance_uuid"},{"line_number":1434,"context_line":"        else:"},{"line_number":1435,"context_line":"            floating.instance \u003d None"},{"line_number":1436,"context_line":"        return floating"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a1b2928_a8bc356d","line":1433,"range":{"start_line":1433,"start_character":12,"end_line":1433,"end_character":29},"updated":"2016-04-11 17:57:31.000000000","message":"This is still broken if floating.fixed_ip \u003d None above on L1427.","commit_id":"7090fadf92763ae78556e215357e454d222c17b8"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"4154ea3320f13708f94a77451ecdb863c9d0095f","unresolved":false,"context_lines":[{"line_number":1430,"context_line":"            # NOTE(danms): This could be .refresh()d, so give it context"},{"line_number":1431,"context_line":"            floating.instance \u003d objects.Instance(context\u003dcontext,"},{"line_number":1432,"context_line":"                                                 uuid\u003dinstance_uuid)"},{"line_number":1433,"context_line":"            floating.fixed_ip.instance_uuid \u003d instance_uuid"},{"line_number":1434,"context_line":"        else:"},{"line_number":1435,"context_line":"            floating.instance \u003d None"},{"line_number":1436,"context_line":"        return floating"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a18252c_f6be23d3","line":1433,"range":{"start_line":1433,"start_character":12,"end_line":1433,"end_character":29},"in_reply_to":"7a1b2928_a8bc356d","updated":"2016-04-12 12:51:45.000000000","message":"Done","commit_id":"7090fadf92763ae78556e215357e454d222c17b8"}],"nova/tests/unit/api/openstack/compute/test_floating_ips.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8d266ea0573c033c724acb8faedd71135af6b582","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def test_translate_floating_ip_view_neutronesque(self):"},{"line_number":283,"context_line":"        uuid \u003d \u0027ca469a10-fa76-11e5-86aa-5e5517507c66\u0027"},{"line_number":284,"context_line":"        floating_ip \u003d {\u0027id\u0027: uuid,"},{"line_number":285,"context_line":"                       \u0027address\u0027: \u00271.2.3.4\u0027,"},{"line_number":286,"context_line":"                       \u0027pool\u0027: \u0027pool\u0027}"},{"line_number":287,"context_line":"        view \u003d self.floating_ips._translate_floating_ip_view(floating_ip)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_946330dc","line":284,"updated":"2016-04-05 13:55:36.000000000","message":"Why are we testing this with a dict? This should be a NeutronFloatingIP object now.","commit_id":"bef95f82c1a3456e4f7dc9713edecb00897f743d"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"ae3cc12853b148403086f6aa9386ae7a318c6ed3","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def test_translate_floating_ip_view_neutronesque(self):"},{"line_number":283,"context_line":"        uuid \u003d \u0027ca469a10-fa76-11e5-86aa-5e5517507c66\u0027"},{"line_number":284,"context_line":"        floating_ip \u003d {\u0027id\u0027: uuid,"},{"line_number":285,"context_line":"                       \u0027address\u0027: \u00271.2.3.4\u0027,"},{"line_number":286,"context_line":"                       \u0027pool\u0027: \u0027pool\u0027}"},{"line_number":287,"context_line":"        view \u003d self.floating_ips._translate_floating_ip_view(floating_ip)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_f77f0e64","line":284,"in_reply_to":"9a061dce_946330dc","updated":"2016-04-05 21:55:00.000000000","message":"Good point, this just makes things a pain for me later. I\u0027ll change this to a NeutronFloatingIP","commit_id":"bef95f82c1a3456e4f7dc9713edecb00897f743d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f78c95a0332d8e980652909800b0810f5a790d10","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    def test_translate_floating_ip_view_neutronesque(self):"},{"line_number":273,"context_line":"        uuid \u003d \u0027ca469a10-fa76-11e5-86aa-5e5517507c66\u0027"},{"line_number":274,"context_line":"        fixed_id \u003d \u0027ae900cf4-fb73-11e5-86aa-5e5517507c66\u0027"},{"line_number":275,"context_line":"        floating_ip \u003d objects.floating_ip.NeutronFloatingIP(id\u003duuid,"},{"line_number":276,"context_line":"            address\u003d\u00271.2.3.4\u0027, pool\u003d\u0027pool\u0027, context\u003d\u0027ctxt\u0027,"},{"line_number":277,"context_line":"            fixed_ip_id\u003dfixed_id)"},{"line_number":278,"context_line":"        view \u003d self.floating_ips._translate_floating_ip_view(floating_ip)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_a32da4a9","line":275,"updated":"2016-05-17 18:33:49.000000000","message":"I think you can just do:\n\n floating_ip \u003d objects.NeutronFloatingIP(...)","commit_id":"a0bedb332c96b363f0fd6acfa81b5937a82244eb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f78c95a0332d8e980652909800b0810f5a790d10","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        uuid \u003d \u0027ca469a10-fa76-11e5-86aa-5e5517507c66\u0027"},{"line_number":274,"context_line":"        fixed_id \u003d \u0027ae900cf4-fb73-11e5-86aa-5e5517507c66\u0027"},{"line_number":275,"context_line":"        floating_ip \u003d objects.floating_ip.NeutronFloatingIP(id\u003duuid,"},{"line_number":276,"context_line":"            address\u003d\u00271.2.3.4\u0027, pool\u003d\u0027pool\u0027, context\u003d\u0027ctxt\u0027,"},{"line_number":277,"context_line":"            fixed_ip_id\u003dfixed_id)"},{"line_number":278,"context_line":"        view \u003d self.floating_ips._translate_floating_ip_view(floating_ip)"},{"line_number":279,"context_line":"        self.assertEqual(uuid, view[\u0027floating_ip\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_83286098","line":276,"updated":"2016-05-17 18:33:49.000000000","message":"Is context\u003d\u0027ctxt\u0027 needed?","commit_id":"a0bedb332c96b363f0fd6acfa81b5937a82244eb"}],"nova/tests/unit/network/test_neutronv2.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"13694c10efb959d1d7d90dd232c11ddd35d5fdc1","unresolved":false,"context_lines":[{"line_number":2033,"context_line":"            elif isinstance(objvalue, netaddr.IPAddress):"},{"line_number":2034,"context_line":"                self.assertEqual(value, str(objvalue))"},{"line_number":2035,"context_line":"            else:"},{"line_number":2036,"context_line":"                self.assertEqual(value, objvalue)"},{"line_number":2037,"context_line":""},{"line_number":2038,"context_line":"    def _test_get_floating_ip(self, fip_data, idx\u003d0, by_address\u003dFalse):"},{"line_number":2039,"context_line":"        api \u003d neutronapi.API()"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a122d0e_d2d037cc","line":2036,"updated":"2016-04-22 12:57:14.000000000","message":"when this goes wrong, it\u0027s going to be a little hard to figure out why, because you\u0027ll only get an error about some keys not equal to other keys, and you won\u0027t have the base objects that started this traversal.","commit_id":"6d4d2496a5d543b288717b683f73589fa3ee85fb"}]}
