一 类ML2Plugin中的处理
Plugin主要把握进行Port Binding的时机主要有下面3个:
1 port创建时,即create_port()执行时,如果已经提供了足够的信息,则需要第一时间进行bind。
2 由于update_port()导致端口信息变化时也需要重新bind端口。
3 Agent通过RPC从Plugin获取port信息时,也会尝试bind端口,这样会避免在获取信息的过程中,由于其他进程更新了port但是并没有bind而导致Agent不能获取最新的bind信息。
下面源码是第1种情况。
#neutron/plugins/ml2/plugin.py
def create_port(self, context, port):
attrs = port['port']
attrs['status'] = const.PORT_STATUS_DOWN
session = context.session
with session.begin(subtransactions=True):
#在数据库创建binding信息,设置port_id,设置vif_type为"unbound"
binding = db.add_port_binding(session, result['id'])
mech_context = driver_context.PortContext(self, context