<div dir="ltr">in order that the router is scheduled to a l3 agent with a given external network,  we should create the router and set its gateway interface on that external network just after the router creation.</div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Thu, Feb 13, 2014 at 3:26 PM, Nick Ma <span dir="ltr"><<a href="mailto:skywalker.nick@gmail.com" target="_blank">skywalker.nick@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I have a multiple external networks environment:<br>
<br>
| 6fd43d02-221a-44fe-8088-dc5915512c14  |   Ext-Net-2   |<br>
1a530334-9dd7-45f3-aa6a-2bb1a5dad562 <a href="http://192.168.1.0/24" target="_blank">192.168.1.0/24</a> |<br>
| a2946b29-6be5-4285-9eb9-99625ec2a283 |    Ext-Net      |<br>
dfbc7f6c-c3dd-4c56-a142-48964e2e474c <a href="http://192.168.2.0/24" target="_blank">192.168.2.0/24</a> |<br>
<br>
Each of the external network is served by a single L3-agent. I also<br>
declare "gateway_external_network_id" in each l3_agent.ini, and set<br>
external_network_bridge.<br>
<br>
Then, I set up tenants, routers and gateways as follows:<br>
<br>
TenantA <--> TenantA-Router <--> Ext-Net <--> Internet<br>
TenantB <--> TenantB-Router <--> Ext-Net-2 <--> Internet<br>
<br>
I find that both qrouter-xxx is associated with only one L3-agent, not<br>
as expected.<br>
<br>
I debugged l3-agent-router-scheduler component to see how it works. I<br>
found that:<br>
<br>
Before the router is scheduled, I print agent objects out:<br>
<br>
<neutron.db.agents_db.Agent[object at 2ba9150] {...<br>
configurations=u'{"router_id": "", "gateway_external_network_id":<br>
"6fd43d02-221a-44fe-8088-dc5915512c14", ...><br>
<br>
The gateway_external_network_id is actual there.<br>
<br>
And I print router object out:<br>
<br>
Router: {'status': u'ACTIVE', 'external_gateway_info': None, 'name':<br>
u'TenantA-R1', 'gw_port_id': None, 'admin_state_up': True, 'tenant_id':<br>
u'b181fd2406784da5895a966da4b74126', 'routes': [], 'id':<br>
u'14ff540e-13c6-4aec-8064-a74320f62a0d'}<br>
<br>
The external_gateway_info is None.<br>
<br>
Finally, I run "neutron router-show":<br>
<br>
7ab3f8f4-89c8-4735-a5c2-4c0a09103bf1 | TenantA-R1 | {"network_id":<br>
"6fd43d02-221a-44fe-8088-dc5915512c14", "enable_snat": true}<br>
<br>
The external_gateway_info is there.<br>
<br>
So, I guess that:<br>
<br>
The router scheduler works before I associate with external gateway to<br>
that router.<br>
<br>
in neutron/db/l3_agentschedulers_db.py:<br>
def get_l3_agent_candidates(self, sync_router, l3_agents)<br>
    gateway_external_network_id = agent_conf.get(<br>
                'gateway_external_network_id', None)<br>
    ex_net_id = (sync_router['external_gateway_info'] or {}).get(<br>
                'network_id')<br>
<br>
It compares the two variables to see if they are equal, the l3-agent is<br>
candidate.<br>
<br>
Forget to tell that it happens for HAVANA stable release. I haven't<br>
tested master branch yet.<br>
<br>
1. A bug or by design?<br>
2. How to run multiple external networks?<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
<br>
Nick Ma<br>
<a href="mailto:skywalker.nick@gmail.com">skywalker.nick@gmail.com</a><br>
<br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</font></span></blockquote></div><br></div>