Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
Audit 1 發現 bug:
原 code: if host_ip.replace('.', '').isdigit() → IP 判斷
導致 labels.host='125' (短名) 被誤當 IP → 建 host/125 (錯)
同時 blackbox-icmp instance='192.168.0.112' 無 port → split 失敗 → 漏建
新增 _is_valid_ipv4(s):
嚴格 4 段 + 每段 0-255 整數
避免短名 '125' / hostname 'cadvisor-110' / 超界 '256' 誤判
_collect_prometheus_targets 流程改:
1. 先從 instance 抽 (IP:port 形式 或純 IP)
instance_host = instance.split(':')[0] if ':' in instance else instance
2. 用 _is_valid_ipv4 嚴格驗證
3. labels.host 不再當 fallback (短名不可靠)
DB 清理 (266 筆):
- 10 asset_relationship 指向短名 host
- 140 asset_coverage_snapshot 7 維 × 4 短名 host
- 112 asset_compliance_snapshot 7 維 × 4 短名 × 幾 run
- 4 asset_inventory 短名 host (host/110 / 112 / 125 / 188)
預期下次 scan (1h):
- host/192.168.0.112 + host/192.168.0.121 補進 (原漏,blackbox-icmp 無 port)
- 不再有短名 host asset
6/6 單元測試通過:
_is_valid_ipv4('192.168.0.125')=True
_is_valid_ipv4('125')=False ← 關鍵修復
_is_valid_ipv4('cadvisor-110')=False
_is_valid_ipv4('192.168.0.256')=False (超界)
_is_valid_ipv4('')=False
_is_valid_ipv4('192.168.1')=False (3 段)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>