This commit is contained in:
2025-10-21 20:29:39 +09:00
parent 230ea0890d
commit bc15452181
163 changed files with 5177 additions and 16122 deletions

6
.env
View File

@@ -19,4 +19,8 @@ SOCKETIO_ASYNC_MODE=threading
# Telegram (민감정보, 필수 시에만 설정)
TELEGRAM_BOT_TOKEN=6719918880:AAHC1on-KlzH0G3ylJP57p-q5qMyorFUGZo
TELEGRAM_CHAT_ID=298120612
TELEGRAM_CHAT_ID=298120612
# iDRAC 기본 연결 정보 (추가!)
IDRAC_DEFAULT_USERNAME=root
IDRAC_DEFAULT_PASSWORD=calvin

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,134 @@
"""
펌웨어 버전 관리 모델
backend/models/firmware_version.py
"""
from backend.models.user import db
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, Boolean, Text
class FirmwareVersion(db.Model):
"""펌웨어 최신 버전 정보 모델"""
__tablename__ = 'firmware_versions'
id = Column(Integer, primary_key=True)
# 컴포넌트 정보
component_name = Column(String(100), nullable=False) # BIOS, iDRAC, PERC 등
component_type = Column(String(50)) # Firmware, Driver 등
vendor = Column(String(50)) # Dell, Intel, Broadcom 등
# 서버 모델 (선택적)
server_model = Column(String(100)) # PowerEdge R750, R640 등 (비어있으면 모든 모델)
# 버전 정보
latest_version = Column(String(50), nullable=False) # 최신 버전
release_date = Column(String(20)) # 릴리즈 날짜
# 다운로드 정보
download_url = Column(String(500)) # DUP 파일 다운로드 URL
file_name = Column(String(200)) # DUP 파일명
file_size_mb = Column(Integer) # 파일 크기 (MB)
# 메타 정보
notes = Column(Text) # 비고 (버전 변경 사항 등)
is_critical = Column(Boolean, default=False) # 중요 업데이트 여부
is_active = Column(Boolean, default=True) # 활성화 여부
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
def to_dict(self):
"""딕셔너리로 변환"""
return {
'id': self.id,
'component_name': self.component_name,
'component_type': self.component_type,
'vendor': self.vendor,
'server_model': self.server_model,
'latest_version': self.latest_version,
'release_date': self.release_date,
'download_url': self.download_url,
'file_name': self.file_name,
'file_size_mb': self.file_size_mb,
'notes': self.notes,
'is_critical': self.is_critical,
'is_active': self.is_active,
'created_at': self.created_at.isoformat() if self.created_at else None,
'updated_at': self.updated_at.isoformat() if self.updated_at else None
}
def __repr__(self):
return f'<FirmwareVersion {self.component_name} {self.latest_version}>'
class FirmwareComparisonResult:
"""펌웨어 버전 비교 결과"""
def __init__(self, component_name, current_version, latest_version=None):
self.component_name = component_name
self.current_version = current_version
self.latest_version = latest_version
self.status = self._compare_versions()
self.recommendation = self._get_recommendation()
def _compare_versions(self):
"""버전 비교"""
if not self.latest_version:
return 'unknown' # 최신 버전 정보 없음
if self.current_version == self.latest_version:
return 'latest' # 최신
# 버전 비교 (단순 문자열 비교보다 정교하게)
if self._is_older(self.current_version, self.latest_version):
return 'outdated' # 업데이트 필요
else:
return 'unknown' # 판단 불가
def _is_older(self, current, latest):
"""
버전 비교 (간단한 버전 비교)
예: 2.10.0 < 2.15.0
"""
try:
# 버전 문자열을 숫자 리스트로 변환
current_parts = [int(x) for x in current.replace('-', '.').split('.') if x.isdigit()]
latest_parts = [int(x) for x in latest.replace('-', '.').split('.') if x.isdigit()]
# 길이 맞추기
max_len = max(len(current_parts), len(latest_parts))
current_parts += [0] * (max_len - len(current_parts))
latest_parts += [0] * (max_len - len(latest_parts))
# 비교
for c, l in zip(current_parts, latest_parts):
if c < l:
return True
elif c > l:
return False
return False # 같음
except:
# 비교 실패 시 문자열 비교
return current < latest
def _get_recommendation(self):
"""권장 사항"""
if self.status == 'outdated':
return f'업데이트 권장: {self.current_version}{self.latest_version}'
elif self.status == 'latest':
return '최신 버전'
else:
return '버전 정보 확인 필요'
def to_dict(self):
return {
'component_name': self.component_name,
'current_version': self.current_version,
'latest_version': self.latest_version,
'status': self.status,
'recommendation': self.recommendation
}

View File

@@ -0,0 +1,62 @@
"""
Dell iDRAC 서버 관리 모델
backend/models/idrac_server.py
"""
from backend.models.user import db
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, Boolean
class IdracServer(db.Model):
"""iDRAC 서버 정보 모델"""
__tablename__ = 'idrac_servers'
id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False) # 서버명
ip_address = Column(String(50), nullable=False, unique=True) # iDRAC IP
username = Column(String(50), default='root') # iDRAC 사용자명
password = Column(String(200), nullable=False) # 비밀번호 (암호화 권장)
# 분류 정보
group_name = Column(String(100)) # 그룹명 (고객사, 프로젝트명)
location = Column(String(100)) # 위치
model = Column(String(100)) # 서버 모델
# 상태 정보
status = Column(String(20), default='registered') # registered, online, offline, updating
last_connected = Column(DateTime) # 마지막 연결 시간
last_updated = Column(DateTime) # 마지막 업데이트 시간
# 펌웨어 정보
current_bios = Column(String(50)) # 현재 BIOS 버전
target_bios = Column(String(50)) # 목표 BIOS 버전
# 메타 정보
notes = Column(String(500)) # 비고
is_active = Column(Boolean, default=True) # 활성화 여부
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
def to_dict(self):
"""딕셔너리로 변환"""
return {
'id': self.id,
'name': self.name,
'ip_address': self.ip_address,
'username': self.username,
'group_name': self.group_name,
'location': self.location,
'model': self.model,
'status': self.status,
'last_connected': self.last_connected.isoformat() if self.last_connected else None,
'last_updated': self.last_updated.isoformat() if self.last_updated else None,
'current_bios': self.current_bios,
'target_bios': self.target_bios,
'notes': self.notes,
'is_active': self.is_active,
'created_at': self.created_at.isoformat() if self.created_at else None
}
def __repr__(self):
return f'<IdracServer {self.name} ({self.ip_address})>'

View File

