ansible角色

角色



角色

一、利用角色构造ansible playbook

随着开发更多的playbook,会发现有很多机会重复利用以前编写的playbook中的代码。或许,一个用于为某一应用配置MySQL数据库的play可以改变用途。通过利用不同的主机名、密码和用户来为另一个应用配置MySQL数据库。

但在现实中,这个play可能比较冗长且复杂,有许多包含或导入的文件,以及用于管理各种情况的任务和处理程序。将所有这些代码复制到另一playbook种可能并不简单。

ansible提供了一种方法,能以通用的方式更加轻松地重复利用ansible代码。可以在标准化目录结构中打包所有的任务、变量、文件、模板,以及调整基础架构或部署应用所需的其他资源。只需通过复制相关的目录,将角色从一个项目复制到另外一个项目。然后,只需从一个play调用该角色就能执行。

借助编写好的角色,可以从playbook中向角色传递调整其行为的变量,设置所有站点相关的主机名、IP地址、用户名,或其他在本地需要的具体详细信息。例如,部署数据库服务器的角色可能已编写为支持多个变量,这些变量用于设置主机名、数据库管理员用户和密码,以及需要为安装进行自定义的其他参数。角色的作者也可以确保在选择不在play中设置变量值时,为这些变量设定合理的默认值。

ansible角色具有下列优点:

  1. 角色可以分组内容,从而与他人轻松共享代码
  2. 可以编写角色来定义系统类型的基本要素:Web服务器、数据库服务器、Git存储库,或满足其他用途
  3. 角色使得较大型项目更容易管理
  4. 角色可以由不同的管理员并行开发

除了自行编写、使用、重用和共享角色以外,还可以从其他来源获取角色。一些角色以及包含在rhel-system-rolses软件包中,作为红帽企业Linux的一部分。可以从ansible Galaxy网站获取由社区提供支持的许多角色。

检查ANSIBLE角色结构
ansible角色由字母和文件的标准化结构定义。顶级目录定义角色本身的名称。文件整理到子目录中,子目录按照各个文件在角色中的用途进行命名,如tasks何handlers。files和templates子目录中包含其他YAML文件中的任务引用的文件。

Defaults: 此目录中的main.yml文件包含角色变量的默认值,使用角色时可以覆盖这些默认值。这些变量的优先级较低,应该在play中更改和自定义。
Files: 此目录包含由角色任务引用的静态文件
Handlers: 此目录中的main.yml文件包含角色的处理程序定义,也就是触发器的内容。
Meta: 此目录中的main.yml文件包含与角色相关的信息,如作者、许可证、平台和可选的角色的依赖项。
Tasks: 此目录中的mian.yml文件包含角色的任务定义。
Template: 此目录包含由角色任务引用的jinja2模板(j2模板)
Tests: 此目录可以包含清单和test.yml剧本,可用于测试角色
Vars: 此目录的main.yml文件定义角色的变量值,这些变量通常用于角色内部用途,这些变量的优先级较高,在playbook中使用时不应更改。

在playbook中使用ansible角色
在playbook中使用角色非常简单。

---
- name: test
hosts: node1
roles: 
  - role1
  - role2

对于每个指定的角色,角色任务、角色处理程序、角色变量和角色依赖项将按照顺序导入到playbook中。角色中的任何copy、script、template或include_tasks/import_tasks任务都可引用角色中相关的文件、模板或任务文件,且无需相对或绝对路径名称。ansible将分别在角色的files、templates或tasks子目录中寻找他们。
如果使用roles部分将角色导入到play中,这些角色会为该play定义的任何任务之前运行。
以下示例设置cy的角色变量a1和a2的值,使用cy角色时,任何defaults和vars变量都会被覆盖。
示例:

1、创建角色
Cd  /etc/ansible/roles
Ansible-galaxy  init  wyn
2、在vars里给角色定义变量
Vim  wyn/vars/main.yml
---
# vars file for wyn
a1: 11
a2: 22

3、在tasks目录中的main.yml中写角色的任务

Vim  wyn/tasks/main.yml
---
# tasks file for wyn
- name: test
  debug:
    msg: "{
  {a1}}"

4、在/etc/ansible/目录下创建一个test.yml的playbook来使用wyn角色

---
- name: test1
  hosts: node1
  roles: 
- wyn

此时会发现,我们能够调用角色vars目录下main.yml定义的变量可以被调用
5、在test.yml的playbook中来定义变量

---
- name: test1
  hosts: node1
  roles:
    - role: wyn
      a1: 333

6、执行test.yml,就会发现test.yml中定义的a1变量覆盖了角色中vars目录中定义的变量。

控制执行顺序

对于playbook中的每个play,任务按照任务列表中的顺序来执行,执行完所有任务后,将执行任何通知的处理程序。

在角色添加到play后,角色任务将添加到任务列表的开头。如果play中包含第二个角色,其任务列表添加到第一个角色之后。

角色处理程序添加到play中的方式与角色任务添加到play中相同。每个play定义一个处理程序列表。角色处理程序先添加到处理程序列表,后跟play的handlers部分中定义的任何处理程序。

在某些情形中,可能需要在角色之前执行一些play任务。可以为play配置pre_tasks部分。列在此部分中的所有任务将在执行任何角色之前执行。如果这些任务中有任何一个通知了处理程序,则这些处理程序任务也在角色或普通任务之前执行。\

此外,play也支持post_tasks关键字。这些任务在pla

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值