(1)Ansible roles 是为了层次化,结构化的组织Playbook。
(2)roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们;
(3)roles一般用于基于主机构建服务的场景中,在企业复杂业务场景中应用的频率很高;
(4)以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个功能切割成片段来执行。
参数 | 含义 |
---|---|
files 存放copy或script等模块调用的函数 | |
tasks | 定义各种task,要有main.yml,其他文件include包含调用 |
handlers | 定义各种handlers,要有main.yml,其他文件include包含调用 |
vars | 定义variables,要有main.yml,其他文件include包含调用 |
templates | 存储由template模块调用的模板文本 |
meta | 定义当前角色的特殊设定及其依赖关系,要有main.yml的文件 |
defaults | 要有main.yml的文件,用于设定默认变量 |
tests | 用于测试角色 |
ansible—galaxy命令工具: Ansible Galaxy 是一个免费共享和下载 Ansible 角色的网站,可以帮助我们更好的定义和学习roles;
ansible-galaxy命令默认与https://galaxy.ansible.com网站API通信,可以查找、下载各种社区开发的
Ansible 角色
ansible-galaxy在 Ansible 1.4.2 就已经被包含了,可以在galaxy.ansible.com网站查询roles
列出所有已经安装的galaxy;
role存放的路径在配置文件ansible.cfg中定义;
roles_path = ~/ansible/roles (默认目录:/etc/ansible/roles)
创建目录结构
创建vsftps(应该是vsftpd,这里打错了)角色
ansible-galaxy list 查看角色;
可以看到vsftpd角色成功创建
示例:下载安装vsftpd,根据变量更改配置文件;
编辑 ~/ansible/roles/vsftps/tasks/main.yml 文件
---
# tasks file for vsftpd
- name: install vsftpd 安装模块
dnf:
name: vsftpd
state: latest
notify: 触发器
- restart vsftpd
- firewalld set
- name: set vsftpd 修改配置模块
lineinfile:
path: /etc/vsftpd/vsftpd.conf
regexp: "anonymous_enable"
line: "anonymous_enable={
{ STATE }}"
notify: 触发器
- restart vsftpd
/
- name: restart vsftpd vsftpd模块
service:
name: vsftpd
state: restarted
enabled: yes
- name: firewalld set 防火墙模块
firewalld:
name: ftp
state: enabeld
permanent: yes
immediate: yes
启用模块 ~/ansible/vsftpd.yml
执行playbook,为node主机安装vsftpd
接下来测试删除所安装的vsftpd,编辑task主任务模块
执行playbook
再次编辑task主任务模块,测试安装vsftpd
执行playbook
为node主机下载httpd,要求如下:
输入域名westos.westos.org ------得到访问测试页westos.westos.org;
输入域名linux.westos.org ------得到访问测试页linux.westos.org;
输入其他默认域名 ------得到访问测试页www.westos.org。
//
---
# vars file for apache
WEBS:
- docroot: /var/www/html
index: www.westos.org
- docroot: /var/www/vhosts/westos.org/westos
name: westos.westos.org
index: westos.westos.org
- docroot: /var/www/vhosts/westos.org/linux
name: linux.westos.org
index: linux.westos.org
//
{
% for vhost in WEBS %}
{
% if vhost['name'] is not defined %}
<VirtualHost _default_:80>
{
%endif%}
{
% if vhost['name'] is defined %}
<VirtualHost *:80>
ServerName {
{
vhost['name']}}
{
%endif%}
DocumentRoot {
{
vhost['docroot']}}
</VirtualHost>
{
% endfor %}
///
---
# tasks file for apache
- name: install apache
dnf:
name: httpd
state: latest
notify:
- restart apache
- firewalld
- name: create documentroot
file:
path: "{
{ item.docroot }}"
state: directory
loop:
"{
{WEBS}}"
- name: create index.html
copy:
dest: "{
{ item.docroot }}/index.html"
content: "{
{ item.index }}"
loop:
"{
{WEBS}}"
- name: set vhost
template:
src: vhosts.conf.j2
dest: /mnt/vhost.conf
notify:
- restart apache
/
---
# handlers file for apache
- name: restart apache
service:
name: httpd
state: restarted
enabled: yes
- name: firewalld
firewalld:
service: http
state: enabled
permanent: yes
immediate: yes
///
执行playbook
可以在node主机查看到虚拟主机的信息
playbook中使用roles#
playbook中使用roles:
---
- hosts: server2
roles:
- role: role1
- role: role2
var1: value1 此处变量会覆盖roles中的定义变量
示例:
---
- hosts: server2
roles:
- role: role1 角色任务
pre_tasks: 角色执行前执行的play
- tasks1
tasks: 普通任务
- tasks2
post_tasks: 在角色和普通任务执行完毕后执行的play
- tasks3
handl
在上一个实验的基础上添加任务的执行顺序,继续编辑任务执行模块 ~/ansible/vsftpd.yml
执行playbook;
可以看到,在角色任务之前之前有任务执行
在角色任务之后有任务执行
首先真机开启火墙,打开地址伪装,使得虚拟机可以上网
ansible—galaxy命令工具:
下载角色:
访问地址角色下载地址:install https://galaxy.ansible.com roles
搜索nginx
复制下方链接
下载角色成功
可以看到所安装的角色
打包apache角色目录,将原本的目录删除进行实验测试
列出角色,此时只有vsftps和刚刚安装的nginx
设置执行任务
安装角色
接下来,我们安装Red Hat角色,Red Hat系统角色允许管理员有效地管理主机的指定属性
安装到了/usr/share/ansible目录下
拷贝到devops用户的ansible目录一份
列出已安装的角色
编辑执行任务,完成node主机同步时间
执行playbook
node主机编辑chrony的默认配置文件 /etc/chrony.conf
成功同步到ansible主机的时间