nova.network.linux_net 重构¶
https://blueprints.launchpad.net/nova/+spec/linux-net-refactor
负责 Nova 许多网络方面的 nova.network.linux_net 模块相当庞大,在代码维护和可移植性方面不够灵活,因此可以进行重构。
此外,提高 linux_net.py 模块的灵活性将是支持 FreeBSD 主机的重要一步,有关详细信息请参阅邮件列表讨论 [1]。
问题描述¶
目前,nova.network.linux_net 负责许多不同的事情
网络接口管理(操作桥接、添加/删除接口等代码)
防火墙/Iptables 管理
dnsmasq 管理
linux_net.py 文件几乎有 2k 行代码,这不算特别大,但可以更小。
其中一些部分是灵活的,允许覆盖类,例如 linuxnet_interface_driver。另一些部分则不然,例如 IptablesManager。即使对于允许覆盖的类,也有消费者直接使用它,例如 virt.libvirt.vif 直接使用 LinuxBridgeInterfaceDriver。
此外,有一些相对相似的块执行相同的功能,可以组合成函数,例如,LinuxBridgeInterfaceDriver 和 NeutronLinuxBridgeInterfaceDriver 使用几乎相同的代码来创建桥接。
通过重构 linux_net.py 模块,可以提高代码的可维护性、可读性和可移植性。
用例¶
从这项更改中受益的唯一受众是使用 linux_net.py 的开发人员以及正在寻找扩展 Nova 以使用新的接口管理、防火墙和相关机制的开发人员。
项目优先级¶
无
提议的变更¶
建议的方法是
目前 libvirt.vif 中 linux_net 的使用方式如下
使用的方法如下:- create_tap_dev() - create_ovs_vif_port() - create_ivs_vif_port() - device_exists() - delete_net_dev()
linux_net.LinuxBridgeInterfaceDriver 方法的使用:- ensure_vlan_bridge() - ensure_bridge()
可以注意到这个接口相当复杂,实际上它同时负责两件事
提供 Nova 网络 API 逻辑
提供 OS 级别网络设备管理的辅助工具
为了使其更具可移植性,建议将 OS 级别辅助工具分离到其自身的实体中,并允许为特定平台使用自定义实现。
例如,它将如下所示
"""
nova.network.netdev module
"""
def get_driver():
"Method returning platfrom specific implementation"
if our_os == "Linux":
return LinuxNetDevDriver
else
# not implemented
# network device helpers
def create_bridge(brname):
return get_driver().create_bridge(brname)
# other methods go here
"""
nova.network.netdev.driver
"""
class NetDevDriver(object):
"""A class that defines an interface for
OS-level network device manipulation"""
def create_bridge(self, brname):
raise NotImplementedError
# other methods go here
"""
nova.netowrk.netdev.linux
"""
class LinuxNetDevDriver(NetDevDriver):
"""A class that implements NetDevDriver
interface for Linux"""
def create_bridge(self, brname):
# Linux impl goes here
# other methods
计划是
将 linux_net 中的辅助函数移动到 netdev
将这些辅助函数的消费者从 linux_net 转换为使用新的 netdev 辅助工具
删除 linux_net 中旧的辅助工具实现
将 Iptables 相关类移动到其自身的模块 firewall,并允许覆盖为实际使用的类,以便可以使用其他防火墙软件包
将 dnsmasq 相关代码移动到其自身的模块 dhcp
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
由于将引入允许指定要使用的防火墙类的选项,部署者将能够集成第三方防火墙软件包。由于此选项将默认设置为 IptablesManager,因此当前部署不会发生任何更改。
开发人员影响¶
开发人员将拥有更具可读性、可维护性和可扩展性的 linux_net.py
实现¶
负责人¶
- 主要负责人
novel
工作项¶
重构接口管理代码
分离防火墙代码
分离 dnsmasq 管理代码
依赖项¶
无
测试¶
将相应地更新单元测试。
文档影响¶
无
参考资料¶
[1]: http://lists.openstack.org/pipermail/openstack-dev/2015-June/066342.html
历史¶
发布名称 |
描述 |
|---|---|
Liberty |
引入 |