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

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。虚拟机创建流程中neutron代码分析(二),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

前言:

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

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

简要流程:

下面是调用的流程图。

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

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

 

 详细代码:

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

 

 create_port()

功能:

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

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

 

_create_port_db()

功能:

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

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

 

create_port_db()

功能:

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

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

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

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

 

create_db_port_obj()

功能:

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

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

 

generate_mac()

功能:

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

mac地址生成分析:

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

形成一个完成mac地址。

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

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

 

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

allocate_ips_for_port()

功能:

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

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

 

allocate_ips_for_port()

功能:

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

 

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

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

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

 

 ipam_allocate_ips()

功能:

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

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

 

 allocate()

功能:

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

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

 

generate_ip()

功能:

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

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

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

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

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

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

 

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

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

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

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

 

总结:

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

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/194324.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!