ansible-roles
1.简介
roles则是在ansible中,playbooks的目录组织结构。
而模块化之后,成为roles的组织结构,易读,代码可重用,层次清晰。
2.目标
通过role远程部署nginx并配置
3.目录结构
[
files/:存储由copy或script等模块调用的文件;
tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用;
vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
templates/:存储由template模块调用的模板文本;
meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;
default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;
准备目录结构
mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml
echo tiger > roles/nginx/files/index.html
yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2
4.编写任务
vim roles/nginx/tasks/main.yaml
---
- name: install nginx packge
yum: name={{ item }} state=latest
with_items:
- epel-release
- nginx
- name: copy index.html
copy: src=index.html dest=/usr/share/nginx/html/index.html
- name: copy nginx.conf template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart nginx
- name: make sure nginx service running
service: name=nginx state=started enabled=yes
5.准备配置文件
vim roles/nginx/templates/nginx.conf.j2
worker_processes {{ ansible_processor_cores }}; //调用内部已知变量
worker_connections {{ worker_connections }}; //自定义变量
6.编写变量
vim roles/nginx/vars/main.yaml
worker_connections: 10240
7.编写处理程序
vim roles/nginx/handlers/main.yaml
---
- name: restart nginx
service: name=nginx state=restarted
8.编写剧本
vim roles/site.yaml
- hosts: host4
roles:
- nginx
9.实施
ansible-playbook site.yaml --syntax-check //测试
ansible-playbook site.yaml //实施剧本
验证hosts
引用变量案例:
# tree
.
├── site.yml
├── templates
│ └── order.j2
└── vars
└── main.yml
2 directories, 3 files
总调度yml文件:
# cat site.yml
---
- hosts: 192.168.19.154
user: root
vars:
- PROJECT: "JAVA"
SWITCH: "ON"
DBPORT: "8080"
tasks:
- name: create{{ PROJECT }}directory
file: path=/data/{{ PROJECT }} state=directory
- name: template transfor java
template: src=order.j2 dest=/data/{{ PROJECT }}/order.conf
注意:这里 - role: template 和 - template 是一样的!
其他yml文件,如下:
# cat templates/order.j2
project: {{ PROJECT }}
switch: {{ SWITCH }}
dbport: {{ DBPORT }}
测试:
# ansible-playbook templates.yml --syntax-check
playbook: templates.yml
执行:
PLAY [192.168.19.154] **********************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.19.154]
TASK [createJAVAdirectory] *****************************************************
changed: [192.168.19.154]
TASK [template transfor java] **************************************************
changed: [192.168.19.154]
PLAY RECAP *********************************************************************
192.168.19.154 : ok=3 changed=2 unreachable=0 failed=0
#cat /data/JAVA/order.conf
project: JAVA
switch: ON
dbport: 8080