@@ -8,6 +8,8 @@ from .xml import register_xml_routes
from .utilities import register_util_routes
from .file_view import register_file_view
from .jobs import register_jobs_routes
from .idrac_routes import register_idrac_routes
from .catalog_sync import catalog_bp
def register_routes(app: Flask, socketio=None) -> None:
"""블루프린트 일괄 등록. socketio는 main 라우트에서만 사용."""
@@ -18,4 +20,6 @@ def register_routes(app: Flask, socketio=None) -> None:
register_xml_routes(app)
register_util_routes(app)
register_file_view(app)
register_jobs_routes(app)
register_jobs_routes(app)
register_idrac_routes(app)
app.register_blueprint(catalog_bp)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,23 @@
# backend/routes/catalog_sync.py
from flask import Blueprint, jsonify, request
from backend.services.dell_catalog_sync import sync_dell_catalog
catalog_bp = Blueprint("catalog", __name__, url_prefix="/catalog")
@catalog_bp.route("/sync", methods=["POST"])
def sync_catalog():
"""Dell Catalog 버전 정보를 동기화 (CSRF 보호 유지)"""
try:
data = request.get_json(silent=True) or {}
model = data.get("model", "PowerEdge R750")
sync_dell_catalog(model)
return jsonify({
"success": True,
"message": f"{model} 동기화 완료"
})
except Exception as e:
return jsonify({
"success": False,
"message": f"오류: {str(e)}"
})

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,669 @@
"""
Dell iDRAC 멀티 서버 펌웨어 관리 라우트
backend/routes/idrac_routes.py
- CSRF 보호 제외 추가
"""
from flask import Blueprint, render_template, request, jsonify, current_app
from werkzeug.utils import secure_filename
import os
from datetime import datetime
from backend.services.idrac_redfish_client import DellRedfishClient
from backend.models.idrac_server import IdracServer, db
from flask_socketio import emit
import threading
# Blueprint 생성
idrac_bp = Blueprint('idrac', __name__, url_prefix='/idrac')
# 설정
UPLOAD_FOLDER = 'uploads/firmware'
ALLOWED_EXTENSIONS = {'exe', 'bin'}
MAX_FILE_SIZE = 500 * 1024 * 1024 # 500MB
def allowed_file(filename):
"""허용된 파일 형식 확인"""
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
# ========================================
# 메인 페이지
# ========================================
@idrac_bp.route('/')
def index():
"""iDRAC 멀티 서버 관리 메인 페이지"""
return render_template('idrac_firmware.html')
# ========================================
# 서버 관리 API
# ========================================
@idrac_bp.route('/api/servers', methods=['GET'])
def get_servers():
"""등록된 서버 목록 조회"""
try:
group = request.args.get('group') # 그룹 필터
query = IdracServer.query.filter_by(is_active=True)
if group and group != 'all':
query = query.filter_by(group_name=group)
servers = query.order_by(IdracServer.name).all()
return jsonify({
'success': True,
'servers': [s.to_dict() for s in servers]
})
except Exception as e:
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/servers', methods=['POST'])
def add_server():
"""서버 추가"""
try:
data = request.json
# 필수 필드 확인
if not all([data.get('name'), data.get('ip_address'), data.get('password')]):
return jsonify({
'success': False,
'message': '필수 필드를 모두 입력하세요 (서버명, IP, 비밀번호)'
})
# 중복 IP 확인
existing = IdracServer.query.filter_by(ip_address=data['ip_address']).first()
if existing:
return jsonify({
'success': False,
'message': f'이미 등록된 IP입니다: {data["ip_address"]}'
})
# 서버 생성
server = IdracServer(
name=data['name'],
ip_address=data['ip_address'],
username=data.get('username', 'root'),
password=data['password'],
group_name=data.get('group_name'),
location=data.get('location'),
model=data.get('model'),
notes=data.get('notes')
)
db.session.add(server)
db.session.commit()
return jsonify({
'success': True,
'message': f'서버 {server.name} 추가 완료',
'server': server.to_dict()
})
except Exception as e:
db.session.rollback()
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/servers/<int:server_id>', methods=['PUT'])
def update_server(server_id):
"""서버 정보 수정"""
try:
server = IdracServer.query.get(server_id)
if not server:
return jsonify({
'success': False,
'message': '서버를 찾을 수 없습니다'
})
data = request.json
# 업데이트
if 'name' in data:
server.name = data['name']
if 'ip_address' in data:
server.ip_address = data['ip_address']
if 'username' in data:
server.username = data['username']
if 'password' in data:
server.password = data['password']
if 'group_name' in data:
server.group_name = data['group_name']
if 'location' in data:
server.location = data['location']
if 'model' in data:
server.model = data['model']
if 'notes' in data:
server.notes = data['notes']
db.session.commit()
return jsonify({
'success': True,
'message': '서버 정보 수정 완료',
'server': server.to_dict()
})
except Exception as e:
db.session.rollback()
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/servers/<int:server_id>', methods=['DELETE'])
def delete_server(server_id):
"""서버 삭제 (소프트 삭제)"""
try:
server = IdracServer.query.get(server_id)
if not server:
return jsonify({
'success': False,
'message': '서버를 찾을 수 없습니다'
})
server.is_active = False
db.session.commit()
return jsonify({
'success': True,
'message': f'서버 {server.name} 삭제 완료'
})
except Exception as e:
db.session.rollback()
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/groups', methods=['GET'])
def get_groups():
"""등록된 그룹 목록"""
try:
groups = db.session.query(IdracServer.group_name)\
.filter(IdracServer.is_active == True)\
.filter(IdracServer.group_name.isnot(None))\
.distinct()\
.all()
group_list = [g[0] for g in groups if g[0]]
return jsonify({
'success': True,
'groups': group_list
})
except Exception as e:
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
# ========================================
# 연결 및 상태 확인 API
# ========================================
@idrac_bp.route('/api/servers/<int:server_id>/test', methods=['POST'])
def test_connection(server_id):
"""단일 서버 연결 테스트"""
try:
server = IdracServer.query.get(server_id)
if not server:
return jsonify({
'success': False,
'message': '서버를 찾을 수 없습니다'
})
client = DellRedfishClient(server.ip_address, server.username, server.password)
if client.check_connection():
server.status = 'online'
server.last_connected = datetime.utcnow()
db.session.commit()
return jsonify({
'success': True,
'message': f'{server.name} 연결 성공'
})
else:
server.status = 'offline'
db.session.commit()
return jsonify({
'success': False,
'message': f'{server.name} 연결 실패'
})
except Exception as e:
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/servers/test-multi', methods=['POST'])
def test_connections_multi():
"""다중 서버 일괄 연결 테스트"""
try:
data = request.json
server_ids = data.get('server_ids', [])
if not server_ids:
return jsonify({
'success': False,
'message': '서버를 선택하세요'
})
results = []
for server_id in server_ids:
server = IdracServer.query.get(server_id)
if not server:
continue
try:
client = DellRedfishClient(server.ip_address, server.username, server.password)
if client.check_connection():
server.status = 'online'
server.last_connected = datetime.utcnow()
results.append({
'server_id': server.id,
'server_name': server.name,
'success': True,
'message': '연결 성공'
})
else:
server.status = 'offline'
results.append({
'server_id': server.id,
'server_name': server.name,
'success': False,
'message': '연결 실패'
})
except Exception as e:
server.status = 'offline'
results.append({
'server_id': server.id,
'server_name': server.name,
'success': False,
'message': str(e)
})
db.session.commit()
success_count = sum(1 for r in results if r['success'])
return jsonify({
'success': True,
'results': results,
'summary': {
'total': len(results),
'success': success_count,
'failed': len(results) - success_count
}
})
except Exception as e:
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/servers/<int:server_id>/firmware', methods=['GET'])
def get_server_firmware(server_id):
"""단일 서버 펌웨어 버전 조회"""
try:
server = IdracServer.query.get(server_id)
if not server:
return jsonify({
'success': False,
'message': '서버를 찾을 수 없습니다'
})
client = DellRedfishClient(server.ip_address, server.username, server.password)
inventory = client.get_firmware_inventory()
# BIOS 버전 업데이트
for item in inventory:
if 'BIOS' in item.get('Name', ''):
server.current_bios = item.get('Version')
break
db.session.commit()
return jsonify({
'success': True,
'data': inventory
})
except Exception as e:
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
# ========================================
# 멀티 서버 펌웨어 업로드 API
# ========================================
@idrac_bp.route('/api/upload-multi', methods=['POST'])
def upload_multi():
"""다중 서버에 펌웨어 일괄 업로드"""
try:
if 'file' not in request.files:
return jsonify({
'success': False,
'message': '파일이 없습니다'
})
file = request.files['file']
server_ids_str = request.form.get('server_ids')
if not server_ids_str:
return jsonify({
'success': False,
'message': '서버를 선택하세요'
})
server_ids = [int(x) for x in server_ids_str.split(',')]
if file.filename == '':
return jsonify({
'success': False,
'message': '파일이 선택되지 않았습니다'
})
if not allowed_file(file.filename):
return jsonify({
'success': False,
'message': '허용되지 않은 파일 형식입니다 (.exe, .bin만 가능)'
})
# 로컬에 임시 저장
filename = secure_filename(file.filename)
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
local_path = os.path.join(UPLOAD_FOLDER, filename)
file.save(local_path)
# 백그라운드 스레드로 업로드 시작
from backend.services import watchdog_handler
socketio = watchdog_handler.socketio
def upload_to_servers():
results = []
for idx, server_id in enumerate(server_ids):
server = IdracServer.query.get(server_id)
if not server:
continue
try:
# 진행 상황 전송
if socketio:
socketio.emit('upload_progress', {
'server_id': server.id,
'server_name': server.name,
'status': 'uploading',
'progress': 0,
'message': '업로드 시작...'
})
server.status = 'updating'
db.session.commit()
client = DellRedfishClient(server.ip_address, server.username, server.password)
result = client.upload_firmware_staged(local_path)
if result['success']:
server.status = 'online'
server.last_updated = datetime.utcnow()
results.append({
'server_id': server.id,
'server_name': server.name,
'success': True,
'job_id': result['job_id'],
'message': '업로드 완료'
})
if socketio:
socketio.emit('upload_progress', {
'server_id': server.id,
'server_name': server.name,
'status': 'completed',
'progress': 100,
'message': '업로드 완료',
'job_id': result['job_id']
})
else:
server.status = 'online'
results.append({
'server_id': server.id,
'server_name': server.name,
'success': False,
'message': result.get('message', '업로드 실패')
})
if socketio:
socketio.emit('upload_progress', {
'server_id': server.id,
'server_name': server.name,
'status': 'failed',
'progress': 0,
'message': result.get('message', '업로드 실패')
})
db.session.commit()
except Exception as e:
server.status = 'online'
db.session.commit()
results.append({
'server_id': server.id,
'server_name': server.name,
'success': False,
'message': str(e)
})
if socketio:
socketio.emit('upload_progress', {
'server_id': server.id,
'server_name': server.name,
'status': 'failed',
'progress': 0,
'message': str(e)
})
# 최종 결과 전송
if socketio:
success_count = sum(1 for r in results if r['success'])
socketio.emit('upload_complete', {
'results': results,
'summary': {
'total': len(results),
'success': success_count,
'failed': len(results) - success_count
}
})
# 스레드 시작
thread = threading.Thread(target=upload_to_servers)
thread.daemon = True
thread.start()
return jsonify({
'success': True,
'message': f'{len(server_ids)}대 서버에 업로드 시작',
'filename': filename
})
except Exception as e:
return jsonify({
'success': False,
'message': f'업로드 오류: {str(e)}'
})
# ========================================
# 기존 단일 서버 API (호환성 유지)
# ========================================
@idrac_bp.route('/api/files/local', methods=['GET'])
def list_local_files():
"""로컬에 저장된 DUP 파일 목록"""
try:
files = []
if os.path.exists(UPLOAD_FOLDER):
for filename in os.listdir(UPLOAD_FOLDER):
filepath = os.path.join(UPLOAD_FOLDER, filename)
if os.path.isfile(filepath):
file_size = os.path.getsize(filepath)
files.append({
'name': filename,
'size': file_size,
'size_mb': round(file_size / (1024 * 1024), 2),
'uploaded_at': datetime.fromtimestamp(
os.path.getmtime(filepath)
).strftime('%Y-%m-%d %H:%M:%S')
})
return jsonify({
'success': True,
'files': files
})
except Exception as e:
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/files/local/<filename>', methods=['DELETE'])
def delete_local_file(filename):
"""로컬 DUP 파일 삭제"""
try:
filepath = os.path.join(UPLOAD_FOLDER, secure_filename(filename))
if os.path.exists(filepath):
os.remove(filepath)
return jsonify({
'success': True,
'message': f'{filename} 삭제 완료'
})
else:
return jsonify({
'success': False,
'message': '파일을 찾을 수 없습니다'
})
except Exception as e:
return jsonify({
'success': False,
'message': f'삭제 오류: {str(e)}'
})
# ========================================
# 서버 재부팅 API (멀티)
# ========================================
@idrac_bp.route('/api/servers/reboot-multi', methods=['POST'])
def reboot_servers_multi():
"""선택한 서버들 일괄 재부팅"""
try:
data = request.json
server_ids = data.get('server_ids', [])
reboot_type = data.get('type', 'GracefulRestart')
if not server_ids:
return jsonify({
'success': False,
'message': '서버를 선택하세요'
})
results = []
for server_id in server_ids:
server = IdracServer.query.get(server_id)
if not server:
continue
try:
client = DellRedfishClient(server.ip_address, server.username, server.password)
result = client.reboot_server(reboot_type)
if result:
results.append({
'server_id': server.id,
'server_name': server.name,
'success': True,
'message': '재부팅 시작'
})
else:
results.append({
'server_id': server.id,
'server_name': server.name,
'success': False,
'message': '재부팅 실패'
})
except Exception as e:
results.append({
'server_id': server.id,
'server_name': server.name,
'success': False,
'message': str(e)
})
success_count = sum(1 for r in results if r['success'])
return jsonify({
'success': True,
'results': results,
'summary': {
'total': len(results),
'success': success_count,
'failed': len(results) - success_count
}
})
except Exception as e:
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
# Blueprint 등록 함수
def register_idrac_routes(app):
"""
iDRAC 멀티 서버 관리 Blueprint 등록
Args:
app: Flask 애플리케이션 인스턴스
"""
# uploads 디렉토리 생성
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
# Blueprint 등록
app.register_blueprint(idrac_bp)
# CSRF 보호 제외 - iDRAC API 엔드포인트
try:
from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect()
# API 엔드포인트는 CSRF 검증 제외
csrf.exempt(idrac_bp)
except:
pass # CSRF 설정 실패해도 계속 진행
# DB 테이블 생성
with app.app_context():
db.create_all()

View File

