声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:http://blog.csdn.net/llg8212
内容系本人学习、研究和总结,如有雷同,不胜荣幸!
该接口的代码流程以openvswitch的实现为例。
1.请求响应消息
1.1创建nativenetwork
请求:
{
"network":
{
"name":"sample_network",
"admin_state_up":false
}
}
应答:
{
"network":{
"admin_state_up":true,
"id":"850d3f2c-f0a5-4f8b-b1cf-5836fc0be940",
"name":"sample_network",
"shared":false,
#
是否可以在多个tenant
共享
"status":"ACTIVE",
"subnets":[],
"tenant_id":"f667b69e4d6749749ef3bcba7251d9ce"
}
}
1.2
使用provider
请求:
{
"network":
{
"name":
"net-name",
"admin_state_up":
true,
"provider:network_type":
"vlan",
"provider:physical_network":
"physnet_1",
"provider:segmentation_id":
201
}
}
应答:
{
"network":
{
"status":
"ACTIVE",
"subnets":
[],
"name":
"network-1",
"admin_state_up":
true,
"tenant_id":
"c1210485b2424d48804aad5d39c61b8f",
"id":
"3a06dfc7-d239-4aad-9a57-21cd171c72e5",
"shared":
false,
"provider:network_type":
"vlan",
"provider:physical_network":
"physnet_1",
"provider:segmentation_id":
101
}
}
1.3 Bulk create networks
请求:
{
"networks":[
{
"name":"sample_network_1",
"admin_state_up":false
},
{
"name":"sample_network_2",
"admin_state_up":false
}
]
}
注:批量创建网络的处理和创建单个的处理流程是完全一样的,仅在neutron-server
中将多个网络信息解析并放到一个list
中,然后通过循环去创建。最后返回的消息也是批量的消息。
2.代码流程
create_network的过程就是neutron-server接收到restapi请求后,调用plugin的create_network方法,根据请求的参数将相应信息写入数据库并返回创建的记录的过程。其时序图如下:
疑问:发出网络创建开始和结束以及dhcp的消息有什么作用?
如果创建网络时指定了provider,在plugin创建网络的过程中会先处理provider,其处理流程如下图所示:
从以上的流程处理获得如下一张provider中网络模式和physical_network及segmentation_id的取值对应关系表(这也就是传入provider需要遵守的约束):
provider: network_type | provider:physical_network | provider: segmentation_id | 备注 |
---|---|---|---|
local | ☒ | ☒ |
|
flat | 如果设置,需跟plugin配置中network_vlan_ranges= XXX[:start:end]中的XXX; 如果没设置并且XXX为'default',physical_network设置为'default' | ☒ 代码中设置为-1 |
|
vlan | ☑ 在1~4094之间 | 已有 bpprovider_network_partial_specs,允许不指定segmentation_id | |
gre和vxlan | ☒ 代码中设置为None | ☑ | tunneling需为true |