https://daaa0555.tistory.com/351
위의 Ansible playbook을 기반으로 변수, 작업제어등을 추가하여 더 효율적이고 깔끔하게 정리한다.
# 변수
시스템이 항상 같은 구성을 가지지 않고 경우에 따라 다른 구성을 가져야 할 수 있기 때문에 변수를 선언하여 시스템 간 차이를 처리한다.
devops@control:~$ cat wordpress.yaml
- name: MySQL Deployment
hosts: 192.168.200.101
vars_files:
- vars.yaml
tasks:
- name: Install MySQL Package
apt:
update_cache: true
name: mysql-server, python3-pymysql
state: present
- name: Starting MySQL Service
service:
name: mysql
state: started
enabled: yes
- name: Create Wordpress Database
mysql_db:
login_unix_socket: "{{ db['mysql_sock'] }}"
name: "{{ db['mysql_db_name'] }}"
state: present
- name: Create Wordpress User
mysql_user:
check_implicit_admin: yes
login_unix_socket: "{{ db['mysql_sock'] }}"
name: "{{ db['mysql_user_name'] }}"
password: "{{ db['mysql_user_passwd'] }}"
host: localhost
priv: wpdb.*:ALL,GRANT
state: present
- name: Wordpress Deployment
hosts: 192.168.200.101
vars_files:
- vars.yaml
tasks:
- name: Install Apache2 Package
apt:
name: apache2, php, php-mysql, php-gd, php-mbstring
state: present
- name: Starting Apache2 Service
service:
name: apache2
state: started
enabled: yes
- name: Download Wordpress Source
get_url:
url: "{{ web['wp_url'] }}"
# checksum: "{{ web['wp_checksum'] }}"
dest: "{{ web['wp_tar'] }}"
- name: Unarchive Wordpress Source
unarchive:
src: "{{ web['wp_tar'] }}"
remote_src: true
dest: /var/www/html
- name: Setting Wordpress Database Configuration
copy:
src: /var/www/html/wordpress/wp-config-sample.php
dest: "{{ web['wp_config'] }}"
remote_src: yes
- name: Setting Configuration for DB Name
replace:
path: "{{ web['wp_config'] }}"
regexp: database_name_here
replace: "{{ db['mysql_db_name'] }}"
- name: Setting Configuration for User
replace:
path: "{{ web['wp_config'] }}"
regexp: username_here
replace: "{{ db['mysql_user_name'] }}"
- name: Setting Configuration for Password
replace:
path: "{{ web['wp_config'] }}"
regexp: password_here
replace: "{{ db['mysql_user_passwd'] }}"
변수 파일 (vars.files)를 이용하여 변수 파일을 포함 할 수 있다.
devops@control:~$ cat vars.yaml
db:
mysql_sock: "/var/run/mysqld/mysqld.sock"
mysql_db_name: "wpdb"
mysql_user_name: "wpadm"
mysql_user_passwd: "qwer1234"
web:
wp_url: "https://wordpress.org/wordpress-{{ wp_version }}.tar.gz"
wp_checksum: "https://wordpress.org/wordpress-{{ wp_version }}.tar.gz.sha1"
wp_tar: "/tmp/wordpress-{{ wp_version }}.tar.gz"
wp_config: "/var/www/html/wordpress/wp-config.php"
wp_version: "5.8"
변수 파일은 yaml 형식으로 작성 된다.
db)
mysql_sock: 소켓파일 경로
mysql_db_name: 데이터베이스 이름
mysql_user_name: 사용자 이름
mysql_user_passwd: 사용자 비밀번호
web)
wp_url: wordpress : 다운로드 링크
wp_checksum: wordpress 해시값
wp_tar: wordpress : 파일 압축을 풀 경로
wp_config: wp-config.php 설정 파일 경로
wp_version: wordpress 버전
설치 확인
# 템플릿
동적으로 파일을 수정하는 replace는 많은 내용을 수정하기에 효율적이지 않다.
Jinja2(Ansible은 Python의 웹 템플릿 엔진)는 Ansible에서 변수를 참조해 설정 파일 등을 동적으로 생성한다.
wp-config.php 설정 파일을 복사하여 확장자명이 j2인 파일을 생성하고, 필요한 부분을 수정한다.
변수를 이용해 Apache 포트번호를 정의하고 템플릿을 이용해 배포한다.
wpdeploy.yaml 에서 replace를 대체하여 template 사용한다.
# 핸들러
핸들러는 작업을 실행하고 시스템의 변경(changed)이 있을 때 별도의 작업을 호출하고 실행하는 작업이다.
작업에 변경이 있고, 반드시 알림 (Notify)이 있을때만 실행된다. 알림을 받은 즉시 실행하지 않고, 모든 작업이 완료되고 난 후 작업을 실행한다. 시스템의 멱등성을 제공한다.
devops@control:~/wp$ cat wordpress.yaml
- name: MySQL Deployment
hosts: 192.168.200.101
vars_files:
- ./vars/vars.yaml
tasks:
- name: Install MySQL Package
apt:
update_cache: true
name: mysql-server, python3-pymysql
state: present
when: ansible_facts['os_family'] == "Debian"
- name: Install MariaDB Package
apt:
update_cache: true
name: mariadb-server, mariadb-client
state: present
when: ansible_facts['os_family'] == "RedHat"
- name: Starting MySQL Service
service:
name: mysql
state: started
enabled: yes
- name: Create Wordpress Database
mysql_db:
login_unix_socket: "{{ db['mysql_sock'] }}"
name: "{{ db['mysql_db_name'] }}"
state: present
- name: Create Wordpress User
mysql_user:
check_implicit_admin: yes
login_unix_socket: "{{ db['mysql_sock'] }}"
name: "{{ db['mysql_user_name'] }}"
password: "{{ db['mysql_user_passwd'] }}"
host: localhost
priv: wpdb.*:ALL,GRANT
state: present
- name: Wordpress Deployment
hosts: 192.168.200.102
vars_files:
- ./vars/vars.yaml
tasks:
- name: Install Apache2 Package
apt:
name: apache2, php, php-mysql, php-gd, php-mbstring
state: present
when: ansible_facts['os_family'] == "Debian"
- name: Install Httpd Package
apt:
name: httpd, php, php-mysql, php-gd, php-mbstring
state: present
when: ansible_facts['os_family'] == "RedHat"
- name: Change Apache2 Service Ports
template:
src: jinja/ports.conf.j2
dest: /etc/apache2/ports.conf
notify:
- Restart web services
- name: Starting Apache2 Service
service:
name: apache2
state: started
enabled: yes
- name: Download Wordpress Source
get_url:
url: "{{ web['wp_url'] }}"
# checksum: "{{ web['wp_checksum'] }}"
dest: "{{ web['wp_tar'] }}"
- name: Unarchive Wordpress Source
unarchive:
src: "{{ web['wp_tar'] }}"
remote_src: true
dest: /var/www/html
- name: Setting Wordpress Database Configuration
template:
src: jinja/wp-config.php.j2
dest: "{{ web['wp_config'] }}"
handlers:
- name: Restart web services
service:
name: apache2
state: restarted
작업에 notify를 설정하고 핸들러를 정의해 준다.
# 조건문 (팩트 변수)
play 에서 변수의 값을 실행 할 것인지 실행하지 않을 것인지 조건을 설정한다.
when: ansible_facts['os_family'] == "Debian"
Debian 계열이면 Install MySQL Package , Install Apache2 Package 작업을 실행한다.
when: ansible_facts['os_family'] == "RedHat"
RedHat 계열이면 Install MariaDB Package , Install Httpd Package 작업을 실행한다.
데비안계열, 레드햇계열 의 워드프레스를 배포할 수 있도록 설정한다.
'클라우드 > 앤서블(Ansible)' 카테고리의 다른 글
앤서블 Ansible: Apache + Wordpress + MySQL 배포 3 (0) | 2021.08.09 |
---|---|
앤서블 Ansible: Apache + Wordpress + MySQL 배포 2 (0) | 2021.08.09 |
앤서블 Ansible 작업 제어 6 / 작업 오류 처리 (0) | 2021.08.04 |
앤서블 Ansible AWX (0) | 2021.08.04 |
앤서블 Ansible 작업 제어 5 / 블록 (0) | 2021.08.03 |