@@ -0,0 +1,399 @@
"""
펌웨어 버전 비교 API 코드
idrac_routes.py 파일의 register_idrac_routes 함수 위에 추가하세요
"""
# ========================================
# 펌웨어 버전 관리 API
# ========================================
@idrac_bp.route('/api/firmware-versions', methods=['GET'])
def get_firmware_versions():
"""등록된 최신 펌웨어 버전 목록"""
try:
server_model = request.args.get('model') # 서버 모델 필터
query = FirmwareVersion.query.filter_by(is_active=True)
if server_model:
# 특정 모델 또는 범용
query = query.filter(
(FirmwareVersion.server_model == server_model) |
(FirmwareVersion.server_model == None)
)
versions = query.order_by(FirmwareVersion.component_name).all()
return jsonify({
'success': True,
'versions': [v.to_dict() for v in versions]
})
except Exception as e:
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/firmware-versions', methods=['POST'])
def add_firmware_version():
"""최신 펌웨어 버전 등록"""
try:
data = request.json
# 필수 필드 확인
if not all([data.get('component_name'), data.get('latest_version')]):
return jsonify({
'success': False,
'message': '컴포넌트명과 버전을 입력하세요'
})
# 중복 확인 (같은 컴포넌트, 같은 모델)
existing = FirmwareVersion.query.filter_by(
component_name=data['component_name'],
server_model=data.get('server_model')
).first()
if existing:
return jsonify({
'success': False,
'message': f'이미 등록된 컴포넌트입니다'
})
# 버전 생성
version = FirmwareVersion(
component_name=data['component_name'],
component_type=data.get('component_type'),
vendor=data.get('vendor'),
server_model=data.get('server_model'),
latest_version=data['latest_version'],
release_date=data.get('release_date'),
download_url=data.get('download_url'),
file_name=data.get('file_name'),
file_size_mb=data.get('file_size_mb'),
notes=data.get('notes'),
is_critical=data.get('is_critical', False)
)
db.session.add(version)
db.session.commit()
return jsonify({
'success': True,
'message': f'{version.component_name} 버전 정보 등록 완료',
'version': version.to_dict()
})
except Exception as e:
db.session.rollback()
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/firmware-versions/<int:version_id>', methods=['PUT'])
def update_firmware_version(version_id):
"""펌웨어 버전 정보 수정"""
try:
version = FirmwareVersion.query.get(version_id)
if not version:
return jsonify({
'success': False,
'message': '버전 정보를 찾을 수 없습니다'
})
data = request.json
# 업데이트
if 'component_name' in data:
version.component_name = data['component_name']
if 'latest_version' in data:
version.latest_version = data['latest_version']
if 'release_date' in data:
version.release_date = data['release_date']
if 'download_url' in data:
version.download_url = data['download_url']
if 'file_name' in data:
version.file_name = data['file_name']
if 'notes' in data:
version.notes = data['notes']
if 'is_critical' in data:
version.is_critical = data['is_critical']
db.session.commit()
return jsonify({
'success': True,
'message': '버전 정보 수정 완료',
'version': version.to_dict()
})
except Exception as e:
db.session.rollback()
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/firmware-versions/<int:version_id>', methods=['DELETE'])
def delete_firmware_version(version_id):
"""펌웨어 버전 정보 삭제"""
try:
version = FirmwareVersion.query.get(version_id)
if not version:
return jsonify({
'success': False,
'message': '버전 정보를 찾을 수 없습니다'
})
version.is_active = False
db.session.commit()
return jsonify({
'success': True,
'message': f'{version.component_name} 버전 정보 삭제 완료'
})
except Exception as e:
db.session.rollback()
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/servers/<int:server_id>/firmware/compare', methods=['GET'])
def compare_server_firmware(server_id):
"""
서버 펌웨어 버전 비교
현재 버전과 최신 버전을 비교하여 업데이트 필요 여부 확인
"""
try:
server = IdracServer.query.get(server_id)
if not server:
return jsonify({
'success': False,
'message': '서버를 찾을 수 없습니다'
})
# 현재 펌웨어 조회
client = DellRedfishClient(server.ip_address, server.username, server.password)
current_inventory = client.get_firmware_inventory()
# 최신 버전 정보 조회
latest_versions = FirmwareVersion.query.filter_by(is_active=True).all()
# 비교 결과
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():
# 서버 모델 확인
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
)
result = comparison.to_dict()
# 추가 정보
if latest:
result['latest_info'] = {
'release_date': latest.release_date,
'download_url': latest.download_url,
'file_name': latest.file_name,
'is_critical': latest.is_critical,
'notes': latest.notes
}
comparisons.append(result)
# 통계
total = len(comparisons)
outdated = len([c for c in comparisons if c['status'] == 'outdated'])
latest_count = len([c for c in comparisons if c['status'] == 'latest'])
unknown = len([c for c in comparisons if c['status'] == 'unknown'])
return jsonify({
'success': True,
'server': {
'id': server.id,
'name': server.name,
'model': server.model
},
'comparisons': comparisons,
'summary': {
'total': total,
'outdated': outdated,
'latest': latest_count,
'unknown': unknown
}
})
except Exception as e:
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
@idrac_bp.route('/api/servers/firmware/compare-multi', methods=['POST'])
def compare_multi_servers_firmware():
"""
여러 서버의 펌웨어 버전 비교
"""
try:
data = request.json
server_ids = data.get('server_ids', [])
if not server_ids:
return jsonify({
'success': False,
'message': '서버를 선택하세요'
})
results = []
for server_id in server_ids:
server = IdracServer.query.get(server_id)
if not server:
continue
try:
# 각 서버 비교
client = DellRedfishClient(server.ip_address, server.username, server.password)
current_inventory = client.get_firmware_inventory()
latest_versions = FirmwareVersion.query.filter_by(is_active=True).all()
outdated_count = 0
outdated_items = []
for current_fw in current_inventory:
component_name = current_fw['Name']
current_version = current_fw['Version']
# 최신 버전 찾기
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
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'
})
except Exception as e:
results.append({
'server_id': server.id,
'server_name': server.name,
'error': str(e)
})
return jsonify({
'success': True,
'results': results
})
except Exception as e:
return jsonify({
'success': False,
'message': f'오류: {str(e)}'
})
# ========================================
# 초기 데이터 생성 함수
# ========================================
def init_firmware_versions():
"""초기 펌웨어 버전 데이터 생성"""
initial_versions = [
{
'component_name': 'BIOS',
'component_type': 'Firmware',
'vendor': 'Dell',
'server_model': 'PowerEdge R750',
'latest_version': '2.15.0',
'release_date': '2024-01-15',
'notes': 'PowerEdge R750 최신 BIOS'
},
{
'component_name': 'iDRAC',
'component_type': 'Firmware',
'vendor': 'Dell',
'latest_version': '6.10.30.00',
'release_date': '2024-02-20',
'notes': 'iDRAC9 최신 펌웨어 (모든 모델 공용)'
},
{
'component_name': 'PERC H755',
'component_type': 'Firmware',
'vendor': 'Dell',
'server_model': 'PowerEdge R750',
'latest_version': '25.5.9.0001',
'release_date': '2024-01-10',
'notes': 'PERC H755 RAID 컨트롤러'
},
{
'component_name': 'BIOS',
'component_type': 'Firmware',
'vendor': 'Dell',
'server_model': 'PowerEdge R640',
'latest_version': '2.19.2',
'release_date': '2024-02-01',
'notes': 'PowerEdge R640 최신 BIOS'
},
{
'component_name': 'CPLD',
'component_type': 'Firmware',
'vendor': 'Dell',
'latest_version': '1.0.6',
'release_date': '2023-12-15',
'notes': '시스템 보드 CPLD (14G/15G 공용)'
},
]
for data in initial_versions:
# 중복 체크
existing = FirmwareVersion.query.filter_by(
component_name=data['component_name'],
server_model=data.get('server_model')
).first()
if not existing:
version = FirmwareVersion(**data)
db.session.add(version)
try:
db.session.commit()
print("✓ 초기 펌웨어 버전 데이터 생성 완료")
except:
db.session.rollback()
print("⚠ 초기 데이터 생성 중 오류 (이미 있을 수 있음)")

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,58 @@
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

View File

@@ -0,0 +1,397 @@
"""
Dell iDRAC REDFISH API 클라이언트
Dell 서버 펌웨어 조회 최적화 버전
"""
import requests
import json
import time
from urllib3.exceptions import InsecureRequestWarning
from requests.auth import HTTPBasicAuth
# SSL 경고 비활성화
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
class DellRedfishClient:
def __init__(self, idrac_ip, username, password):
"""
Dell iDRAC REDFISH 클라이언트 초기화
Args:
idrac_ip: iDRAC IP 주소
username: iDRAC 사용자명
password: iDRAC 비밀번호
"""
self.idrac_ip = idrac_ip
self.base_url = f"https://{idrac_ip}"
self.auth = HTTPBasicAuth(username, password)
self.headers = {'Content-Type': 'application/json'}
self.session = requests.Session()
self.session.verify = False
self.session.auth = self.auth
def check_connection(self):
"""iDRAC 연결 확인"""
try:
url = f"{self.base_url}/redfish/v1"
response = self.session.get(url, timeout=10)
return response.status_code == 200
except Exception as e:
print(f"연결 오류: {str(e)}")
return False
def get_firmware_inventory(self):
"""
현재 설치된 펌웨어 목록 조회 (Dell 최적화)
주요 컴포넌트만 필터링하여 반환
"""
try:
url = f"{self.base_url}/redfish/v1/UpdateService/FirmwareInventory"
response = self.session.get(url, timeout=30)
if response.status_code != 200:
print(f"펌웨어 목록 조회 실패: {response.status_code}")
return []
data = response.json()
inventory = []
# 주요 컴포넌트 타입 (Dell 서버)
important_components = [
'BIOS', 'iDRAC', 'CPLD', 'Diagnostics',
'Driver', 'Firmware', 'USC', 'NIC',
'RAID', 'PERC', 'Storage', 'Backplane',
'HBA', 'Network', 'Intel', 'Broadcom',
'Mellanox', 'Emulex', 'QLogic'
]
print(f"전체 펌웨어 항목 수: {len(data.get('Members', []))}")
# 각 펌웨어 항목 조회
for idx, member in enumerate(data.get('Members', [])):
try:
fw_url = f"{self.base_url}{member.get('@odata.id', '')}"
fw_response = self.session.get(fw_url, timeout=10)
if fw_response.status_code == 200:
fw_data = fw_response.json()
# 이름과 버전 추출 (여러 필드 시도)
name = (fw_data.get('Name') or
fw_data.get('SoftwareId') or
fw_data.get('Id') or
'Unknown')
version = (fw_data.get('Version') or
fw_data.get('VersionString') or
'Unknown')
# 컴포넌트 타입 확인
component_type = fw_data.get('ComponentType', '')
# 중요 컴포넌트만 필터링
is_important = any(comp.lower() in name.lower()
for comp in important_components)
if is_important or component_type:
item = {
'Name': name,
'Version': version,
'ComponentType': component_type,
'Updateable': fw_data.get('Updateable', False),
'Status': fw_data.get('Status', {}).get('Health', 'OK'),
'Id': fw_data.get('Id', ''),
'Description': fw_data.get('Description', ''),
'ReleaseDate': fw_data.get('ReleaseDate', '')
}
inventory.append(item)
# 진행 상황 출력
if (idx + 1) % 10 == 0:
print(f"조회 중... {idx + 1}/{len(data.get('Members', []))}")
except Exception as e:
print(f"펌웨어 항목 조회 오류 ({idx}): {str(e)}")
continue
# 이름순 정렬
inventory.sort(key=lambda x: x['Name'])
print(f"중요 펌웨어 항목 수: {len(inventory)}")
# 주요 컴포넌트 요약
bios = next((x for x in inventory if 'BIOS' in x['Name']), None)
idrac = next((x for x in inventory if 'iDRAC' in x['Name']), None)
if bios:
print(f"✓ BIOS 버전: {bios['Version']}")
if idrac:
print(f"✓ iDRAC 버전: {idrac['Version']}")
return inventory
except Exception as e:
print(f"펌웨어 목록 조회 오류: {str(e)}")
import traceback
traceback.print_exc()
return []
def get_firmware_summary(self):
"""
주요 펌웨어 버전만 간단히 조회
BIOS, iDRAC, PERC 등 핵심 컴포넌트만
"""
try:
inventory = self.get_firmware_inventory()
summary = {
'BIOS': 'N/A',
'iDRAC': 'N/A',
'PERC': 'N/A',
'NIC': 'N/A',
'CPLD': 'N/A'
}
for item in inventory:
name = item['Name']
version = item['Version']
if 'BIOS' in name:
summary['BIOS'] = version
elif 'iDRAC' in name or 'Integrated Dell Remote Access' in name:
summary['iDRAC'] = version
elif 'PERC' in name or 'RAID' in name:
if summary['PERC'] == 'N/A':
summary['PERC'] = version
elif 'NIC' in name or 'Network' in name:
if summary['NIC'] == 'N/A':
summary['NIC'] = version
elif 'CPLD' in name:
summary['CPLD'] = version
return summary
except Exception as e:
print(f"펌웨어 요약 조회 오류: {str(e)}")
return {}
def upload_firmware_staged(self, dup_file_path):
"""
DUP 파일을 iDRAC에 업로드 (스테이징만, 재부팅 시 적용)
Args:
dup_file_path: 업로드할 DUP 파일 경로
Returns:
dict: {'success': bool, 'job_id': str, 'message': str}
"""
import os
if not os.path.exists(dup_file_path):
return {
'success': False,
'job_id': None,
'message': f'파일을 찾을 수 없습니다: {dup_file_path}'
}
file_name = os.path.basename(dup_file_path)
file_size = os.path.getsize(dup_file_path)
print(f"파일 업로드: {file_name} ({file_size / (1024*1024):.2f} MB)")
try:
url = f"{self.base_url}/redfish/v1/UpdateService/MultipartUpload"
# Multipart 업로드 준비
with open(dup_file_path, 'rb') as f:
files = {
'file': (file_name, f, 'application/octet-stream')
}
# targets=INSTALLED 파라미터로 스테이징 모드 설정
data = {
'@Redfish.OperationApplyTime': 'OnReset',
'Targets': []
}
multipart_data = {
'UpdateParameters': (None, json.dumps(data), 'application/json')
}
multipart_data.update(files)
print("업로드 시작...")
response = self.session.post(
url,
files=multipart_data,
auth=self.auth,
verify=False,
timeout=600 # 10분 타임아웃
)
print(f"응답 코드: {response.status_code}")
if response.status_code in [200, 201, 202]:
response_data = response.json()
# Task 또는 Job ID 추출
task_id = None
if '@odata.id' in response_data:
task_id = response_data['@odata.id'].split('/')[-1]
elif 'Id' in response_data:
task_id = response_data['Id']
# Location 헤더에서 Job ID 추출
location = response.headers.get('Location', '')
if location and not task_id:
task_id = location.split('/')[-1]
print(f"업로드 완료! Task/Job ID: {task_id}")
return {
'success': True,
'job_id': task_id or 'STAGED',
'message': '업로드 완료 (재부팅 시 적용)'
}
else:
error_msg = response.text
print(f"업로드 실패: {error_msg}")
return {
'success': False,
'job_id': None,
'message': f'업로드 실패 (코드: {response.status_code})'
}
except Exception as e:
print(f"업로드 오류: {str(e)}")
import traceback
traceback.print_exc()
return {
'success': False,
'job_id': None,
'message': f'업로드 오류: {str(e)}'
}
def get_job_queue(self):
"""Job Queue 조회"""
try:
url = f"{self.base_url}/redfish/v1/Managers/iDRAC.Embedded.1/Jobs"
response = self.session.get(url, timeout=30)
if response.status_code == 200:
data = response.json()
jobs = []
for member in data.get('Members', [])[:20]: # 최근 20개
job_url = f"{self.base_url}{member['@odata.id']}"
job_response = self.session.get(job_url, timeout=10)
if job_response.status_code == 200:
job_data = job_response.json()
jobs.append({
'Id': job_data.get('Id', ''),
'Name': job_data.get('Name', ''),
'JobState': job_data.get('JobState', 'Unknown'),
'PercentComplete': job_data.get('PercentComplete', 0),
'Message': job_data.get('Message', ''),
'StartTime': job_data.get('StartTime', ''),
'EndTime': job_data.get('EndTime', '')
})
return jobs
else:
return []
except Exception as e:
print(f"Job Queue 조회 오류: {str(e)}")
return []
def get_job_status(self, job_id):
"""특정 Job 상태 조회"""
try:
url = f"{self.base_url}/redfish/v1/Managers/iDRAC.Embedded.1/Jobs/{job_id}"
response = self.session.get(url, timeout=10)
if response.status_code == 200:
data = response.json()
return {
'Id': data.get('Id', ''),
'Name': data.get('Name', ''),
'JobState': data.get('JobState', 'Unknown'),
'PercentComplete': data.get('PercentComplete', 0),
'Message': data.get('Message', ''),
'StartTime': data.get('StartTime', ''),
'EndTime': data.get('EndTime', '')
}
else:
return None
except Exception as e:
print(f"Job 상태 조회 오류: {str(e)}")
return None
def delete_job(self, job_id):
"""Job 삭제"""
try:
url = f"{self.base_url}/redfish/v1/Managers/iDRAC.Embedded.1/Jobs/{job_id}"
response = self.session.delete(url, timeout=10)
return response.status_code in [200, 204]
except Exception as e:
print(f"Job 삭제 오류: {str(e)}")
return False
def get_power_status(self):
"""서버 전원 상태 조회"""
try:
url = f"{self.base_url}/redfish/v1/Systems/System.Embedded.1"
response = self.session.get(url, timeout=10)
if response.status_code == 200:
data = response.json()
return {
'PowerState': data.get('PowerState', 'Unknown'),
'Status': data.get('Status', {}).get('Health', 'Unknown')
}
else:
return {'PowerState': 'Unknown', 'Status': 'Unknown'}
except Exception as e:
print(f"전원 상태 조회 오류: {str(e)}")
return {'PowerState': 'Unknown', 'Status': 'Unknown'}
def reboot_server(self, reset_type='GracefulRestart'):
"""
서버 재부팅
Args:
reset_type: GracefulRestart, ForceRestart, GracefulShutdown, ForceOff, On
"""
try:
url = f"{self.base_url}/redfish/v1/Systems/System.Embedded.1/Actions/ComputerSystem.Reset"
payload = {'ResetType': reset_type}
response = self.session.post(
url,
data=json.dumps(payload),
headers=self.headers,
timeout=30
)
return response.status_code in [200, 202, 204]
except Exception as e:
print(f"재부팅 오류: {str(e)}")
return False
def power_on_server(self):
"""서버 전원 켜기"""
return self.reboot_server('On')
def power_off_server(self, shutdown_type='GracefulShutdown'):
"""
서버 전원 끄기
Args:
shutdown_type: GracefulShutdown 또는 ForceOff
"""
return self.reboot_server(shutdown_type)

