본문 바로가기

리눅스

Ansible 인벤토리를 YAML 파일로 설정하는 방법

728x90

Ansible 인벤토리를 YAML 파일로 설정하는 방법

YAML 파일을 사용하여 호스트 그룹 및 호스트에 대한 정보를 정의할 수 있습니다.

기본적인 YAML 형식의 Ansible 인벤토리 예제

  • Ansible 인벤토리 파일 편집
vim hosts.yml
---
all:  # all 그룹 정의
  hosts:
    webserver:
      ansible_host: 192.168.1.10
      ansible_user: ubuntu
      ansible_ssh_private_key_file: /path/to/private_key.pem
    database:
      ansible_host: 192.168.1.11
      ansible_user: centos
      ansible_password: your_password

webservers:  # webservers 그룹 정의
  hosts:
    web1:
      ansible_host: 192.168.1.20
      ansible_user: ubuntu
      ansible_ssh_private_key_file: /path/to/private_key.pem
    web2:
      ansible_host: 192.168.1.21
      ansible_user: centos
      ansible_password: your_password

dbservers:  # dbservers 그룹 정의
  hosts:
    db1:
      ansible_host: 192.168.1.30
      ansible_user: ubuntu
      ansible_ssh_private_key_file: /path/to/private_key.pem
    db2:
      ansible_host: 192.168.1.31
      ansible_user: centos
      ansible_password: your_password

이 예제에서는 all, webservers, dbservers와 같은 그룹을 정의하고 각 그룹에 속하는 호스트를 지정했습니다. 호스트는 해당하는 그룹에 속하며 필요한 연결 정보(호스트 주소, 사용자명, 비밀번호 또는 키 파일 등)를 제공합니다.

 

일반적으로 Ansible 인벤토리 파일은 hosts.yml 또는 inventory.yml과 같은 이름으로 저장되며, 이 파일을 사용하여 Ansible 명령을 실행할 수 있습니다.

 

예를 들어, hosts.yml 파일로 작성된 인벤토리를 사용하여 특정 그룹에 대한 Ansible 명령을 실행하려면 다음과 같이 할 수 있습니다.

ansible-playbook -i hosts.yml playbook.yml

 

위의 명령에서 playbook.yml은 실행할 Ansible 플레이북 파일을 나타냅니다.

728x90

디렉터리 구조

level 1 level 2 level 3 level 4
inventory      
  inventory.yaml    
--- --- --- ---
  group_vars    
    hosts.yaml  
--- --- --- ---
  blog    
    hosts.yaml  
    b-db  
      hosts.yaml
    b-web  
      hosts.yaml
--- --- --- ---
  site-a    
    hosts.yaml  
    development  
      hosts.yaml
    stage  
      hosts.yaml
    production  
      hosts.yaml
  • 인벤토리 확인
ansible-inventory -i ~/ansible-spec/inventory --graph
$ ansible-inventory -i ~/ansible-spec/inventory --graph
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
@all:
  |--@blog:
  |  |--@b-db:
  |  |  |--bdb-245
  |  |  |--bdb-246
  |  |--@b-web:
  |  |  |--admin-249
  |  |  |--admin-250
  |  |  |--api-247
  |  |  |--api-248
  |  |  |--web-245
  |  |  |--web-246
  |--@site-a:
  |  |--@development:
  |  |  |--devweb-214
  |  |--@production:
  |  |  |--websrv-231
  |  |  |--websrv-232
  |  |--@stage:
  |  |  |--stgweb-240
  |--@ungrouped:
  |  |--localhost
  • 인벤토리 디렉터리 구조
tree
$ tree
.
├── blog
│   ├── b-db
│   │   └── hosts.yaml
│   ├── b-web
│   │   └── hosts.yaml
│   └── hosts.yaml
├── group_vars
│   └── all.yml
├── inventory.yaml
└── site-a
    ├── development
    │   └── hosts.yaml
    ├── hosts.yaml
    ├── production
    │   └── hosts.yaml
    └── stage
        └── hosts.yaml
  • group_vars 편집
vim ./group_vars/all.yml
ansible_connection: ssh
ansible_port: 22
ansible_ssh_user: ec2-user
ansible_ssh_private_key_file: ~/aws-key/keyfile.pem
##ansible_python_interpreter: /usr/bin/python
  • inventory.yaml 편집
vim inventory.yaml
all:
  children:
    blog:
    site-a:

  hosts:
    localhost:
      ansible_hostr: 192.168.50.24
      ip: 192.168.50.24
  • hosts.yaml 편집
$ cat ./site-a/hosts.yaml
site-a:
  children :
    development:
    stage:
    production:
$ cat ./site-a/development/hosts.yaml
development:
  hosts:
    devweb-214:
$ cat ./site-a/stage/hosts.yaml
stage:
  hosts:
    stgweb-240:
$ cat ./site-a/production/hosts.yaml
production:
  hosts:
    websrv-231:
    websrv-232:

 

참고URL

- [Ansible] 구성 설정(Configuration Settings) : https://scbyun.com/1373

- [Ansible] inventory(인벤토리) 설정 : https://scbyun.com/998

 

728x90