이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/Ansible

03. Ansible inventory

이쿠우우 2021. 12. 13. 16:40
반응형

 

Ansible Inventory

 

inventory 란?

자동화 관리 대상인 Managed Node 즉 Server 목록이 작성되어 있음.
Managed Node의 IP address, host 정보, 변수와 같은 정보 저장.
Managed Nodes는 그룹화 하여 관리할 수 있음. 
그룹은 하위 그룹을 포함할 수 있으며 한 호스트는 여러 그룹에 포함될 수 있음.
inventory의 경우 목표가 host를 그룹화 하는 것임.
 

default inventory 파일 경로

/etc/ansible/hosts
 

inventory 파일 변경

ansible-playbook 명령어에서 -i 로 inventory 지정 가능
ex) ansible-playbook test.yml -i managed_server1 -i managed_server2
 

Default 그룹

Default 그룹으로는 AllUngrouped 그룹이 존재함. 
모든 Server들은 하나 이상의 그룹에 속하는데 
1개 이상인 이유는 default로 All 그룹에 속하기 때문임. 
Ungrouped 그룹은 다른 그룹을 제외한 모든 호스트가 포함됨.
 

ssh 연결 시 password 설정

inventory 항목에 접근 시 매번 ssh password를 입력해줘야하는데
password 입력을 미리 입력해놓기 위해 사용함.
[aaa:vars]
ansible_ssh_user=Administrator # 계정
ansible_ssh_pass=admin123! # 계정에 대한 패스워드
ansible_ssh_port=5985 # ssh port 설정
ansible_connection=winrm # ssh가 아니라 다른 tool로 변경할 때 사용함.
 
 
 

 

Ansible Inventory 문법 정리

 

inventory 문법 종류

ini 형식과 yuml 형식 2가지를 지원함.
일반적으로 ini 문법을 사용함
 

문법 예제 1

[webservers] 와 [dbserver]는 각각 서버(호스트)를 분류하는 그룹명을 의미함.
그룹 하위에 오는 항목들은 host의 domain 주소 or ip주소가 올 수 있음.
 

문법 예제 2

[k8sclusters]
172.30.1.[101:105]
 
[databases]
db-[a:f].example.comf
연속된 패턴 즉, 연속된 ip 주소를 가지는 서버들의 경우 이를 범위로 추가 가능. 
범위 지정은 숫자 뿐만아니라 알파벳도 가능.
정규표현식으로 가능.
 

문법 예제 3

[targets]
localhost              ansible_connection=local
other1.example.com     ansible_connection=ssh        ansible_user=mpdehaan
other2.example.com     ansible_connection=ssh        ansible_user=mdehaan
단일서버 혹은 그룹에 변수 할당이 가능함. 
"key"="value" 형식으로 입력
해당 변수는 playbook에서 사용 가능. 
그룹에 변수를 할당하여 변수 값을 전체 호스트에 적용하도록 할 수 있음.
일반적으로 inventory에 변수를 설정하면 복잡해져서 되도록 playbook에서 변수를 설정함.
ex) 
http_port 변수에 80 value를 할당.
ansible_user 변수에 user 이름을 할당. 
 

[inventory 파라미터 목록]

ansible_connection : 호스트의 연결 타입, local, smart, ssh, paramiko를 사용가능. 기본은 smart임
ansible_host : 연결할 호스트의 이름. 당신이 원하는 호스트 별칭과 다를 경우 사용하여 임의 지정 가능
ansible_port : SSH 포트 번호. 기본값인 22가 아닐 경우 사용
ansible_user : SSH 접속에 사용할 유저 이름
ansible_ssh_pass : SSH 연결시 사용할 비밀번호. 이것은 보안에 취약하므로 –ask-pass 또는 SSH Keys 방식을 사용할 것은 권장
ansible_ssh_private_key_file : SSH 연결시에 사용할 SSH 비밀키 파일
ansible_ssh_common_args : sftp, scp, ssh와 같은 기본 명력을 사용할 때 항상 추가할 설정을 지정가능
 

문법 예제 4

[servers]
 
[servers:vars]
user=joe
key=value
그룹명 옆에 :vars 부분과 같이 작성하고 각각의 변수에 들어갈 내용들을 작성하여 
그룹에 변수를 적용하는 것을 확인 할 수 있음.
ex)
[servers] 라는 그룹의 상위에서 선언했고
이후 [servers:vars]를 선언해서 해당 그룹에 변수를 추가할 수 있음.
 

ex)

 

Yaml 형식

all:
  hosts:
    mail.example.com:
  children:
    webservers:
      hosts:
        foo.example.com:
        bar.example.com:
    dbservers:
      hosts:
        one.example.com:
        two.example.com:
        three.example.com:
 
all:
    children:
        localhost:
            hosts:
                127.0.0.1:
                    http_port: 80
                    maxRequestsPerChild: 808
            vars:
                gw_ip: 192.168.0.1
 

 

반응형

'클라우드 > Ansible' 카테고리의 다른 글

06. Ansible lookup  (0) 2022.01.09
05. Ansible Role  (0) 2021.12.13
04. Ansible Playbook  (0) 2021.12.13
02. Ansible 설치  (0) 2021.12.12
01. Ansible 개념  (0) 2021.12.12