Ansible role使用入门
前言
上一篇文章《编写一个Ansible role》中讲到怎么去开发一个role,这篇文章就着重来说说开发完这个role以后,我们该怎么调用这个role。
本文中涉及的试验环境信息如下:
服务器信息如下:
192.168.5.2 # 管理主机
192.168.5.3 # 被管理远程主机
192.168.5.4 # 被管理远程主机
inventory文件内容如下:
[web]
192.168.5.3
192.168.5.4
role配置
我们需要面对一个问题,就是我们开发的role放在哪里可以被调用到,针对这个问题,在Ansible中有以下规则:
规则一:自动寻找当前目录的roles文件夹
无论Ansible中对roles path是如何设置的,放在当前子目录roles文件夹下的role都会被找到。
规则二:环境变量
ANSIBLE_ROLES_PATH
定义的文件夹
如果定义了环境变量ANSIBLE_ROLES_PATH
,那么Ansible也会搜索该文件夹下的role。
规则三:Ansbile配置文件中roles_path定义的文件夹
在这篇《Ansible配置文件ansible.cfg详解》文章中,有说到roles_path,这个变量允许用户自定义放置role的文件夹。如果有多个目录,则使用冒号:
分隔。
注意:如果没有定义环境变量ANSIBLE_ROLES_PATH
,那么还可以通过配置变量roles_path
来定义role文件夹;但是如果已经定义了环境变量ANSIBLE_ROLES_PATH
,那么roles_path
将失效。
基础调用role
现在就来调用一下上篇文章中开发的那个测试role,调用脚本如下:
---
- hosts: web
gather_facts: False
tasks:
- name: task1
debug: msg="I am task1"
roles:
- roledemo
执行效果就和所有内容在一个yaml脚本文件一样;但是Ansible会先执行role,再执行本文件中包含的任务,那有没有办法修改role和task的执行顺序呢?是的,我们可以通过pre_tasks
和post_tasks
来调整role和task的执行顺序。
---
- hosts: web
gather_facts: False
pre_tasks:
- name: pretask
debug: msg="I am pre task"
tasks:
- name: task1
debug: msg="I am task1"
roles:
- roledemo
post_tasks:
- name: posttask
debug: msg="I am post task"
这样就OK了。
调用带有参数role
我们在调用role时,可以按照要求,传递参数进去,目前有两种常用的传参方式:
把role写成JSON Object的格式,直接传入参数
通过vars关键字使用YAML字典格式传入参数
---
- hosts: web
gather_facts: False
roles:
- {role: roledemo, website: "www.baidu.com"}
- role: roledemo1
vars:
author: Jelly
与when一起使用role
有的时候,需要在满足一定条件的情况下再执行role,这个时候就需要和when
进行配合。比如这样:
---
- hosts: web
roles:
- role: roledemo
when: ansible_default_ipv4.address == "192.168.5.3"
总结
role作为学习Ansible中无法避开的一个内容,也是一个非常重要的内容,通过上一篇和这一篇的总结,整体上把我们常用的一些role的知识点都总结到位了,对于我们的日常工作也是足够了,后续的进阶过程中(一般也没啥必要~),可以多读一些其他牛人写的role。
人生是个圆,有的人走了一辈子也没有走出命运画出的圆圈,其实,圆上的每一个点都有一条腾飞的切线。
玩代码、玩技术
长按识别二维码,关注“果冻想”
如果觉得还不错,可以点个“在看”哦~