담당자의 업무 효율화를 위해 Ansible 사용 방법과 이를 통한 스크립트 점검 자동화 방법에 대해서 알아보자!!
먼저, Ansible을 사용하기 위해서는 기본적으로 작업 대상(hosts)을 지정하고 작업 내용(playbook)을 저장해야 한다.
작업 대상은 Ansible hosts, 작업 내용은 Ansible Playbook으로 분류되어 지정하면 되며, 실행 방법은 아래와 같다.
- 물론 이외에도 Inventory 등의 기타 다른 옵션이 존재하나, 그것은 더 효율적으로 하기 위한 방법이지 필수 사항은 아니다.(아마(?))
[Ansible Server]
ansible-playbook playbook_test.yml # playbook Name을 지정하면 된다.
Ansible hosts 작성
hosts는 말그대로 Ansible 명령어를 전달할 작업 대상이 된다. 해당 작업 대상에는 python 2 또는 3이 설치되어 있어야 한다.
- Python2는 더이상 지원을 하지 않으므로, Pytho3을 권고하지만 2가 설치된 서버에서도 정상적으로 운영이 된다.
vi /etc/ansible/hosts
[clients] # playbook을 실행할 때 client hosts 그룹을 불러오면 된다.
"Ansible Client IP" # ex) 10.10.10.10
Ansible Playbook 작성
Playbook은 작업을 할 내용으로 이해하면 된다. yml 파일로 생성해야 되며 최초 예시가 없기 때문에 yml 파일부터 생성해야 한다.
아래 예시를 참고하여, 각 상황에 맞게 커스텀하고 사용하면 된다.
touch /etc/ansible/playbook/playbook_test.yml
- name: Ansible_test
hosts: clients # hosts에서 지정한 그룹명
serial : 5 # 5개의 실행을 병렬로 처리하기 위한 설정이다.
tasks:
- name : get hostname # Ansible Client의 hostanme 확인
shell : echo $HOSTNAME
register : hostname
- name : print hostname # hostname 출력
debug:
var: hostname.stdout
- name : make directory # Client에서 /etc/ansible/test 폴더 생성
file :
path: /etc/ansible/test
state: directory
- name : file copy to client server # Server에 있는 test.sh를 Client로 이동
copy:
src: /etc/ansible/playbook/test.sh
dest: /etc/ansible/test
- name: script file exists # test.sh 파일 존재 유무 확인
stat:
path: /etc/ansible/test/test.sh
register: script_result
- name : file permission change # test.sh 파일 실행 권한 추가
file:
path : "/etc/ansible/test/test.sh"
mode : 0700
- name : script exec # 위 작업으로 복사한 test.sh 실행
command: sh /etc/ansible/test/test.sh
when: script_result.stat.exists # test.sh 파일이 존재하면
- name : no script file # test.sh 파일이 없는 경우, debug meg 출력
debug :
msg : "There is no script file"
when : not script_result.stat.exists
- name: script exec result exists # client 특정 파일 존재 여부 확인
stat:
path: /root/{{hostname.stdout}}.txt
register: stat_result
- name : file move to ansible server # client 특정 파일을 server로 전송
fetch:
src: /root/{{hostname.stdout}}.txt
dest: /etc/ansible/playbook/result/{{ansible_hostname}}/test
flat: yes
when: stat_result.stat.exists # client 특정 파일이 존재하면
- name : no reporting file # 특정 파일이 없는 경우, debug msg 출력
debug :
msg : "There is no script reulst file"
when : not stat_result.stat.exists
- name : delete script file # script 파일 삭제
file :
path : /etc/ansible/test/{{item}}
state : absent
with_items :
- test.sh
- name : delete script result file # 특정 파일 삭제
file :
path : /root/{{item}}
state : absent
with_items :
- "{{hostname.stdout}}.txt"
- name : deelete ansible directory # 임시 생성한 directory 삭제
file :
path : /etc/ansible
state : absent
- name: init is_sciprt inspection # 초기화 여부 확인
stat:
path: /etc/ansible
register: init_result
- name : init ansible debug # andible init debug msg 출력
debug :
msg : "success init script inspection"
when : not init_result.stat.exists # /etc/ansible 경로가 존재하지 않으면
위 예시는 Ansible Server의 특정 스크립트 파일을 Ansible Client로 옮긴 다음에
Ansible Client의 특정 파일(=스크립트 결과 파일)을 Ansible Server로 다시 옮기는 형태의 로직으로 되어 있다.
임시 생성할 폴더 위치와 이름, 이동할 스크립트 이름, 특정 파일의 결과만 각 회사에 맞도록 수정한다면
서버 점검을 위한 스크립트 파일을 Ansible로 자동화 할 수 있다!!
모든 담당자분들 힘내세요!!
'기술 이모저모 > [Ops] Devops' 카테고리의 다른 글
[Karpenter] Karpenter를 활용하여 EKS 노드 비용 최적화[1/2] (0) | 2023.03.25 |
---|---|
[Github] Container Image 취약점 점검 Trivy[1/2] (0) | 2022.11.26 |
[Ansible] 서버 스크립트 자동 점검 Ansible 사용 방법 [2/2] (0) | 2022.05.29 |
[Ansible] 서버 스크립트 자동 점검 Ansible 설치 방법 [1/2] (0) | 2022.05.26 |
[Gophish] 악성메일 모의훈련 Gophish 운영 방법[2/2] (2) | 2022.05.18 |