ansible之playbook的role用法
roles目录结构
roles目录结构:
playbook.yml
roles/
project/
tasks/
files/
vars/
templates/
handlers/
default/ 不常用
meta/ 不常用
Roles各目录作用
/roles/project/ :项目名称,有以下子目录
files/ :存放由copy或script模块等调用的文件
templates/:template模块查找所需要模板文件的目录
tasks/:定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
vars/:定义变量,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其它文件需在此文件中通过include进行包含
default/:设定默认变量时使用此目录中的main.yml文件
创建role,以NGINX为示例
创建roles文件以及下面的子目录文件
mkdir roles/{nginx,mysql}/{tasks,files} -pv
进到tasks目录下
cd /data/playbook/roles/nginx/tasks
touch user.yml install.yml config.yml service.yml
先写创建用户的yml
vim user.yml
- name: create user
user: name=nginx shell=/sbin/nologin system=yes create_home=no
写安装服务的yml
vim install.yml
- name: install
yum: name=nginx
把本机的NGINX配置文件拷贝到file目录下,修改端口号
cd /data/playbook/roles/nginx/files
cp /etc/nginx/nginx.conf .
vim nginx.conf
server {
listen 9527 default_server;
listen [::]:9527 default_server;
写配置文件的yml
cd /data/playbook/roles/nginx/tasks
vim config.yml
- name: config
copy: src=nginx.conf dest=/etc/nginx/
写启动服务的yml
vim service.yml
- name: service
service: name=nginx state=started enabled=yes
把其他文件包含在这个文件目录里
vim main.yml
- include: user.yml
- include: install.yml
- include: config.yml
- include: service.yml
在roles同级目录下创建nginx_role.yml文件,调用里面写好的nginx配置
vim nginx_role.yml
- host: websrvs
roles:
- role: nginx
创建handlers目录
mkdir handlers
创建main.yml
- name: restart service
service: name=nginx state=restarted
在config.yml中调用handlers里的main.yml的restart service
vim config.yml
- name: config
copy: src=nginx.conf dest=/etc/nginx/
notify: restart service
在files目录下创建index.html的模板文件
vim index.html
<h1>welcome to li</h1>
写配置文件,功能是复制本机的网页模板文件到目标主机
vim data.yml
- name: data file
copy: src=index.html dest=/usr/share/nginx/html
把新写好的数据文件添加到main.yml里
vim main.yml
- include: user.yml
- include: install.yml
- include: config.yml
- include: data.yml
- include: service.yml
创建role,以APACHE为示例
创建文件夹
mkdir httpd
mkdir httpd/{tasks,files}
在tasks目录下创建文件
touch install.yml config.yml data.yml service.yml
先写install.yml
vim install.yml
- name: install
yum: name=httpd
写config.yml,用template模板方式
vim config.yml
- name: config file
template: scr=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
创建templates目录
mkdir templates
cp /etc/httpd/conf/httpd.conf templates/httpd.conf.j2
vim httpd.conf.j2
User {{ username }}
Group {{ groupname }}
Listen {{ httpd_port }}
#把里面的用户名和组,以及监听端口设置成变量
创建VARS目录专门存放变量,在里面创建main.yml,放置之前的变量
mkdir vars
vim main.yml
username: daemon
groupname: daemon
写data.yml,通过相对路径引用隔壁nginx的文件
vim data.yml
- name: data file
copy: src=roles/nginx/files/index.html dest=/var/www/html/
写service.yml
vim service.yml
- name: service
service: name=httpd state=started enabled=yes
创建main.yml,并调准前后顺序
vim main.yml
-include: install.yml
-include: config.yml
-include: data.yml
-include: service.yml