Ansible Requirements

Ansible Logo
Ansible Logo

Ansible을 시작하기 앞서 우선 환경부터 구성해야 합니다. 오늘 기준(19.04.17)으로 Ansible 버전이 2.7까지 나왔네요.
구글에 Ansible이라고 치고 자동완성되는 드롭다운을 보면 Python2, Python3 이런 연관 검색들이 많이 나옵니다.
알아보니 얼마 전까지만 해도 Python3에서는 지원을 하긴 하지만 완벽히 호환이 안되는 문제가 있었던 것 같습니다.

저의 경우에는 Java만 했었고, 산업공학도로서 그 이상의 언어 공부는 벅찬감이 없지않아 최근에 들어서야 Python을 시작을 해서 Python2를 경험해보지 못했습니다.
마침 타이밍도 잘맞았네요. Ansible에서는 요구사항을 2가지로 나눠서 구분을 했는데요.
Control Machine 부분과 Managed Node 부분으로 구분하였습니다.
명칭만 봐도 알 수 있듯이 Control Machine은 Playbook등을 활용하여 명령을 내리는 Host의 역할을 하는 것으로 짐작이 가능하고, Managed Node는 그 명령을 수행하는 역할을 하게 되는 것 같네요.

Control Machine Requirements

현재 Ansible은 Python2 (Version 2.7) 또는 Python 3 (Version 3.5 or 이상)이 설치되는 어떠한 Machine에서 구동이 가능하다고 합니다.
하지만 윈도우는 지원하지 않는다고 하네요.
대표적으로 사용되는 OS는 Red Hat, Debian, CentOS, macOS 등이 있습니다.

macOS는 기본적으로 작은 규모로 운용되게끔 설정이 되어 있다고 합니다.(15개 미만)
15개 이상의 forks를 하게되면 ‘Too many open files’ Error가 나온다고 하네요.
그래서 그 이상 사용을 하기 위해서는 아래 커맨드를 통해 제한을 해제해야 한다고 합니다.

sudo launchctl limit maxfiles unlimited

그리고 추가적인 모듈이나 플러그인 관련 안내사항도 있는데, 기본적으로 제공하는 것만 사용하는 것을 권장한다고 합니다.
외적으로 지원하는 것들도 사용이 가능하긴 하지만 그렇게 사용되는 모듈들에 대해서는 명시하라고 하네요.

Managed Node Requirements

Managed Node는 기본적으로 ssh로 통신이 가능하면 모두 가능합니다.
기본 통신으로는 sftp를 사용하는데, 만약 sftp를 지원하지 않는다면, scp로 변경이 가능하다고 합니다.

그리고 사용되는 Managed Node가 SELinux일 경우에는 Ansible이 제대로 동작할 수 있도록 libselinux-python을 설치하는 것을 권고하네요.

기본적으로 Ansible은 모듈을 사용하기 위해 /usr/bin/python 경로를 참조한다고 합니다.
하지만 Python 3 만 가지고 있는 경우에는 /usr/bin/python3 경로를 참조해야 하는데요.
이 경우 아래와 같은 에러가 발생할 수 있으니 참고바랍니다.

"module_stdout": "/bin/sh: /usr/bin/python: No such file or directory\r\n"

이 경우, ansible_python_interpreter에서 경로 설정을 변경해주거나 아니면 Python 2 interpreter for modules를 설치해주면 된다고 합니다.

Ansible의 “raw” 모듈과 스크립트 모듈은 파이선의 설치가 꼭 필요하지 않다고 합니다.
이 말이 무엇을 뜻하는 것인가 하면, Ansible에 필요한 ‘compatible’한 Python version만 취해서 세팅이 가능하다는 것입니다.
한가지 예를 들어주고 있는데 아래 적어두겠습니다.

예) if you need to bootstrap Python 2 onto a RHEL-based system, you can install it via
(만약 너가 레드햇 베이스 시스템 상에서 bootstrap 파이썬 2가 필요하다면 너는 아래와 같이 커맨드를 입력하면 된다.)

$ ansible myhost --sudo -m raw -a "yum install -y python2"

아직 저도 예시자체는 정확하게 무엇을 뜻하는지 몰라 그대로 옮겨 적었습니다.
느낌상 Docker가 추구하는 방향과 비슷해보이네요.

Leave a Reply