Floating IPs don't come back in the mock response for instanceExternalIpList and are therefore missing on instance detail.
This is because floating IPs are stored in db.floatingIps, while ephemeral IPs are stored in db.externalIps, and the mock endpoint only pulls from the latter. There are a few ways we could fix this — we could either get rid of db.floatingIps and store floating IPs in db.externalIps instead, or we could have the endpoint combine results from both tables. I think I prefer the former because ExternalIp is designed to represent either a floating IP or an ephemeral IP, and this is more or less what it's like in the real DB, which has a single table called external_ip, though there is a view on that table called floating_ip.