果冻想
认真玩技术的地方

编写一个Ansible role

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

前言

在这篇《Ansible Playbook的复用》文章中就说到后面会专门总结role的,这篇文章,以及下一篇文章都是专门用来总结role的,来好好的把这个role常用的功能总结全面了,总结透彻了。

role是什么

role是什么?role是Ansible中进行功能复用的利器,它是更高级别的include。它的机制并不复杂,只是自动的加载一些文件,并提供一些自动搜索功能。

实际上role并不是什么高级货,它只是需要我们遵循特定的文件夹结构来开发这个功能,就可以实现一个role,所以,所有的重点都在这个特定的文件夹结构上,要用好、写好一个role,就必须先知道这个role目录结构。

role目录结构

在Ansible中提供了一个脚手架命令来创建role所需的完整目录结构,就不需要我们手动的一个个目录的去创建了:

ansible-galaxy init <role_name>

这样一个完整的role的文件夹结构就出来了:

├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

下面对每个文件和文件夹进行说明:

  • defaults/main.yml:设置默认变量的地方;默认变量的优先级在所有的变量中是最低的,用于定义一些需要被覆盖的变量;
  • files:Ansible中unarchive、copy等模块会自动来这里找文件,从而我们不必写绝对路径,只需写文件名
  • handlers/main.yml:存放tasks中的notify指定的内容
  • meta/main.yml:定义role依赖关系的文件
  • tasks/main.yml:存放playbook的目录,其中main.yml是主入口文件,在main.yml中导入其他yml文件,要采用import_tasks关键字,include将要弃用了
  • templates:存放模板文件;template模块会将模板文件中的变量替换为实际值,然后覆盖到客户机指定路径上
  • tests:测试脚本
  • vars/main.yml:定义role中需要使用到的变量

所以,我们在自己开发一个role的时候,只需要按照这个文件夹结构,把我们写好的东西放进去就OK了,就是这样子!

开发一个简单的role

为了巩固下上面的内容,下面编写一个简单的、无任何实际意义的role,就是单纯的把上面总结的知识点用一遍。这个role就是简单的输出一些信息。

defaults/main.yml文件内容如下:

---

website: www.jellythink.com
author: Yanggd
date: 2012-07-01

vars/main.yml文件内容如下:

---

website: www.jellythink.com

tasks/main.yml文件内容如下:

---

- name: role demo
  debug: msg="website is {{website}}, author is {{author}}, date is {{date}}"

- name: copy demo
  copy:
    src: filelst.txt
    dest: ~/filelst.txt
    owner: yanggd
    group: yanggd
    mode: '0755'
  notify:
    - copy finished

handlers/main.yml文件内容如下:

---

- name: copy finished
  debug: msg="copy finished handler"

然后我们在files文件夹下面再存放一个task中需要用到的filelst.txt文件。这样,我们就开发了一个简单的role,如果你要开发的role非常复杂的时候,可能就需要分多个文件来编写task或者存放变量了,这个时候就需要使用include_varsinclude了。下一篇文章将来说说如何使用这里开发的这个role。

总结

这一篇的重点就是要熟悉role的文件夹结构,以及每个文件夹下面该放下什么内容,知道这些以后,我们就只需要去做填空题就好了,我们也可以去。下一篇我们将重点来说说如何使用role,以及在使用role的过程中的一些注意事项。如果觉的还不错,可以点击下方的“打赏”哦。

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

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

赞(0) 打赏
未经允许不得转载:果冻想 » 编写一个Ansible role
分享到: 更多 (0)

评论 抢沙发

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

玩技术,我们是认真的

联系我们关于果冻

感谢支持果冻想

支付宝扫一扫打赏

微信扫一扫打赏