0
点赞
收藏
分享

微信扫一扫

自动化运维工具Ansible(11)Role角色

一、介绍

  • role 角色就是把一个 playbook 中的代码按照一定的规则分解开。
  • 模块化编程的思想组织 playbook 的代码。


二、role 的规则

示例:

webservers/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml

webservers 就成为一个 role, 这个 role 的主要功能是部署并配置 nginx。

使用时,每个目录必须包含一个main.yml文件,这个文件应该包含如下目录名称对应的内容:

  • `tasks` -包含角色要执行的任务的主要列表。
  • `handlers` -包含处理程序,此角色甚至该角色之外的任何地方都可以使用这些处理程序。
  • `defaults`-角色的默认变量。
  • `vars`-角色的其他变量。
  • `files` -包含可以通过此角色部署的文件。
  • `templates` -包含可以通过此角色部署的模板。
  • `meta`-为此角色定义一些元数据。


三、role 的制作过程

命名role 的名字为nginx

[root@localhost ~]# mkdir nginx
[root@localhost ~]# mkdir {files,handles,tasks,templates,vars}
[root@localhost ~]# cd nginx/
[root@localhost nginx]# for d in `ls`;
> do
> touch ${d}/main.yml
> done
[root@localhost nginx]# tree
.
├── files
│ └── main.yml
├── handles
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
│ └── main.yml
└── vars
└── main.yml

5 directories, 5 files


files 文件夹存放文件

存放 default.conf 配置文件

自动化运维工具Ansible(11)Role角色_Ansible


handlers 文件夹中的main.yml 文件

[root@localhost nginx]# vim handles/main.yml 
---
- name: reload nginx server
service: name=nginx state=reloaded
when:
- nginxsyntax.rc == 0


tasks 文件夹中的 main.yml 文件

---
- name: create user
user: name={{item}} state=present
with_items: "{{ createuser }} "
- name: 传输仓库文件
copy:
src: /home/nginx.repo
dest: /etc/yum.repos.d/nginx.repo
- name: 安装 nginx
yum: name=nginx state=present
- name: 利用模板文件,设置主配置文件
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
tags: update
notify: reload nginx server
- name: 子配置文件
copy:
src: www.webservers.conf
dest: /etc/nginx/conf.d/
tags: update
notify: reload nginx server
- name: check nginx syntax
shell: /usr/sbin/nginx -t
register: nginxsyntax
tags: update
- name: 启动 nginx 服务
when: nginxsyntax.rc == 0
systemd: name=nginx state=started


vars 文件夹中的 main.yml 文件

---
createuser:
- tomcat
- www
- mysq


templates中的nginx.conf.j2文件

  • worker_processes {{ ansible_processor_vcpus }};
  • add_header x-hostname {{ ansible_hostname }};

自动化运维工具Ansible(11)Role角色_linux_02


四、PlayBook中使用 Role

1. 经典(原始)方式

编译一个 playbool,内容如下:
在 playbook 中给定 `roes:`属性

文件:`deploy-nginx.yml`

- name: use role
hosts: webservers
roles:
- webservers

保证 deploy-nginx.yml 文件的当前目录下有 webservers 角色

ansible-playbook  deploy-nginx.yml

2.  新方式

  • 在 playbook 中给定 `import_role` 属性
  • 这种方式适用于 Ansible 2.4及以上
- name: use rose
hosts: webservers
tasks:
- debug:
msg: "before we run our role"
- import_role:
name: webservers
- debug:
msg: "after we ran our role"


举报

相关推荐

0 条评论