import requests from xml.etree import ElementTree as ET from backend.models.firmware_version import FirmwareVersion, db def sync_dell_catalog(model="PowerEdge R750"): """ Dell 공식 Catalog.xml에서 지정된 모델(model)에 해당하는 펌웨어 정보만 추출 후 DB 저장. """ url = "https://downloads.dell.com/catalog/Catalog.xml" print(f"[INFO] Dell Catalog 다운로드 중... ({url})") response = requests.get(url, timeout=60) response.raise_for_status() root = ET.fromstring(response.content) count = 0 for pkg in root.findall(".//SoftwareComponent"): # 이 컴포넌트가 지정된 모델에 해당하는지 확인 supported = [ sys.text.strip() for sys in pkg.findall(".//SupportedSystems/Brand/Model/Display") if sys.text ] if model not in supported: continue name = pkg.findtext("Name") version = pkg.findtext("Version") release_date = pkg.findtext("ReleaseDate") path = pkg.findtext("path") vendor = "Dell" if not name or not version: continue # 중복 방지 existing = FirmwareVersion.query.filter_by( component_name=name, latest_version=version, server_model=model ).first() if not existing: db.session.add( FirmwareVersion( component_name=name, latest_version=version, release_date=release_date, vendor=vendor, server_model=model, download_url=f"https://downloads.dell.com/{path}", ) ) count += 1 db.session.commit() print(f"✓ {model} 관련 펌웨어 {count}개 동기화 완료") return count