# TODO

- [x] Guest 删除后，回收其 IP、VNC 端口
- [x] os_init_write 的更新方法里，支持 os_init_id 参数
- [x] 抽象出视图层的父类，尤其是 get、get_list、delete 这些方法基本相同
- [x] guest_disk 表中加入 path 字段，具体磁盘位置由 path 指明
- [x] guest 的系统磁盘，也需记录到 guest_disk 表中
- [x] 将 Guest 的系统镜像合并到单独的磁盘镜像目录中。即不再为 Guest 的系统镜像单独分配目录
- [x] os_template 表中 name 改为 path 字段。用 path 指明完整路径
- [x] 统一 guest_disk 称谓为 disk
- [x] 统计活着的宿主机，并提供获取列表的接口，供迁移时选择
- [x] 分离出 API 与 views 出入口，涉及 add_rule 与 route_table
- [x] 加入被动更新 Guest xml 的功能，由宿主机主动推送。具体时机待定
- [x] 重置Guest密码功能
- [x] 虚拟机加入用户级的重启作业功能
- [x] 提示待做的启动作业
- [x] 密码栏默认隐藏，加入显示开关
- [x] `不予支持`收集存在于 JimV-N，却不存在于 JimV-C 的 Guest。(无法确定其创建的规范，比如是否使用了规划的分布式文件系统、模板、开启 vnc 等。这样导致迁移、重置密码、前端 ICON 显示有问题)
- [x] `不予支持`IP 为空的，允许用户手动补入 Guest 的真实 IP，补入时并检查新 IP 是否可用
- [x] 批量添加启动作业
- [x] 单独写页面展现已有启动作业的虚拟机列表
- [x] 磁盘页面，默认不显示系统盘，加 CheckBox 来控制
- [x] 不显示系统级别的启动作业
- [x] 宿主机性能状态展现
- [x] 设计、实现 Dashboard 页面
- [x] 重新设计创建虚拟机时的机制，虚拟机创建分配由 JimV-C 角色实现
- [x] 创建虚拟机时显示进度
- [x] 重新设计 JimV-N 到 JimV-C 的回调机制，现有实现比较混乱。改进为基于对象的回调
- [x] 重新设计创建虚拟机机制，批量创建虚拟机时，依照宿主机负载大小，倒序依次挨个分配虚拟机的创建任务
- [x] 规范日志路径。把日志路径调整至 /var/log/ 下
- [x] 清除15天前的监控日志
- [x] 允许删除创建失败的虚拟机
- [x] 日志实现简短字段及详情字段，详情字段用 text，存储完整的日志文本。因为日志太长，无法在简短日志字段存放完整。
- [x] 修改密码功能
- [x] 密码[找回|重置]功能
- [x] 前端页面校验字段有效值
- [x] 加入手动清除已经离线的宿主机功能
- [x] 显示计算节点离线时间
- [x] 系统模板加入是否为 Windows 类系统的标记
- [x] 系统模板为 Windows 时，时钟偏移值设定为 localtime，否则为 utc
- [x] 初始化时，生成默认的启动作业及其细则，方便用户直接使用
- [x] 制作适用于 JimV 的 CentOS 7 Mini 模板镜像
- [ ] 制作适用于 JimV 的 Windows 2012 模板镜像
- [x] README 列出配置需求
- [x] 制作模板镜像的 BT 链接，并展现到模板镜像的下载页面
- [x] 解决数据库重连隐患(当数据库[MySQL|Redis]重启后)
- [x] 去除非 Debug 模式下的调试信息
- [x] 在线重置密码，前端加入随机生成功能
- [x] 计算节点页面，展现每个计算节点上功能线程的状态
- [x] 避免计算节点主机名相同的情况
- [x] 安装脚本、文档加入ntp时间同步环节
- [x] 实现创建虚拟机时，手动指定计算节点功能
- [x] 计算机节点加入是否接受自动分配虚拟机开关
- [x] 取消单独的初始化密码操作，合并入具体的操作系统初始化操作中
- [x] 修复 Guest 对模板对象的依赖。bug 表现为，当依赖的模板项被删除后，虚拟机实例列表会出现 500 错误
- [x] 实现网络流量限速
- [x] 根据计算节点 CPU 是否支持 VT-X，来确定虚拟机是使用 KVM 还是 QEMU
- [ ] 考虑开辟一个单独的消息处理线程。所有业务消息都塞到进程中的队列内，由该线程统一处理。这样可以更好的处理数据库重连问题。
- [ ] 实现 CentOS 7 单机版一建安装脚本(包括全新的数据库安装、配置、部署)
- [ ] 实现磁盘联动机制。即当删除宿主机时，相随的所有磁盘一并删除
- [x] 融入 Systemd
- [ ] 增加模板镜像上传功能
- [ ] 加入 Tag或分组，类似qq用户分组 功能
- [ ] 添加对 Guest 的 IP 管理功能
- [ ] 设计、制作替换 Guest IP 的系统级启动作业
> 1. 给宿主机替换当前 IP 池中可用的 IP。替换后，新 IP 置为已用状态，被替换的 IP，
> 要与系统配置中的可用 IP 范围做计算。计算其是不是可以被自动分配的合法 IP。如果是，
> 则回收。如果不是，则直接丢弃；
> 2. 给宿主机替换手动指定的任意 IP。此时需要判断手动分配的 IP 是否与已用的 IP 冲突；
- [ ] 虚拟机状态变化时时展现在前端页面上
- [ ] 迁移时计算出剩余时间
- [ ] 初始化页面检测 redis、mysql 是否准备好
- [ ] 日志里面加入操作轨迹
- [ ] 考虑 vm_network，vm_manage_network 改名为 vm_network_bridge，vm_manage_network_bridge
- [ ] 通过 sysctl 隔离出 vnc 使用的端口，避免被冲突。参见 net.ipv4.ip_local_reserved_ports
- [ ] 考虑热更新、升级的问题
- [ ] 加入清除老旧日志的功能
- [ ] 忽略 guestfs- 为首的日志
- [x] 周期轮询试的同步虚拟机状态
- [ ] 实现类似于VMware的故障转移功能
- [x] 实现变配功能
- [ ] 迁移中的虚拟机，不允许做任何操作
- [x] 通过 QemuGuestAgent 实现 Guest 的内存使用率监控
- [ ] 实现通过 JimV-C 修改主机名(当前为备注的地方)，同步到具体 Guest 上
- [ ] 修正创建虚拟机时，VNC 端口不够用时的 bug。创建失败时，需要返还对应的 IP 与 VNC 端口资源
- [ ] 修复在大磁盘虚拟机创建快照时，等待时间过长的问题
- [ ] IP 地址池管理功能。对 IP 池中的 IP 有查看、添加、禁用、解禁等功能
- [x] 安装脚本加入中国本土仓库
- [ ] 对某个 Guest 进行快照操作时，禁止对该镜像做其它快照方面的操作
- [x] 修复JimV-C 先 Redis 启动后，JimV-C event_processor Redis lpop 异常的问题
- [x] 计算节点以 JimV-C 为第一 NTP 服务器
- [ ] 数据库时间戳，采用 JimV-N 的时间。避免 JimV-C 挂掉后，监控数据批量集中在同一个时间点上
- [ ] 加入监控图标汇聚功能，时间范围内的平均值、最高值
- [x] 加入 About 页面
- [x] 在 About 页面，展现当前版本号
- [ ] 在 About 页面，展现是否可以升级信息
- [ ] 在 About 页面，加入更新功能
- [ ] 大于 内存、负载 百分比后，禁止创建虚拟机
- [x] 考虑用 /etc/machine-id 替换 node_id
- [ ] 邮局设置从配置文件提取到JimV系统配置中
- [ ] 当计算节点失联后，相应的虚拟机状态标识为"未知"状态


