增加自动创建logs和output目录

This commit is contained in:
panjunlan
2026-02-22 10:00:44 +08:00
parent 26678accb7
commit 019c009700
4 changed files with 22 additions and 33 deletions

View File

@@ -12,10 +12,9 @@ Vmware 虚拟机自动化程序:自动化导出虚拟机和快照信息,自
- [x] 最后删除 15 天前的 snapshot并同时记录删除的 snapshot 日志信息
- [x] 设置计划任务,每周六(或 每15 天)执行一次
- [ ] 增加排除不能删除的 snapshots 信息,用红色底填充标识
- [ ] Outlook 邮箱发送统计超过 15 天的 snapshots 信息(即要删除快照列表)
- [ ] 需要控制每台 vCenter 不可以同时删除超过 4 个快照
- [ ] 删除前后发送邮件通知
- [ ] 多线程删除
- [ ] 删除快照前/后发送邮件通知
- [ ] 多线程删除(控制每台 vCenter 不可以同时删除超过 4 个快照
- [ ] 使用数据库保存管理节点账号密码(加密)
@@ -446,7 +445,7 @@ WORKDIR /removeweeklysnapshot/
# 复制代码
COPY ./ /removeweeklysnapshot/
# 安装必要的软件和 python 库
RUN apt-get update && apt-get install procps tzdata -y && pip install -r requirements.txt && chmod +x /removeweeklysnapshot/main.py && mkdir output
RUN apt-get update && apt-get install procps tzdata -y && pip install -r requirements.txt && chmod +x /removeweeklysnapshot/main.py
# 容器内执行启动程序
CMD ["python3", "/removeweeklysnapshot/main.py"]
EOF

View File

@@ -25,8 +25,8 @@ management_nodes:
# 全局策略配置
global:
disable_ssl_verify: true
disable_ssl_verify: true # ESXi连接特殊配置禁用SSL验证ESXi默认自签证书
snapshot_retention_days: 15 # 可选,默认值 15 天
# excel_output_path: ./vm_snapshots_report.xlsx # 可选,使用默认值,如:/logs/2026-02-20_14-00-21-VMsSnapShots_report.xlsx
# 'excel_output_path',: ./vm_snapshots_report.xlsx # 可选,使用默认值,如:/logs/2026-02-20_14-00-21-VMsSnapShots_report.xlsx
# ESXi连接特殊配置禁用SSL验证ESXi默认自签证书
# yaml_output_path: ./yaml_snapshots_report.yaml # 可选

View File

@@ -1,4 +1,4 @@
import yaml, os
import os, yaml
from datetime import datetime
from utils.logger import logger
@@ -15,10 +15,8 @@ def load_config():
# vCenter/ESXi节点列表
"MANAGEMENT_NODES": raw_config.get('management_nodes', []),
"SNAPSHOT_RETENTION_DAYS": int(global_config.get('snapshot_retention_days', 15)),
# "EXCEL_OUTPUT_PATH": global_config.get('excel_output_path', f'/logs/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}-VMsSnapShots_report.xlsx'),
# "LOG_FILE_PATH": global_config.get('log_file_path', f'/logs/{datetime.now().strftime('%Y%m%d_%H%M%S')}-VMsSnapShots_cleanup.logs'), "EXCEL_OUTPUT_PATH": global_config.get('excel_output_path', f'/logs/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}-VMsSnapShots_report.xlsx'),
"EXCEL_OUTPUT_PATH": global_config.get('excel_output_path', f'D:\\PycharmProjects\\RemoveWeeklySnapshot\\output\\vm_snapshots_report-{datetime.now().strftime('%Y-%m-%d')}.xlsx'),
"YAML_OUTPUT_PATH": global_config.get('yaml_output_path', f'D:\\PycharmProjects\\RemoveWeeklySnapshot\\output\\old_snapshots-{datetime.now().strftime('%Y-%m-%d')}.yaml'),
"EXCEL_OUTPUT_PATH": global_config.get('excel_output_path', os.path.join(DATA_DIR, f'vm_snapshots_report-{datetime.now().strftime('%Y-%m-%d')}.xlsx')),
"YAML_OUTPUT_PATH": global_config.get('yaml_output_path', os.path.join(DATA_DIR, f'old_snapshots-{datetime.now().strftime('%Y-%m-%d')}.yaml')),
"DISABLE_SSL_VERIFY": global_config.get('disable_ssl_verify', True),
}
@@ -42,6 +40,11 @@ def load_config():
logger.error(f"❌ 加载配置失败: {str(e)}")
raise
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 获取项目根目录
DATA_DIR = os.path.join(BASE_DIR, 'output') # 获取导出数据的文件根目录
os.makedirs(DATA_DIR, exist_ok=True) # 自动创建目录
# 配置文件路径
CONFIG_PATH = os.path.join(os.path.dirname(__file__), 'config.yaml')
# 加载配置并导出全局变量
@@ -50,7 +53,6 @@ MANAGEMENT_NODES = config["MANAGEMENT_NODES"]
SNAPSHOT_RETENTION_DAYS = config["SNAPSHOT_RETENTION_DAYS"]
EXCEL_OUTPUT_PATH = config["EXCEL_OUTPUT_PATH"]
YAML_OUTPUT_PATH = config["YAML_OUTPUT_PATH"]
#LOG_FILE_PATH = config["LOG_FILE_PATH"]
DISABLE_SSL_VERIFY = config["DISABLE_SSL_VERIFY"]
@@ -59,8 +61,6 @@ if __name__ == "__main__":
print("\n【全局配置】")
print(f" 快照保留天数: {config['SNAPSHOT_RETENTION_DAYS']}")
print(f" Excel输出路径: {EXCEL_OUTPUT_PATH}")
#print(f" 日志文件路径: {LOG_FILE_PATH}")
print(f" 禁用SSL验证: {config['DISABLE_SSL_VERIFY']}")
# 打印管理节点
nodes = config['MANAGEMENT_NODES']
@@ -68,10 +68,7 @@ if __name__ == "__main__":
for i, node in enumerate(nodes, 1):
print(f"\n 节点[{i}]:")
print(f" 类型: {node.get('type')}")
print(f" 名称: {node.get('name')}")
print(f" 地址: {node.get('host')}")
print(f" 用户: {node.get('user')}")
print(f" 密码: {'*' * len(node.get('password', ''))}")
# print(f" 密码: {node.get('password', '')}") # 直接打印出密码
print(f" 最大并发删除: {node.get('max_delete_concurrent')}")

View File

@@ -1,9 +1,4 @@
import os, logging
from datetime import datetime
# 获取项目根目录(假设 logger.py 在 utils/ 目录下)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG_DIR = os.path.join(BASE_DIR, 'logs')
import os, datetime, logging
def get_logger():
@@ -19,13 +14,11 @@ def get_logger():
# 定义日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# 自动创建日志目录
os.makedirs(LOG_DIR, exist_ok=True)
# 日志文件路径
log_file = os.path.join(
LOG_DIR,
f'{datetime.now().strftime("%Y-%m-%d")}-vm_snapshot_cleanup.log'
)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 获取项目根目录
LOG_DIR = os.path.join(BASE_DIR, 'logs') # 获取日志文件根目录
os.makedirs(LOG_DIR, exist_ok=True) # 自动创建目录
log_file = os.path.join(LOG_DIR, f'{datetime.now().strftime("%Y-%m-%d")}-removeweeklysnapshot.log') # 日志文件路径
# 文件处理器(写入日志文件)
file_handler = logging.FileHandler(log_file, encoding='utf-8')