This commit is contained in:
2025-11-29 11:13:55 +09:00
parent c0d3312bca
commit 19798cca66
12 changed files with 2094 additions and 255 deletions

View File

@@ -835,26 +835,37 @@ def delete_firmware_version(version_id):
"""펌웨어 버전 정보 삭제"""
try:
version = FirmwareVersion.query.get(version_id)
if not version:
from flask import current_app
current_app.logger.warning(f"Firmware version not found: {version_id}")
return jsonify({
'success': False,
'message': '버전 정보를 찾을 수 없습니다'
})
'message': '펌웨어 버전을 찾을 수 없습니다'
}), 404
version.is_active = False
component_name = version.component_name
version_number = version.latest_version
db.session.delete(version)
db.session.commit()
from flask import current_app
current_app.logger.info(f"Firmware version deleted: {component_name} v{version_number} (ID: {version_id})")
return jsonify({
'success': True,
'message': f'{version.component_name} 버전 정보 삭제 완료'
'message': f'{component_name} 버전 정보 삭제되었습니다'
})
except Exception as e:
from flask import current_app
current_app.logger.error(f"Error deleting firmware version {version_id}: {str(e)}")
db.session.rollback()
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
'message': f'삭제 실패: {str(e)}'
}), 500
@idrac_bp.route('/api/servers/<int:server_id>/firmware/compare', methods=['GET'])
def compare_server_firmware(server_id):
@@ -962,6 +973,13 @@ def compare_multi_servers_firmware():
for server_id in server_ids:
server = IdracServer.query.get(server_id)
if not server:
results.append({
'server_id': server_id,
'server_name': 'Unknown',
'server_ip': '',
'success': False,
'message': '서버를 찾을 수 없습니다'
})
continue
try:
@@ -971,44 +989,47 @@ def compare_multi_servers_firmware():
latest_versions = FirmwareVersion.query.filter_by(is_active=True).all()
outdated_count = 0
outdated_items = []
comparisons = []
for current_fw in current_inventory:
component_name = current_fw['Name']
current_version = current_fw['Version']
# 최신 버전 찾기
latest = None
for lv in latest_versions:
if lv.component_name.lower() in component_name.lower():
comparison = FirmwareComparisonResult(
component_name=component_name,
current_version=current_version,
latest_version=lv.latest_version
)
if comparison.status == 'outdated':
outdated_count += 1
outdated_items.append({
'component': component_name,
'current': current_version,
'latest': lv.latest_version
})
break
# 서버 모델 확인
if not lv.server_model or lv.server_model == server.model:
latest = lv
break
# 비교 결과 생성
comparison = FirmwareComparisonResult(
component_name=component_name,
current_version=current_version,
latest_version=latest.latest_version if latest else None
)
comparisons.append(comparison.to_dict())
results.append({
'server_id': server.id,
'server_name': server.name,
'outdated_count': outdated_count,
'outdated_items': outdated_items,
'status': 'needs_update' if outdated_count > 0 else 'up_to_date'
'server_ip': server.ip_address,
'success': True,
'comparisons': comparisons,
'message': f'{len(comparisons)}개 컴포넌트 비교 완료'
})
except Exception as e:
current_app.logger.error(f"Error comparing firmware for server {server.id}: {str(e)}")
results.append({
'server_id': server.id,
'server_name': server.name,
'error': str(e)
'server_ip': server.ip_address,
'success': False,
'message': f'비교 실패: {str(e)}'
})
return jsonify({
@@ -1017,6 +1038,7 @@ def compare_multi_servers_firmware():
})
except Exception as e:
current_app.logger.error(f"Error in compare_multi_servers_firmware: {str(e)}")
return jsonify({
'success': False,
'message': f'오류: {str(e)}'