목차


Ansible playbook 개요

  • 원문
  • Ansible Playbook
    • Playbook은 Ansible의 구성, 배포 및 오케이스레이션 언어 입니다.
    • YAML 문법을 사용하여 정의
    • Linux기반 권한관리 (user, group) 지원
    • 하나의 Playbook은 N개의 'play'를 정의하며, play의 목적은 여러 호스트들에 잘 정의된 'role'과 'task'를 매핑하는 역할을 맡음
    • 그 외의 기능 들
      • 반복 (with_item, whth nested, until, ...))
      • 조건 분기 (when, register, ...)
      • 다른 playbook 참조 (include, role, ...)
      • 외부 정보 참조
      • 환경 변수, 파일 등 (environment, lookup, vars_prompt, ...)
      • 커스텀 모듈을 이용한 확장

Playbook httpd설치 작성

[devops@work-vm devops-lab]$ cat web-httpd-install.yml

---
- hosts: web
  vars:
    http_port: 80
    max_clients: 200
  become: true
  tasks:
  - name: ensure apache is at the latest version
    yum:
      name: httpd
      state: latest
  - name: write the apache config file
    template:
      src: /home/devops/devops-lab/httpd.conf.j2
      dest: /etc/httpd/conf/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running
    service:
      name: httpd
      state: started
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted

httpd.conf Template 작성

[devops@work-vm devops-lab]$ cat httpd.conf.j2

ServerRoot "/etc/httpd"

Listen {{http_port}}

Include conf.modules.d/*.conf

User apache
Group apache

ServerAdmin root@localhost

<Directory />
    AllowOverride none
    Require all denied
</Directory>

DocumentRoot "/var/www/html"

<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel warn


<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig /etc/mime.types

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8

<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>

EnableSendfile on

IncludeOptional conf.d/*.conf

Playbook 실행

[devops@work-vm devops-lab]$ ansible-playbook web-httpd-install.yml

PLAY [web] ****************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************
ok: [web01-vm]
ok: [web03-vm]
ok: [web02-vm]

TASK [ensure apache is at the latest version] *****************************************************************************************************************
ok: [web01-vm]
ok: [web02-vm]
ok: [web03-vm]

TASK [write the apache config file] ***************************************************************************************************************************
changed: [web02-vm]
changed: [web01-vm]
changed: [web03-vm]

TASK [ensure apache is running] *******************************************************************************************************************************
changed: [web02-vm]
changed: [web03-vm]
changed: [web01-vm]

RUNNING HANDLER [restart apache] ******************************************************************************************************************************
changed: [web01-vm]
changed: [web02-vm]
changed: [web03-vm]

PLAY RECAP ****************************************************************************************************************************************************
web01-vm                   : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web02-vm                   : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web03-vm                   : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Playbook 결과 검증

[devops@work-vm devops-lab]$ ansible web -m shell -a "netstat -nltp | grep httpd"

web01-vm | CHANGED | rc=0 >>
tcp6       0      0 :::80                   :::*                    LISTEN      66600/httpd

web02-vm | CHANGED | rc=0 >>
tcp6       0      0 :::80                   :::*                    LISTEN      67703/httpd

web03-vm | CHANGED | rc=0 >>
tcp6       0      0 :::80                   :::*                    LISTEN      66306/httpd

httpd 설정 변경 및 검증

[devops@work-vm devops-lab]$ cat web-httpd-install.yml

변경한 설정정보

vars:
    http_port: 81


web-httpd-install.yml
---
- hosts: web
  vars:
    http_port: 81
  tasks:
  - name: ensure apache is at the latest version
    yum:
      name: httpd
      state: latest
  - name: write the apache config file
    template:
      src: /home/devops/devops-lab/httpd.conf.j2
      dest: /etc/httpd/conf/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running
    service:
      name: httpd
      state: started
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted


[devops@work-vm devops-lab]$ ansible-playbook web-httpd-install.yml

실행 및 검증 결과
PLAY [web] ****************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************
ok: [web01-vm]
ok: [web02-vm]
ok: [web03-vm]

TASK [ensure apache is at the latest version] *****************************************************************************************************************
ok: [web01-vm]
ok: [web03-vm]
ok: [web02-vm]

TASK [write the apache config file] ***************************************************************************************************************************
changed: [web01-vm]
changed: [web03-vm]
changed: [web02-vm]

TASK [ensure apache is running] *******************************************************************************************************************************
ok: [web01-vm]
ok: [web02-vm]
ok: [web03-vm]

RUNNING HANDLER [restart apache] ******************************************************************************************************************************
changed: [web02-vm]
changed: [web01-vm]
changed: [web03-vm]

PLAY RECAP ****************************************************************************************************************************************************
web01-vm                   : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web02-vm                   : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web03-vm                   : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[devops@work-vm devops-lab]$ ansible web -m shell -a "netstat -nltp | grep httpd"
web01-vm | CHANGED | rc=0 >>
tcp6       0      0 :::81                   :::*                    LISTEN      67642/httpd

web02-vm | CHANGED | rc=0 >>
tcp6       0      0 :::81                   :::*                    LISTEN      68748/httpd

web03-vm | CHANGED | rc=0 >>
tcp6       0      0 :::81                   :::*                    LISTEN      67347/httpd

  • No labels
Write a comment…