I think this is because the horizon.networktopology.js uses the device_id to match up devices and ports, but with l3_ha on, there are ports with the same device id (network:router_ha_interface and matching network:router_gateway) (NB you only see these if the user is an admin)
If the network:router_gateway appears before the matching network:router_ha_interface in the port list, then the display works, otherwise the router is not displayed.
I'm not sure where the fix should go - either the horizon.networktopology.js (ignoring the network:router_ha_interface ports), or dashboards/project/network_topology/views.py (removing the network:router_ha_interface ports from the view get)
To check this was the problem, I did a little patch to the views.py so that it stripped the network:router_ha_interface ports before sending them to the javascript.
In def _get_ports(self, request):
< for port in neutron_ports]
> for port in neutron_ports if port.device_owner != 'network:router_ha_interface']
I think this is because the horizon. networktopology .js uses the device_id to match up devices and ports, but with l3_ha on, there are ports with the same device id (network: router_ ha_interface and matching network: router_ gateway) (NB you only see these if the user is an admin)
If the network: router_ gateway appears before the matching network: router_ ha_interface in the port list, then the display works, otherwise the router is not displayed.
I'm not sure where the fix should go - either the horizon. networktopology .js (ignoring the network: router_ ha_interface ports), or dashboards/ project/ network_ topology/ views.py (removing the network: router_ ha_interface ports from the view get)
To check this was the problem, I did a little patch to the views.py so that it stripped the network: router_ ha_interface ports before sending them to the javascript.
In def _get_ports(self, request): router_ ha_interface' ]
< for port in neutron_ports]
> for port in neutron_ports if port.device_owner != 'network:
and then the display works fine