View File

@@ -0,0 +1,558 @@
/**
* Dell iDRAC 멀티 서버 펌웨어 관리 스타일
* backend/static/css/idrac_style.css
*/
/* 기본 스타일 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 20px;
}
.container {
max-width: 1400px;
margin: 0 auto;
}
/* 헤더 */
header {
background: white;
padding: 30px;
border-radius: 15px;
box-shadow: 0 10px 30px rgba(0,0,0,0.2);
margin-bottom: 30px;
text-align: center;
}
header h1 {
color: #333;
font-size: 2.5em;
margin-bottom: 10px;
}
header .subtitle {
color: #666;
font-size: 1.1em;
}
/* 카드 */
.card {
background: white;
padding: 30px;
border-radius: 15px;
box-shadow: 0 10px 30px rgba(0,0,0,0.2);
margin-bottom: 30px;
}
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 15px;
border-bottom: 2px solid #eee;
}
.card-header h2 {
color: #333;
font-size: 1.8em;
}
.header-actions {
display: flex;
gap: 10px;
}
/* 필터 그룹 */
.filter-group {
display: flex;
align-items: center;
gap: 15px;
margin-bottom: 20px;
padding: 15px;
background: #f8f9fa;
border-radius: 8px;
}
.filter-group label {
font-weight: 600;
color: #555;
}
.filter-group select {
padding: 8px 15px;
border: 2px solid #ddd;
border-radius: 5px;
font-size: 1em;
min-width: 200px;
}
.count-badge {
background: #667eea;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: 600;
}
/* 서버 테이블 */
.table-container {
overflow-x: auto;
margin-bottom: 20px;
}
.server-table {
width: 100%;
border-collapse: collapse;
}
.server-table thead {
background: #667eea;
color: white;
}
.server-table th {
padding: 15px;
text-align: left;
font-weight: 600;
}
.server-table tbody tr {
border-bottom: 1px solid #eee;
transition: background 0.2s;
}
.server-table tbody tr:hover {
background: #f8f9fa;
}
.server-table td {
padding: 15px;
}
.empty-message {
text-align: center;
color: #999;
padding: 40px !important;
font-style: italic;
}
/* 상태 배지 */
.status {
padding: 5px 12px;
border-radius: 15px;
font-size: 0.9em;
font-weight: 600;
}
.status-registered {
background: #e3f2fd;
color: #1976d2;
}
.status-online {
background: #e8f5e9;
color: #2e7d32;
}
.status-offline {
background: #ffebee;
color: #c62828;
}
.status-updating {
background: #fff3e0;
color: #f57c00;
}
.badge {
background: #f0f0f0;
padding: 4px 10px;
border-radius: 10px;
font-size: 0.9em;
color: #666;
}
/* 버튼 */
.btn {
padding: 10px 20px;
border: none;
border-radius: 8px;
font-size: 1em;
font-weight: 600;
cursor: pointer;
transition: all 0.3s;
}
.btn-primary {
background: #667eea;
color: white;
}
.btn-primary:hover {
background: #5568d3;
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4);
}
.btn-secondary {
background: #6c757d;
color: white;
}
.btn-secondary:hover {
background: #5a6268;
}
.btn-info {
background: #17a2b8;
color: white;
}
.btn-info:hover {
background: #138496;
}
.btn-warning {
background: #ffc107;
color: #333;
}
.btn-warning:hover {
background: #e0a800;
}
.btn-danger {
background: #dc3545;
color: white;
}
.btn-danger:hover {
background: #c82333;
}
.btn-success {
background: #28a745;
color: white;
}
.btn-success:hover {
background: #218838;
}
.btn-icon {
background: none;
border: none;
font-size: 1.2em;
cursor: pointer;
padding: 5px;
transition: transform 0.2s;
}
.btn-icon:hover {
transform: scale(1.2);
}
.action-buttons {
display: flex;
gap: 5px;
}
/* 일괄 작업 */
.bulk-actions {
display: flex;
align-items: center;
gap: 15px;
padding: 15px;
background: #f8f9fa;
border-radius: 8px;
}
.bulk-actions span {
font-weight: 600;
color: #555;
}
/* 모달 */
.modal {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.5);
justify-content: center;
align-items: center;
}
.modal-content {
background: white;
border-radius: 15px;
width: 90%;
max-width: 600px;
max-height: 90vh;
overflow-y: auto;
box-shadow: 0 10px 40px rgba(0,0,0,0.3);
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 30px;
border-bottom: 2px solid #eee;
}
.modal-header h3 {
color: #333;
font-size: 1.5em;
}
.close {
font-size: 2em;
color: #999;
cursor: pointer;
line-height: 1;
}
.close:hover {
color: #333;
}
.modal-body {
padding: 30px;
}
.modal-footer {
display: flex;
justify-content: flex-end;
gap: 10px;
padding: 20px 30px;
border-top: 2px solid #eee;
}
/* 폼 그룹 */
.form-group {
margin-bottom: 20px;
}
.form-group label {
display: block;
margin-bottom: 8px;
color: #555;
font-weight: 600;
}
.form-group input,
.form-group select,
.form-group textarea {
width: 100%;
padding: 10px;
border: 2px solid #ddd;
border-radius: 5px;
font-size: 1em;
transition: border-color 0.3s;
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
outline: none;
border-color: #667eea;
}
/* 진행 상황 */
.progress-item {
margin-bottom: 20px;
padding: 15px;
background: #f8f9fa;
border-radius: 8px;
}
.progress-header {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
}
.progress-status {
color: #666;
font-size: 0.9em;
}
.progress-bar-container {
width: 100%;
height: 30px;
background: #e0e0e0;
border-radius: 15px;
overflow: hidden;
margin-bottom: 10px;
}
.progress-bar {
height: 100%;
transition: width 0.3s, background 0.3s;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-weight: 600;
}
.progress-uploading {
background: linear-gradient(90deg, #667eea, #764ba2);
animation: pulse 1.5s ease-in-out infinite;
}
.progress-completed {
background: #28a745;
}
.progress-failed {
background: #dc3545;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.7; }
}
.progress-message {
font-size: 0.9em;
color: #666;
}
.progress-summary {
margin-top: 20px;
padding: 15px;
background: #e3f2fd;
border-radius: 8px;
}
.summary-stats {
display: flex;
justify-content: space-around;
font-weight: 600;
}
.summary-stats span {
padding: 5px 15px;
background: white;
border-radius: 5px;
}
/* 결과 테이블 */
.result-table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
.result-table thead {
background: #f8f9fa;
}
.result-table th {
padding: 12px;
text-align: left;
border-bottom: 2px solid #ddd;
}
.result-table td {
padding: 12px;
border-bottom: 1px solid #eee;
}
.result-table tr.success {
background: #e8f5e9;
}
.result-table tr.failed {
background: #ffebee;
}
.result-badge {
padding: 5px 10px;
border-radius: 10px;
font-weight: 600;
font-size: 0.9em;
}
.badge-success {
background: #28a745;
color: white;
}
.badge-failed {
background: #dc3545;
color: white;
}
/* 메시지 */
.info-text {
padding: 15px;
background: #e3f2fd;
border-left: 4px solid #2196f3;
border-radius: 5px;
color: #1976d2;
line-height: 1.8;
}
.warning-text {
padding: 15px;
background: #fff3e0;
border-left: 4px solid #ff9800;
border-radius: 5px;
color: #f57c00;
font-weight: 600;
}
/* 푸터 */
footer {
text-align: center;
padding: 20px;
color: white;
font-size: 0.9em;
}
/* 반응형 */
@media (max-width: 768px) {
.card-header {
flex-direction: column;
align-items: flex-start;
}
.header-actions {
margin-top: 10px;
width: 100%;
}
.header-actions button {
flex: 1;
}
.bulk-actions {
flex-wrap: wrap;
}
.modal-content {
width: 95%;
}
}
/* 체크박스 커스텀 */
input[type="checkbox"] {
width: 18px;
height: 18px;
cursor: pointer;
}

View File

@@ -0,0 +1,342 @@
/* 탭 메뉴 스타일 */
.tab-menu {
display: flex;
gap: 10px;
margin-bottom: 20px;
border-bottom: 2px solid #e0e0e0;
}
.tab-button {
padding: 12px 25px;
background: transparent;
border: none;
border-bottom: 3px solid transparent;
cursor: pointer;
font-weight: 600;
font-size: 14px;
color: #666;
transition: all 0.3s;
}
.tab-button:hover {
color: #667eea;
background: #f8f9ff;
}
.tab-button.active {
color: #667eea;
border-bottom-color: #667eea;
background: #f8f9ff;
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
animation: fadeIn 0.3s;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
/* 버전 상태 표시 */
.version-status {
display: inline-block;
padding: 4px 12px;
border-radius: 12px;
font-size: 12px;
font-weight: 600;
}
.version-status-outdated {
background: #fee;
color: #dc3545;
border: 1px solid #fcc;
}
.version-status-outdated::before {
content: "🔴 ";
}
.version-status-latest {
background: #efe;
color: #28a745;
border: 1px solid #cfc;
}
.version-status-latest::before {
content: "🟢 ";
}
.version-status-unknown {
background: #ffeaa7;
color: #e17055;
border: 1px solid #fdcb6e;
}
.version-status-unknown::before {
content: "🟡 ";
}
/* 버전 비교 결과 카드 */
.comparison-card {
background: white;
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.comparison-card h3 {
margin: 0 0 15px 0;
color: #333;
font-size: 18px;
display: flex;
align-items: center;
gap: 10px;
}
.comparison-summary {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 15px;
margin-bottom: 20px;
}
.summary-item {
background: #f8f9fa;
padding: 15px;
border-radius: 8px;
text-align: center;
}
.summary-item .label {
font-size: 12px;
color: #666;
margin-bottom: 5px;
}
.summary-item .value {
font-size: 24px;
font-weight: bold;
color: #333;
}
.summary-item.outdated .value {
color: #dc3545;
}
.summary-item.latest .value {
color: #28a745;
}
.summary-item.unknown .value {
color: #ffc107;
}
/* 펌웨어 항목 리스트 */
.firmware-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px;
border-bottom: 1px solid #f0f0f0;
}
.firmware-item:last-child {
border-bottom: none;
}
.firmware-item:hover {
background: #f8f9fa;
}
.firmware-name {
font-weight: 600;
color: #333;
flex: 1;
}
.firmware-versions {
display: flex;
align-items: center;
gap: 15px;
}
.version-badge {
padding: 4px 10px;
border-radius: 4px;
font-size: 13px;
font-family: 'Courier New', monospace;
}
.version-current {
background: #e9ecef;
color: #495057;
}
.version-arrow {
color: #999;
font-size: 18px;
}
.version-latest {
background: #d4edda;
color: #155724;
font-weight: 600;
}
.version-recommendation {
font-size: 12px;
color: #666;
margin-left: 10px;
}
/* 중요 업데이트 배지 */
.critical-badge {
display: inline-block;
background: #dc3545;
color: white;
padding: 2px 8px;
border-radius: 10px;
font-size: 11px;
font-weight: 600;
margin-left: 8px;
}
/* 다운로드 링크 */
.download-link {
color: #667eea;
text-decoration: none;
font-size: 12px;
margin-left: 10px;
}
.download-link:hover {
text-decoration: underline;
}
/* 버전 관리 테이블 */
.version-table {
width: 100%;
border-collapse: collapse;
}
.version-table th {
background: #f8f9fa;
padding: 12px;
text-align: left;
font-weight: 600;
color: #495057;
border-bottom: 2px solid #dee2e6;
}
.version-table td {
padding: 12px;
border-bottom: 1px solid #dee2e6;
}
.version-table tr:hover {
background: #f8f9fa;
}
/* 빈 상태 메시지 */
.empty-state {
text-align: center;
padding: 60px 20px;
color: #999;
}
.empty-state .icon {
font-size: 48px;
margin-bottom: 20px;
}
.empty-state .message {
font-size: 16px;
margin-bottom: 20px;
}
/* 필터 그룹 개선 */
.filter-group {
display: flex;
align-items: center;
gap: 15px;
margin-bottom: 20px;
padding: 15px;
background: #f8f9fa;
border-radius: 8px;
}
.filter-group label {
font-weight: 600;
color: #495057;
}
.filter-group select {
padding: 8px 12px;
border: 1px solid #ced4da;
border-radius: 4px;
background: white;
}
.count-badge {
background: #667eea;
color: white;
padding: 4px 12px;
border-radius: 12px;
font-size: 13px;
font-weight: 600;
}
/* 진행률 표시 */
.progress-bar {
width: 100%;
height: 8px;
background: #e9ecef;
border-radius: 4px;
overflow: hidden;
margin: 10px 0;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
transition: width 0.3s;
}
/* 반응형 */
@media (max-width: 768px) {
.tab-menu {
flex-direction: column;
}
.tab-button {
border-bottom: none;
border-left: 3px solid transparent;
}
.tab-button.active {
border-left-color: #667eea;
border-bottom-color: transparent;
}
.comparison-summary {
grid-template-columns: 1fr;
}
.firmware-item {
flex-direction: column;
align-items: flex-start;
gap: 10px;
}
.firmware-versions {
width: 100%;
justify-content: space-between;
}
}

View File

@@ -0,0 +1,740 @@
/**
* Dell iDRAC 멀티 서버 펌웨어 관리 JavaScript
* backend/static/js/idrac_main.js
*/
// SocketIO 연결
const socket = io();
// 전역 변수
let servers = [];
let selectedServers = new Set();
// CSRF 토큰 가져오기
function getCSRFToken() {
const metaTag = document.querySelector('meta[name="csrf-token"]');
if (metaTag) return metaTag.getAttribute('content');
const cookies = document.cookie.split(';');
for (let cookie of cookies) {
const [name, value] = cookie.trim().split('=');
if (name === 'csrf_token') return value;
}
return null;
}
// fetch 래퍼 함수
async function fetchWithCSRF(url, options = {}) {
const csrfToken = getCSRFToken();
if (!options.headers) options.headers = {};
if (csrfToken) {
options.headers['X-CSRFToken'] = csrfToken;
options.headers['X-CSRF-Token'] = csrfToken;
}
if (options.body) {
if (options.body instanceof FormData) {
// 자동 처리
} else if (typeof options.body === 'string') {
if (!options.headers['Content-Type']) {
options.headers['Content-Type'] = 'application/json';
}
} else if (typeof options.body === 'object') {
options.headers['Content-Type'] = 'application/json';
options.body = JSON.stringify(options.body);
}
}
return fetch(url, options);
}
// ========================================
// 초기화
// ========================================
document.addEventListener('DOMContentLoaded', function () {
console.log('iDRAC 멀티 서버 관리 시스템 시작');
refreshServers();
loadGroups();
setupSocketIO();
});
// ========================================
// 서버 관리
// ========================================
async function refreshServers() {
try {
const group = document.getElementById('group-filter').value;
const url = `/idrac/api/servers${group !== 'all' ? '?group=' + group : ''}`;
const response = await fetchWithCSRF(url);
const data = await response.json();
if (data.success) {
servers = data.servers;
renderServerList();
updateServerCount();
} else {
showMessage(data.message, 'error');
}
} catch (error) {
showMessage('서버 목록 로드 실패: ' + error, 'error');
}
}
function renderServerList() {
const tbody = document.getElementById('server-list');
if (servers.length === 0) {
tbody.innerHTML = '<tr><td colspan="8" class="empty-message">등록된 서버가 없습니다</td></tr>';
return;
}
tbody.innerHTML = servers.map(server => `
<tr data-server-id="${server.id}">
<td><input type="checkbox" class="server-checkbox" value="${server.id}"
${selectedServers.has(server.id) ? 'checked' : ''}
onchange="toggleServerSelection(${server.id})"></td>
<td><strong>${server.name}</strong></td>
<td><code>${server.ip_address}</code></td>
<td><span class="badge">${server.group_name || '-'}</span></td>
<td><span class="status status-${server.status}">${getStatusText(server.status)}</span></td>
<td>${server.current_bios || '-'}</td>
<td>${server.last_connected ? formatDateTime(server.last_connected) : '-'}</td>
<td class="action-buttons">
<button onclick="testConnection(${server.id})" class="btn-icon" title="연결 테스트">🔌</button>
<button onclick="editServer(${server.id})" class="btn-icon" title="수정">✏️</button>
<button onclick="deleteServer(${server.id})" class="btn-icon" title="삭제">🗑️</button>
</td>
</tr>
`).join('');
}
function getStatusText(status) {
const map = { registered: '등록됨', online: '온라인', offline: '오프라인', updating: '업데이트중' };
return map[status] || status;
}
function formatDateTime(dateStr) {
const date = new Date(dateStr);
return date.toLocaleString('ko-KR', {
year: '2-digit', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit'
});
}
function updateServerCount() {
document.getElementById('server-count').textContent = `${servers.length}`;
}
// ========================================
// 서버 선택
// ========================================
function toggleSelectAll() {
const checkbox = document.getElementById('select-all');
const checkboxes = document.querySelectorAll('.server-checkbox');
selectedServers.clear();
checkboxes.forEach(cb => {
cb.checked = checkbox.checked;
if (checkbox.checked) selectedServers.add(parseInt(cb.value));
});
updateSelectedCount();
}
function toggleServerSelection(serverId) {
if (selectedServers.has(serverId)) selectedServers.delete(serverId);
else selectedServers.add(serverId);
updateSelectedCount();
const all = document.querySelectorAll('.server-checkbox');
const checked = document.querySelectorAll('.server-checkbox:checked');
document.getElementById('select-all').checked = all.length === checked.length;
}
function updateSelectedCount() {
document.getElementById('selected-count').textContent = `선택: ${selectedServers.size}`;
}
function getSelectedServerIds() {
return Array.from(selectedServers);
}
// ========================================
// 그룹 관리
// ========================================
async function loadGroups() {
try {
const response = await fetchWithCSRF('/idrac/api/groups');
const data = await response.json();
if (data.success) {
const select = document.getElementById('group-filter');
const currentValue = select.value;
select.innerHTML = '<option value="all">전체</option>';
data.groups.forEach(g => select.innerHTML += `<option value="${g}">${g}</option>`);
if (currentValue) select.value = currentValue;
}
} catch (e) {
console.error('그룹 로드 실패:', e);
}
}
function filterByGroup() {
refreshServers();
}
// ========================================
// 서버 추가/수정/삭제
// ========================================
function showAddServerModal() {
document.getElementById('add-server-modal').style.display = 'flex';
}
function closeAddServerModal() {
const modal = document.getElementById('add-server-modal');
if (modal) modal.style.display = 'none';
setTimeout(() => clearServerForm(), 0); // DOM 안정 후 폼 초기화
}
function clearServerForm() {
const fieldIds = [
'server-name', 'server-ip', 'server-username',
'server-password', 'server-group', 'server-model'
];
fieldIds.forEach(id => {
const el = document.getElementById(id);
if (el) {
if (el.type === 'checkbox') el.checked = false;
else if (el.type === 'file') el.value = null;
else el.value = '';
} else {
console.warn(`[clearServerForm] 요소 없음: #${id}`);
}
});
}
async function addServer() {
const serverData = {
name: document.getElementById('server-name').value,
ip_address: document.getElementById('server-ip').value,
username: document.getElementById('server-username').value,
password: document.getElementById('server-password').value,
group_name: document.getElementById('server-group').value,
model: document.getElementById('server-model').value
};
if (!serverData.name || !serverData.ip_address || !serverData.password) {
showMessage('필수 필드를 입력하세요 (서버명, IP, 비밀번호)', 'error');
return;
}
try {
const response = await fetchWithCSRF('/idrac/api/servers', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(serverData)
});
const data = await response.json();
if (data.success) {
showMessage(data.message, 'success');
closeAddServerModal();
refreshServers();
loadGroups();
} else showMessage(data.message, 'error');
} catch (e) {
showMessage('서버 추가 실패: ' + e, 'error');
}
}
async function deleteServer(serverId) {
if (!confirm('이 서버를 삭제하시겠습니까?')) return;
try {
const res = await fetchWithCSRF(`/idrac/api/servers/${serverId}`, { method: 'DELETE' });
const data = await res.json();
if (data.success) {
showMessage(data.message, 'success');
refreshServers();
} else showMessage(data.message, 'error');
} catch (e) {
showMessage('서버 삭제 실패: ' + e, 'error');
}
}
// ========================================
// 연결 테스트
// ========================================
async function testConnection(serverId) {
try {
const res = await fetchWithCSRF(`/idrac/api/servers/${serverId}/test`, { method: 'POST' });
const data = await res.json();
showMessage(data.message, data.success ? 'success' : 'error');
refreshServers();
} catch (e) {
showMessage('연결 테스트 실패: ' + e, 'error');
}
}
// ========================================
// 펌웨어 업로드
// ========================================
function showUploadModal() {
const ids = getSelectedServerIds();
if (ids.length === 0) return showMessage('서버를 선택하세요', 'warning');
document.getElementById('upload-server-count').textContent = `${ids.length}`;
document.getElementById('upload-modal').style.display = 'flex';
}
function closeUploadModal() {
document.getElementById('upload-modal').style.display = 'none';
document.getElementById('firmware-file').value = '';
}
async function startMultiUpload() {
const fileInput = document.getElementById('firmware-file');
const serverIds = getSelectedServerIds();
if (!fileInput.files[0]) {
showMessage('파일을 선택하세요', 'warning');
return;
}
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('server_ids', serverIds.join(','));
try {
closeUploadModal();
showUploadProgress(serverIds);
const response = await fetchWithCSRF('/idrac/api/upload-multi', {
method: 'POST',
body: formData
});
const data = await response.json();
if (data.success) {
showMessage(data.message, 'success');
} else {
showMessage(data.message, 'error');
hideUploadProgress();
}
} catch (error) {
showMessage('업로드 시작 실패: ' + error, 'error');
hideUploadProgress();
}
}
function showUploadProgress(serverIds) {
const section = document.getElementById('upload-progress-section');
const list = document.getElementById('upload-progress-list');
section.style.display = 'block';
// 각 서버별 진행 바 생성
list.innerHTML = serverIds.map(id => {
const server = servers.find(s => s.id === id);
return `
<div class="progress-item" id="progress-${id}">
<div class="progress-header">
<strong>${server.name}</strong> (${server.ip_address})
<span class="progress-status" id="status-${id}">대기중...</span>
</div>
<div class="progress-bar-container">
<div class="progress-bar" id="bar-${id}" style="width: 0%"></div>
</div>
<div class="progress-message" id="message-${id}"></div>
</div>
`;
}).join('');
// 요약 초기화
document.getElementById('progress-summary').innerHTML = `
<div class="summary-stats">
<span>전체: ${serverIds.length}대</span>
<span id="completed-count">완료: 0대</span>
<span id="failed-count">실패: 0대</span>
</div>
`;
}
function hideUploadProgress() {
document.getElementById('upload-progress-section').style.display = 'none';
}
// ========================================
// SocketIO 이벤트
// ========================================
function setupSocketIO() {
// 업로드 진행 상황
socket.on('upload_progress', function(data) {
console.log('Upload progress:', data);
const statusEl = document.getElementById(`status-${data.server_id}`);
const barEl = document.getElementById(`bar-${data.server_id}`);
const messageEl = document.getElementById(`message-${data.server_id}`);
if (statusEl) statusEl.textContent = data.message;
if (barEl) {
barEl.style.width = data.progress + '%';
barEl.className = `progress-bar progress-${data.status}`;
}
if (messageEl) messageEl.textContent = data.job_id ? `Job ID: ${data.job_id}` : '';
});
// 업로드 완료
socket.on('upload_complete', function(data) {
console.log('Upload complete:', data);
const summary = data.summary;
document.getElementById('completed-count').textContent = `완료: ${summary.success}`;
document.getElementById('failed-count').textContent = `실패: ${summary.failed}`;
showMessage(`업로드 완료: 성공 ${summary.success}대, 실패 ${summary.failed}`, 'success');
showResults(data.results, '업로드 결과');
refreshServers();
});
}
// ========================================
// 결과 표시
// ========================================
function showResults(results, title) {
const section = document.getElementById('result-section');
const content = document.getElementById('result-content');
section.style.display = 'block';
content.innerHTML = `
<h3>${title}</h3>
<table class="result-table">
<thead>
<tr>
<th>서버명</th>
<th>상태</th>
<th>메시지</th>
</tr>
</thead>
<tbody>
${results.map(r => `
<tr class="${r.success ? 'success' : 'failed'}">
<td><strong>${r.server_name}</strong></td>
<td>
<span class="result-badge ${r.success ? 'badge-success' : 'badge-failed'}">
${r.success ? '✓ 성공' : '✗ 실패'}
</span>
</td>
<td>${r.message}${r.job_id ? ` (Job: ${r.job_id})` : ''}</td>
</tr>
`).join('')}
</tbody>
</table>
`;
}
// ========================================
// 재부팅
// ========================================
async function rebootSelected() {
const serverIds = getSelectedServerIds();
if (serverIds.length === 0) {
showMessage('서버를 선택하세요', 'warning');
return;
}
if (!confirm(`선택한 ${serverIds.length}대 서버를 재부팅하시겠습니까?\n\n⚠️ 업로드된 펌웨어가 적용됩니다!`)) {
return;
}
try {
const response = await fetchWithCSRF('/idrac/api/servers/reboot-multi', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
server_ids: serverIds,
type: 'GracefulRestart'
})
});
const data = await response.json();
if (data.success) {
const summary = data.summary;
showMessage(`재부팅 시작: 성공 ${summary.success}대, 실패 ${summary.failed}`, 'success');
showResults(data.results, '재부팅 결과');
} else {
showMessage(data.message, 'error');
}
refreshServers();
} catch (error) {
showMessage('재부팅 실패: ' + error, 'error');
}
}
// ========================================
// Excel 가져오기 (추후 구현)
// ========================================
function importExcel() {
showMessage('Excel 가져오기 기능은 개발 중입니다', 'info');
}
// ========================================
// 유틸리티
// ========================================
function showMessage(message, type = 'info') {
// 간단한 알림 표시
alert(message);
console.log(`[${type}] ${message}`);
}
// 편의 함수들
function editServer(serverId) {
showMessage('서버 수정 기능은 개발 중입니다', 'info');
}
function getSelectedFirmware() {
const serverIds = getSelectedServerIds();
if (serverIds.length === 0) {
showMessage('서버를 선택하세요', 'warning');
return;
}
showMessage('선택한 서버의 펌웨어 조회 중...', 'info');
// 각 서버별로 펌웨어 조회
serverIds.forEach(async (serverId) => {
try {
const response = await fetchWithCSRF(`/idrac/api/servers/${serverId}/firmware`);
const data = await response.json();
if (data.success) {
console.log(`Server ${serverId} firmware:`, data.data);
}
} catch (error) {
console.error(`Server ${serverId} firmware query failed:`, error);
}
});
// 새로고침
setTimeout(() => {
refreshServers();
}, 2000);
}
// ========================================
// 다중 연결 테스트
// ========================================
async function testSelectedConnections() {
const serverIds = getSelectedServerIds();
if (serverIds.length === 0) {
showMessage('서버를 선택하세요', 'warning');
return;
}
showMessage(`선택된 ${serverIds.length}대 서버 연결 테스트 중...`, 'info');
try {
const res = await fetchWithCSRF('/idrac/api/servers/test-multi', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ server_ids: serverIds })
});
const data = await res.json();
if (data.success) {
const summary = data.summary;
showMessage(`연결 성공: ${summary.success}대 / 실패: ${summary.failed}`, 'success');
showResults(data.results, '연결 테스트 결과');
} else {
showMessage(data.message, 'error');
}
refreshServers();
} catch (error) {
showMessage('연결 테스트 실패: ' + error, 'error');
}
}
// ========================================
// 다중 펌웨어 버전 비교
// ========================================
async function compareSelectedFirmware() {
const serverIds = getSelectedServerIds();
if (serverIds.length === 0) {
showMessage('서버를 선택하세요', 'warning');
return;
}
showMessage(`선택된 ${serverIds.length}대 서버 버전 비교 중...`, 'info');
try {
const res = await fetchWithCSRF('/idrac/api/servers/firmware/compare-multi', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ server_ids: serverIds })
});
const data = await res.json();
if (data.success) {
showResults(data.results, '버전 비교 결과');
} else {
showMessage(data.message, 'error');
}
} catch (error) {
showMessage('버전 비교 실패: ' + error, 'error');
}
}
// ========================================
// 펌웨어 버전 추가 모달
// ========================================
function showAddVersionModal() {
const modal = document.getElementById('add-version-modal');
if (modal) modal.style.display = 'flex';
}
function closeAddVersionModal() {
const modal = document.getElementById('add-version-modal');
if (modal) modal.style.display = 'none';
}
async function addFirmwareVersion() {
const data = {
component_name: document.getElementById('version-component').value,
latest_version: document.getElementById('version-latest').value,
server_model: document.getElementById('version-model').value,
vendor: document.getElementById('version-vendor').value,
release_date: document.getElementById('version-release-date').value,
download_url: document.getElementById('version-download-url').value,
notes: document.getElementById('version-notes').value,
is_critical: document.getElementById('version-critical').checked
};
if (!data.component_name || !data.latest_version) {
showMessage('컴포넌트명과 버전을 입력하세요', 'warning');
return;
}
try {
const response = await fetchWithCSRF('/idrac/api/firmware-versions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
const result = await response.json();
if (result.success) {
showMessage(result.message, 'success');
closeAddVersionModal();
refreshFirmwareVersionList();
} else {
showMessage(result.message, 'error');
}
} catch (error) {
showMessage('버전 추가 실패: ' + error, 'error');
}
}
async function refreshFirmwareVersionList() {
try {
const response = await fetchWithCSRF('/idrac/api/firmware-versions');
const data = await response.json();
if (data.success) {
const tbody = document.getElementById('version-list');
tbody.innerHTML = data.versions.map(v => `
<tr>
<td>${v.component_name}</td>
<td>${v.latest_version}</td>
<td>${v.server_model || '-'}</td>
<td>${v.release_date || '-'}</td>
<td>${v.is_critical ? '⚠️' : ''}</td>
<td><button class="btn btn-danger" onclick="deleteFirmwareVersion(${v.id})">삭제</button></td>
</tr>
`).join('');
}
} catch (error) {
showMessage('버전 목록 로드 실패: ' + error, 'error');
}
}
// ========================================
// Dell Catalog에서 최신 버전 자동 가져오기
// ========================================
async function syncDellCatalog(model = "PowerEdge R750") {
showMessage(`${model} 최신 버전 정보를 Dell에서 가져오는 중...`, "info");
try {
const response = await fetchWithCSRF("/catalog/sync", {
method: "POST",
body: { model }
});
const data = await response.json();
if (data.success) {
showMessage(data.message, "success");
await refreshFirmwareVersionList();
} else {
showMessage(data.message, "error");
}
} catch (error) {
showMessage("버전 정보 동기화 실패: " + error, "error");
}
}
// ========================================
// 펌웨어 버전 목록 새로고침
// ========================================
async function refreshFirmwareVersionList() {
try {
const response = await fetchWithCSRF("/idrac/api/firmware-versions");
const data = await response.json();
if (data.success) {
const tbody = document.getElementById("version-list");
if (!tbody) return;
tbody.innerHTML = data.versions.length
? data.versions
.map(
(v) => `
<tr>
<td>${v.component_name}</td>
<td>${v.latest_version}</td>
<td>${v.server_model || "-"}</td>
<td>${v.release_date || "-"}</td>
<td>${v.is_critical ? "⚠️" : ""}</td>
<td>
<button class="btn btn-danger" onclick="deleteFirmwareVersion(${v.id})">삭제</button>
</td>
</tr>`
)
.join("")
: `<tr><td colspan="6" class="empty-message">등록된 버전 정보가 없습니다</td></tr>`;
} else {
showMessage(data.message, "error");
}
} catch (error) {
showMessage("버전 목록 로드 실패: " + error, "error");
}
}

View File

@@ -0,0 +1,283 @@
/* style.css */
/* 기본 스타일 재정의 */
body {
font-family: 'Arial', sans-serif;
background-color: #f4f4f4;
}
.container {
background-color: #fff;
padding: 20px;
margin-top: 20px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
border-radius: 8px;
}
h1 {
color: #333;
margin-bottom: 20px;
}
h2 {
color: #333;
margin-top: 30px;
margin-bottom: 15px;
}
.form-group label {
font-weight: bold;
color: #555;
}
.form-control {
border-radius: 5px;
border: 1px solid #ddd;
}
.btn {
border-radius: 5px;
}
.btn-primary {
background-color: #007bff;
border-color: #007bff;
}
.btn-primary:hover {
background-color: #0056b3;
border-color: #0056b3;
}
.btn-danger {
background-color: #dc3545;
border-color: #dc3545;
}
.btn-danger:hover {
background-color: #c82333;
border-color: #bd2130;
}
.btn-secondary {
background-color: #6c757d;
border-color: #6c757d;
}
.btn-secondary:hover {
background-color: #5a6268;
border-color: #545b62;
}
.card-container {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 20px; /* 파일 목록 아래 여백 추가 */
}
.simple-card {
background-color: #f8f9fa;
padding: 15px;
border: 1px solid #ddd;
border-radius: 5px;
width: calc(12.5% - 10px); /* 가로로 8개 유지 */
box-sizing: border-box;
text-align: center;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
transition: background-color 0.3s ease; /* 부드러운 전환 효과 추가 */
}
.simple-card a {
font-size: 1em; /* 글씨 크기를 작게 조정 */
font-weight: bold;
color: #007bff;
text-decoration: none;
}
.simple-card a:hover {
color: #0056b3;
}
.simple-card:hover {
background-color: #e9ecef; /* 호버 시 배경색 변경 */
}
.button-group {
margin-top: 10px;
}
.pagination {
margin-top: 20px;
}
.backup-card-container .backup-card {
margin-bottom: 10px;
}
.accordion-button {
width: 100%;
text-align: left;
padding: 10px;
background-color: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
.accordion-button:hover {
background-color: #0056b3;
}
.accordion-content {
display: none;
background-color: #f8f9fa;
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px;
margin-top: 5px;
margin-bottom: 20px; /* 파일 목록 아래 여백 추가 */
}
.accordion-content .card-container {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.accordion-content .simple-card {
width: calc(12.5% - 10px); /* 가로로 8개 유지 */
}
/* 진행 상황 스타일 */
#progressSession {
margin-top: 20px;
padding: 15px;
background-color: #e9ecef;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
position: relative;
margin-bottom: 20px; /* 파일 목록 아래 여백 추가 */
}
.progress {
height: 25px;
border-radius: 5px;
background-color: #f4f4f4;
border: 1px solid #ddd;
}
.progress-bar {
font-weight: bold;
line-height: 25px;
background-color: #007bff;
border-radius: 5px;
transition: width 0.3s ease;
}
#progressSession h2 {
position: absolute;
top: -30px;
left: 15px;
background-color: #e9ecef;
padding: 5px 10px;
border-radius: 5px;
font-size: 1.2em;
color: #333;
}
/* 서버 리스트 박스 높이 조정 */
#server_list_content {
height: 340px; /* 원하는 높이로 설정 */
}
/* base */
.navbar {
background-color: #333;
padding: 10px;
}
.nav-list {
list-style-type: none;
margin: 0;
padding: 0;
display: flex;
}
.nav-list li {
margin-right: 20px;
}
.nav-list li a {
color: white;
text-decoration: none;
font-weight: bold;
}
.nav-list li a:hover {
text-decoration: underline;
}
body {
padding-top: 58px; /* 상단 네비게이션 바의 높이 */
}
/* XML 파일 목록의 스타일 정의 */
.list-group-item {
transition: background-color 0.3s ease, transform 0.3s ease;
border-radius: 8px;
margin-bottom: 10px;
padding: 15px;
border: 1px solid #ccc;
background-color: #ffffff;
}
/* 마우스 오버 시 배경색 및 효과 변경 */
.list-group-item:hover {
background-color: #f8f9fa;
transform: scale(1.02);
}
/* 삭제 및 편집 버튼 간격 조정 */
.action-buttons {
display: flex;
gap: 10px;
}
/* 파일 목록 타이틀 스타일 정의 */
.card-body h5 {
font-size: 1.3rem;
font-weight: bold;
}
/* 파일 업로드 필드의 스타일 */
.custom-file-label {
border-radius: 5px;
padding: 10px;
background-color: #f1f1f1;
border: 1px solid #ccc;
cursor: pointer;
white-space: nowrap; /* 파일 이름이 한 줄로 보이게 함 */
overflow: hidden;
text-overflow: ellipsis; /* 파일 이름이 길 경우 생략 표시 */
}
.custom-file-label:hover {
background-color: #e2e2e2;
}
/* 업로드 버튼 스타일 */
.btn-upload {
margin-top: 10px;
width: auto; /* 버튼 너비를 텍스트에 맞게 조정 */
font-weight: bold;
padding: 10px;
}
/* XML 파일 업로드 필드 레이아웃 조정 */
.upload-section {
margin-bottom: 20px;
}

