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_taskspost_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。


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

Ansible role使用入门_第1张图片

玩代码、玩技术

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

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

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