0%

Inventory 작성하기

Ansible Inventory 의미 및 작성 과정을 설명합니다.


Ansible inventory

인벤토리는 관리 노드들에 대한 정보를 기술한 파일이다. 보통은 노드 목록과 그룹핑을 정의하기 때문에 호스트파일(hostfile)이라고도 부른다. 또한 인벤토리는 그룹에 따라 변수들을 생성할 수 있다. 형태는 다음과 같다.

1
2
3
4
5
6
7
8
[all]
target1 ansible_host=$IP
target2 ansible_host=$IP
target3 ansible_host=$IP

[all:vars]
ansible_python_interpreter=/usr/bin/python
ansible_ssh_pass=$passwd

[그룹이름]부분에 들어가는 단어가 앤서블에서 사용할 그룹이름이며 [그룹이름:vars] 아래로 입력한 부분은 해당 그룹에 대한 변수를 설정한 것이다. 보통 그룹에 속하는 노드들의 공통 속성은 [그룹이름:vars]에 하나로 입력한다. 위 예시를 보면 target1-3까지는 각각 IP가 다르므로 [all]에 작성하였고, ssh 비밀번호는 동일하므로 [all:vars]에 작성하였다.

또한 만약 사용되는 호스트 이름이 비슷한 패턴으로 구성되어 있다면 [start:end]규칙을 사용하여 그룹 변수를 작성할 수 있다.

1
2
[EXAMPLE]
target[1:3]

위의 예시처럼 숫자 패턴을 지정할 수도 있고, 또 아래 예시처럼 문자 패턴도 가능하다.

1
2
3
4
5
6
targetA ansible_host=$IP
targetB ansible_host=$IP
targetC ansible_host=$IP

[EXAMPLE]
target[A:C]

인벤토리 파일은 확장자 없이도 사용할 수 있으며, 보통 txt, ini 확장자로 저장하여 사용한다. 물론 yaml 파일 형식으로도 작성할 수는 있지만 yaml 형식이 익숙하지 않다면 txt, ini로 쓰는 것을 추천한다. 위 예시를 yaml 파일 방식으로 작성하면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
all:
hosts:
target1:
ansible_host: $IP
target2:
ansible_host: $IP
target3:
ansible_host: $IP
vars:
ansible_python_interpreter: /usr/bin/python
ansible_ssh_pass: $passwd

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들을 입력