View File

@@ -0,0 +1,252 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>Dell iDRAC 멀티 서버 펌웨어 관리</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/idrac_style.css') }}">
</head>
<body>
<div class="container">
<header>
<h1>🖥️ Dell iDRAC 멀티 서버 펌웨어 관리</h1>
<p class="subtitle">납품 전 펌웨어 일괄 업데이트 시스템 - 버전 비교 기능</p>
</header>
<!-- 탭 메뉴 -->
<div class="tab-menu">
<button class="tab-button active" onclick="showTab('servers')">서버 관리</button>
<button class="tab-button" onclick="showTab('versions')">펌웨어 버전 관리</button>
<button class="tab-button" onclick="showTab('comparison')">버전 비교 결과</button>
</div>
<!-- 서버 관리 탭 -->
<div id="servers-tab" class="tab-content active">
<!-- 서버 관리 섹션 -->
<section class="card">
<div class="card-header">
<h2>📋 서버 관리</h2>
<div class="header-actions">
<button onclick="showAddServerModal()" class="btn btn-primary">+ 서버 추가</button>
<button onclick="refreshServers()" class="btn btn-info">🔄 새로고침</button>
</div>
</div>
<!-- 그룹 필터 -->
<div class="filter-group">
<label>그룹:</label>
<select id="group-filter" onchange="filterByGroup()">
<option value="all">전체</option>
</select>
<span id="server-count" class="count-badge">0대</span>
</div>
<!-- 서버 목록 테이블 -->
<div class="table-container">
<table class="server-table" id="server-table">
<thead>
<tr>
<th width="40"><input type="checkbox" id="select-all" onchange="toggleSelectAll()"></th>
<th>서버명</th>
<th>IP 주소</th>
<th>그룹</th>
<th>상태</th>
<th>BIOS 버전</th>
<th>업데이트 상태</th>
<th width="150">작업</th>
</tr>
</thead>
<tbody id="server-list">
<tr>
<td colspan="8" class="empty-message">등록된 서버가 없습니다</td>
</tr>
</tbody>
</table>
</div>
<!-- 선택 작업 -->
<div class="bulk-actions">
<span id="selected-count">선택: 0대</span>
<button onclick="testSelectedConnections()" class="btn btn-info">연결 테스트</button>
<button onclick="compareSelectedFirmware()" class="btn btn-warning">버전 비교</button>
<button onclick="showUploadModal()" class="btn btn-primary">펌웨어 업로드</button>
<button onclick="rebootSelected()" class="btn btn-danger">재부팅</button>
</div>
</section>
<!-- 업로드 진행 상황 -->
<section class="card" id="upload-progress-section" style="display: none;">
<h2>📊 업로드 진행 상황</h2>
<div id="upload-progress-list"></div>
<div class="progress-summary" id="progress-summary"></div>
</section>
</div>
<!-- 펌웨어 버전 관리 탭 -->
<div id="versions-tab" class="tab-content">
<section class="card">
<div class="card-header">
<h2>📦 펌웨어 최신 버전 관리</h2>
<div class="header-actions">
<button onclick="syncDellCatalog('PowerEdge R750')" class="btn btn-success">🔄 Dell에서 버전 가져오기</button>
<button onclick="showAddVersionModal()" class="btn btn-primary">+ 버전 추가</button>
</div>
</div>
<div class="table-container">
<table class="server-table">
<thead>
<tr>
<th>컴포넌트</th>
<th>최신 버전</th>
<th>서버 모델</th>
<th>릴리즈 날짜</th>
<th>중요</th>
<th width="150">작업</th>
</tr>
</thead>
<tbody id="version-list">
<tr>
<td colspan="6" class="empty-message">등록된 버전 정보가 없습니다</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
<!-- 버전 비교 결과 탭 -->
<div id="comparison-tab" class="tab-content">
<section class="card">
<h2>🔍 펌웨어 버전 비교 결과</h2>
<div id="comparison-result"></div>
</section>
</div>
<footer>
<p>Dell iDRAC 멀티 서버 펌웨어 관리 시스템 - 버전 자동 비교</p>
</footer>
</div>
<!-- 서버 추가 모달 -->
<div id="add-server-modal" class="modal" style="display: none;">
<div class="modal-content">
<div class="modal-header">
<h3>서버 추가</h3>
<span class="close" onclick="closeAddServerModal()">&times;</span>
</div>
<div class="modal-body">
<div class="form-group">
<label for="server-name">서버명 *</label>
<input type="text" id="server-name" placeholder="예: Server-01">
</div>
<div class="form-group">
<label for="server-ip">iDRAC IP *</label>
<input type="text" id="server-ip" placeholder="192.168.1.100">
</div>
<div class="form-group">
<label for="server-username">사용자명</label>
<input type="text" id="server-username" value="root">
</div>
<div class="form-group">
<label for="server-password">비밀번호 *</label>
<input type="password" id="server-password">
</div>
<div class="form-group">
<label for="server-group">그룹</label>
<input type="text" id="server-group" placeholder="예: 삼성전자 납품">
</div>
<div class="form-group">
<label for="server-model">모델</label>
<input type="text" id="server-model" placeholder="예: PowerEdge R750">
</div>
</div>
<div class="modal-footer">
<button onclick="closeAddServerModal()" class="btn btn-secondary">취소</button>
<button onclick="addServer()" class="btn btn-primary">추가</button>
</div>
</div>
</div>
<!-- 버전 추가 모달 -->
<div id="add-version-modal" class="modal" style="display: none;">
<div class="modal-content">
<div class="modal-header">
<h3>펌웨어 최신 버전 추가</h3>
<span class="close" onclick="closeAddVersionModal()">&times;</span>
</div>
<div class="modal-body">
<div class="form-group">
<label for="version-component">컴포넌트명 *</label>
<input type="text" id="version-component" placeholder="예: BIOS">
</div>
<div class="form-group">
<label for="version-latest">최신 버전 *</label>
<input type="text" id="version-latest" placeholder="예: 2.15.0">
</div>
<div class="form-group">
<label for="version-model">서버 모델 (선택)</label>
<input type="text" id="version-model" placeholder="예: PowerEdge R750 (비우면 모든 모델)">
</div>
<div class="form-group">
<label for="version-vendor">벤더</label>
<input type="text" id="version-vendor" placeholder="예: Dell">
</div>
<div class="form-group">
<label for="version-release-date">릴리즈 날짜</label>
<input type="date" id="version-release-date">
</div>
<div class="form-group">
<label for="version-download-url">다운로드 URL</label>
<input type="text" id="version-download-url" placeholder="DUP 파일 다운로드 링크">
</div>
<div class="form-group">
<label for="version-notes">비고</label>
<textarea id="version-notes" rows="3" placeholder="버전 변경 사항 등"></textarea>
</div>
<div class="form-group">
<label>
<input type="checkbox" id="version-critical">
중요 업데이트
</label>
</div>
</div>
<div class="modal-footer">
<button onclick="closeAddVersionModal()" class="btn btn-secondary">취소</button>
<button onclick="addFirmwareVersion()" class="btn btn-primary">추가</button>
</div>
</div>
</div>
<!-- 펌웨어 업로드 모달 -->
<div id="upload-modal" class="modal" style="display: none;">
<div class="modal-content">
<div class="modal-header">
<h3>펌웨어 업로드</h3>
<span class="close" onclick="closeUploadModal()">&times;</span>
</div>
<div class="modal-body">
<p class="warning-text">⚠️ 선택한 서버에 펌웨어를 일괄 업로드합니다</p>
<div class="form-group">
<label>선택한 서버: <strong id="upload-server-count">0대</strong></label>
</div>
<div class="form-group">
<label for="firmware-file">DUP 파일 선택 *</label>
<input type="file" id="firmware-file" accept=".exe,.bin">
</div>
</div>
<div class="modal-footer">
<button onclick="closeUploadModal()" class="btn btn-secondary">취소</button>
<button onclick="startMultiUpload()" class="btn btn-primary">업로드 시작</button>
</div>
</div>
</div>
<section class="card" id="result-section" style="display:none;">
<div id="result-content"></div>
</section>
<script src="https://cdn.socket.io/4.5.4/socket.io.min.js"></script>
<script src="{{ url_for('static', filename='js/idrac_main.js') }}"></script>
</body>
</html>

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 1PYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 1PYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 1XZCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 1XZCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 2NYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 2NYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 2XZCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 2XZCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 3LYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 3LYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 3MYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 3MYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 3PYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 3PYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 4XZCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 4XZCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 5MYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 5MYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 5NYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 5NYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 6XZCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 6XZCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 7MYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 7MYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 7XZCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 7XZCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 8WZCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 8WZCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: 9NYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : 9NYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: BNYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : BNYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: CXZCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : CXZCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: DLYCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : DLYCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: DXZCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : DXZCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,50 +0,0 @@
Dell EMC Server Bios,iDRAC,R/C Setting (SVC Tag: FWZCZC4)
------------------------------------------Firware Version 정보------------------------------------------
1. SVC Tag : FWZCZC4
2. Bios Firmware : 2.7.5
3. iDRAC Firmware Version : 7.20.60.50
4. NIC Integrated Firmware Version : 24.0.5
5. OnBoard NIC Firmware Version :
6. Raid Controller Firmware Version : 8.11.2.0.18-26
---------------------------------------------Bios 설정 정보----------------------------------------------
01. Bios Boot Mode : Uefi
02. System Profile Settings - System Profile : BIOS.Setup.1-1#SysProfileSettings]
03. System Profile Settings - CPU Power Management : MaxPower
04. System Profile Settings - Memory Frequency : MaxPerf
05. System Profile Settings - Turbo Boost : Enabled
06. System Profile Settings - C1E : Disabled
07. System Profile Settings - C-States : Disabled
08. System Profile Settings - Monitor/Mwait : Disabled
09. Processor Settings - Logical Processor : Enabled
10. Processor Settings - Virtualization Technology : Disabled
11. Processor Settings - LLC Prefetch : Enabled
12. Processor Settings - x2APIC Mode : Disabled
13. Memory Settings - Node Interleaving : Disabled
14. Memory Settings - DIMM Self Healing (Post Package Repair) on Uncorrectable Memory Error : Enabled
15. Memory Settings - Correctable Error Logging : Disabled
16. System Settings - Thermal Profile Optimization : Minimum Power
17. Integrated Devices Settings - SR-IOV Global Enable : Enabled
18. Miscellaneous Settings - F1/F2 Prompt on Error : Disabled
---------------------------------------------iDRAC 설정 정보----------------------------------------------
01. iDRAC Settings - Timezone : Asia/Seoul
02. iDRAC Settings - IPMI LAN Selection : Dedicated
03. iDRAC Settings - IPMI IP(IPv4) : Enabled
04. iDRAC Settings - IPMI IP(IPv6) : Enabled
05. iDRAC Settings - Redfish Support : Enabled
06. iDRAC Settings - SSH Support : Enabled
07. iDRAC Settings - AD User Domain Name : nhncorp.nhncorp.local
08. iDRAC Settings - SC Server Address : ad.o.nfra.io
09. iDRAC Settings - SE AD RoleGroup Name : SE_Admin
10. iDRAC Settings - SE AD RoleGroup Dome인 : nhncorp.nhncorp.local
11. iDRAC Settings - SE AD RoleGroup Privilege : 0x1ff
12. iDRAC Settings - IDC AD RoleGroup Name : IDC_Admin
13. iDRAC Settings - IDC AD RoleGroup Domain : nhncorp.nhncorp.local
14. iDRAC Settings - IDC AD RoleGroup Privilege : 0x1f3
15. iDRAC Settings - Remote Log (syslog) : Enabled
16. iDRAC Settings - syslog server address 1 : syslog.o.nfra.io
17. iDRAC Settings - syslog server address 2 :
18. iDRAC Settings - syslog server port : 514
19. iDRAC Settings - Remote KVM Nonsecure port : 25513

