未添加删除快照逻辑

This commit is contained in:
panjunlan
2026-02-20 16:55:53 +08:00
parent 199cbab4aa
commit 7a0a51be4e
10 changed files with 305 additions and 581 deletions

View File

@@ -1,34 +1,31 @@
# 管理节点配置包含vCenter和ESXi
management_nodes:
# vCenter节点
# - type: vcenter # 标记类型为vcenter
# name: vc1 # 节点名称(用于日志)
# host: 192.168.40.134 # 地址
# user: administrator@lan.com
# password: Root@2025
# max_delete_concurrent: 4 # 该节点最大并发删除数
- type: vcenter # 标记类型为vcenter
name: vc1 # 节点名称(用于日志)
host: 192.168.40.134 # 地址
user: administrator@lan.com
password: Root@2025
max_delete_concurrent: 4 # 该节点最大并发删除数
# ESXi节点未接入 vCenter 的 Esxi 主机)
- type: esxi # 标记类型为esxi
name: esxi1
host: 192.168.40.133
user: root # ESXi默认用root
password: Root@2025
max_delete_concurrent: 2 # ESXi性能较弱并发数可设小些
# - 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
# - type: esxi
# name: esxi2
# host: 192.168.40.135
# user: root
# password: Root@2025
# max_delete_concurrent: 2
# 全局策略配置
global:
snapshot_retention_days: 15
excel_output_path: ./vm_snapshots_report.xlsx
# excel_output_path: /tmp/vm_snapshots_report.xlsx
# log_file_path: /var/log/vm_snapshot_cleanup.log
log_file_path: ./vm_snapshot_cleanup.log
snapshot_retention_days: 15 # 可选,使用默认值 15 天
# excel_output_path: ./vm_snapshots_report.xlsx # 可选,使用默认值,如:/logs/2026-02-20_14-00-21-VMsSnapShots_report.xlsx
# ESXi连接特殊配置禁用SSL验证ESXi默认自签证书
disable_ssl_verify: true

View File

@@ -1,14 +1,10 @@
import yaml
import os
from datetime import datetime, timedelta
# from utils.logger import logger
# 配置文件路径
CONFIG_PATH = os.path.join(os.path.dirname(__file__), 'config.yaml')
from datetime import datetime
from utils.logger import logger
def load_config():
"""加载YAML配置区分vCenter和ESXi"""
"""加载 YAML 配置文件并解析其内容"""
try:
with open(CONFIG_PATH, 'r', encoding='utf-8') as f:
raw_config = yaml.safe_load(f)
@@ -18,18 +14,17 @@ def load_config():
config = {
# vCenter/ESXi节点列表
"MANAGEMENT_NODES": raw_config.get('management_nodes', []),
# vCenter/ESXi节点列表
"SNAPSHOT_RETENTION_DAYS": int(global_config.get('snapshot_retention_days', 15)),
"EXCEL_OUTPUT_PATH": global_config.get('excel_output_path', '/tmp/vm_snapshots_report.xlsx'),
"LOG_FILE_PATH": global_config.get('log_file_path', '/var/log/vm_snapshot_cleanup.log'),
# "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\\RemoveWeeklyShapshot\\logs\\{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}-VMsSnapShots_report.xlsx'),
"DISABLE_SSL_VERIFY": global_config.get('disable_ssl_verify', True),
# 算出的过期时间点
"EXPIRE_DATE": datetime.now() - timedelta(days=int(global_config.get('snapshot_retention_days', 15)))
}
# 验证配置
if not config["MANAGEMENT_NODES"]:
raise ValueError("未配置任何管理节点vCenter/ESXi")
raise ValueError("未配置任何管理节点vCenterESXi,只少要有一台 management_nodes 节点。")
# 检查每个节点的必填字段
required_fields = ['type', 'name', 'host', 'user', 'password', 'max_delete_concurrent']
@@ -39,25 +34,23 @@ def load_config():
raise ValueError(f"节点 {node.get('name', '未知')} 缺少配置字段: {missing}")
# 验证类型合法性
if node['type'] not in ['vcenter', 'esxi']:
raise ValueError(f"节点 {node['name']} 类型错误仅支持vcenter/esxi")
raise ValueError(f"节点 {node['name']} 类型错误(仅支持 vcenteresxi")
#logger.info(f"✅ 成功加载配置,共 {len(config['MANAGEMENT_NODES'])} 个管理节点")
logger.info(f"✅ 成功加载配置,共 {len(config['MANAGEMENT_NODES'])} 个管理节点")
return config
except Exception as e:
#logger.error(f"❌ 加载配置失败: {str(e)}")
logger.error(f"❌ 加载配置失败: {str(e)}")
raise
# 配置文件路径
CONFIG_PATH = os.path.join(os.path.dirname(__file__), 'config.yaml')
# 加载配置并导出全局变量
config = load_config() # 模块导入时立即执行
MANAGEMENT_NODES = config["MANAGEMENT_NODES"]
SNAPSHOT_RETENTION_DAYS = config["SNAPSHOT_RETENTION_DAYS"]
EXCEL_OUTPUT_PATH = config["EXCEL_OUTPUT_PATH"]
LOG_FILE_PATH = config["LOG_FILE_PATH"]
#LOG_FILE_PATH = config["LOG_FILE_PATH"]
DISABLE_SSL_VERIFY = config["DISABLE_SSL_VERIFY"]
EXPIRE_DATE = config["EXPIRE_DATE"]
# 验证配置函数
def validate_config():
@@ -68,9 +61,8 @@ if __name__ == "__main__":
# 打印全局配置
print("\n【全局配置】")
print(f" 快照保留天数: {config['SNAPSHOT_RETENTION_DAYS']}")
print(f" 过期日期: {config['EXPIRE_DATE']}")
print(f" Excel输出路径: {config['EXCEL_OUTPUT_PATH']}")
print(f" 日志文件路径: {config['LOG_FILE_PATH']}")
print(f" Excel输出路径: {EXCEL_OUTPUT_PATH}")
#print(f" 日志文件路径: {LOG_FILE_PATH}")
print(f" 禁用SSL验证: {config['DISABLE_SSL_VERIFY']}")
# 打印管理节点