替换 IP 生成代码¶
- 日期:
2017-1-11 22:00
- 标签:
清单、IP、网络
当前的清单代码使用一个简单的集合来管理分配的 IP 地址(USED_IPS),并使用复杂的队列从可用的子网中提取地址。
这段代码可以简化并使其更模块化。
当前的 IP 生成代码与配置加载、写入和清单操作代码紧密耦合。为了提供更好、更集中的测试覆盖,这段代码可以更新和替换。
问题描述¶
当前的 IP 生成代码难以维护,尽管大部分代码已经移动到一个单独的 ip.py 模块中。这段代码使用了外部 Queue 类,这比必要的复杂一些。USED_IPS 集合和可用的 IP 地址池没有一起管理,很容易变得不同步。
已经编写了新的代码来添加一个 IPManager 类,但它目前尚未集成到任何其他代码中。这种集成是一项相当大的任务,并且在一次评审中进行可能会出错。本规范旨在作为路线图,指导小的、集中的更改以使用它。
请注意,虽然 IPManager 包含外部 IPAM 系统的 API,但本规范仅关注在代码中使用这个类,而不涉及任何插件系统。
提议的变更¶
新的 IP 管理代码的初始草案已在 IPManager 类 中编写。
之后,现有的 get_ip_address 和 set_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