View File

@@ -1,12 +0,0 @@
1XZCZC4
Slot.38: 3825:F303:00C4:15EC
Slot.39: 3825:F303:00C4:15F8
Slot.37: 3825:F303:00C4:15E8
Slot.36: 3825:F303:00C4:15E4
Slot.32: 3825:F303:00C4:1564
Slot.33: 3825:F303:00C4:1560
Slot.34: 3825:F303:00C4:0AF4
Slot.35: 3825:F303:00C4:1600
Slot.31: 3825:F303:00C4:0910
Slot.40: 3825:F303:00C4:1608
GUID: 0x3825F30300C415EC;0x3825F30300C415F8;0x3825F30300C415E8;0x3825F30300C415E4;0x3825F30300C41564;0x3825F30300C41560;0x3825F30300C40AF4;0x3825F30300C41600;0x3825F30300C40910;0x3825F30300C41608

View File

@@ -1,12 +0,0 @@
2NYCZC4
Slot.38: 3825:F303:00C4:042C
Slot.39: 3825:F303:00C4:04A8
Slot.37: 3825:F303:00C4:0420
Slot.36: 3825:F303:00C4:0418
Slot.32: 3825:F303:00C4:0508
Slot.33: 3825:F303:00C4:12B4
Slot.34: 3825:F303:00C4:12EC
Slot.35: 3825:F303:00C4:122C
Slot.31: 3825:F303:00C4:0484
Slot.40: 3825:F303:00C4:048C
GUID: 0x3825F30300C4042C;0x3825F30300C404A8;0x3825F30300C40420;0x3825F30300C40418;0x3825F30300C40508;0x3825F30300C412B4;0x3825F30300C412EC;0x3825F30300C4122C;0x3825F30300C40484;0x3825F30300C4048C

