""" BIOS Baseline 모델 backend/models/bios_baseline.py Redfish로 가져온 표준 BIOS 설정을 저장하고 관리하는 모델 """ from datetime import datetime from backend.models.user import db class BiosBaseline(db.Model): """BIOS 설정 기준값 모델 - Redfish로 가져온 표준 설정""" __tablename__ = 'bios_baselines' id = db.Column(db.Integer, primary_key=True) # 기본 정보 name = db.Column(db.String(100), nullable=False, unique=True) # 예: "R6615_GPU_Standard_2024" server_model = db.Column(db.String(100), nullable=False) # 예: "PowerEdge R6615" server_type = db.Column(db.String(50)) # 예: "GPU Server", "Storage Server" description = db.Column(db.String(500)) # 설명 # Redfish로 가져온 원본 데이터 bios_data = db.Column(db.JSON, nullable=False) # BIOS 설정값 전체 (JSON) bios_metadata = db.Column(db.JSON, nullable=True) # BIOS 메타데이터 (AttributeName -> DisplayName 매핑) idrac_data = db.Column(db.JSON, nullable=True) # iDRAC 설정값 (JSON) idrac_metadata = db.Column(db.JSON, nullable=True) # iDRAC 메타데이터 (DisplayName 매핑) raid_data = db.Column(db.JSON, nullable=True) # RAID/Storage 구성 (JSON) nic_data = db.Column(db.JSON, nullable=True) # NIC 설정 (Adapters) boot_data = db.Column(db.JSON, nullable=True) # 부팅 설정 (Order) firmware_data = db.Column(db.JSON, nullable=True) # 펌웨어 목록 # 메타데이터 source_ip = db.Column(db.String(50)) # 이 baseline을 생성한 서버 IP source_service_tag = db.Column(db.String(50)) # 원본 서버 Service Tag bios_version = db.Column(db.String(50)) # BIOS 버전 total_settings = db.Column(db.Integer) # 총 설정 항목 수 # 복사 관계 (어떤 baseline에서 복사되었는지) copied_from_id = db.Column(db.Integer, db.ForeignKey('bios_baselines.id'), nullable=True) # 상태 및 관리 is_active = db.Column(db.Boolean, default=True) created_by = db.Column(db.String(100)) # 생성자 created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # 관계 설정 copied_from = db.relationship('BiosBaseline', remote_side=[id], backref='copies') def to_dict(self, include_data=False): """ 딕셔너리로 변환 include_data: True면 bios_data, idrac_data, raid_data 등 상세 데이터 포함 (상세 조회 시) """ data = { 'id': self.id, 'name': self.name, 'server_model': self.server_model, 'server_type': self.server_type, 'description': self.description, 'source_ip': self.source_ip, 'source_service_tag': self.source_service_tag, 'bios_version': self.bios_version, 'total_settings': self.total_settings, 'copied_from_id': self.copied_from_id, 'is_active': self.is_active, 'created_by': self.created_by, 'created_at': self.created_at.isoformat() if self.created_at else None, 'updated_at': self.updated_at.isoformat() if self.updated_at else None } if include_data: data['bios_data'] = self.bios_data data['bios_metadata'] = self.bios_metadata data['idrac_data'] = self.idrac_data data['idrac_metadata'] = self.idrac_metadata data['raid_data'] = self.raid_data data['nic_data'] = self.nic_data data['boot_data'] = self.boot_data data['firmware_data'] = self.firmware_data return data def __repr__(self): return f''