728x90

플레이북이란


- 사용자가 원하는 내용을 미리 정의해둔 것

- 작업 내용을 파일로 만들어 반복 실행하기

- 멱등성 성질을 가짐 (멱등성: 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질)

- YAML 언어를 사용함 (권장 에디터 툴: ATOM, Sublime Text 3)

 

  1) 멱등성이 적용되지 않은 경우

[root@Ansible-Server ~]# echo -e "[user01]\n172.30.1.13" >> /etc/ansible/hosts
[root@Ansible-Server ~]# echo -e "[user01]\n172.30.1.13" >> /etc/ansible/hosts

[root@Ansible-Server ~]# cat /etc/ansible/hosts
## db-[99:101]-node.example.com
...
[user01]
172.30.1.13
[user01]
172.30.1.13

# 실행한 만큼 적용됨

 

  2) 멱등성이 적용된 경우: 플레이북 적용

플레이북 생성

vi jin.yml

---
- name: Ansible_vim					# 파일 이름
  hosts: localhost					# 실행되는 곳

  tasks:							# 작업
    - name: Add ansible hosts		# 작업 이름
      blockinfile:					# 모듈 이름: 특정 블록을 파일이 기록
          path: /etc/ansible/hosts	# 기록할 위치
          block: |					# 블록을 기록할 시작 포인트
            [user01]
            172.30.1.13

 

플레이북 실행

[root@Ansible-Server ~]# ansible-playbook jin.yml

PLAY [Ansible_vim] ***********************************************************************

TASK [Gathering Facts] *******************************************************************
ok: [localhost]

TASK [Add ansible hosts] *****************************************************************
changed: [localhost]

PLAY RECAP *******************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

# 수정 사항이 없다는 내용
[root@Ansible-Server ~]# ansible-playbook jin.yml

PLAY [Ansible_vim] ***********************************************************************

TASK [Gathering Facts] *******************************************************************
ok: [localhost]

TASK [Add ansible hosts] *****************************************************************
ok: [localhost]

PLAY RECAP *******************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

 

멱등성 성질 확인: 여러 번 실행되더라도 같은 내용이라면 여러 번 기록되지 않음

[root@Ansible-Server ~]# cat /etc/ansible/hosts
...
## db-[99:101]-node.example.com
...
# BEGIN ANSIBLE MANAGED BLOCK
[user01]
172.30.1.13
# END ANSIBLE MANAGED BLOCK

 


플레이북 환경 설정


vim에 색 넣기


 

vim-plug 설치

웹 브라우저에서 ansible-vim 검색하여 접속 또는 아래 링크로 접속

https://github.com/pearofducks/ansible-vim

 

설치 안내 부분에서 vim-plug 클릭

 

해당 부분의 코드를 복사하여 실행

 

[root@Ansible-Server ~]# curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
>     https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

 

ansible-vim 설치

~/.vimrc 생성

[root@Ansible-Server ~]# vi ~/.vimrc

call plug#begin()
Plug 'pearofducks/ansible-vim'
call plug#end()

 

패키지 설치

[root@Ansible-Server ~]# yum install -y vim-enhanced
[root@Ansible-Server ~]# yum install -y git

 

vim 설정

[root@Ansible-Server ~]# vim

# ansible-vim을 다운로드하여 설치 진행
:PlugInstall

# 설치가 완료되면 종료
:q
:q

 

vi 와 vim 모두 vim 호출되도록 설정

# bash 환경 파일 수정

[root@Ansible-Server ~]# vi ~/.bashrc
...
     14 alias vi='vim'
     
     
# 수정한 bash 파일을 적용하기 위해 환경 설정을 다시 불러옴
[root@Ansible-Server ~]# su -
Last login: Thu Jun  2 02:38:42 EDT 2022 from 172.30.1.46 on pts/0

 

색으로 구분하기 편하게 설정된 것을 확인할 수 있음

 


에러를 읽기 편하게 설정


 

설정 전 에러 확인

 

 

설정 파일 수정

# 주석 제거 후 skippy를 debug로 값 변경

[root@Ansible-Server ~]# vi /etc/ansible/ansible.cfg

 74 stdout_callback = debug

 

정렬된 에러 확인

 

 


플레이북 실습


플레이북을 통해 3대의 노드들에 웹 서비스 설치 및 실행

 

nginx.yml 플레이북 생성 및 실행

[root@Ansible-Server ~]# vi nginx.yml
---
- hosts: nginx
  remote_user: root
  tasks:
    - name: install epel-release
      yum: name=epel-release state=latest
    - name: install nginx web server
      yum: name=nginx state=present
    - name: Start nginx web server
      service: name=nginx state=started

[root@Ansible-Server ~]# ansible-playbook nginx.yml -k
SSH password:

 

방화벽 설정

- 플레이북 실행 후 서비스는 실행되고 있지만 방화벽 설정이 되어있지 않아 웹 브라우저에서 접속이 불가함

[root@Ansible-Server ~]# ansible nginx -m shell -a "systemctl stop firewalld" -k
SSH password:
172.30.1.13 | CHANGED | rc=0 >>

172.30.1.12 | CHANGED | rc=0 >>

172.30.1.11 | CHANGED | rc=0 >>

 

웹 브라우저에서 접속하여 nginx 기본 페이지 확인

172.30.1.11

172.30.1.12

172.30.1.13

 

nginx 기본 페이지 변경

  1) index.html 파일 다운로드

# 변경할 index.html 파일 다운로드
[root@Ansible-Server ~]# curl -o index.html https://www.nginx.com
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  397k    0  397k    0     0   228k      0 --:--:--  0:00:01 --:--:--  228k
[root@Ansible-Server ~]# ls -rlt
total 408
-rw-------. 1 root root   1214 Jun  1 23:45 anaconda-ks.cfg
-rw-r--r--. 1 root root    271 Jun  2 05:00 nginx.yml
-rw-r--r--. 1 root root 406732 Jun  2 05:10 index.html

 

  2) 플레이북 수정

[root@Ansible-Server ~]# vi nginx.yml
---
- hosts: nginx			# nginx 대신 all 사용 가능 (all 사용 시 /etc/ansible/hosts의 호스트를 대상으로 함)
  remote_user: root
  tasks:
    - name: install epel-release
      yum: name=epel-release state=latest
    - name: install nginx web server
      yum: name=nginx state=present
    - name: Upload default index.html for web server
      copy: src=index.html dest=/usr/share/nginx/html/ mode=0644	# mode: 보안을 위한 설정
    - name: Start nginx web server
      service: name=nginx state=started

 

  3) 플레이북 실행

[root@Ansible-Server ~]# ansible-playbook nginx.yml -k

 

변경된 nginx 페이지 확인

 

172.30.1.11 접속

 

172.30.1.12 접속

 

172.30.1.13 접속

 

 

 

728x90

+ Recent posts