libnetwork源码分析(一)-controller(2)-v1.12.3
之前分析了controller的第一部分,现在接着分析第二部分:管理network。
(二) 管理network
controller和network的联系是通过store进行的,也就是说network是存储在数据库中的,而controller通过store管理network。
controller::NewNetwork()
NewNetwork()可以创建一个新的network。
|
|
NewNetwork()的流程如下:
- 创建network结构体值;
- 处理传入的options,option为函数,一般可以设置结构体值的某字段,用户可以用来设置某字段值;
- 检查network driver是否存在;
- 调用network的ipamAllocate()设置network的ipam相关信息;
- 调用addNetwork()把创建底层network;
- 初始化epCnt字段;
- 调用updateToStore()存储network到store。
controller::addNetwork()
addNetwork()把network创建底层的network。
|
|
driver的CreateNetwork()实现比较复杂,以后放在driver中分析。
controller::Networks()
Networks()可以从store中获取networks。
|
|
controller::WalkNetworks()
WalkNetworks()会返回满足walker()条件的network。
|
|
controller::NetworkByName()
NetworkByName()通过调用WalkNetworks(),其提取函数的功能为提取名为name的network
|
|
controller::NetworkByID()
NetworkByID()可以依据id直接从store中获取network。
|
|
其他
controller还定义有getNetworkFromStore(),getNetworksForScope(),getNetworksFromStore()这些从store中获取network的方法,这些方法从名字上也比较好理解,不会阻塞controller的”管理network”的代码阅读,所以将放到store中分析。
小结
controller可以创建network,并从数据库获取network。但controller不能直接删除network,删除操作定义在network结构体中。controller的network管理的分析比较简单,因为还没涉及network本身的操作,对network的分析将由单独的系列文档承担。