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 ...
随机推荐
- 7.Redis主线程阻塞原因
7.Redis主线程阻塞原因7.1 发现阻塞7.2 内在原因7.2.1 API或数据结构使用不合理7.2.2 CPU饱和7.2.3 持久化阻塞7.3 外在原因7.3.1 CPU竞争7.3.2 内存交换 ...
- java 实现udp通讯
需求:应用A(通常有多个)和应用B(1个)进行 socket通讯,应用A必须知道应用B的ip地址(在应用A的配置文件中写死的),这个时候就必须把应用B的ip设成固定ip(但是某些时候如更换路由后要重新 ...
- 网址导航18B
[名站] 百度 网易 腾讯 新华 中新 凤凰 [新闻] 联合早报 南方周末 澎湃新闻 [系统] 宋永志 蒲公英 技术员 秋叶系统 装机网 系统之家 [软件] 星愿浏览器 暴风激活 贱人工具箱 微P ...
- CSS碎片
1.外边距不会应用到行内非替换元素的顶端和底端,因为不会改变它的行高,所有没有视觉效果. 而行内非替换元素上下内边距虽然也不改变行高,但却能延伸背景,所有背景可见,可能会重叠其他行. span{mar ...
- Python学习笔记:基础
本文根据廖雪峰的博客,学习整理笔记.主要内容有:基本数据类型,容器数据类型,变量及其作用域,判断及循环语法,函数式编程,面向对象,模块等概念. 数据类型 在python中,能够直接处理的数据类型有以下 ...
- C#写入Oracle 中文乱码问题
这个问题是我刚踏入工作觉得最坑的一个问题,找了很多方法.也问过不少人,但还是没能解决,偶然间返现了新大陆.... 具体问题描述是这样的: 我可以读取Oracle数据库中已有的中文内容,并能正确显示(O ...
- 【Selenium】【BugList6】调用IE,未启用保护模式,报:selenium.common.exceptions.WebDriverException: Message: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones.
>>> driver = webdriver.Ie() 解决方法: 1.打开Ie浏览器 , 工具 ->Internet选项 ->安全 2.去掉4个区域的安全保护模式
- 磨人的Fragment的转换
磨人的Fragment的转换 本次任务是 程序运行之后将第一个Fragment加载出来 然后点击"SHOW NEXT PAGE"切换到第二个Fragment 当再次点击按钮时下方出 ...
- linux密码特殊字符识别
当密码是! @ # 等特殊字符, 用“\” 转译字符:比如密码为123!@#,我们在可以写123\!\@\#
- mysql正则表达式无法识别\d
无法识别\d 修改为[0-9]就ok