果冻想
认真玩技术的地方

Ansible Playbook的复用

Ansible是一个系列文章,我会尽量以通俗易懂、诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些。
Ansible系列博文直达链接:Ansible入门系列

前言

现在不管干什么,都会先想着有没有现成的直接拿来用的,我想着也是一种程序员思维,这不是“拿来主义”,而是站在巨人的肩膀上思考问题的办法。就像Python,Node,Java这些一样,也都有很多现成的功能封装成的现成模块,供我们直接使用,不仅提升了我们的开发效率,也提升了我们的程序质量。同样的,在Ansible中也支持这种“拿来主义”,我们可以已经复用写好的脚本,在Ansible中,Playbook支持两种重用机制:

  • include语句:重用单个Playbook脚本,使用起来简单、直接;
  • role语句:重用实现特定功能的Playbook文件夹;role是Ansible最为推荐的重用和分享Playbook的方式。

下面就分别对这两种重用机制进行总结。

本文中涉及的试验环境信息如下:

服务器信息如下:
192.168.5.2 # 管理主机
192.168.5.3 # 被管理远程主机
192.168.5.4 # 被管理远程主机

inventory文件内容如下:
[web]
192.168.5.3
192.168.5.4

include语句

include语句是最基本的代码重用机制,主要用于重用任务。就好比我们在开发过程中一样,为了便于管理,避免主文件太过于臃肿,会建立多个文件,每个文件实现一个功能,然后再主文件中include对应文件即可。下面通过两个例子来说说include语句的用法:

  • 举例一(基本用法,不传参数):
---

- hosts: web
  gather_facts: False
  tasks:
    - include: tasks/task1.yaml
    - include: tasks/task2.yaml

tasks/task1.yaml代码内容如下:

---

  - name: task1
    debug: msg="I am task1"

tasks/task2.yaml代码内容如下:

---

  - name: task2
    debug: msg="I am task2"

输出结果如下:

输出结果

  • 举例二(常用用法,传递参数):
---

- hosts: web
  gather_facts: False
  tasks:
    - include: tasks/task.yaml param="I am a task"

tasks/task.yaml代码内容如下:

---

  - name: task1
    debug: msg="{{param}}"

这样可以从外面向include文件中传入参数;不过向include中传递参数的方式有很多种,除了上面的那种,我们还可以这样传:

使用YAML字典传参数:

---

- hosts: web
  gather_facts: False
  tasks:
    - include: tasks/task1.yaml
      vars:
        param: "I am a task"

role语句

虽然include语句用起来还不错,但是role语句是比include语句更强大更灵活;include语句类似于编程语言中的include,而role语句就好比是Package,这样一比较,孰高孰低就一目了然了。

在Ansible中,我们只需要遵循特定的目录结构,就可以实现一个role的定义。所以定义role的关键在于这个目录结构,在这里我先不详细总结role,因为在后面的文章中,我会对role进行专门的总结。

总结

这篇文章两个知识点,通过学会使用复用,让我们在今后的工作中对Ansible的使用会变的更高效,也让我们的工作更有效率,希望这篇文章对你有帮助。如果觉的还不错,可以点击下方的“打赏”哦。

果冻想,认真玩技术的地方。

2020年5月24日,于内蒙古呼和浩特。

赞(0) 打赏
未经允许不得转载:果冻想 » Ansible Playbook的复用
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

玩技术,我们是认真的

联系我们关于果冻

感谢支持果冻想

支付宝扫一扫打赏

微信扫一扫打赏