-
오픈소스로 구성하는 데브옵스 시스템 - Ansible 구성 이슈1DevOps 2018. 10. 30. 11:05
안녕하세요! 너무 오랜만에 글을 쓰면서 어떤 내용을 올릴까 하다가 최근에 Ansible을 구축하면서 발생한 오류들에 대해 한번은 정리하고자 합니다. ^^
그동안은 윈도우와 리눅스...그것도 CentOS 6나 7 환경에서만 구축해서 별다른 문제가 없었는데요...
최근에 이직을 하면서 Unix, AIX, HP-UX, 그리고 CentOS 5 등의 Legacy System에서 구축을 하다보니 정말 다양한 문제들이 발견 되었습니다.
SyntaxError? future feature absolute_import is not defined
Ansible 2.4 버전 부터는 Python 2.4/2.5 버전에 대한 지원을 하지 않습니다.
그래서 Ansible 2.3에서는 잘 동작하던 Playbook이 업그레이드 이후 위와 같은 에러를 발생시킬 수 있는데요...
이는 Python 버전을 2.6 이상으로 업그레이드 해주시면 해결이 됩니다.
특히 CentOS 5.x 버전에서는 python2.4로 기본 설치가 되어 있어서 아래와 같은 명령어로 업그레이드 해주시면 됩니다.
sudo yum install python26 --enablerepo=epel
하지만 저의 경우에는 다른 프로그램의 의존성 때문에 Python 2.4 버전을 그대로 두고 Python 2.6 이상의 버전을 소스 컴파일로 설치한 뒤, Ansible 원격접속 계정이나 root의 profile에 Python 환경설정을 Python 2.6으로 지정해서 사용하도록 셋팅해야 했는데, 실제 Ansible을 실행하면 위와 같은 에러가 지속적으로 발생을 해서 정상 동작되지 않았습니다.
결국 해결 방법은 Ansible의 Inventory 파일의 hostname 뒤에 해당서버의 Python 2.6 버전의 실행파일 경로를 명시적으로 지정해 줘서 해결을 했습니다.
centos-hostname ansible_python_interpreter=/usr/bin/python26
Python error on os.uname() function (only HP-UX)
Ansible의 호스트 서버 중에 HP-UX 서버가 있었는데, Ansible 시스템 정보를 Gatering하는 과정에서 아래와 같은 에러가 발생을 했습니다.
> python -c "import os; print os.uname()" Traceback (most recent call last): File "", line 1, in OSError: [Errno 72] Value too large to be stored in data type
아마 Python의 os.uname 함수에서 호스트명을 가져오는 도중 해당 호스트명이 길어서 OS의 data type과 맞지 않아 발생하는 문제로 추측이 되었습니다.
hp.com의 포럼에서도 아래 명령어로 kernel parameter를 확인해 보라고 합니다.
kctune | grep uname
혹시 uname_eoverflow의 설정값이 0으로 설정되어 있다면 1로 변경해 주시기 바랍니다.
그런데 설정값이 1로 되어 있어도 동일한 문제가 발생한다면.....
결국 가장 확실한 방법은 Ansible의 Playbook에서 gater_facts: no로 설정하는 것으로 해결을 했습니다.
'DevOps' 카테고리의 다른 글
오픈소스로 구성하는 데브옵스 시스템 - AWX 개발 빌드 구성 (0) 2018.11.19 오픈소스로 구성하는 데브옵스 시스템 - AWX 한글화 작업 (0) 2018.11.15 오픈소스로 구성하는 데브옵스 시스템 - Ansible의 Dynamic Inventory (5) 2018.06.05 오픈소스로 구성하는 데브옵스 시스템 - Ansible과 AWX를 이용한 예제3 (9) 2018.05.31 오픈소스로 구성하는 데브옵스 시스템 - Ansible과 AWX를 이용한 예제2 (0) 2018.03.20