Ansible 기본 인벤토리 파일 경로 설정 방법

AnsibleBeginner
지금 연습하기

소개

Ansible 은 인프라 및 애플리케이션 관리를 단순화하는 널리 사용되는 IT 자동화 도구입니다. 이 튜토리얼에서는 효율적이고 일관된 인프라 관리를 보장하기 위해 Ansible 에서 기본 인벤토리 파일 경로를 설정하는 방법을 살펴봅니다. Ansible 의 인벤토리 파일에는 Ansible 이 관리하는 호스트 목록이 포함되어 있습니다. 사용자 지정 인벤토리 파일 위치를 구성하면 자동화 워크플로우를 더 잘 구성할 수 있습니다.

Ansible 인벤토리 이해

사용자 지정 인벤토리 파일 경로를 구성하기 전에 Ansible 인벤토리가 무엇이며 기본적으로 어떻게 작동하는지 이해해 보겠습니다.

Ansible 인벤토리란 무엇인가요?

Ansible 인벤토리는 Ansible 이 관리할 호스트에 대한 정보를 포함하는 파일입니다. 기본적으로 Ansible 은 /etc/ansible/hosts에서 인벤토리 파일을 찾습니다. 인벤토리는 다양한 형식일 수 있지만 가장 일반적인 형식은 INI 스타일 파일 또는 YAML 파일입니다.

Ansible 이 시스템에 올바르게 설치되었는지 확인해 보겠습니다.

ansible --version

다음과 유사한 출력이 표시됩니다.

ansible [core 2.12.x]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.x (default, Ubuntu, etc.)

이제 기본 인벤토리 파일 위치를 살펴보겠습니다.

cat /etc/ansible/hosts

이 파일은 비어 있거나 예제 호스트 구성을 포함할 수 있습니다. 기본 인벤토리 파일은 종종 다음과 같습니다.

## Example inventory file

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

이 형식에서:

  • [webservers][dbservers]는 그룹 이름입니다.
  • 각 그룹 아래에 나열된 호스트 이름 또는 IP 주소는 해당 그룹에 속합니다.

Lab 을 위해 다른 위치에 자체 사용자 지정 인벤토리 파일을 만들 것입니다.

사용자 지정 인벤토리 파일 만들기

이제 인벤토리 파일이 무엇인지 이해했으므로 프로젝트 디렉토리에 자체 사용자 지정 인벤토리 파일을 만들어 보겠습니다.

Ansible 파일용 디렉토리 만들기

먼저 프로젝트 디렉토리로 이동하여 Ansible 파일에 대한 전용 폴더를 만들어 보겠습니다.

cd ~/project
mkdir -p ansible/inventory

사용자 지정 인벤토리 파일 만들기

이제 새 디렉토리에 간단한 인벤토리 파일을 만들어 보겠습니다.

cat > ansible/inventory/hosts.ini << 'EOF'
## Custom inventory file

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

[local]
localhost ansible_connection=local

[all:vars]
ansible_user=ubuntu
EOF

이 인벤토리 파일은 세 개의 그룹을 정의합니다.

  • webservers: 두 개의 웹 서버를 포함합니다.
  • dbservers: 두 개의 데이터베이스 서버를 포함합니다.
  • local: 특수 연결 설정으로 localhost 를 포함합니다.

새로 만든 인벤토리 파일을 확인해 보겠습니다.

cat ansible/inventory/hosts.ini

방금 만든 내용이 표시됩니다.

이 파일은 이제 사용자 지정 인벤토리 파일로 사용할 준비가 되었습니다. 다음 단계에서는 시스템 전체의 /etc/ansible/hosts 파일 대신 이 파일을 기본적으로 사용하도록 Ansible 을 구성합니다.

기본 인벤토리 파일 경로 설정

이제 사용자 지정 인벤토리 파일을 만들었으므로 Ansible 이 이를 기본 인벤토리 파일로 사용하도록 구성해 보겠습니다. 이렇게 하는 방법에는 여러 가지가 있지만 가장 일반적인 두 가지 방법에 중점을 두겠습니다.

방법 1: Ansible 구성 파일 사용

Ansible 은 다음 순서로 구성 파일을 찾습니다.

  1. ANSIBLE_CONFIG 환경 변수
  2. 현재 디렉토리의 ansible.cfg
  3. ~/.ansible.cfg (사용자 홈 디렉토리)
  4. /etc/ansible/ansible.cfg (시스템 전체)

프로젝트 디렉토리에 ansible.cfg 파일을 만들어 보겠습니다.

cat > ~/project/ansible/ansible.cfg << 'EOF'
[defaults]
inventory = ~/project/ansible/inventory/hosts.ini
host_key_checking = False
EOF

