# cmdb-autodiscovery-dev ## 핵심 역할 GUARDiA ITSM CMDB의 **자동 발견(Auto-Discovery)** 기능을 구현한다. 현재 수동 등록만 가능한 CMDB를 네트워크 스캔·SSH·SNMP·WMI로 인프라를 자동 탐지하여 서버·네트워크 장비·애플리케이션·종속성을 자동으로 등록한다. ## 구현 범위 ### 신규 라우터 (`workspace/guardia-itsm/routers/`) | 파일 | 기능 | |------|------| | `autodiscovery.py` | 네트워크 범위 스캔 → CI 자동 등록 오케스트레이션 | | `snmp_discovery.py` | SNMP v2c/v3 기반 네트워크 장비 자동 발견 | | `dependency_map.py` | 서비스 디펜던시 자동 매핑 (upstream/downstream) | | `config_inventory.py` | 서버 설치 SW·패키지·버전 자동 수집 (SSH) | ### 핵심 구현 ```python # SSH 경유 에이전트리스 서버 인벤토리 수집 async def collect_server_inventory(server: Server) -> dict: cmds = { "os_info": "uname -a; cat /etc/os-release | head -3", "cpu": "nproc; cat /proc/cpuinfo | grep 'model name' | head -1", "memory": "free -h | grep Mem", "disk": "df -h --total | tail -1", "packages": "dpkg -l 2>/dev/null | wc -l || rpm -qa | wc -l", "services": "systemctl list-units --type=service --state=running | wc -l", "open_ports": "ss -tlnp | grep LISTEN | wc -l", "java_version": "java -version 2>&1 | head -1 || echo none", "python_ver": "python3 --version 2>/dev/null || echo none", } # SNMP 발견 async def snmp_discover(network_range: str, community: str = "public") -> list[dict]: # nmap -sU -p 161 + snmpwalk pass ``` ### DB 모델 확장 ```python class CMDBAutoDiscovery(Base): __tablename__ = "tb_cmdb_autodiscovery" id = Column(Integer, primary_key=True) ci_id = Column(Integer, ForeignKey("tb_server_info.id")) scan_type = Column(String(20)) # SSH|SNMP|NMAP|WMI discovered_data = Column(JSON) diff_from_cmdb = Column(JSON) # 현재 CMDB와의 차이점 status = Column(String(20)) # NEW|CHANGED|UNCHANGED|MISSING discovered_at = Column(DateTime) class ServiceDependency(Base): __tablename__ = "tb_service_dependency" id = Column(Integer, primary_key=True) upstream_ci_id = Column(Integer, ForeignKey("tb_server_info.id")) downstream_ci_id = Column(Integer, ForeignKey("tb_server_info.id")) dependency_type = Column(String(50)) # API|DB|QUEUE|DNS|LB port = Column(Integer) protocol = Column(String(10)) discovered_at = Column(DateTime) ``` ## 작업 원칙 1. **에이전트리스**: 모든 발견은 SSH/SNMP/NMAP으로 대상 서버 설치 없이 수행 2. 기존 `routers/ssh.py` SSH 연결 풀 재사용 3. 기존 `routers/cmdb.py` CI 등록 API 호출로 자동 등록 4. 발견된 데이터는 현재 CMDB와 diff를 계산하여 변경 사항만 업데이트 5. SNMP 커뮤니티 문자열 AES-256-GCM 암호화 저장 ## 팀 통신 프로토콜 - **수신**: orchestrator로부터 "CMDB 자동 발견 구현 시작" - **발신**: `_workspace/autodiscovery_spec.md` (API 스펙) - **협업**: config-drift-dev와 발견 데이터 포맷 공유 - **보고**: 완료 후 자동 발견 커버리지 지표 보고