Anisble Roles
Roles基本概述
roles不管是Ansible还是saltstack,我在写一键部署的时候,都不可能把所有的步骤全部写入到一个'剧本'文件当中,
我们肯定需要把不同的工作模块,拆分开来,解耦,那么说到解耦,我们就需要用到roles官方推荐,因为roles的目
录结构层次更加清晰。
例如:我们之前推荐大家写一个base.yml里面写所有基础优化的项目,其实把所有东西摞进去也是很鸡肋的,不如
我们把这些功能全部拆分开,谁需要使用,就调用即可。
建议:每个roles最好只使用一个tasks这样方便我们去调用,能够很好的做到解耦。(SOA)
Roles目录结构规范
## 初始化项目
[Sun Aug 22 01:09:28 root@m01 /ansible_project]
# mkdir roles
[Sun Aug 22 01:09:28 root@m01 /ansible_project]
# cd roles/
[Sun Aug 22 01:34:54 root@m01 /ansible_project/roles]
# ansible-galaxy init nginx
ansible-galaxy init nfs
ansible-galaxy init php
ansible-galaxy init base
....
[Sun Aug 22 01:34:47 root@m01 /ansible_project/roles]
# ll
total 4
drwxr-xr-x 10 root root 154 Aug 18 18:09 base
drwxr-xr-x 10 root root 154 Aug 18 18:48 create_user
drwxr-xr-x 10 root root 154 Aug 18 18:09 keepalived
drwxr-xr-x 10 root root 154 Aug 18 18:11 lb
drwxr-xr-x 10 root root 154 Aug 18 18:09 mariadb
drwxr-xr-x 10 root root 154 Aug 18 18:12 mount
drwxr-xr-x 10 root root 154 Aug 18 18:09 nfs
drwxr-xr-x 10 root root 154 Aug 18 18:07 nginx
drwxr-xr-x 10 root root 154 Aug 18 18:08 php
drwxr-xr-x 10 root root 154 Aug 18 18:44 rsync_client
drwxr-xr-x 10 root root 154 Aug 18 18:08 rsync_server
drwxr-xr-x 10 root root 154 Aug 18 18:08 sersync
-rw-r--r-- 1 root root 3 Aug 18 19:07 site.yml
drwxr-xr-x 10 root root 154 Aug 18 18:10 wordpress
roles 中的依赖关系
roles允许你再使用roles时自动引入其他的roles。role依赖关系存储在roles目录中meta/main.yml文件中。 例如:推送wordpress并解压,前提条件,必须要安装nginx和php,把服务跑起来,才能运行wordpress的页面, 此时我们就可以在wordpress的roles中定义依赖nginx和php的roles
[Sun Aug 22 01:45:51 root@m01 /ansible_project/roles]
# vim wordpress/meta/main.yml
dependencies:
- {role: nginx}
- {role: php}
- {role: mariadb}
#举例: 如果要执行这个Wordpress 那么他走的流程是怎么样的?
首先系统会先查看/wordpress/meta/main.yml这里面的内容 是否有相关的依赖 因为wordpress需要依赖Nginx ,PHP。mariadb, 所以先到Nginx下的/meta/main.yml 去查看有没有相关的依赖,如果有继续找依赖 没有的话 就再看nginx里面的tasks里的main.yml, 这个里面一般装的是included install,config,start nginx ,如果在安装的过程中需要用到template模块中的东西 ,那么它会去nginx/template中去找相关的文件,如果找的东西是copy模块里的东西 ,那么它会去nginx/files中去找相关的文件 所以所有的文件我们都不要写绝对路径,就写文件名就行 ./ 都不需要加, nginx安装完之后 会再去查看php/meta/main.yml里的依赖关系,没有需要依赖的就会在去查看task/main.yml 是copy的就去找files里的 是templatede 就去找templates里的,安装好php之后 ,再继续去mariadb/meta/main.yml查看依赖 同理去找各个文件 要记住在执行任何任务之前 都是需要先去meta下的main.yml去查看依赖,同时注意依赖不要写成死循环,互相依赖. 找完依赖就找tasks, 执行任务过程如果用到变量 那就去vas里去看 handlers里装的是触发器
roles重构rsync
# 1.提前准备rsync配置文件
[Sun Aug 22 02:29:29 root@m01 /ansible_project/roles/rsync_server/templates]
# vim /ansible_project/roles/rsync_server/templates/rsyncd.conf.j2
uid = {{ name }}
gid = {{ name }}
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = {{ rsync_user }}
secrets file = {{ rsync_passwd_file }}
log file = /var/log/rsyncd.log
#####################################
[{{ backup_dir }}]
comment = welcome to oldboyedu backup!
path = /{{ backup_dir }}
# 2.编辑变量文件
[Sun Aug 22 02:34:21 root@m01 /ansible_project/roles/rsync_server]
# vim vars/main.yml
name: www
rsync_user: rsync_backup
rsync_passwd_file: /etc/rsync.passwd
backup_dir: backup
rsync_passwd: 123
# 3.主机清单
[Sun Aug 22 02:40:43 root@m01 /ansible_project/roles/rsync_server]
# vim /etc/ansible/hosts
[web_group]
web01 ansible_ssh_host=172.16.1.7
web02 ansible_ssh_host=172.16.1.8
[db_group]
db01 ansible_ssh_host=172.16.1.51
[nfs_group]
nfs ansible_ssh_host=172.16.1.31
[bakcup_group]
backup ansible_ssh_host=172.16.1.41
[lb_group]
lb01 ansible_ssh_host=172.16.1.5
lb02 ansible_ssh_host=172.16.1.6
# 4.安装rsync
[Sun Aug 22 02:42:31 root@m01 /ansible_project/roles/rsync_server]
# vim tasks/install_rsync.yml
- name: Install Rsync
yum:
name: rsync
# 5.配置rsync
[Sun Aug 22 02:51:36 root@m01 /ansible_project/roles/rsync_server]
# vim tasks/config_rsync.yml
- name: Push Rsync Conf
template:
src: rsyncd.conf.j2
dest: /etc/rsyncd.conf
notify: restart rsync
- name: Create Passwd File
copy:
content: "{{ rsync_user }}:{{ rsync_passwd }}"
dest: "{{ rsync_passwd_file }}"
mode: 0600
- name: Create {{ backup_dir }}
file:
path: /{{ backup_dir }}
state: directory
owner: "{{ name }}"
group: "{{ name }}"
# 6.启动rsync
[Sun Aug 22 02:53:09 root@m01 /ansible_project/roles/rsync_server]
# vim tasks/start_rsync.yml
- name: Start Rsync
service:
name: rsyncd
state: started
enabled: yes
# 7.rsync触发器
[Sun Aug 22 03:00:22 root@m01 /ansible_project/roles/rsync_server]
# vim handlers/main.yml
---
# handlers file for rsync
- name: restart rsync
service:
name: rsyncd
state: restarted
# 8.依赖
[Sun Aug 22 03:17:45 root@m01 /ansible_project/roles/rsync_server]
# vim meta/main.yml
dependencies:
- {role: create_user}
# 9.rsync include
[Sun Aug 22 03:20:16 root@m01 /ansible_project/roles/rsync_server]
# vim tasks/main.yml
---
# tasks file for rsyn
- include_tasks: install_rsync.yml
- include_tasks: config_rsync.yml
- include_tasks: start_rsync.yml
### rsync依赖创建用户
[Sun Aug 22 03:04:41 root@m01 /ansible_project/roles]
#ansible-galaxy init create_user
[Sun Aug 22 03:05:47 root@m01 /ansible_project/roles]
# cd create_user/
[Sun Aug 22 03:06:27 root@m01 /ansible_project/roles/create_user]
# vim vars/main.yml
---
# vars file for create_user
name: www
id: 666
login_shell: /sbin/nologin
create_home: no
# 创建用户和组
[Sun Aug 22 03:11:40 root@m01 /ansible_project/roles/create_user]
# vim tasks/main.yml
---
# tasks file for create_user
- name: Create {{ name }} Group
group:
name: "{{ name }}"
gid: "{{ id }}"
- name: Create {{ name }} User
user:
name: "{{ name }}"
uid: "{{ id }}"
group: "{{ name }}"
shell: "{{ login_shell }}"
create_home: "{{ create_home }}"
## site.yml
[Sun Aug 22 03:36:45 root@m01 /ansible_project/roles]
# vim site.yml
- hosts: all
roles:
- {role: rsync_server,when: ansible_hostname == 'backup'}
导数据库数据
#先提前把数据库里的数据导出来
[Sat Aug 21 20:24:15 root@web01 ~]
# cd /code/
[Sat Aug 21 20:46:54 root@web01 /code]
# ll
total 4
drwxr-xr-x. 5 www www 4096 Aug 21 20:44 wordpress
[Sat Aug 21 20:46:56 root@web01 /code]
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.7G 17G 10% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 14M 473M 3% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/data 19G 1.6G 17G 9% /code/wordpress/wp-content/uploads
[Sat Aug 21 20:48:21 root@web01 /code]
# umount /code/wordpress/wp-content/uploads
[Sat Aug 21 20:49:29 root@web01 /code]
# tar zcf wp.tgz wordpress/
[Sat Aug 21 20:50:52 root@web01 /code]
# ll
total 16052
drwxr-xr-x. 5 www www 4096 Aug 21 20:44 wordpress
-rw-r--r--. 1 root root 16431373 Aug 21 20:50 wp.tgz
#(要去nfs里也要打个包,数据都在这里,上面打包的那个是没有数据的)
[Sat Aug 21 20:53:06 root@nfs ~]
# cd /data/
[Sat Aug 21 20:53:17 root@nfs /data]
# ll
total 0
drwxr-xr-x. 3 www www 16 Aug 21 20:42 2021
[Sat Aug 21 20:55:31 root@nfs /data]
# tar zcf user_data.tgz 2021/
[Sat Aug 21 20:55:53 root@nfs /data]
# ll
total 244
drwxr-xr-x. 3 www www 16 Aug 21 20:42 2021
-rw-r--r--. 1 root root 247661 Aug 21 20:55 user_data.tgz
[Sun Aug 22 05:02:53 root@m01 ~]
# vim mysql.yml
- hosts: db01
tasks:
- name: Dump Mysql Data
mysql_db:
name: wordpress
state: dump
target: /tmp/wordpress.sql
[Sun Aug 22 05:02:11 root@m01 ~]
# ansible-playbook mysql.yml
Last login: Sun Aug 22 04:23:02 2021
(导出之后在db01查询一下导出结果)
[Sun Aug 22 04:24:21 root@db01 ~]
# ll /tmp/
total 784
drwx------ 3 root root 17 Aug 22 04:26 systemd-private-c931f4e16b8a4629a80e181d75811ef7-mariadb.service-H5SjFS
drwx------ 2 root root 6 Aug 22 04:22 vmware-root_5399-4122257852
-rw-r--r-- 1 root root 798880 Aug 22 05:02 wordpress.sql
[Sun Aug 22 05:04:44 root@db01 ~]
# cd /tmp/
[Sun Aug 22 05:07:14 root@db01 /tmp]
# sz wordpress.sql
然后记得除了backup和m01 其他的虚拟机需要还原一下快照 再做其他的
roles重构wordpress
## 先决条件
# 1.下发公钥
[Sun Aug 22 05:02:59 root@m01 ~]
# sh ssh_key.sh
#(上传之前打包好的安装包和数据)
[Sun Aug 22 05:17:11 root@m01 /ansible_project/roles/wordpress]
# cd files/
[Sun Aug 22 05:18:56 root@m01 /ansible_project/roles/wordpress/files]
# rz
[Sun Aug 22 05:19:22 root@m01 /ansible_project/roles/wordpress/files]
# ll
total 17076
-rw-r--r-- 1 root root 247661 Aug 21 20:55 user_data.tgz
-rw-r--r-- 1 root root 798880 Aug 22 05:02 wordpress.sql
-rw-r--r-- 1 root root 16431373 Aug 21 20:50 wp.tgz
# 2.nginx配置文件
[Sun Aug 22 05:21:26 root@m01 /ansible_project/roles/wordpress]
# cd templates/
[Sun Aug 22 05:59:54 root@m01 /ansible_project/roles/wordpress]
# vim templates/blog.wk.com.j2
server {
listen 80;
server_name {{ blog_server_name }};
root /{{ code_dir }}/{{ service_name }};
index index.php;
location ~ \.php$ {
fastcgi_pass unix:{{ socket_file }};
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
# 3.变量文件
[Sun Aug 22 05:58:52 root@m01 /ansible_project/roles/wordpress]
# vim vars/main.yml
---
# vars file for wordpress
blog_server_name: www.wk.com
code_dir: code
service_name: wordpress
socket_file: /dev/shm/php71w.sock
#(这里面的变量可以调用依赖里的变量 因为name这个变量在create_user中已经定义了 在这里就不重复定义了,其他的变量是建议哪个项目的变量 就在哪个项目的vars里定义)
# 4.依赖关系
[Sun Aug 22 05:30:51 root@m01 /ansible_project/roles/wordpress]
# cd meta/
[Sun Aug 22 05:40:13 root@m01 /ansible_project/roles/wordpress/meta]
# vim main.yml
dependencies:
- {role: nginx}
- {role: php}
- {role: mariadb}
# 5.task
[Sun Aug 22 05:56:40 root@m01 /ansible_project/roles/wordpress/tasks]
# vim main.yml
---
# tasks file for wordpress
- name: Create /{{ code_dir }} Dir
file:
path: /{{ code_dir }}
state: directory
owner: "{{ name }}"
group: "{{ name }}"
- name: Unarchive {{ service_name }}
unarchive:
src: wp.tgz
dest: /{{ code_dir }}
owner: "{{ name }}"
group: "{{ name }}"
- name: Push Blog Nginx File
template:
src: "{{ blog_server_name }}.j2"
dest: /etc/nginx/conf.d/{{ blog_server_name }}.conf
notify: restart nginx
- name: chmod var lib
file:
path: /var/lib/nginx
recurse: yes
owner: "{{ name }}"
group: "{{ name }}"
# 6.handlers
[Sun Aug 22 06:08:07 root@m01 /ansible_project/roles/wordpress]
# cd handlers/
[Sun Aug 22 06:08:10 root@m01 /ansible_project/roles/wordpress/handlers]
# vim main.yml
---
# handlers file for wordpress
- name: restart nginx
service:
name: nginx
state: reloaded
## wordpress依赖nginx
[Sun Aug 22 06:12:09 root@m01 /ansible_project/roles]
# cd nginx/
[Sun Aug 22 06:12:12 root@m01 /ansible_project/roles/nginx]
# vim meta/main.yml
dependencies:
- {role: create_user}
# 安装nginx
[Sun Aug 22 06:13:10 root@m01 /ansible_project/roles/nginx]
# vim tasks/install.yml
- name: Install Nginx
yum:
name: nginx
# 配置nginx
[Sun Aug 22 06:14:25 root@m01 /ansible_project/roles/nginx]
# vim tasks/config.yml
- name: Configure Nginx Conf
template:
src: nginx.j2
dest: /etc/nginx/nginx.conf
notify: restart nginx
# 启动nginx
[Sun Aug 22 06:17:06 root@m01 /ansible_project/roles/nginx]
# vim tasks/start.yml
- name: Start Nginx
service:
name: nginx
state: started
enabled: yes
[Sun Aug 22 06:20:51 root@m01 /ansible_project/roles/nginx]
# vim templates/nginx.j2
user www;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
client_max_body_size 200m;
user {{ name }};
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
client_max_body_size 200m;
include /etc/nginx/mime.types;
default_type application/octet-stream;
"templates/nginx.j2" [New] 51L, 1183C written
# include
[Sun Aug 22 06:24:39 root@m01 /ansible_project/roles/nginx]
# vim tasks/main.yml
---
# tasks file for nginx
- include_tasks: install.yml
- include_tasks: config.yml
- include_tasks: start.yml
# handlers
[Sun Aug 22 06:27:24 root@m01 /ansible_project/roles/nginx]
# vim handlers/main.yml
---
# handlers file for nginx
- name: restart nginx
service:
name: nginx
state: reloaded
## wordpress 依赖 php
# php配置文件
[Sun Aug 22 06:29:35 root@m01 /ansible_project/roles/nginx]
# cd ..
[Sun Aug 22 06:34:44 root@m01 /ansible_project/roles]
# cd php/
[Sun Aug 22 06:34:48 root@m01 /ansible_project/roles/php]
# vim templates/www.j2
[www]
user = {{ name }}
group = {{ name }}
listen = {{ socket_file }}
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
#把php的安装包下载到 /ansible_project/roles/php/files这个目录里
# 安装php
[Sun Aug 22 06:36:34 root@m01 /ansible_project/roles/php]
# vim tasks/install.yml
- name: panduan php
shell: 'rpm -qa|grep php'
register: get_php
ignore_errors: yes
- name: Unarchive PHP
unarchive:
src: php.tgz
dest: /tmp
- name: Install PHP
shell: 'rpm -Uvh /tmp/*.rpm'
when: get_php.rc != 0
# 配置php
[Sun Aug 22 06:38:52 root@m01 /ansible_project/roles/php]
# vim tasks/config.yml
- name: Conf PHP
template:
src: www.j2
dest: /etc/php-fpm.d/www.conf
notify:
- restart php
- chmod sock
# 启动php
[Sun Aug 22 06:43:22 root@m01 /ansible_project/roles/php]
# vim tasks/start.yml
- name: Start PHP
service:
name: php-fpm
state: started
enabled: yes
# incllude
[Sun Aug 22 06:52:25 root@m01 /ansible_project/roles/php]
# vim tasks/main.yml
---
# tasks file for php
- include_tasks: install.yml
- include_tasks: config.yml
- include_tasks: start.yml
# handlers
Sun Aug 22 06:47:53 root@m01 /ansible_project/roles/php]
# vim handlers/main.yml
---
# handlers file for php
- name: restart php
service:
name: php-fpm
state: restarted
- name: chmod sock
file:
path: "{{ socket_file }}"
owner: "{{ name }}"
group: "{{ name }}"
### wordpress 依赖mariadb
## 安装mariadb
[Sun Aug 22 06:55:17 root@m01 /ansible_project/roles]
# cd mariadb/
[Sun Aug 22 06:55:28 root@m01 /ansible_project/roles/mariadb]
# vim tasks/install.yml
- name: Install Mariadb
yum:
name:
- mariadb-server
- MySQL-python
## 启动mariadb
[Sun Aug 22 06:56:10 root@m01 /ansible_project/roles/mariadb]
# vim tasks/start.yml
- name: Start Mariadb-server
service:
name: mariadb
state: started
enabled: yes
#include
[Sun Aug 22 08:30:46 root@m01 /ansible_project/roles/mariadb]
# vim tasks/main.yml
---
# tasks file for mariadb
- include_tasks: install.yml
- include_tasks: start.yml
## 导数据 建库 建用户
[Sun Aug 22 07:16:13 root@m01 /ansible_project/roles]
# mv wordpress wordpress_code
[Sun Aug 22 07:16:43 root@m01 /ansible_project/role
# ansible-galaxy init wordpress_data
[Sun Aug 22 07:23:20 root@m01 /ansible_project/roles/wordpress_data]
# vim tasks/main.yml
---
# tasks file for wordpress_data
- name: Push SQL File
copy:
src: wordpress.sql
dest: /tmp
- name: Create {{ service_name }} Database
mysql_db:
name: "{{ service_name }}"
state: present
encoding: utf8
- name: Create {{ service_name }} User
mysql_user:
name: "{{ service_name }}"
priv: "{{ service_name }}.*:ALL"
host: '%'
password: '123'
- name: Import {{ service_name }} Data
mysql_db:
name: "{{ service_name }}"
state: import
target: /tmp/{{ service_name }}.sql
#(修改的)
[Sun Aug 22 07:30:09 root@m01 /ansible_project/roles/wordpress_data]
# mv ../wordpress_code/files/wordpress.sql .
[Sun Aug 22 07:31:11 root@m01 /ansible_project/roles/wordpress_data]
# mv wordpress.sql files/
(这个就是把相关文件放进files中)
[Mon Aug 23 05:10:02 root@m01 /ansible_project/roles/wordpress_data/files]
# ll
total 784
-rw-r--r-- 1 root root 798880 Aug 22 05:02 wordpress.sql
(这一部分是最后添加一个挂载和导数据 )
[Sun Aug 22 08:08:35 root@m01 /ansible_project/roles/wordpress_code]
# cat tasks/main.yml
---
# tasks file for wordpress
- name: Create /{{ code_dir }} Dir
file:
path: /{{ code_dir }}
state: directory
owner: "{{ name }}"
group: "{{ name }}"
- name: Unarchive {{ service_name }}
unarchive:
src: wp.tgz
dest: /{{ code_dir }}
owner: "{{ name }}"
group: "{{ name }}"
- name: Push Blog Nginx File
template:
src: blog.wk.com.j2
dest: /etc/nginx/conf.d/{{ blog_server_name }}.conf
notify: restart nginx
- name: chmod var lib
file:
path: /var/lib/nginx
recurse: yes
owner: "{{ name }}"
group: "{{ name }}"
- name: mount
mount:
path: /code/wordpress/wp-content/uploads
src: 172.16.1.31:/data
fstype: nfs
state: mounted
## 变量定义
[Sun Aug 22 07:06:47 root@m01 /ansible_project/roles/mariadb]
# vim vars/main.yml
---
# vars file for mariadb
service_name: wordpress
#(修改的)
Sun Aug 22 07:26:00 root@m01 /ansible_project/roles]
# cd wordpress_code/
[Sun Aug 22 07:26:14 root@m01 /ansible_project/roles/wordpress_code]
# vim meta/main.yml
dependencies:
- {role: nginx}
- {role: php}
- {role: nfs}
[Sun Aug 22 07:50:49 root@m01 /ansible_project/roles]
# cd wordpress_data/
[Sun Aug 22 07:50:57 root@m01 /ansible_project/roles/wordpress_data]
# vim meta/main.yml
dependencies:
- {role: mariadb}
- {role: nfs}
#(最后又临时修改的)推送数据
[Sun Aug 22 08:17:51 root@m01 /ansible_project/roles]
# ansible-galaxy init wordpress_nfs
[Sun Aug 22 08:18:51 root@m01 /ansible_project/roles]
# cd wordpress_nfs/
[Sun Aug 22 08:20:18 root@m01 /ansible_project/roles/wordpress_nfs]
# vim tasks/main.yml
---
# tasks file for wordpress_nfs
- name: User Data
unarchive:
src: user_data.tgz
dest: /data
owner: "{{ name }}"
group: "{{ name }}"
[Sun Aug 22 08:21:37 root@m01 /ansible_project/roles/wordpress_nfs]
# mv ../wordpress_code/files/user_data.tgz files/
[Mon Aug 23 05:21:30 root@m01 /ansible_project/roles/wordpress_nfs/files]
# ll
total 244
-rw-r--r-- 1 root root 247661 Aug 21 20:55 user_data.tgz
[Sun Aug 22 08:23:04 root@m01 /ansible_project/roles/wordpress_nfs]
# vim meta/main.yml
dependencies:
- {role: nfs}
### wordpress 依赖nfs
#安装nfs
[Sun Aug 22 07:36:18 root@m01 /ansible_project/roles/nfs]
# vim tasks/install.yml
- name: Install NFS
yum:
name: nfs-utils
#配置nfs
[Sun Aug 22 07:36:46 root@m01 /ansible_project/roles/nfs]
# vim tasks/config.yml
- name: Conf NFS
copy:
content: /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
dest: /etc/exports
notify: restart nfs
#启动nfs
[Sun Aug 22 07:38:46 root@m01 /ansible_project/roles/nfs]
# vim tasks/start.yml
- name: Start NFS
service:
name: nfs-server
state: started
enabled: yes
#创建共享目录
[Sun Aug 22 07:45:46 root@m01 /ansible_project/roles/nfs]
# vim tasks/create_dir.yml
- name: Create dir
file:
path: /data
state: directory
owner: "{{ name }}"
group: "{{ name }}"
#include
[Sun Aug 22 07:48:00 root@m01 /ansible_project/roles/nfs]
# vim tasks/main.yml
---
# tasks file for nfs
- include_tasks: install.yml
- include_tasks: config.yml
- include_tasks: start.yml
- include_tasks: create_dir.yml
#handlers
[Sun Aug 22 07:42:34 root@m01 /ansible_project/roles/nfs]
# vim handlers/main.yml
---
# handlers file for nfs
- name: restart nfs
service:
name: nfs-server
state: restarted
#依赖
[Sun Aug 22 07:44:24 root@m01 /ansible_project/roles/nfs]
# vim meta/main.yml
dependencies:
- {role: create_user}
#site.tml
[Sun Aug 22 08:41:17 root@m01 /ansible_project/roles]
# cat site.yml
- hosts: all
roles:
- {role: rsync_server,when: ansible_hostname == 'backup'}
- {role: wordpress_code,when: ansible_hostname is match 'web*'}
- {role: wordpress_data,when: ansible_hostname == 'db01'}
- {role: wordpress_nfs,when: ansible_hostname == 'nfs'}