[Ansible] 2 . Ansible Playbook 활용 및 예제

2018. 8. 22. 02:34 - mr.november11

[Ansible] 2 . Ansible Playbook 활용 및 예제

https://docs.ansible.com/ansible/2.3/ 내 문서를 Study하며 작성했습니다.

Ansible 은 ADHOC이라는 task 실행 모드를 통해 Inventory 내 서버 대상 원격 명령어 실행을 지원한다.

하지만, Ansible 의 자동화 기능중 가장 필요한 부분은 YAML 언어를 활용한 Playbook이다.

Playbook 구성

Playbook은 YAML 형식으로 작성된다. YALM 문법은 리스트 및 해쉬로 구성되어 있다.

관련 내용은 https://ko.wikipedia.org/wiki/YAML 위키페이지를 한 번 정독하고 Playbook 예제를 따라해본다면 금방 적응할 수 있다.

참고로, YAML에서는 tab을 지원하지 않는다. 매우 불편하다..

Playbook의 목적은 정해진 대상서버(hosts)에 정해진 순서의 작업들(tasks)들을 실행하는 것이다.

ansible 에서 지원하는 다양한 module을 통해 원하는 각 작업(task)을 할 수 있다.

 

Playbook 예제

1) ping

    server2 에 test 라는 유저 계정으로 ping 테스트를 수행하는 playbook

    • hosts는 하나의 서버 또는 그룹을 지정할 수 있다. wilecard(*)와 같은 patten 지정도 가능하다.

    • remote_user는 원격 서버에 접속할 계정명이다.

      playbook 내에 password를 별도로 저장하는 항목이 없는 것으로 봐서 ssh key 설정 후 ansible실행을 일반적인 경우로 생각하는 것 같다.

    • tasks에는 모듈 기반으로 필요한 작업들을 listing 하여 작성할 수 있다.

      playbook 실행은 task 단위로 top->bottom 순으로 실행된다.

      ansible 에서 지원하는 모듈 리스트 및 구체적인 사항은 ansible 공식 document URL을 참고https://docs.ansible.com/ansible/2.3

  1. ansible-playook 명령어를 통해 제작한 playbook을 실행할 수 있다.

    ssh key 설정을 하지 않았다면 -k 옵션을 별도로 지정하면 password 입력을 통해 실행 가능하다.

    개인적인 생각으로 운영자가 개입된 ansible 실행이라면 password 를 입력 후 실행하도록 하는 것이 보안상 좋을 것 같다.

     

 

2) Ping 테스트 후 User 생성

이전에 생성한 playbook에 novebmer11 라는 신규 user를 생성한다.

user 생성은 원격 서버의 root 권한이 필요하기 때문에 sudo 권한이 필요하다.

[Playbook]

 

위에 작성한 playbook을 실행 시 ping check 는 정상적으로 실행되지만, 신규 user 생성의 경우 root 권한이 없기 때문에 아래와 같이 Permission denied 에러가 발생한다. (아래 Error 메시지를 보면 user 모듈에서는 내부적으로 /sbin/useradd 쉘을 실행하여 신규 유저를 생성함을 알 수 있다.)

fatal: [server2]: FAILED! => {"changed": false, "cmd": "/sbin/useradd -m november11", "msg": "[Errno 13] Permission denied", "rc": 13}

 

위 문제를 해결하기 위해 playbook 을 수정한다.

root 권한이 필요한 user 모듈에 become 을 활용하여 sudo 를 수행하도록 한다.

이전 ansible 버전에서는 sudo_user 를 활용했지만 1.9 버전 부터는 become 모듈로 대체되었다.

ansible-playbook 명령어 실행 또한 sudo 패스워드를 입력할 수 있도록 -K 옵션을 추가로 넣어준다.

playbook 실행 시 아래와 같이 Create User task가 정상적으로 수행된 것을 확인할 수 있다.

신규 유저 생성으로 서버 내 변경이 일어났기 때문에 changed 상태로 기록된다.

대상 서버인 server4 에서 /etc/passwd을 통해 november11 계정이 추가되었음을 확인할 수 있다.

 

다른 카테고리의 글 목록

Ansible 카테고리의 포스트를 톺아봅니다