更新README文件

This commit is contained in:
panjunlan
2026-02-21 16:13:16 +08:00
parent d462263b39
commit 26678accb7

205
README.md
View File

@@ -345,8 +345,6 @@ print(vm.snapshot)
## PY 文件作用
``` powershell
PS D:\PycharmProjects\RemoveWeeklySnapshot> tree /F
卷 Date 的文件夹 PATH 列表
@@ -412,22 +410,45 @@ sudo systemctl enable --now docker && systemctl status docker
wget https://gitcode.junlan.site/junlan/RemoveWeeklyShapshot/archive/Dev.zip && unzip Dev.zip && cd removeweeklyshapshot/
```
``` shell
[junlan@localhost removeweeklyshapshot]$ tree
.
├── compose.yaml
├── config
│   ├── config.yaml
│   └── settings.py
├── core
│   ├── data_exporter.py
│   ├── get_vm_snapshots.py
│   ├── remove_snapshots.py
│   └── vm_connector.py
├── Dockerfile
├── main.py
├── README.md
├── requirements.txt
├── utils
│   └── logger.py
```
### 构建 Dockerfile 文件
``` dockerfile
cat << 'EOF' > Dockerfile
FROM python:3.14.3-slim
# 配置时区
ENV TZ=Asia/Shanghai
RUN ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && dpkg-reconfigure -f noninteractive tzdata
# 切换目录
WORKDIR /removeweeklysnapshot/
# 复制代码
COPY ./ /removeweeklysnapshot/
# 安装必要的软件和 python 库
RUN apt-get update && apt-get install procps tzdata -y && pip install -r requirements.txt
# 配置时区
ENV TZ=Asia/Shanghai
RUN ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && dpkg-reconfigure -f noninteractive tzdata
RUN apt-get update && apt-get install procps tzdata -y && pip install -r requirements.txt && chmod +x /removeweeklysnapshot/main.py && mkdir output
# 容器内执行启动程序
CMD ["/removeweeklysnapshot/main.py"]
CMD ["python3", "/removeweeklysnapshot/main.py"]
EOF
```
@@ -440,18 +461,184 @@ sudo docker build --no-cache -t removeweeklysnapshot .
### 构建 Compose 文件
``` yaml
cat << 'EOF' > compose.yaml
services:
move_ix_file:
removeweeklysnapshot:
container_name: removeweeklysnapshot
image: removeweeklysnapshot
volumes:
- '/var/removeweeklysnapshot/logs:/removeweeklysnapshot/logs'
- '/var/removeweeklysnapshot/output:/removeweeklysnapshot/output'
# - '/var/removeweeklysnapshot/config:/removeweeklysnapshot/config'
restart: always
stdin_open: true
tty: true
EOF
```
### 运行容器
``` shell
docker compose up -d
sudo docker compose up -d
```
### 查看状态
``` shell
[junlan@localhost removeweeklyshapshot]$ sudo docker images
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
python:3.14.3-slim 486b8092bfb1 176MB 45.5MB
removeweeklysnapshot:latest 6f17fcaaef99 512MB 140MB
[junlan@localhost removeweeklyshapshot]$ sudo docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
removeweeklysnapshot removeweeklysnapshot "python3 /removeweek…" removeweeklysnapshot 34 seconds ago Up 15 seconds
[junlan@localhost removeweeklyshapshot]$ sudo docker compose logs
removeweeklysnapshot | 2026-02-21 15:12:51,150 - INFO - ✅ 成功加载配置,共 2 个管理节点
removeweeklysnapshot | 2026-02-21 15:12:51,922 - INFO - 定时任务已设置每周六凌晨4点导出文件晚上7点删除快照
[junlan@localhost removeweeklyshapshot]$ sudo docker exec -it removeweeklysnapshot bash
root@07c30da6408a:/removeweeklysnapshot# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:12 pts/0 00:00:01 python3 /removeweeklysnapshot/main.py
root 11 0 0 15:15 pts/1 00:00:00 bash
root 17 11 0 15:15 pts/1 00:00:00 ps -ef
```
### 修改代码进行临时测试
> excel_output_path: /removeweeklysnapshot/output/vm_snapshots_report.xlsx # 可选,使用默认值,如:/logs/2026-02-20_14-00-21-VMsSnapShots_report.xlsx
> yaml_output_path: /removeweeklysnapshot/output/old_snapshots.yaml # 可选
>
> ```python
> # 每周六凌晨4点导出Excel和Yaml文件
> scheduler.add_job(export_files, 'cron', day_of_week='sat', hour=15, minute=43) # 修改时间进行测试
>
> # 每周六晚上7点执行删除快照任务
> scheduler.add_job(delete_old_snapshots, 'cron', day_of_week='sat', hour=15, minute=44) # 修改时间进行测试
> ```
``` shell
root@07c30da6408a:/removeweeklysnapshot# cat << 'EOF' > config/config.yaml
management_nodes:
- type: esxi # 标记类型为esxi
name: esxi1
host: 192.168.40.133
user: root # ESXi默认用root
password: Root@2025
max_delete_concurrent: 2 # ESXi性能较弱并发数可设小些
- type: esxi
name: esxi2
host: 192.168.40.135
user: root
password: Root@2025
max_delete_concurrent: 2
global:
disable_ssl_verify: true # ESXi连接特殊配置禁用SSL验证ESXi默认自签证书
snapshot_retention_days: 0 # 可选,默认值 15 天
excel_output_path: /removeweeklysnapshot/output/vm_snapshots_report.xlsx # 可选,使用默认值,如:/logs/2026-02-20_14-00-21-VMsSnapShots_report.xlsx
yaml_output_path: /removeweeklysnapshot/output/old_snapshots.yaml # 可选
EOF
root@75ce49380cc0:/removeweeklysnapshot# cat << 'EOF' > main.py
import time
from apscheduler.schedulers.background import BackgroundScheduler
from utils.logger import logger
from config.settings import YAML_OUTPUT_PATH
from core.get_vm_snapshots import get_all_vms
from core.data_exporter import create_excel_report, export_yaml
from core.remove_snapshots import load_old_snapshots, remove_snapshot
def export_files():
"""导出Excel和Yaml文件的函数"""
logger.info("🔍 开始收集VM和快照信息...")
vms = get_all_vms() # 主函数入口,获取虚拟机信息
# 导出Excel报表
logger.info("📝 开始导出Excel报表...")
old_snapshots = create_excel_report(vms) # 生成Excel报告并获取旧快照
# 导出Yaml文件
logger.info("📝 开始导出 Yaml 文件...")
export_yaml(old_snapshots)
logger.info("========== Excel和Yaml文件导出完成 ==========")
def delete_old_snapshots():
"""删除旧快照的函数"""
logger.info("🗑️ 开始删除过旧快照...")
old_snapshots = load_old_snapshots(YAML_OUTPUT_PATH)
remove_snapshot(old_snapshots)
logger.info("========== VM快照清理任务执行完成 ==========")
def main():
"""主执行函数"""
# 设置定时任务
scheduler = BackgroundScheduler()
# 每周六凌晨4点导出Excel和Yaml文件
scheduler.add_job(export_files, 'cron', day_of_week='sat', hour=15, minute=43) # 修改时间进行测试
# 每周六晚上7点执行删除快照任务
scheduler.add_job(delete_old_snapshots, 'cron', day_of_week='sat', hour=15, minute=44) # 修改时间进行测试
scheduler.start()
logger.info("定时任务已设置每周六凌晨4点导出文件晚上7点删除快照")
try:
# 保持主程序运行,以便调度器能正常工作
while True:
time.sleep(1)
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
if __name__ == "__main__":
main()
EOF
# 进入容器进行测试
[junlan@localhost removeweeklyshapshot]$ sudo docker exec -it removeweeklysnapshot bash
root@75ce49380cc0:/removeweeklysnapshot# python main.py
2026-02-21 15:42:56,070 - INFO - ✅ 成功加载配置,共 2 个管理节点
2026-02-21 15:42:56,556 - INFO - 定时任务已设置每周六凌晨4点导出文件晚上7点删除快照
2026-02-21 15:43:00,000 - INFO - 🔍 开始收集VM和快照信息...
2026-02-21 15:43:00,054 - INFO - 成功连接到节点: 192.168.40.133
2026-02-21 15:43:03,319 - ERROR - 处理节点 192.168.40.135 失败:[Errno 113] No route to host
2026-02-21 15:43:03,319 - INFO - 获取到 2 台虚拟机
2026-02-21 15:43:03,319 - INFO - 📝 开始导出Excel报表...
2026-02-21 15:43:03,322 - INFO - 总共有 3 个快照
2026-02-21 15:43:03,340 - DEBUG - Excel 文件已生成: /removeweeklysnapshot/output/vm_snapshots_report.xlsx
2026-02-21 15:43:03,340 - INFO - 📝 开始导出 Yaml 文件...
2026-02-21 15:43:03,340 - INFO - 可删除的快照有 3 个
2026-02-21 15:43:03,342 - DEBUG - YAML 文件已生成: /removeweeklysnapshot/output/old_snapshots.yaml
2026-02-21 15:43:03,342 - INFO - ========== Excel和Yaml文件导出完成 ==========
2026-02-21 15:44:00,001 - INFO - 🗑️ 开始删除过旧快照...
2026-02-21 15:44:00,004 - INFO - 连接 192.168.40.133 进行删除快照...
2026-02-21 15:44:00,050 - INFO - 成功连接到节点: 192.168.40.133
2026-02-21 15:44:00,081 - INFO - 正在删除 Snapshot: VMware vCenter Server Appliance-快照测试-(1-snapshot-7)
2026-02-21 15:44:01,100 - INFO - ✅ 删除成功: VMware vCenter Server Appliance-快照测试-(1-snapshot-7)
2026-02-21 15:44:01,125 - INFO - 正在删除 Snapshot: VMware vCenter Server Appliance-快照测试-第二层快照-(1-snapshot-8)
2026-02-21 15:44:02,139 - INFO - ✅ 删除成功: VMware vCenter Server Appliance-快照测试-第二层快照-(1-snapshot-8)
2026-02-21 15:44:02,164 - INFO - 正在删除 Snapshot: test-vm-01-snap-01-(4-snapshot-9)
2026-02-21 15:44:03,178 - INFO - ✅ 删除成功: test-vm-01-snap-01-(4-snapshot-9)
2026-02-21 15:44:03,184 - INFO - ========== VM快照清理任务执行完成 ==========
```