1前言
角色目录如下(分别为httpd角色和nginx角色)
handlers/
:至少应该包含一个名为
main.yml
的文件; 其它的文件需要在此文件中通过include
进行包含
vars/
:定义变量,至少应该包含一个名为
main.yml
的文件; 其它的文件需要在此文件中通
过include进行包含
meta/
:定义当前角色的特殊设定及其依赖关系
,
至少应该包含一个名为
main.yml
的 文件, 其它
文件需在此文件中通过include进行包含
default/
:设定默认变量时使用此目录中的
main.yml
文件
roles/appname
目录结构
tasks
目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表; 此文件可以
使用include包含其它的位于此目录中的task文件
files
目录:存放由
copy
或
script
等模块调用的文件;
templates
目录:
template
模块会自动在此目录中寻找
Jinja2
模板文件
handlers
目录:此目录中应当包含一个
main.yml
文件,用于定义此角色用到的各
handler
;
在
handler
中使用
include
包含的其它的
handler
文件也应该位 于此目录中;
vars
目录:应当包含一个
main.yml
文件,用于定义此角色用到的变量;
meta
目录:应当包含一个
main.yml
文件,用于定义此角色的特殊设定及其依赖关 系;
default
目录:为当前角色设定默认变量时使用此目录;应当包含一个
main.yml
文件
2创建httpd角色
mkdir
roles/httpd/tasks
-pv
mkdir
roles/httpd/{handlers,files}
2
>
创建目标文件
cd
roles/httpd/tasks/
touch
install.yml config.yml
service
.yml
3
>
vim
install.yml
-
name: install httpd package
yum:
name
=
httpd
vim
config.yml
-
name: config file
copy:
src
=
httpd.conf
dest
=
/etc/httpd/conf/
backup
=
yes
vim service
.yml
-
name:
start service
service
:
name
=
httpd
state
=
started
enabled
=
yes
4
>
创建
main.yml
主控文件
,
调用以上单独的
yml
文件
,
main.yml
定义了谁先执行谁后执行的顺序
vim
main.yml
-
include: install.yml
-
include: config.yml
-
include:
service
.yml
5
>
准备
httpd.conf
文件
,
放到
httpd
单独的文件目录下
cp
/app/ansible/flies/httpd.conf ../files/
6
>
创建一个网页
vim
flies/index.html
<h1> welcome toyzh home <\h
1
>
7
>
创建网页的
yml
文件
vim
tasks/index.yml
-
name: index.html
copy:
src
=
index.html
dest
=
/var/www/html
8
>
将网页的
yml
文件写进
main.yml
文件中
vim
main.yml
-
include: install.yml
-
include: config.yml
-
include: index.yml
-
include:
service
.yml
9
>
在
handlers
目录下创建
handler
文件
main.yml
vim
handlers/main.yml
-
name:
restart service
httpd
service
:
name
=
httpd
state
=
restarted
10
>
创建文件调用
httpd
角色
cd
/app/ansible/roles
vim
role_httpd.yml
---
# httpd role
-
hosts: appsrvs
remote_user: root
roles:
#
调用角色
-
role: httpd
11
>
查看目录结构
tree .
httpd
├── files
│ ├── httpd.conf
│ └── index.html
├── handlers
│ └── main.yml
└── tasks
├── config.yml
├── index.yml
├── install.yml
├── main.yml
└──
service
.yml
12
> ansible-playbook role_httpd.yml
3创建nginx角色
1
>
创建
nginx
角色目录
mkdir
-pv
/app/ansible/role
cd
/app/ansible/role
mkdir
nginx{tesks,templates,hanslers}
-pv
2
>
创建任务目录
cd
tasks/
touch
insatll.yml config.yml
service
.yml file.yml user.yml
创建
main.yml
文件定义任务执行顺序
vim
main.yml
-
include: user.yml
-
include: insatll.yml
-
include: config.yml
-
include: file.yml
-
include:
service
.yml
3
>
准备配置文件
(centos7
、
8)
ll /app/ansible/role/nginx/templates/
nginx8.conf.j2
4
>
定义任务
vim
tasks/install.yml
-
name: install
yum:
name
=
nginx
vim
tasks/config.yml
-
name: config file
template:
src
=
nginx8.conf.j2
dest
=
/etc/nginx/nginx.conf
when:
ansible_distribution_major_version
==
"8"
notify: restrat
vim
tasks/file.yml
跨角色调用
file.yum
文件
,
实现文件复用
-
name: index.html
copy:
src
=
roles/httpd/files/index.html
dest
=
/usr/share/nginx/html/
vim
tasks/service.yml
-
nmae:
start service
service
:
name
=
nginx
state
=
started
enabled
=
yes
vim
handlers/main.yml
-
name: restrat
service
:
name
=
nginx
state
=
restarted
vim
roles/role_nginix.yml
---
#test rcle
-
hosts: appsrvs
roles:
-
role: nginx
5
>
测试安装
ansible-playbook role_nginx.yml