본문 바로가기
Ansible

Ansible-Playbook

by Nirah 2023. 1. 9.

 

플레이북은 쿠버네티스의 yaml파일과 역할이 비슷하다.

목적은 명령어의 스크립트화, 자동화다.

ansible명령어 뭉치를 하나로 테마화 해서 플레이북을 만든다.

이것을 수백 수천대의 서버에 일괄 적용할 수 있는 것이 ansible이다.

 

 

플레이북 도움말

ansible-playbook --help

 

패키지 설치

sudo yum install vim-ansible vim-enhanced

 

플레이북 작성 연습 1

httpd에 대한 설치 및 설정 명령에 대해 플레이북을 만들어보자.

name, host, task 세가지 요소만 있다면 플레이북이 성립한다.

sudo vim test2.yaml

--- # playbook 시작 선언
- name: Playbook Name # Ex. Install packages for webserver ...
  hosts: webservers # 작업대상(single or group)
  tasks:
  - name: Install httpd package # 작업명
    yum: name=httpd state=present # module & arg
  - name: Service for httpd
    service: # module
      name: httpd # arg list
      state: started
      enabled: yes
... # playbook 종료선언

 

플레이북을 실행해보자.

각 관리 노드별로 어떤 단계가 성공했는지 잘 표시된다.

ansible-playbook test2.yaml

curl node1

 

플레이북 작성 연습 2

sudo vi test1.yaml

--- # playbook 시작
- name: Playbook Name # Ex. Install packages for webserver ...
  hosts: webservers # 작업대상(single or group)
  tasks:
  - name: Install httpd package # 작업명
    yum:
      name: "{{ packages }}" # arg를 변수로 지정

    vars: # 변수 지정
      packages:
      - httpd
      - httpd-tools

  - name: Service for httpd
    service: # module
      name: httpd # arg list
      state: started
      enabled: yes
... # playbook 종료선언

ansible-playbook test1.yaml

 

 

트러블슈팅

ansible 실행 시, 퍼미션 오류가 난다면 yaml 파일 권한을 확인해본다.

기본적으로 644 권한을 주거나, 600 이라면 파일 소유자를 ansible 사용자로 변경해야 한다.

sudo chown admin

sudo chown admin

 

 

플레이북 작성 연습 3

vim prac.yaml

--- # playbook 시작선언

#패키지 설치
- name: Name of playbook
  hosts: node1
  tasks:
  - name: Name of tasks
    yum: name=httpd state=present

  - name: Name of tasks1
    yum:
      name: net-tools
      state: present

#서비스 데몬 실행
  - name: start service httpd
    service:
      name: httpd
      state: started
      enabled: true

#index파일 변경
  - name: copy index file
    copy:
      src: "/ansible/index.html" # content: 를 사용하여 간단한 문구만 전달도 가능
      dest: "/var/www/html/"

... # playbook 종료선언

변경할 index 파일 작성

sudo vi index.html

<html>
<body>
Hello, raid-1 IT world!!
</body>
</html>

 

yaml 파일 문법 체크

ansible-playbook --syntax-check prac.yaml

 

문제가 없는 경우

문제가 있는 경우

 

시뮬레이션

ansible-playbook --check prac.yaml

플레이북 실행

ansible-playbook prac.yaml

서비스 데몬 상태 확인

ansible node1 -m shell -a "systemctl status httpd"

 

서비스 enabled 상태 확인

ansible node1 -m shell -a "systemctl list-unit-files | egrep http"

 

curl 확인

curl node1

 

 

 

Handlers


Handler는 함수와 비슷하게 작동한다.

Task가 할 수 있는 일을 똑같이 할 수 있으며,

Playbook의 Task에서 Handler를 호출하게되면 해당 Handler가 호출되어 실행되는 식으로 동작한다.
코드를 짤 때 반복되는 부분을 함수로 만들어서 필요할때마다 가지고 오듯이,

Handler도 비슷하게 작성하면 된다.

 

 

플레이북 작성 연습 3 - 핸들러 추가

인덱스 파일 변경 후 notify - handler를 통해 restart httpd 실행하는 내용 추가

(notify에서 쓰는 이름은 handler에서 정의해줘야 한다)

 

sudo vim prac.yaml

--- # playbook 시작선언

#패키지 설치
- name: Name of playbook
  hosts: node1
  tasks:
  - name: Name of tasks
    yum: name=httpd state=present

  - name: Name of tasks1
    yum:
      name: net-tools
      state: present

#서비스 데몬 실행
  - name: start service httpd
    service:
      name: httpd
      state: started
      enabled: true

#인덱스 파일 변경 + 핸들러 리스타트
  - name: copy index file
    copy:
      src: "/ansible/index.html"
      dest: "/var/www/html/"
    notify: restart httpd # tasks 실행 후 handler 실행

#핸들러 리스타트 정의
  handlers:
  - name: restart httpd
    service:
      name: httpd
      state: restarted

... # playbook 종료선언

 

ansible-playbook --check prac.yaml

 

플레이북 작성 연습 3 - 페이지 체크 추가

name-host-task 를 한 플레이북 안에서 여러번 실행할 수 있다. 다중 플레이

--- # playbook 시작선언

- name: Name of playbook # play 1
  hosts: node1
  tasks:
  - name: Name of tasks
    yum: name=httpd state=present

  - name: Name of tasks1
    yum:
      name: net-tools
      state: present

  - name: start service httpd
    service:
      name: httpd
      state: started
      enabled: true

  - name: copy index file
    copy:
      src: "/ansible/index.html"
      dest: "/var/www/html/"
    notify: restart httpd # tasks 실행 후 handler 실행

  handlers:
  - name: restart httpd
    service:
      name: httpd
      state: restarted

#페이지 체크
- name: Name of playbook-1 # play 2
  hosts: node1
  tasks:
  - name: Check main page
    uri: 
      status_code: 200 # 정상 출력
      url: http://node1
      return_content: yes

... # playbook 종료선언

http 상태 코드

https://developer.mozilla.org/ko/docs/Web/HTTP/Status

 

상태체크시 페이지 체크부분은 스킵된다.

ansible-playbook --check prac.yaml

 

ansible-playbook prac.yaml

 

 

'Ansible' 카테고리의 다른 글

Ansible Roles  (0) 2023.01.10
Ansible-Vault  (0) 2023.01.09
Ansible-Console  (0) 2023.01.09
Ansible 명령어 실습  (0) 2023.01.06
미니프로젝트- awx 설치  (0) 2023.01.05