ansible 의 /bin/sh: 1: /usr/bin/python: not found\r\n 오류 해결 ( 부제: python3 으로 ansible 잘 굴리기 )

썰풀기 전에

뭔가 초기 설정에 대한 글이 연이어 올라오는 것은 기분탓..은 아니고 현재 내가 노트북에 우분투를 재설치하고 이것저것 세팅하며 겸사겸사 글을 올리기 때문이다.
참고로 지금 작성하는 부분은 예전에 해결한 뒤에 다 잊어버려서(...) 다시 검색해본 터라 까먹어도 찾아볼 수 있도록 포스팅한다.

ansible로 ping 날리기

ubuntu에 ansible을 잘 설치하고 /etc/ansible/hosts 도 수정해주고 난 뒤 ansible이 잘 되나 확인하기 위해 지정한 host로 ping을 날려보자. 참고로 내가 설정한 host는 aws여서 그룹이름을 aws라고 지었다.
$ ansible aws -m ping
기분좋게 녹색 결과화면을 기다리고 있는데 붉은색 오류가 다음과 같이 나온다.
ubuntu@ec2-compute.amazonaws.com | FAILED! => {
"changed": false,
"module_stderr": "Shared connection to ec2-compute.amazonaws.com closed.\r\n",
"module_stdout": "/bin/sh: 1: /usr/bin/python: not found\r\n",
"msg": "MODULE FAILURE",
"rc": 0
}
ping 조차 실패하는 ansible 당신은 도대체... 라고 좌절하려는 찰나, python이 not found 어쩌구 하는 걸 봐서는 뭔가 의존성 문제인 거 같다.
그래서 검색해보니 공식 홈페이지에서 이미 답변을 올려뒀다. 공식 홈페이지에 해답이 있는 걸 굳이 포스팅하는 이유는 소재가 부족해서...는 아니고 공식 홈페이지의 답변이 약간 불친절하게 느껴졌기 때문이다.

ansible 명령어에 -e 옵션 추가하기

다음 옵션을 추가해주면 잘 돌아간다.
-e 'ansible_python_interpreter=/usr/bin/python3'
따라서 위의 ping 보내기 명령어는 다음과 같다.
$ ansible aws -m ping -e 'ansible_python_interpreter=/usr/bin/python3'

host 설정에서 variable 추가해주기

바로 이 부분이 내가 포스팅을 하게끔 했던 곳인데, 매번 ansible을 사용할 때마다 저 옵션을 넣어주긴 좀 이상하니까, 뭔가 분명 configure를 설정해주는 부분이 있을텐데 아무리 찾아도 configure 관련된 문서가 보이지 않는 것이다. 알고보니 /etc/ansible/hosts 에서 variable을 추가해주면 되는 부분이었다(사실 이것도 공식문서에 잘 나와있다. 내가 바보일뿐).
앞서 나는 그룹명을 [aws] 라고 지어주었다고 했다. 이 때 aws 그룹의 variable 추가를 위해서는 /etc/ansible/hosts 에 다음과 같은 내용을 하단에 추가해주면 된다.
[aws:vars]
ansible_python_interpreter=/usr/bin/python3
그러면 굳이 위의 -e 옵션을 넣어주지 않아도 된다.
다시 ping을 보내보면 녹색의 결과문이 나올 것이다.