안녕하세요, 쯀리입니다.
오늘은 Ansible Playbook이라는 것을 알아보고 Ansible의 가장 큰 특징인 멱등성을 알아보겠습니다.
Playbook이란
https://www.redhat.com/ko/topics/automation/what-is-an-ansible-playbook
Playbook 이란: 자동화 작업의 청사진이며, 이 자동화 작업은 사람의 개입 없이 실행되는 복잡한 IT 작업
언제 사용을 할까요?
설치, 파일전송, 서비스 재시작 시에
다수의 서버에 반복 작업을 처리하는 경우
first-playbook.yml 파일을 생성해주겠습니다.
---
- name: Add an ansible hosts
hosts: localhost
tasks:
- name: Add a ansible hosts # 실행할 작업 이름
blockinfile: # 파일에 block을 추가한다
path: /etc/ansible/hosts # 어느 파일에 설정해줄 것인가?
block: | # | 하이픈은 필수 입니다!
[mygroup] # 실행 서버 그룹을 추가해주겠습니다.
172.17.0.6 # 현재 사용하지 않는 서버의 IP 주소
첫번째 playbook이 생성되었으면 실행해주겠습니다.
ansible-playbook [생성한 playbook.yml 파일]
ansible-playbook first-playbook.yml
mygroup이 추가되었는지 확인 해보겠습니다.
cat /etc/ansible/hosts
멱등성(idempotent)
멱등성이란?
연산을 여러번 적용하더라도 결과가 달라지지 않는 성질,
연산을 여러번 반복하더라도 한번만 수행된 것과 같은 성질
직접 예시로 보여드리겠습니다.
예를들어 임의로 서버를 hosts 파일에 추가해주겠습니다.
echo -e "[mytest]\n172.17.0.6"
이것을 /etc/ansible/hosts 파일에 추가해보겠습니다.
echo -e "[mytest]\n172.17.0.6" >> /etc/ansible/hosts
동일하게 서버가 똑같이 추가되는 것을 확인 할 수 있습니다.
다시 처음과 동일한 환경에서 ansible-playbook으로 실행해보겠습니다.
ansible-playbook first-playbook.yml
mygroup이 추가되는 것을 확인 할 수 있습니다.
다시 한번 동일한 명령어를 실행해보겠습니다.
이미 추가된 내용은 파일 내부에 추가 되지 않는 것을 확인 할 수 있습니다.
실습
1. playbook을 이용해서 devops 서버에만 파일을 복사하기
- name: Ansible Copy Example Local to Remtoe
hosts: devops
tasks:
- name: copying file with playbook
copy:
src: ~/test.txt
dest: ~/playbook-test/
owner: root
mode: 0644
test 파일을 playbook-test로 복사하기
vi playbook-sample1.yml
ansible-playbook playbook-sample1.yml
2. Tomcat 9.xx 설치
url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz
dest: /opt/tomcat-9
mode: 0755
checksum: sha512:{{ tomcat_checksum_value.stdout }}"
~
"playbook-sample2.yml" 22L, 863C
---
- name: Download Tomcat9 from tomcat.apache.org
hosts: all
tasks:
- name: Create a Directory /opt/tomcat9
file:
path: /opt/tomcat-9
state: directory
mode: 0755
- name: Download the Tomcat checksum
get_url:
url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz.sha512
dest: /opt/tomcat-9/apache-tomcat-9.0.74.tar.gz.sha512
- name: Register the checksum value
shell: cat /opt/tomcat-9/apache-tomcat-9.0.74.tar.gz.sha512 | grep apache-tomcat-9.0.74.tar.gz | awk '{ print $1 }'
register: tomcat_checksum_value
- name: Download Tomcat using get_url
get_url:
url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz
dest: /opt/tomcat-9
mode: 0755
checksum: sha512:{{ tomcat_checksum_value.stdout }}"
해설▼
tomcat9가 설치되어있는지 확인해보겠습니다.
ls /opt/tomcat9
vi playbook-sample2.yml
ansible-playbook playbook-sample2.yml
오늘은 Ansible Playbook이라는 것을 알아보았습니다.
다음시간에는 Jenkins를 이용해 Ansible에 연동해 보겠습니다.
참조
'IT 잡지식 > DevOps' 카테고리의 다른 글
Ubuntu 22.04 Docker 설치 (0) | 2023.10.29 |
---|---|
[Jenkins+Ansible] Jenkins에 Ansible 연동하기 (0) | 2023.09.22 |
[Ansible] Ansible 의 기본 명령어 (0) | 2023.09.20 |
[Jenkins] IaC & Ansible 의 이해 (0) | 2023.09.19 |
[Jenkins] PollSCM과 SSH로 다른 서버 연결 (0) | 2023.09.18 |