에러 메시지:
SystemError: returned NULL without setting an exception
→ Python의 C 확장 모듈에서 반환값 처리 오류가 발생한 경우 나타나는 에러입니다.
→ Jinja2 템플릿 처리 중 MarkupSafe의 _escape_inner() 함수가 NULL을 반환했으나, 예외를 raise하지 않아 Python 인터프리터가 SystemError를 발생시켰습니다.
MarkupSafe의 역할
- MarkupSafe는 Jinja2에서 HTML 이스케이프 처리를 담당하는 핵심 라이브러리입니다.
- _escape_inner()는 문자열을 HTML 이스케이프할 때 내부적으로 호출됩니다.
- ''(빈 문자열) 또는 예상치 못한 타입이 들어오면, 이를 이스케이프하려다 오류가 발생합니다.
버전 간 차이점
- MarkupSafe 2.1.5 이전: 입력이 이상해도 상대적으로 관대하게 처리.
- MarkupSafe 2.1.6 이상: C 모듈의 검사를 더 엄격히 적용. NULL 반환 시 예외가 명시되지 않으면 SystemError 발생.
→ Kolla-Ansible에서 volumes 리스트에 ''(빈 문자열)이 포함되어 있는 경우, MarkupSafe 최신 버전이 이를 처리하지 못해 에러 발생.
✅ 해결 방법 요약
※ 반드시 Python 가상환경(venv 또는 kolla-venv 등) 내에서 실행해야 합니다.
- MarkupSafe 2.1.5로 강제 다운그레이드
pip install 'MarkupSafe==2.1.5'
📝 결론 및 권장사항
- 이 이슈는 Kolla-Ansible의 Jinja2 템플릿 처리 중, 잘못된 입력 데이터가 MarkupSafe 최신 버전의 엄격한 검증을 통과하지 못해 발생한 것입니다.
- volumes 항목에 빈 문자열이나 예상치 못한 타입이 포함되지 않도록 인벤토리와 플레이북을 정비해야 합니다.
- 단기적으로는 MarkupSafe 버전을 2.1.5로 고정하여 회피 가능하나, 장기적으로는 템플릿 필터링 로직 개선 또는 Kolla-Ansible 측의 패치가 필요합니다.
'CLOUD' 카테고리의 다른 글
OpenStack Cinder RBD 강제 종료 후 Disk I/O 문제 해결 가이드 (1) | 2025.06.16 |
---|---|
OpenStack 인스턴스 스냅샷 vs 볼륨 스냅샷 완벽 가이드 (0) | 2025.06.16 |
OpenStack Designate에 대해 알아보기 (0) | 2025.04.08 |
OpenStack Swift – 스토리지 디스크 준비 및 Ring 파일 구성, 정책 에러 해결 방법 (0) | 2025.04.03 |
OpenStack ceph 스냅샷 삭제 시 실패하는 권한 문제 해결 정리 (0) | 2025.03.28 |