ansible中include_tasks和import_tasks
简介
本文主要总结下ansible里task调用的方法有哪些和它们的主要区别
随着要管理的服务不断增多,我们又没将task放到roles里,会发现playbook文件越来越大,内容也越来越多,管理起来也很复杂。
这时我们可以将这些task分解到很多文件中,通过include_tasks和import_tasks方法进行task之间的调用,说直白点这两个方法作用就是连接不同文件里的task。
在本篇文章里,假如task_A include task_B,那么我们说task_A是父task,task_B是子task。
区别一
- import_tasks(Static)方法会在playbooks解析阶段将父task变量和子task变量全部读取并加载
- include_tasks(Dynamic)方法则是在执行play之前才会加载自己变量
可能有点懵,举例说明
下面两个例子是test.yml里的task调用test2.yml,不同之处是一个使用import_tasks另一个使用include_tasks
import_tasks:在执行tasks之前,ansible解释器会先加载test.yml里的变量同时再加载test2.yml里的变量,那么ansible_os_family变量会有一个覆盖现象产生,最终的参数应为“BlackHat”,所以当test.yml里执行when语句时,ansible_os_family被判定为“BlackHat”,when的判断结果为false,也就不会调用test2.yml了
执行结果如下,test2.yml里的task都被skip了:
include_tasks:ansible会在完全执行完test.yml里的task后才会加载test2.yml里的变量,所以当执行when语句时,ansible_os_family的参数应为“RedHat”,此时when语句判断结果是true,也就是test2.yml里的tasks会被执行。
将第一张图test.yaml里的import_tasks换成include_tasks,执行结果如下:
我们发现自test2.yml里的task被执行了,并且在test2.yml里ansible_os_family的参数变为了“BlackHat”。
这就是include_tasts和import_tasks方法的第一个区别。
区别二
- include_tasks方法调用的文件名称可以加变量
- import_tasks方法调用的文件名称不可以有变量
这个区别比较简单,直接上示例:
当调用的文件名称有变量时,使用include_tasks方法:
能够正常调用test2.yml,执行结果如下:
当使用import_tasks方法时,执行报错。
ansible也给出了错误原因,当使用static include时,是不能使用变量的:
这就是include_tasts和import_tasks方法的第二个区别。
参考链接
https://docs.ansible.com/ansible/2.5/user_guide/playbooks_reuse.html#differences-between-static-and-dynamic
https://docs.ansible.com/ansible/2.5/user_guide/playbooks_conditionals.html#applying-when-to-roles-imports-and-includes
欢迎大家关注我的公众号:

ansible中include_tasks和import_tasks的更多相关文章
- ansible中的map
ansible中的filter: map ,其实是jinja2中的filter python中 map(func, iter) 返回func与每个元素计算后的迭代器,iter是个可迭代对象 an ...
- ansible中常用模块详解
ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...
- ansible中的playbook详解
首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等 ...
- ansible中playbook使用
palybook使用 ####yaml语法ansible中使用的yaml基础元素:变量Inventory条件测试迭代 playbook的组成结构InventoryModulesAd Hoc Comma ...
- ansible中yaml语法应用
4.yaml语法应用 ansible的playbook编写是yaml语言编写,掌握yaml语法是编写playbook的必要条件,格式要求和Python相似,具体教程参考如下 yaml语言教程 附上一个 ...
- ansible中的常用循环模块with_items
ansible中的循环模块有很多,不过with_items最为常用,且较为简单,循环模块最多的功能就是将重复性的任务简单化,如下例子所示: - hosts: all remote_user: root ...
- ansible中的docker_container模块
docker_container模块 1.docker_container模块主要是用于ansible-playbook操作docker容器的一个模块,使用该模块可以实现批量创建docker容器 An ...
- ansible中tag的用法
Tags 根据官方文档介绍: ansible允许通过自定义的关键字来给playbook中的资源打上标签,然后只运行标签标记的那个task任务. 例如,可能有个完成的OS配置,然后特定的步骤标记为“nt ...
- 二、Ansible中playbook的变量
先看看debug模块的使用: msg:输出调试信息 var:将某个任务执行的输出作为变量传给debug模块,debug模块将其打印输出 verbosity:debug的任务级别 1:在playbo ...
随机推荐
- 把button中文字的省略号放到后面
butt.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail; 加上这句话就可以,uibutton有uilabel的方法
- 201621123002《Java程序设计》第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...
- Numpy and Matplotlib
Numpy介绍 编辑 一个用python实现的科学计算,包括:1.一个强大的N维数组对象Array:2.比较成熟的(广播)函数库:3.用于整合C/C++和Fortran代码的工具包:4.实用的线性代数 ...
- Lambda根据属性名字选择或筛选
using System; using System.Linq.Expressions; internal class LambdaHelper { /// <summary> /// 指 ...
- gulp使用详解
前面整理了 gulp使用入门,本节介绍相关的压缩 1.压缩js文件 步骤同基础步骤,相关可以看入门篇 npm install gulp-uglify --save-dev 引入js压缩库 gulpfi ...
- bootstrap-table使用详解
尴尬,标记果然到了一周之后.... 首先引入文件不必提,引入bootstrap和bootstrap-table <link rel="stylesheet" href=&qu ...
- 20155205 郝博雅 Exp 8 Web基础
20155205 郝博雅 Exp 8 Web基础 一.实验目标 (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单 ...
- REdis命令处理流程处理分析
分析版本:REdis-5.0.4. REdis命令处理流程可分解成三个独立的流程(不包括复制和持久化): 1) 接受连接请求流程: 2) 接收请求数据和处理请求流程,在这个过程并不会发送处理结果给Cl ...
- redis操作(String,Hash,List,Set,其他操作)
一.String操作 String操作,redis中的String在在内存中按照一个name对应一个value来存储.如图: set(name,value,ex=None,px=None,nx=Fal ...
- java(二)Web部分
2.1.1讲一下http get和post请求的区别? GET和POST请求都是http的请求方式,用户通过不同的http的请求方式完成对资源(url)的不同操作.GET,POST,PUT,DELET ...