Ansible Inventory 의미 및 작성 과정을 설명합니다.
Ansible inventory
인벤토리는 관리 노드들에 대한 정보를 기술한 파일이다. 보통은 노드 목록과 그룹핑을 정의하기 때문에 호스트파일(hostfile)이라고도 부른다. 또한 인벤토리는 그룹에 따라 변수들을 생성할 수 있다. 형태는 다음과 같다.
1 | [all] |
[그룹이름]
부분에 들어가는 단어가 앤서블에서 사용할 그룹이름이며 [그룹이름:vars]
아래로 입력한 부분은 해당 그룹에 대한 변수를 설정한 것이다. 보통 그룹에 속하는 노드들의 공통 속성은 [그룹이름:vars]
에 하나로 입력한다. 위 예시를 보면 target1-3까지는 각각 IP가 다르므로 [all]에 작성하였고, ssh 비밀번호는 동일하므로 [all:vars]에 작성하였다.
또한 만약 사용되는 호스트 이름이 비슷한 패턴으로 구성되어 있다면 [start:end]규칙을 사용하여 그룹 변수를 작성할 수 있다.
1 | [EXAMPLE] |
위의 예시처럼 숫자 패턴을 지정할 수도 있고, 또 아래 예시처럼 문자 패턴도 가능하다.
1 | targetA ansible_host=$IP |
인벤토리 파일은 확장자 없이도 사용할 수 있으며, 보통 txt, ini 확장자로 저장하여 사용한다. 물론 yaml 파일 형식으로도 작성할 수는 있지만 yaml 형식이 익숙하지 않다면 txt, ini로 쓰는 것을 추천한다. 위 예시를 yaml 파일 방식으로 작성하면 다음과 같다.
1 | all: |
yaml 파일 형식은 playbook 파트에서 더 자세히 알아보자. 이처럼 인벤토리에 작성된 노드들은 네트워크 상에서 통신만 가능하다면 컨트롤러 서버에서 관리할 수 있다. 보통 앤서블을 설치하면 /etc/ansible
디렉토리 내부에 자동으로 hosts
파일이 생성된다. 해당 파일에 노드 정보를 입력하면 옵션 -i
없이 앤서블 명령어를 사용할 수 있다. 만약 여러 개의 인벤토리를 구성하고 싶다면 호스트 디렉토리를 따로 생성하여 관리할 수도 있다.
Inventory Parameters
아래는 앤서블 인벤토리를 작성할 때 사용되는 요건들을 정리한 목록이다.
호스트 연결 타입
ansible_connection: 기본값은 ssh, 호스트와 연결할 방법 [local, smart, ssh, paramiko]SSH 연결 관련
ansible_host: 연결할 호스트의 IP
ansible_port: SSH 포트 번호, 기본값인 22일 경우에는 작성할 필요 없음
ansible_user: 접속에 사용할 유저 이름, 사용하는 유저가 root인 경우 작성할 필요 없음
ansible_ssh_pass: SSH 연결시 사용할 비밀번호
ansible_ssh_private_key_file: 연결시에 사용할 SSH 비밀키 파일, 비밀번호로 연결하는 경우 필요 없음권한 관련
ansible_become: sudo와 동일. 권한을 확대 [yes / no]
ansible_become_method: 권한 확대 방법 [su]
ansible_become_user: 입력된 유저로 권한을 확대
ansible_become_password: 권환 확대할 유저의 비밀번호
ansible_become_exe: 선택한 권한 확대 방법을 어떻게 실행할지 설정 [“sudo su -“]
ansible_become_flags: 권한 확대 방법 실행 시 추가적으로 옵션을 설정
with Docker container
- 호스트 연결 타입
ansible_host: 연결할 Docker 컨테이너의 이름
ansible_user: 컨테이너 내에서 작동할 유저 이름, 컨테이너 안에 유저가 있어야 함
ansible_become: true, become_user로 설정하면 컨테이너 내에서 작동하는데 사용
ansible_docker_extra_args: Docker에 접속할 때 추가할 args들을 입력