CLOUD

Opnestack kolla-ansible 배포 관련 the error was: systemerror: <built-in function _escape_inner> returned null without setting an exception failed 에러 해결 방법

92Hoonhee 2025. 5. 29. 11:53

에러 메시지:
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 등) 내에서 실행해야 합니다.

  1. MarkupSafe 2.1.5로 강제 다운그레이드  
pip install 'MarkupSafe==2.1.5'

 

📝 결론 및 권장사항

  • 이 이슈는 Kolla-Ansible의 Jinja2 템플릿 처리 중, 잘못된 입력 데이터가 MarkupSafe 최신 버전의 엄격한 검증을 통과하지 못해 발생한 것입니다.
  • volumes 항목에 빈 문자열이나 예상치 못한 타입이 포함되지 않도록 인벤토리와 플레이북을 정비해야 합니다.
  • 단기적으로는 MarkupSafe 버전을 2.1.5로 고정하여 회피 가능하나, 장기적으로는 템플릿 필터링 로직 개선 또는 Kolla-Ansible 측의 패치가 필요합니다.