View File

@@ -1,12 +0,0 @@
2XZCZC4
Slot.38: 3825:F303:00C4:0AEC
Slot.39: 3825:F303:00C4:0AD8
Slot.37: 3825:F303:00C4:0AC8
Slot.36: 3825:F303:00C4:15F4
Slot.32: 3825:F303:00C4:0AD0
Slot.33: 3825:F303:00C4:0AE0
Slot.34: 3825:F303:00C4:0ADC
Slot.35: 3825:F303:00C4:1568
Slot.31: 3825:F303:00C4:0AE8
Slot.40: 3825:F303:00C4:0AD4
GUID: 0x3825F30300C40AEC;0x3825F30300C40AD8;0x3825F30300C40AC8;0x3825F30300C415F4;0x3825F30300C40AD0;0x3825F30300C40AE0;0x3825F30300C40ADC;0x3825F30300C41568;0x3825F30300C40AE8;0x3825F30300C40AD4

View File

@@ -1,12 +0,0 @@
3LYCZC4
Slot.38: 5000:E603:0068:F204
Slot.39: 5000:E603:0068:F464
Slot.37: 5000:E603:0068:F2B8
Slot.36: 5000:E603:0068:F2FC
Slot.32: 5000:E603:0068:F294
Slot.33: 5000:E603:0068:F504
Slot.34: 5000:E603:0068:F450
Slot.35: 5000:E603:0068:F2C4
Slot.31: 5000:E603:0068:F50C
Slot.40: 5000:E603:0068:F4FC
GUID: 0x5000E6030068F204;0x5000E6030068F464;0x5000E6030068F2B8;0x5000E6030068F2FC;0x5000E6030068F294;0x5000E6030068F504;0x5000E6030068F450;0x5000E6030068F2C4;0x5000E6030068F50C;0x5000E6030068F4FC

