728x90
템플릿
[vagrant@controller template]$ cat test.yml
- hosts: 192.168.100.11
vars:
message: korea
tasks:
- copy:
src: origin.txt
dest: /tmp/copy.txt
- template:
src: origin.txt
dest: /tmp/template.txt
copy 와 template 모듈은 언뜻 보기엔 비슷한 모듈처럼 보이지만 다르다.
template 모듈은 동적인 컨텐츠들을 다룰 때 주로 사용한다 {{ 변수명 }} 에 입력한 변수값이 들어가기 때문이다.
예시를 보면서 더 살펴보자.
ansible 은 기본 템플릿으로 jinja2 를 사용한다.
wp-config.php.j2 템플릿을 생성하고 template 모듈로 관리 노드에 설치해보자.
wp-config.php.j2 템플릿은 아래와 같다. 유의깊게 볼 것은 {{ 변수명 }} 부분이다. 중괄호 안에 들어가는 변수들은 모두 플레이북에서 정의되는 변수들이다.
<?php
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', {{ mysql["dbname"] }} );
/** Database username */
define( 'DB_USER', {{ mysql["dbuser"] }} );
/** Database password */
define( 'DB_PASSWORD', {{ mysql["dbpwd"] }} );
/** Database hostname */
define( 'DB_HOST', 'localhost' );
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
define( 'AUTH_KEY', 'put your unique phrase here' );
define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
define( 'NONCE_KEY', 'put your unique phrase here' );
define( 'AUTH_SALT', 'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
define( 'NONCE_SALT', 'put your unique phrase here' );
$table_prefix = 'wp_';
define( 'WP_DEBUG', false );
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
require_once ABSPATH . 'wp-settings.php';
wordpress_vars.yml 에서 변수를 정의하고 해당 변수들을 아래 wordpress.yml 파일에서 사용한다.
아래는 wordpress.yml 파일이다.
[vagrant@controller ~]$ more wordpress.yml
- hosts: 192.168.100.11
vars_files:
- wordpress_vars.yml
tasks:
- yum:
name: '{{ php["remi_repo"]["pkg"] }}'
state: present
validate_certs: no
- yum_repository:
name: remi-safe
file: remi-safe
mirrorlist: '{{ php["remi_repo"]["safe_mirror"] }}'
description: remi-safe
enabled: no
- yum_repository:
name: remi-php74
file: remi-php74
mirrorlist: '{{ php["remi_repo"]["php74_mirror"] }}'
description: remi-php74
enabled: yes
- rpm_key:
key: '{{ php["remi_repo"]["gpgkey_path"] }}'
state: present
- yum:
name: '{{ wp_pkg }}'
state: installed
- service:
name: httpd
state: started
enabled: yes
- service:
name: mariadb
state: started
enabled: yes
- get_url:
url: '{{ wp_source_url }}'
dest: /home/vagrant
- unarchive:
src: '/home/vagrant/{{ wp_file_name }}'
remote_src: yes
dest: /var/www/html
owner: apache
group: apache
- mysql_db:
name: '{{ mysql["dbname"] }}'
state: present
login_user: root
- mysql_user:
name: '{{ mysql["dbuser"] }}'
password: '{{ mysql["dbpwd"] }}'
state: present
login_user: root
priv: '{{ mysql["dbname"] }}.*:ALL'
- template:
src: /home/vagrant/wp-config.php.j2
dest: /var/www/html/wordpress/wp-config.php
owner: apache
group: apache
다음은 wordpress.yml 에서 사용되는 변수들을 모아놓은 wordpress_vars.yml 파일이다.
[vagrant@controller ~]$ cat wordpress_vars.yml
php:
remi_repo:
pkg: <https://rpms.remirepo.net/enterprise/remi-release-7.rpm>
safe_mirror: <http://cdn.remirepo.net/enterprise/7/safe/mirror>
php74_mirror: <http://cdn.remirepo.net/enterprise/7/php74/mirror>
gpgkey_path: /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
wp_pkg: httpd,php,php-mysql,mariadb,mariadb-server,python2-PyMySQL
wp_version: '5.9.3'
wp_file_name: 'wordpress-{{ wp_version }}.tar.gz'
wp_source_url: '<https://wordpress.org/>{{ wp_file_name }}.tar.gz'
mysql:
dbname: wordpress
dbuser: wpadm
dbpwd: 1234
이제 ansible-playbook 명령어를 실행하면 template 모듈에서 현재 작업 중인 시스템의 wp-config.php.j2 템플릿에 변수들을 입력받고 그 파일을 관리 노드들로 붙여넣는다.
[vagrant@controller ~]$ ansible-playbook wordpress.yml -b
PLAY [192.168.100.11] *******************************************************************************************
TASK [Gathering Facts] ******************************************************************************************
ok: [192.168.100.11]
.
.
.
TASK [mysql_user] ***********************************************************************************************
[WARNING]: Module did not set no_log for update_password
ok: [192.168.100.11]
TASK [template] *************************************************************************************************
changed: [192.168.100.11]
PLAY RECAP ******************************************************************************************************
192.168.100.11 : ok=13 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
실제로 관리 노드에 잘 적용이 됐는지 파일을 열어서 확인해보자.
wp-config.php.j2 에서 {{ 변수명 }} 으로 세팅한 부분에 실제 변수들의 값으로 잘 들어간 것을 확인할 수 있고, 실제로 워드프레스가 제대로 동작하는 것을 확인할 수 있다.
728x90