Ansible 연구하기(인벤토리 문법)

반응형

기본적인 인벤토리 문법

안녕하세요 김민욱입니다.

 

저번 포스팅에서는 Ansible 연구하기(개념 및 설치)에 작성해보았습니다.  이번 포스팅에는 Ansible 공식 Documentation을 기준으로 간략하게 정리한 인벤토리 문법에 대해 한번 작성해 보도록 하겠습니다.

 

인벤토리 문법은 체계적으로 그룹화하여 관리하는 것이 중요하다고 생각됩니다. 중복되는 서버 리스트가 있을 수도 있고 각 서버 혹은 그룹 별로 다르게 적용해야할 변수들도 있을 것입니다. 이러한 부분에 대해 숙련을 가지기 위해서는 다른 사람들이 어떻게 분류하는지에 대해 연구하는 것이 중요할 것같습니다. 

 

이번 포스팅은 간략하게 어떻게 그룹으로 작성하고, 변수를 선언하는지 등 아주 간단하게만 작성될 예정이므로 메모장 정도로 생각하시면 될 것 같습니다. 

 

Ansible 공식 문서에서는 인벤토리가 가질 수 있는 가장 일방적인 형식이 INI와 YAML이라고 하였습니다. -i로 특정 인벤토리 파일을 지정하지 않았을 경우 사용하는 기본 인벤토리로 아래의 예와 같이 /etc/ansible/hosts 파일이 존재합니다.

[webservers]
foo.example.com
bar.example.com

[dbeserver]
one.example.com
two.example.com
three.example.com

앞서 보인 인벤토리 예제에서 [webservers]와 [dbserver]는 각각 서버(호스트)를 분류하는 그룹명을 의미합니다. 따라서 현재에는 두개의 그룹이 존재하고 그룹명으로 그룹에 속하는 서버(호스트)들에게 명령을 할 수 있습니다.  이렇게 사용자 명시에 의한 그룹 외에도 디폴트 그룹이 있습니다. 디폴트 그룹은 All과 Ungrouped 그룹이 존재합니다.  모든 서버들은 하나 이상의 그룹에 속하는데 그것은 All 그룹에 속하기 때문입니다. Ungrouped 그룹은 말 그대로 다른 그룹을 제외한 모든 호스트가 포함됩니다.

 

연속된 패턴 즉, 연속된 ip 주소를 가지는 서버들의 경우 이를 범위로 추가할 수 있습니다. 이러한 범위 지정은 숫자 뿐만아니라 알파벳으로도 가능합니다. 

[k8sclusters]
172.30.1.[101:105] 

[databases]
db-[a:f].example.comf

단일서버 혹은 그룹에는 변수라는 것을 할당할 수 있고 해당 변수는 플레이북에서 사용 가능합니다.  지난 포스팅에서 python을 찾을수 없다라는 에러가 발생하였을 때  그룹 전체에 python의 경로를 적어주는 변수를 적용한 것과 마찬가지로 동일합니다.

[atlanta]
Host1 http_port=80 maxRequestsPerChild=888
Host1 http_port=303 maxRequestsPerChild=888
other1.example.com ansible_connection=ssh ansible_user=myuser

위와 같이 특정 포트를 할당하거나, ansible_user와 같은 변수에 user 이름을 적어 이를 플레이북에서 읽히도록 할 수 있습니다.  아래와 같이 그룹에 변수를 할당하여 변수 값을 전체 호스트에 적용하도록 할 수 있습니다. 

[atlanta]
host1
host2

[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com

:vars를 그룹명 옆에 작성하고 해당 내용에 각각의 변수에 들어갈 내용들을 작성하여 atlanta라는 그룹에 변수를 적용하는 것을 확인 할 수 있습니다. 

 

마지막으로 각 그룹들은 서로 부모-자식 관계로 포함하거나 포함되거나의 구조를 가질 수 있습니다. 이렇게 되면 상황에 따라 특정 그룹은 제외하거나 간단하게 특정 그룹을 포함시키는 등의 작업을 수행할 수 있습니다. 

[atlanta]
host1
host2

[raleigh]
host2
host3

[southeast:children]
atlanta
raleigh

각각 atlanta와 raleigh라는 두개의 그룹이 존재합니다. 이때 southeast라는 그룹에 :children이라는 명령을 넣어 해당 내용으로 두 그룹의 그룹명을 작성해줍니다. 결론적으로 southeast는 atlanta와 raleigh 두 그룹을 포함하는 부모 그룹이 됩니다.

 

결론

이번 포스팅에서는 간단하게 Ansible Document를 기준으로 필요한 내용들을 정리해보았습니다. 앞으로 추가 될 인벤토리 문법에 대해서는 해당 포스팅을 업데이트하는 식으로 추가할 예정입니다. 

 

부족한 내용이지만 읽어주셔서 감사합니다. : )

인용글

-----------------------------------------------------------------------------------------------------------------------

업데이트로그

-----------------------------------------------------------------------------------------------------------------------

해당 글은 스스로 연구한 내용을 통한 주관적인 이해를 바탕으로 작성 되었습니다. 수정 할 부분이 있거나, 다른 의견이 있으시다면 언제든지 말씀해주시면 반영하도록 하겠습니다. 읽어 주셔서 감사합니다. 끝으로 불법으로 복제하는 것은 금합니다.

 

반응형

댓글

Designed by JB FACTORY