编写一个Ansible role

前言

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

role是什么

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

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

role目录结构

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

ansible-galaxy init 

这样一个完整的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的过程中的一些注意事项。


人生是个圆,有的人走了一辈子也没有走出命运画出的圆圈,其实,圆上的每一个点都有一条腾飞的切线。

编写一个Ansible role_第1张图片

玩代码、玩技术

长按识别二维码,关注“果冻想”

如果觉得还不错,可以点个“在看”哦~

你可能感兴趣的:(python,javascript,css,java,编程语言)