update
This commit is contained in:
@@ -11,6 +11,8 @@ from .jobs import register_jobs_routes
|
||||
from .idrac_routes import register_idrac_routes
|
||||
from .catalog_sync import catalog_bp
|
||||
from .scp_routes import scp_bp
|
||||
from .drm_sync import drm_sync_bp
|
||||
|
||||
|
||||
def register_routes(app: Flask, socketio=None) -> None:
|
||||
"""블루프린트 일괄 등록. socketio는 main 라우트에서만 사용."""
|
||||
@@ -25,3 +27,4 @@ def register_routes(app: Flask, socketio=None) -> None:
|
||||
register_idrac_routes(app)
|
||||
app.register_blueprint(catalog_bp)
|
||||
app.register_blueprint(scp_bp)
|
||||
app.register_blueprint(drm_sync_bp)
|
||||
|
||||
Binary file not shown.
61
backend/routes/drm_sync.py
Normal file
61
backend/routes/drm_sync.py
Normal file
@@ -0,0 +1,61 @@
|
||||
"""
|
||||
DRM 카탈로그 동기화 라우트
|
||||
backend/routes/drm_sync.py
|
||||
"""
|
||||
|
||||
from flask import Blueprint, request, jsonify
|
||||
from backend.services.drm_catalog_sync import sync_from_drm, check_drm_repository
|
||||
|
||||
drm_sync_bp = Blueprint('drm_sync', __name__, url_prefix='/drm')
|
||||
|
||||
|
||||
@drm_sync_bp.route('/check', methods=['POST'])
|
||||
def check_repository():
|
||||
"""DRM 리포지토리 상태 확인"""
|
||||
try:
|
||||
data = request.get_json() or {}
|
||||
repository_path = data.get('repository_path')
|
||||
|
||||
if not repository_path:
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': 'repository_path가 필요합니다'
|
||||
}), 400
|
||||
|
||||
info = check_drm_repository(repository_path)
|
||||
|
||||
return jsonify({
|
||||
'success': info.get('exists', False),
|
||||
'info': info
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': f'오류: {str(e)}'
|
||||
}), 500
|
||||
|
||||
|
||||
@drm_sync_bp.route('/sync', methods=['POST'])
|
||||
def sync_repository():
|
||||
"""DRM 리포지토리에서 펌웨어 동기화"""
|
||||
try:
|
||||
data = request.get_json() or {}
|
||||
repository_path = data.get('repository_path')
|
||||
model = data.get('model', 'PowerEdge R750')
|
||||
|
||||
if not repository_path:
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': 'repository_path가 필요합니다'
|
||||
}), 400
|
||||
|
||||
result = sync_from_drm(repository_path, model)
|
||||
|
||||
return jsonify(result)
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': f'오류: {str(e)}'
|
||||
}), 500
|
||||
@@ -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)}'
|
||||
|
||||
Reference in New Issue
Block a user