Ansible Playbook的复用
前言
现在不管干什么,都会先想着有没有现成的直接拿来用的,我想着也是一种程序员思维,这不是“拿来主义”,而是站在巨人的肩膀上思考问题的办法。就像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的使用会变的更高效,也让我们的工作更有效率,希望这篇文章对你有帮助。
人生是个圆,有的人走了一辈子也没有走出命运画出的圆圈,其实,圆上的每一个点都有一条腾飞的切线。
玩代码、玩技术
长按识别二维码,关注“果冻想”
如果觉得还不错,可以点个“在看”哦~

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了