替换 IP 生成代码

日期:

2017-1-11 22:00

标签:

清单、IP、网络

当前的清单代码使用一个简单的集合来管理分配的 IP 地址(USED_IPS),并使用复杂的队列从可用的子网中提取地址。

这段代码可以简化并使其更模块化。

Launchpad蓝图

当前的 IP 生成代码与配置加载、写入和清单操作代码紧密耦合。为了提供更好、更集中的测试覆盖,这段代码可以更新和替换。

问题描述

当前的 IP 生成代码难以维护,尽管大部分代码已经移动到一个单独的 ip.py 模块中。这段代码使用了外部 Queue 类,这比必要的复杂一些。USED_IPS 集合和可用的 IP 地址池没有一起管理,很容易变得不同步。

已经编写了新的代码来添加一个 IPManager 类,但它目前尚未集成到任何其他代码中。这种集成是一项相当大的任务,并且在一次评审中进行可能会出错。本规范旨在作为路线图,指导小的、集中的更改以使用它。

请注意,虽然 IPManager 包含外部 IPAM 系统的 API,但本规范仅关注在代码中使用这个类,而不涉及任何插件系统。

提议的变更

新的 IP 管理代码的初始草案已在 IPManager 类 中编写。

之后,现有的 get_ip_addressset_used_ips 被重构,以仍然使用现有的数据结构,但以允许使用新的 IPManager 类的方式。请参阅 评审 403915

为了便于此并进一步明确假设,可能需要对 IPManager 类进行一些重构。

备选方案

代码可以保持不变,假设它将在不久的将来被其他系统整体替换。这种替换可能通过插件或新的清单代码库发生。这在 IP 管理/生成方面尚未深入探讨。

例如,一个这样的替换系统可能是使用 LXD 来完全管理容器创建,而 IP 生成主要用于此。

Playbook/Role 影响

对 playbook 和 role 不应有明显的影响;这主要是为了便于代码维护,并且应该产生相同的输出。

升级影响

不应有升级影响 - IPManager 类应加载已生成的 IP 地址,以便在升级的安装中使用。

安全影响

此更改不应影响任何敏感数据。它与密钥存储无关。

性能影响

生成 IP 的速度可能会略快,因为这种方法不依赖于从 Queue 对象延迟访问。但是,清单的整体运行时间在系统的整体速度中可以忽略不计,并且尚未进行分析。

最终用户影响

此更改对已部署云的用户来说是不可见的。

部署者影响

不应引入任何配置或输出更改。应按原样使用当前的配置。

开发人员影响

这将提高开发人员调试 IP 生成行为的生活质量。

依赖项

这没有直接依赖于其他蓝图或规范。

实现

负责人

主要负责人

nolan-brubaker, IRC: palendae

其他贡献者

steve-lewis, IRC: stevelle

请在适用时添加 IRC 昵称

工作项

  • 重构当前的 IP 加载/管理函数,使其易于替换数据结构。

  • 替换数据结构并更新在函数之间传递的对象。

测试

应为所有代码更改添加单元和集成测试,以确认没有回归。

文档影响

应更新开发人员文档以反映新的机制,最好与实现补丁一起包含。

参考资料

N/A