View File

@@ -1,12 +0,0 @@
3MYCZC4
Slot.38: 5000:E603:0068:F480
Slot.39: 5000:E603:0068:F254
Slot.37: 5000:E603:0068:F408
Slot.36: 5000:E603:0068:F33C
Slot.32: 5000:E603:0068:F40C
Slot.33: 5000:E603:0068:F4AC
Slot.34: 5000:E603:0068:F4C8
Slot.35: 5000:E603:0068:F410
Slot.31: 5000:E603:0068:F490
Slot.40: 5000:E603:0068:F3A0
GUID: 0x5000E6030068F480;0x5000E6030068F254;0x5000E6030068F408;0x5000E6030068F33C;0x5000E6030068F40C;0x5000E6030068F4AC;0x5000E6030068F4C8;0x5000E6030068F410;0x5000E6030068F490;0x5000E6030068F3A0

View File

@@ -1,12 +0,0 @@
3PYCZC4
Slot.38: 5000:E603:0068:F460
Slot.39: 5000:E603:0068:F44C
Slot.37: 5000:E603:0068:F380
Slot.36: 5000:E603:0068:F2BC
Slot.32: 5000:E603:0068:F4EC
Slot.33: 5000:E603:0068:F274
Slot.34: 5000:E603:0068:F4E4
Slot.35: 5000:E603:0068:F284
Slot.31: 5000:E603:0068:F3DC
Slot.40: 5000:E603:0068:F354
GUID: 0x5000E6030068F460;0x5000E6030068F44C;0x5000E6030068F380;0x5000E6030068F2BC;0x5000E6030068F4EC;0x5000E6030068F274;0x5000E6030068F4E4;0x5000E6030068F284;0x5000E6030068F3DC;0x5000E6030068F354

View File

@@ -1,12 +0,0 @@
4XZCZC4
Slot.38: 5000:E603:0068:F318
Slot.39: 5000:E603:0068:F458
Slot.37: 5000:E603:0068:F23C
Slot.36: 5000:E603:0068:F090
Slot.32: 5000:E603:0068:F448
Slot.33: 5000:E603:0068:F440
Slot.34: 5000:E603:0068:F310
Slot.35: 5000:E603:0068:F430
Slot.31: 5000:E603:0068:F3C8
Slot.40: 5000:E603:0068:F438
GUID: 0x5000E6030068F318;0x5000E6030068F458;0x5000E6030068F23C;0x5000E6030068F090;0x5000E6030068F448;0x5000E6030068F440;0x5000E6030068F310;0x5000E6030068F430;0x5000E6030068F3C8;0x5000E6030068F438

View File

@@ -1,12 +0,0 @@
5MYCZC4
Slot.38: 7C8C:0903:00E4:DE9E
Slot.39: 7C8C:0903:00E4:DEDE
Slot.37: 7C8C:0903:00E4:DE96
Slot.36: 7C8C:0903:00E4:DF42
Slot.32: 7C8C:0903:00E4:DE86
Slot.33: 7C8C:0903:00E4:DED2
Slot.34: 7C8C:0903:00E4:ED06
Slot.35: 7C8C:0903:00E4:DF3E
Slot.31: 7C8C:0903:00E4:DEEA
Slot.40: 7C8C:0903:00E4:DED6
GUID: 0x7C8C090300E4DE9E;0x7C8C090300E4DEDE;0x7C8C090300E4DE96;0x7C8C090300E4DF42;0x7C8C090300E4DE86;0x7C8C090300E4DED2;0x7C8C090300E4ED06;0x7C8C090300E4DF3E;0x7C8C090300E4DEEA;0x7C8C090300E4DED6

View File

@@ -1,12 +0,0 @@
5NYCZC4
Slot.38: 3825:F303:00C4:0230
Slot.39: 3825:F303:00C4:0FA4
Slot.37: 3825:F303:00C4:023C
Slot.36: 3825:F303:00C4:0EB4
Slot.32: 3825:F303:00C4:0FB0
Slot.33: 3825:F303:00C4:0244
Slot.34: 3825:F303:00C4:0FA0
Slot.35: 3825:F303:00C4:0F90
Slot.31: 3825:F303:00C4:0FA8
Slot.40: 3825:F303:00C4:0F78
GUID: 0x3825F30300C40230;0x3825F30300C40FA4;0x3825F30300C4023C;0x3825F30300C40EB4;0x3825F30300C40FB0;0x3825F30300C40244;0x3825F30300C40FA0;0x3825F30300C40F90;0x3825F30300C40FA8;0x3825F30300C40F78

View File

@@ -1,12 +0,0 @@
6XZCZC4
Slot.38: 3825:F303:00C4:0874
Slot.39: 3825:F303:00C4:035C
Slot.37: 3825:F303:00C4:1450
Slot.36: 3825:F303:00C4:08DC
Slot.32: 3825:F303:00C4:086C
Slot.33: 3825:F303:00C4:0884
Slot.34: 3825:F303:00C4:153C
Slot.35: 3825:F303:00C4:0688
Slot.31: 3825:F303:00C4:096C
Slot.40: 3825:F303:00C4:0870
GUID: 0x3825F30300C40874;0x3825F30300C4035C;0x3825F30300C41450;0x3825F30300C408DC;0x3825F30300C4086C;0x3825F30300C40884;0x3825F30300C4153C;0x3825F30300C40688;0x3825F30300C4096C;0x3825F30300C40870

Some files were not shown because too many files have changed in this diff Show More