当我们使用包管理工具安装完ansible时,/etc/ansible目录会自动创建。目录下会有inventory对应的hosts文件;ansible的配置文件ansible.cfg;和roles目录。那这个roles目录是干什么的?
roles的意思是角色。其实其作用是将为了完成一件事、一个功能的多个tasks固化成一个roles,以便以后在playbooks中复用。这样需要反复操作且可以固化的一组tasks,就不需要在多个playbook总反复写了,直接调用固化的roles。如中间件安装、服务器初始环境配置。
目录结构目录结构参考:Ansible--Ansible之Roles - 别来无恙- - 博客园
各目录含义
roles: <--所有的角色必须放在roles目录下,这个目录可以自定义位置,默认的位置在/etc/ansible/roles project: <---具体的角色项目名称,比如nginx、tomcat、php files: <--用来存放由copy模块或script模块调用的文件。 templates: <--用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。 tasks: <--此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件。 main.yml handlers: <--此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。 main.yml vars: <--此目录应当包含一个main.yml文件,用于定义此角色用到的变量。 main.yml defaults: <--此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。 main.yml meta: <--此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。 main.yml示例
使用roles安装一台nginx服务器。将演示files、templates、tasks、vars。
最终实现:安装nginx --> 开启8888端口 --> 为8888端口编辑自定义页面
mkdir -p /etc/ansible/roles/nginx-install/{tasks,files,templates,vars}
cd /etc/ansible/roles/nginx-install
(1)编写任务文件
vim tasks/main.yml
安装nginx、添加配置文件、验证&重载nginx
---
- name: yum nginx
yum:
name: nginx
state: latest
- name: enable nginx
service:
name: nginx
enabled: yes
- name: start nginx
service:
name: nginx
state: started
- name: copy web.html file
copy:
src: install-check.html
dest: /etc/nginx/install-check.html
owner: root
group: root
mode: u=rw,g=r,o=r
- name: mkdir config directory
file:
path: /etc/nginx/site-enabled
state: directory
- name: copy config file
template:
src: install-check.conf.j2
dest: /etc/nginx/site-enabled/install-check.conf
- name: nginx config file add "include"
lineinfile:
path: /etc/nginx/nginx.conf
insertafter: 'include /etc/nginx/conf.d/'
line: 'include /etc/nginx/site-enabled/*.conf;'
- name: nginx config test
command: nginx -t
- name: nginx reload
service:
name: nginx
state: reloaded
(2)编写配置文件模板 -- 这是个jinja2模板
vim templates/install-check.conf.j2
server {
listen {{ nginx_port }};
location / {
root {{ nginx_root }};
}
}
(3)编写变量文件
vim vars/main.yml
nginx_port: 8888
nginx_root: /etc/nginx/
(4)编写自定义站点配置文件
vim files/install-check.html
install successful !!!
(5)最终目录结构
[root@ansible-server roles]# tree nginx-install/
nginx-install/
├── files
│ └── install-check.html
├── tasks
│ └── main.yml
├── templates
│ └── install-check.conf.j2
└── vars
└── main.yml