이 구성 파일에서 다음을 설정했습니다.

  • inventory: 사용자 지정 인벤토리 파일의 경로
  • host_key_checking: SSH 호스트 키 확인 프롬프트를 방지하기 위해 비활성화됨

방법 2: 환경 변수 사용

인벤토리 파일을 지정하는 또 다른 방법은 ANSIBLE_INVENTORY 환경 변수를 사용하는 것입니다. 이는 구성을 변경하지 않고 다른 인벤토리 파일을 일시적으로 사용하려는 경우에 유용합니다.

export ANSIBLE_INVENTORY=~/project/ansible/inventory/hosts.ini

간단한 Ansible 명령을 실행하여 구성이 작동하는지 확인해 보겠습니다.

cd ~/project/ansible
ansible --list-hosts all

이 명령은 사용자 지정 인벤토리 파일의 모든 호스트를 나열해야 합니다.

  hosts (5):
    web1.example.com
    web2.example.com
    db1.example.com
    db2.example.com
    localhost

이제 Ansible 은 ~/project/ansible 디렉토리에서 Ansible 명령을 실행할 때 기본적으로 사용자 지정 인벤토리 파일을 사용합니다.

인벤토리 구성 확인

이제 사용자 지정 인벤토리 파일을 구성했으므로 Ansible 이 이를 올바르게 사용하고 있는지 확인하고 인벤토리로 작업하기 위한 몇 가지 명령을 살펴보겠습니다.

ansible-inventory 로 인벤토리 확인

ansible-inventory 명령을 사용하면 인벤토리 구성을 보고 유효성을 검사할 수 있습니다.

cd ~/project/ansible
ansible-inventory --list

이렇게 하면 인벤토리가 JSON 형식으로 표시됩니다.

{
  "_meta": {
    "hostvars": {
      "localhost": {
        "ansible_connection": "local"
      }
    }
  },
  "all": {
    "children": ["dbservers", "local", "ungrouped", "webservers"]
  },
  "dbservers": {
    "hosts": ["db1.example.com", "db2.example.com"]
  },
  "local": {
    "hosts": ["localhost"]
  },
  "webservers": {
    "hosts": ["web1.example.com", "web2.example.com"]
  }
}

더 읽기 쉬운 형식을 위해 --graph 옵션을 사용할 수 있습니다.

ansible-inventory --graph

이렇게 하면 인벤토리가 트리 구조로 표시됩니다.

@all:
  |--@dbservers:
  |  |--db1.example.com
  |  |--db2.example.com
  |--@local:
  |  |--localhost
  |--@ungrouped:
  |--@webservers:
  |  |--web1.example.com
  |  |--web2.example.com

로컬 호스트에 대한 연결 테스트

간단한 ping 명령을 실행하여 로컬 호스트와 통신할 수 있는지 확인해 보겠습니다.

ansible local -m ping

다음과 유사한 출력이 표시됩니다.

localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

호스트에서 간단한 명령 실행

ansible 명령을 사용하여 호스트에서 명령을 실행할 수도 있습니다. 예제 호스트가 실제로 존재하지 않으므로 로컬 호스트만 대상으로 지정해 보겠습니다.

ansible local -a "uname -a"

이렇게 하면 로컬 호스트에서 uname -a 명령이 실행되고 다음과 유사한 출력이 표시됩니다.

localhost | CHANGED | rc=0 >>
Linux ubuntu 5.15.0-1033-aws #37-Ubuntu SMP Wed Aug 16 07:38:46 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

이것은 Ansible 이 사용자 지정 인벤토리 파일을 올바르게 사용하고 있으며 해당 파일에 정의된 호스트에서 명령을 실행할 수 있음을 확인합니다.

요약

이 튜토리얼에서는 Ansible 에서 사용자 지정 인벤토리 파일 경로를 설정하고 구성하는 방법을 배웠습니다. 이제 다음 사항을 이해하게 되었습니다.

  • Ansible 인벤토리 파일이 무엇이며 기본 위치는 어디인지
  • 호스트 그룹을 사용하여 사용자 지정 인벤토리 파일을 만드는 방법
  • 구성 파일 방법과 환경 변수를 모두 사용하여 기본적으로 사용자 지정 인벤토리 파일을 사용하도록 Ansible 을 구성하는 방법
  • 다양한 Ansible 명령을 사용하여 인벤토리 구성을 확인하는 방법

이러한 기술은 Ansible 자동화 워크플로우를 보다 효율적으로 구성하는 데 도움이 됩니다. 인벤토리 파일 위치를 사용자 지정하여 프로젝트의 구조 및 요구 사항에 따라 인프라를 더 잘 관리할 수 있습니다.

더 큰 프로젝트에서 작업할 때는 동적 인벤토리를 탐색하거나 Ansible Vault 를 사용하여 인벤토리 파일의 민감한 정보를 보호할 수 있습니다.