【小技巧】使用ansible role来简化playbook的编写且易于复用?

playbook是ansible的主要管理方式,也是ansible功能强大的关键所在,playbook通过多个task集合完成一类功能,这类功能的复杂度可以低,低到一个简单的操作也可以用playbook去实现,也可以非常高,编制出非常复杂的功能逻辑。然而,如果在复杂任务下,仅用一个playbook剧本去实现整个复杂逻辑将变得很难,且非常不容易维护,也没办法将这个复杂playbook复用到其他类似功能实现中去。这时就要用到ansible role的方式来管理playbook了,通过它来将复杂任务分解为比较小的部分,将原来复杂的playbook分割为多个文件,大大简化复杂playbook的编写。
ansible role可以看成是一台或者多台主机的某些事情,分开进行playbook编写,通过规范化的目录结构来重新整理复杂playbook,例如我们需要部署一个nginx+was+mysql数据库,我们可以设计以下目录格式:

其中deploy_nginx_was_mysql.yaml是roles的入口文件,例如:

这里就可以根据hosts文件中定义的不同主机组来引用不同的roles进行相关的配置部署,并通过:
ansible-playbook -i hosts deploy_nginx_was_mysql.yaml来调用。
hosts文件中定义了nginx、mysql和was主机组相关信息。
vars目录下的文件中定义playbook中需要引用到的变量。
roles目录下则编制了base_install、mysql_install、was_install、nginx_install等四个不同roles的playbook、配置模板和文件等内容。
通过这样分拆的方式,一个复杂的playbook大大简化、清晰化,而且roles目录下的所有子roles都可以复用到其他项目中去使用,我们的任务就是编写一个个小型的playbook,最后再用role的方式去整合,形成一个大的复杂的功能逻辑。

参与3

0同行回答

“答”则兼济天下,请您为题主分忧!

提问者

jxnxsdengyu
系统工程师江西农信
擅长领域: 存储灾备双活

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2020-06-10
  • 关注会员:3 人
  • 问题浏览:2945
  • X社区推广