예전 사내에서 ansible을 처음 사용했던 때가 기억이 난다.
모든 RHEL OS 서비스(서버) 호스트들의 패스워드 만료일을 파악해달라는 요청이였는데, 서버 수가 상당했고 수작업으로 하나하나 진행하고 있었다..만, 5분의 1도 못해서 포기하고 ansible로 일괄 작업 및 자동화를 시키기로 결심했다.
chage
명령어를 사용해 나타나는 계정의 정보들중에서 패스워드 만기일을 나타내는 password expires 부분의 데이터만 grep 해와서 보면될듯싶은데..
ansible이 playbook 형식으로도 사용할 수 있지만, 이미 기능들이 생성되어있는 모듈들로도 충분히 진행가능한 기능인듯 싶어 모듈로 진행하였다.
Inventory를 작성하여 host ec2를 명시하였다.
기능 테스트만 진행할하므로 간단히 1개만 설치했다.
ping 테스트를 진행했다. 잘 가는것을 보니 inventory에는 문제가 없다.
playbook 아닌 모듈로 간단하게 원하는 값만 리턴받을 수 있었다.
모듈로 진행하던 도중, 지속적으로 사용하려면 playbook이 효율적이라 playbook으로 전향했다.
하지만 모듈에서는 결과가 바로 나타나지만, playbook에서는 ansible의 success, fail만 나타내지 결과를 가져오지 않았다. (똑같은 명령임에도 … )
그래서 생각한 대책이 값을 파일로 저장하여 읽어오는것.
(chage 명령은 유저의 정보를 모두 생성하는데, 그 중에서 패스워드 만료일만 grep으로 가져왔다.)
상단 = ansible 서버 / 하단 = host 서버
password expires(패스워드 만료일) 이 never(무한) 으로 설정되어있는것을 확인가능하다.
이렇게 결과를 파일로 저장하여 이제는 파일을 읽어들이는 playbook을 생성하여 진행하면(아니면 tasks를 하나 추가하던가) 하나하나의 서버를 만질 필요없이 ansible이 설치된 서버 하나로 host 서버들을 모두 관리할 수 있다.
그런데 요청자가 파일로 저장하여 불러오는것보다는 ansible 서버에서 바로 텍스트로 직접 확인하고 싶다고 한다…
조사하다 보니 플레이북 말고 애드혹(모듈)로 패스워드 만료 정보를 저장하지 않고 바로 나타내게 하는 테스트는 완료했는데, playbook이 없으면 결국 소용이 없다… (한 두번 할것이 아니니..)
게다가 본인은 일반 계정인데 root 계정의 정보를 빼오는 기능도 찾아야한다.
약 1시간의 고난끝에 성공함...
일단 애드혹(모듈)로 구현은 가능하다.
하지만 root 권한을 이용해야 하고, 지속성을 위해 playbook으로 기능을 완성해야한다.
(근데 playbook에서는 기본적으로 결과값이 리턴되지 않는다.)
관련 자료들을 조사하니 tasks값을 register로 변수로 저장 가능하고, 이를 debug 창에 띄울 수 있다고 한다.
게다가 shell 에서 패스워드 정보를 찾는 명령어 앞에 sudo를 붙이니 root 계정의 정보도 가져올 수 있었다.
shell 까지는 동일하나, 이에 대한 리턴값을 register ‘command_output’ 에 저장하고 이를 debug 콘솔에 띄우는 방식으로 진행했다.
원래 debug 창에는 해당 명령의 대한 정보들이 나타나는데, 나는 debug 정보? 응~ 안받아~
리턴값으로 채워~
실제 적용샷. 일일이 찾아봐야하는 유저 패스워드 만료일을 1초만에 볼 수 있다.
매우 만족^^ 이래서 앤서블 하는구나~
'IaC > Ansible_앤서블' 카테고리의 다른 글
[Ansible] wait_for, wait_for_connection 모듈 (동작 대기, 확인) (0) | 2023.06.11 |
---|---|
[Ansible] lineinfile 모듈 (파일 수정) (1) | 2023.06.09 |
[Ansible] fetch, copy 모듈(파일 복사) (0) | 2023.03.06 |
[Ansible] Sysnchronize 모듈(Remote to Remote 파일전송) (0) | 2023.03.04 |
[Ansible] 반복문 (loop, with_item) (0) | 2023.02.28 |