当前位置: 首页 > >

虚拟机创建流程中neutron代码分析(二)

发布时间:

前言:


当nova服务发送了创建port的restful调用信息之后,在neutron服务中有相应的处理函数来处理调用。根据restful的工作原理,是按照


paste.ini文件中配置好的流程去处理该条调用。本节从neutron代码中的create_port()函数开始说起。


简要流程:


下面是调用的流程图。




?


?详细代码:


以上是简要流程图,下面是具体的代码分析。


?


?create_port()


功能:


    调用create_port_db()函数产生port数据。更新安全组绑定port

?


?


_create_port_db()


功能:


    获取dhcp配置调用create_port_db()函数转化port_db为字典数据形式


?


create_port_db()


功能:


    nova传入的port信息生成port的uuid获取租户并判断是否合法构造port数据字典判断是否制定mac地址,指定了mac则用该mac创建port,没有则先生成再创建port创建port数据结构create_db_port_obj函数中生成mac地址?allocate_ips_for_port_and_store函数中生成ip地址填充port



----------------------------------------------------------------------mac地址创建分析开始---------------------------------------------------------------


?


create_db_port_obj()


功能:


    判断mac地址是否为空mac地址不为空,判断mac地址是否在使用当中mac地址为空则调用generate_mac()函数生成mac


?


generate_mac()


功能:


    返回get_random_mac()函数get_random_mac()函数生成mac地址。

mac地址生成分析:


首先读取配置文件中的mac地址,前六位都是固定的。然后生成后六位,使用python的random函数生成随机数。最后将数据组装起来。


形成一个完成mac地址。



?----------------------------------------------------------------------mac地址创建分析结束---------------------------------------------------------------


?


?----------------------------------------------------------------------ip地址创建分析开始------------------------------------------------------------------


allocate_ips_for_port()


功能:


    调用函数allocate_ips_for_port函数分配ip将所有分配的ip地址写入到neutron数据ipallocations表中。


?


allocate_ips_for_port()


功能:


    判断用户是否指定了ip地址如果指定ip地址,调用-test_fixed_ips_for_port()函数验证其合法性如果没有指定,则调用ip地址管理驱动ipam_allocate_ips()函数分配ip地址

?



关于ipam地址管理,里面有一些有意思的知识,看以查看这篇博文。


http://blog.csdn.net/u013553406/article/details/51700198


?


?ipam_allocate_ips()


功能:


    加载ipam框架,工厂方法等。调用ipam_driver的allocate()函数产生ip地址


?


?allocate()


功能:


调用generate_ip()函数生成ip地址。


?


?


generate_ip()


功能:


该函数是真正生成ip地址的函数。原理是从neutron数据库中的ip可用表中选择出多个ip地址,将ip地址添加到变量ip_allocations中,


然后经过一些列的数据转化,从所有候选的ip地址中选择第一个ip地址做为最总生成的ip。,然后将ip地址返回。


?


? ----------------------------------------------------------------------ip地址创建分析结束------------------------------------------------------------------


如下图是neutron数据库中有关ip地址的数据表,其中分为neutron-server管理的ipallocaion*和ipam插件管理的ipamallocation*。



?


?每创建一个网络,都会在neutron-server中生成一条相关ip数据表。如下的子网在数据库中分别记录。VM虚机是选择了哪一个子网,在生成ip时就从该子网的数据库中分配ip地址。





?


总结:


以上是分析了在neutron-server中创建port里生成mac和ip地址的过程,简单总结


mac地址是根据配置文件和随机数函数生成ip地址是根据数据库中的地址池分配

?



转载于:https://www.cnblogs.com/goldsunshine/p/7966427.html



友情链接: