ansible的Roles规范

什么是Roles

roles类似于开发框架,能极大的提高代码复用
在这里插入图片描述

role的目录结构

# 查看role的目录结构
[student@workstation]$ tree role_A
role_A
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files

在这里插入图片描述

在这里插入图片描述


role目录结构详解

在这里插入图片描述

创建Roles

使用ansible-galaxy创建roles
在这里插入图片描述


创建一个名称为test的role

# 创建名称为test的role
[student@workstation roles]$ ansible-galaxy init test
- test was created successfully

# 查看test的role结构
[student@workstation roles]$ tree test
test
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files

修改Role

在这里插入图片描述


在Playbook中调用Role

要在ansible.cfg中配置roles_path

# roles_path配置
roles_path=./roles:/usr/share/ansible/roles:/etc/ansible/roles 

在这里插入图片描述
在这里插入图片描述


向role中传递变量

- hosts: remotenode
  roles: 
  	- role: role1
  	- role: role2
 	  var1: var1	#role2的var1变量
 	  var2: var2	#role2的var2变量

控制tasks执行顺序

pre_tasks > role_task > play_task > post_task

  • 对于playbook中的每个play,task执行是按照task顺序的,在task执行完毕之后,handlers将会被执行。
  • 当role被添加进play的时候,role的task是被添加到所有的playbook的task之前的,如果第二个role添加了,它的task被添加在第一个role之后。
  • role的handlers一样是在role的play之下。每个play定义了一个handlers列表,role的handlers被添加到handlers列表的最前端,之后的handlers是在play下定义的handlers。
  • 在某些场景下,在roles之前执行某些play的task是必须的,为了支持这种场景,你可以使用pre_tasks,在pre_tasks定义的task可以在role之前被执行。如果在pre_tasks中定义的task通知了handler,那么这些hander也会比在role中的handlers提前运行。
  • play也支持post_tasks,post_tasks在正常定义的play中的tasks之后执行。

rhel-system-roles介绍

系统roles就是红帽官方写的roles

  • rhel-system-roles.kdump(稳定)
  • rhel-system-roles.network(稳定)
  • rhel-system-roles.selinux(稳定)
  • rhel-system-roles.timesync(稳定)
  • rhel-system-roles.postfix(测试版)
  • rhel-system-roles.firewall(开发阶段)
  • rhel-system-roles.tuned(开发阶段)

安装rhel-system-roles

# 安装rhel-system-roles
yum install rhel-system-roles -y

查看rhel-system-roles目录结构

# 查看rhel-system-roles目录结构
[student@workstation]$ ls -l /usr/share/ansible/roles/
total 0
lrwxrwxrwx.  1 root root  23 Jan 14  2019 linux-system-roles.kdump -> rhel-system-roles.kdump
lrwxrwxrwx.  1 root root  25 Jan 14  2019 linux-system-roles.network -> rhel-system-roles.network
lrwxrwxrwx.  1 root root  25 Jan 14  2019 linux-system-roles.postfix -> rhel-system-roles.postfix
lrwxrwxrwx.  1 root root  25 Jan 14  2019 linux-system-roles.selinux -> rhel-system-roles.selinux
lrwxrwxrwx.  1 root root  26 Jan 14  2019 linux-system-roles.timesync -> rhel-system-roles.timesync
drwxr-xr-x.  9 root root 173 Nov  5 00:15 rhel-system-roles.kdump
drwxr-xr-x.  8 root root 196 Nov  5 00:15 rhel-system-roles.network
drwxr-xr-x.  6 root root 114 Nov  5 00:15 rhel-system-roles.postfix
drwxr-xr-x.  7 root root 139 Nov  5 00:15 rhel-system-roles.selinux
drwxr-xr-x. 10 root root 188 Nov  5 00:15 rhel-system-roles.timesync

查看项目结构

# 查看项目结构
[student@workstation rhel-system-roles.kdump]$ tree
.
├── COPYING
├── defaults
│   └── main.yml
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.html
├── README.md
├── semaphore
├── tasks
│   ├── main.yml
│   └── ssh.yml
├── templates
│   ├── kdump.conf.j2
│   └── kdump.j2
├── tests
│   ├── roles
│   │   └── kdump -> ../..
│   ├── tests_default.yml
│   └── tests_ssh.yml
└── vars
    └── main.yml

ansible-galaxy命令行用法

在这里插入图片描述


ansible-galaxy搜索role

# 搜索config_mysql的role
ansible-galaxy search config_mysql

ansible-galaxy安装role

# ansible-galaxy安装role
ansible-galaxy install alikins.mysql

使用requirements.yml文件安装role

创建requirements.yml文件

# 从 Ansible Galaxy 安装role
- src: dfarrell07.opendaylight

# 从 GitHub 安装role
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight

# 从特定 git 分支安装role
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: origin/master

# 在 GitHub 的特定标签处安装role
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: 1.0.0

# 在 GitHub 的特定提交处安装role
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: <commit hash>

使用ansible-galaxy install -r安装role

# 使用ansible-galaxy安装role
ansible-galaxy install -r requirements.yml

ansible-galaxy安装role集合

# 安装role集合 -p 是安装到哪个目录
ansible-galaxy collection install nginxinc.nginx_core -p .

ansible-galaxy查看role详情

# ansible-galaxy查看role详情
[jp root ~]# ansible-galaxy info alikins.mysql

Role: alikins.mysql
        description: MySQL server for RHEL/CentOS and 

下载roles

在这里插入图片描述


ansible-galaxy管理下载的role

# 查看下载的role
## 要在ansible.cfg指定role_path的路径
[jp root ~]# ansible-galaxy list
- alikins.mysql, 0.99.2

# 删除下载的role
[jp root ~]# ansible-galaxy remove alikins.mysql
- successfully removed alikins.mysql

## 再查看role列表,已经没有alikins.mysql了
[jp root ~]# ansible-galaxy list
# /root/.ansible/roles
# /usr/share/ansible/roles
# /etc/ansible/roles

项目示例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


练习题:第五题

在这里插入图片描述
解题方法:
在这里插入图片描述


练习题:第七题

在这里插入图片描述
解题方法:

---
- name: 调用负载均衡role
  hosts: balancers
  roles:
    - balancer
# 注意还要调用一次apache这个role才会执行成功
- name: 调用phpinfo role
  hosts: webservers
  roles:
    - phpinfo
    - apache
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值