2 min read

[Ansible] Inventory 관리

inventory 는 관리 대상의 서버를 관리하는 디렉터리 라고 배웠다. ansible 은 크게 control 노드와 managed 노드로 나뉜다. control 노드는 ansible 설치되어 있는 서버를 뜻하고 managed 노드는 ansible 스크립트가 적용되는 서버를 뜻한다.

inventory 에는 group 과 host 를 다음과 같이 나누어 정의할 수 있다.

# inventory/all.ini
[web] <- [group]
web1 ansible_host=192.168.1.10 <- [host]
web2 ansible_host=192.168.1.11 <- [host]

[db] <- [group]
db1 ansible_host=192.168.1.20 <- [host]

[group] 은 playbook.yaml 에서 hosts 에 입력되고, group 에 속한 모든 host 들이 적용된다. hosts 에 all 로 명시하면 모든 host 들에 적용한다는 의미이다. hosts 에는 group 을 명시할 수 있지만 각 host 이름을 나열해도 된다.

- name: Deploy All Servers
  hosts: all
  become: yes

  roles:
    - add_user
    - install_docker


- name: Deploy DB Servers
  hosts: db
  become: yes

  roles:
    - install_postgres


- name: Deploy API Servers
  hosts: web1, web2
  become: yes

  roles:
    - apply_git

1. ansible-vault

관리 서버를 등록할 때, 사설망으로만 등록한다면 보안에 크게 신경쓰이지 않는다. 하지만 123.45.678.9 와 같은 외부망으로 등록하고 유출된다면 크게 우려되는 것들이 많다. 그래서 계정이나 비밀번호, 서버IP 등 보안에 유의할 정보를 명시하는 파일들을 암호화하여 실행할 수 있도록 ansible 이 제공하고 있다.

$ ansible-vault encrypt inventory/all.ini \
  --output inventory/all.ini.vault

$ echo "password!2" > vault_password.txt

$ ansible-playbook -i inventory/all.ini.vault playbook.yaml --vault-password-file vault_password.txt

위 명령어를 입력 후 비밀번호를 입력하면 all.ini.vault 파일이 생성된다. 이 파일로 playbook.yaml 실행 시 사용할 수 있다. 원본 파일을 수정하면 매번 다시 생성해야하므로 유의하자.

비밀번호가 입력된 파일을 생성하여 playbook 실행 시, vault-password-file 로 지정하면 비밀번호 없이 실행가능하다.

2. Attributes

[servers]
server1 ansible_host=192.168.0.104  ansible_port=22 ansible_user=ubuntu ansible_ssh_pass=password!2 ansible_become_password=password!2

inventory 에 서버를 등록할 때, 입력하는 속성은 다양하다. 내가 입력한 것들에 대해서 정리해보자.

  • ansible_port
    • ssh 접속 포트
  • ansible_user
    • 접속할 계정
  • ansible_ssh_pass
    • 접속할 계정의 비밀번호
  • ansible_become_password
    • sudo 명령어 시, 입력할 비밀번호