半小时理解Neutron代码结构(Juno)
sina微博@北京-小武 个人博客: http://blog.csdn.net/night_elf_1020
Neutron的代码交互稍显复杂,对于理解底层网络原理的同学可能比较容易理解;代码也在不断的被完善和添加新的feature中,所以neutron的代码结构在不断变化中,应该用不变的网络原理去理解上层可能千变万化的neutron代码;这个也是为何《云计算网络珠玑》中不花费笔墨讲解neutron代码的原因。
1 代码总体架构
从文件夹的命名也基本可以得出该目录代码的作用,几个重要的文件夹如下:
agent主要是l3 agent及l3 agent ha的相关代码;
common主要是各底层驱动与linux系统命令的交互层;
db是neutron各功能与数据库交互数据的代码;
extensions主要包括的一些扩展功能,包括dvr的代码等;
plugins是core plugin的代码,包括ovs,ml2和各个厂商ibm、ryu提供等的plugin;
scheduler是创建dhcp服务和router到各l3 agent的调度分配相关代码;
server是neutron server相关的代码;
services则是包含了lbaas、vpnaas、fwaas、l3-router、metering等服务的plugin和agent代码;
2.Neutron server 启动过程
1)server/__init__.py负责启动neutron-server进程
def main():
#the configuration will be read into the cfg.CONF global data structure
config.init(sys.argv[1:])
if not cfg.CONF.config_file:
sys.exit(_("ERROR: Unable to find configuration file via thedefault"
" search paths(~/.neutron/, ~/, /etc/neutron/, /etc/) and"
" the '--config-file'option!"))
try:
pool = eventlet.GreenPool()
neutron_api = service.se