Linux云计算运维架构师(连载)-自动化运维ansible-13

2021-07-06 11:01:10 浏览数 (1)

1.1 roles与角色扮演

1.1.1 角色简介

角色(roles)是Ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令引入即可。

角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。主要使用场景是代码复用度较高的情况下。

1.1.2 目录结构

一个项目的目录结构一般如图1.7所示。

图1.1 目录结构

其中各目录的功能说明如下。

l files目录

存放由copy或script等模块调用的文件。

l templates目录

templates模块会自动在此目录中寻找Jinja2模板文件。

l tasks目录

任务列表目录,这里应该至少包含一个名为main.yml的文件定义此角色的任务列表。

l handlers目录

定义剧本的处理程序。

l vars目录

变量目录,此处应当包含一个main.yml文件,用于定义此角色用到的变量。

l meta目录

该目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系,注意1.3版本及其以后的版本才支持该项目录。

l default目录

默认变量目录。

下面以远程部署Nginx为例演示其用法。

1.1.1 通过roles远程部署Nginx

1.准备目录结构

首先在Ansible服务器中创建roles目录结构,并创建基础的.yaml文件,便于后续配置使用。具体操作如下所示。

#搭建roles的基础目录结构

[root@ansible ~]# mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p

#创建所需的基本.yaml文件

[root@ansible ~]# touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml

创建完成后,将Ngnx配置文件的主页信息修改为“1234”,便于后续观察实验效果。

#[root@ansible ~]# echo 1234 > roles/nginx/files/index.html

修改完成后,安装Nginx,并将其配置文件移至可套用的/templates文件夹下,代码如下所示。

[root@ansible ~]# yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2

全部设置完成后,查看当前准备完成的目录结构,代码及结果如下所示。

#此处通过tree查看目录结构,没有该软件的可以先安装。

[root@ansible ~]# yum -y install tree

#查看目录结构

[root@ansible ~]# tree roles/

roles/

├── nginx

│ ├── files

│ │ └── index.html

│ ├── handlers

│ │ └── main.yaml

│ ├── tasks

│ │ └── main.yaml

│ ├── templates

│ │ └── nginx.conf.j2

│ └── vars

│ └── main.yaml

└── site.yaml

6 directories, 6 files

2.编写任务

准备工作完成之后,即可开始编写任务,任务内容及含义如下所示。

[root@ansible ~]# vim roles/nginx/tasks/main.yaml

[root@ansible ~]# cat roles/nginx/tasks/main.yaml

---

- name: install epel-release packge #安装epel源,因为nginx的安装需要该源。

yum: name=epel-release state=latest

- name: install nginx packge #安装Nginx

yum: name=nginx state=latest

- name: copy index.html #将更改后的Nginx主页拷贝至客户机

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 #保持Nginx服务开启

service: name=nginx state=started enabled=yes

该.yaml文件中许多内容都是以文件路径代替的。执行时,Ansible将会安装任务中的顺序,从各个文件中读取并拷贝内容。这样做的好处是,当一部分内容需要修改时,只需要修改Ansible服务器中的文件母版,再次执行剧本即可完成所有客户机中的修改任务。注意这里调用的处理程序需要在handlers文件目录下进行定义。

0 人点赞