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 ...
随机推荐
- Mybatis order by语句使用<Choose><When>动态拼装无效的原因及解决方法
在使用 <choose> <when test=""> </when> <otherwise> </otherwise> ...
- n的m划分 整数拆分问题
n的m划分 将n划分成若干个不超过m的数(正整数)的和,问有几种划分情况. 现在根据n和m的关系,考虑下面几种情况: 当n=1时,不论m的值为多少,只有一种划分,即{1}: 当m=1时,不论n的值为多 ...
- zookeeper测试代码
package com.sjt.test; import java.util.List; import java.util.concurrent.CountDownLatch; import org. ...
- Linux 平台 tcpdump 抓包
一. 在ecs上准备好mysql客户端命令 二. 开启抓包,抓包方法如下:Linux 平台: 1. 打开一个到ECS的ssh连接,并以root身份登录.在该窗口运行下列命令tcpdump -i any ...
- 【MyBatis-Spring】Mybatis和并入Spring框架
1.参考书籍:<深入浅出MyBatis技术原理与实战> 2.知识基础:Spring.Mybatis.Spring MVC. 配置数据源 配置SqlSessionFactory SqlSes ...
- 【机器学习】K均值算法(II)
k聚类算法中如何选择初始化聚类中心所在的位置. 在选择聚类中心时候,如果选择初始化位置不合适,可能不能得出我们想要的局部最优解. 而是会出现一下情况: 为了解决这个问题,我们通常的做法是: 我们选取K ...
- cerr与cout区别
语言:C++ 一.简介 平常常会用的主要有三个:cout.cerr.clog,首先简单介绍下三者. 这三者在C++中都是标准IO库中提供的输出工具(至于有关的重载问题在此不讨论): cout:写到标准 ...
- linux crontab 命令,最小的执行时间是一分钟,如需要在小于一分钟内重复执行
编写shell脚本实现 crontab.sh #!/bin/bash step=2 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do $ ...
- JPA-学习02
一.主键生成策略 主键:确定一张表的唯一性东西(非空且唯一) 分为:自然主键和代理主键. 生成策略: identity:自增策略(1.值必须是数字,2.数据库支持) sequence:序列策略(同上, ...
- 关于H5在微信获取授权
很尴尬,flag倒了很久,这才来更新. 1.作为一枚小前端,所做的就是把微信获取授权之后的链接和所需的参数给到后端,定好之后只要获取链接就好了.(⊙o⊙)…确实就是这么简单,基本上这种授权是需要后端来 ...