ansible中的include, include_tasks 和 import_tasks 的差别
include_tasks 和 import_tasks
include
被deprecated了. 建议使用include_tasks
和 import_tasks
.
-
include_tasks
是动态的: 在运行时展开. when只应用一次. 被include的文件名可以使用变量. -
import_tasks
是静态的: 在加载时展开. when在被import的文件里的每个task, 都会重新检查一次. 因为是加载时展开的, 文件名的变量不能是动态设定的.When using static includes, ensure that any variables used in their names are defined in vars/vars_files or extra-vars passed in from the command line. Static includes cannot use variables from inventory sources like group or host vars.
例子
x.yml
:
- hosts: 127.0.0.1
gather_facts: False
tasks:
- set_fact: mode=1
- include_tasks: y.yml
when: mode == "1"
- set_fact: mode=1
- import_tasks: y.yml
when: mode == "1"
y.yml
:
- set_fact: mode="2"
- debug:
msg: >
Display in only `include_tasks`.
`include_tasks` does NOT re-evaluate `mode` for every step.
`import_tasks` DOES re-evaluate condition.
运行ansible-play -b x.yml
后:
debug 的message只在include_tasks
里被执行了.
第2个import_tasks
中的debug被skip掉了.
因为mode
被改变之后, include_tasks
不会重新evaluate mode,import_tasks
会根据变化后的mode值重新evaluate每个task的条件.
示例结果:
TASK [set_fact] *******************************************************
ok: [127.0.0.1]
TASK [include_tasks] **************************************************
included: /root/devops/ansible/y.yml for 127.0.0.1
TASK [set_fact] *******************************************************
ok: [127.0.0.1]
TASK [debug] **********************************************************
ok: [127.0.0.1] => {
"msg": "Display in only `include_tasks`.
`include_tasks` does NOT re-evaluate mode for every step.
`import_tasks` DOES re-evaluate condition\n"
}
TASK [set_fact] *******************************************************
ok: [127.0.0.1]
TASK [set_fact] *******************************************************
ok: [127.0.0.1]
TASK [debug] **********************************************************
skipping: [127.0.0.1]
Archive
- 15 Nov 2020 slimarray: gzip的压缩率, 即时访问
- 28 Oct 2020 200行代码实现基于paxos的kv存储
- 18 Oct 2020 后分布式时代: 多数派读写的'少数派'实现
- 20 Dec 2019 Art of Pull Requests(翻译)
- 21 Nov 2019 掐指算算: 你的CDN多花了几百万?
- 19 Nov 2019 一年的素描练习
- 30 Oct 2019 互联网中对象访问频率的91分布
- 09 Jan 2019 哄好面试官系列-1: 比较2个python dict(多级)是否相同
- 04 Nov 2018 存储中的文件合并策略优化
- 27 Sep 2018 软件工程是个面包机
- 26 Aug 2018 程序员必须知道的事情, 一般人我不告诉他
- 16 Aug 2018 cgexec 无法继承 LD_PRELOAD 环境变量
- 04 Aug 2018 mysql group replication实践记录: 步骤, 问题和注意事项
- 13 Feb 2018 枚举所有整勾股数
- 03 Feb 2018 ansible中的include, include_tasks 和 import_tasks 的差别
- 20 Nov 2017 python 并发subprocess.Popen的坑
- 05 Aug 2017 程序员必读: 摸清hash表的脾性
- 06 May 2017 python 进程内存增长问题, 解决方法和工具
- 01 Feb 2017 xp的分布式系统系列教程之: Erasure-Code: 工作原理, 数学解释, 实践和分析.
- 01 Feb 2017 xp的分布式系统系列教程之: Erasure-Code: 工作原理, 数学解释, 实践和分析.
- 11 Nov 2015 可靠分布式系统基础 Paxos 的直观解释
- 28 Jul 2015 socket关闭: close()和shutdown()的差异
- 17 May 2015 随手改变世界之 git-auto-squash
- 17 Feb 2015 Numbers Programmers Should Know About Hash
- 11 Feb 2015 Vim-tabbar: Simple, stupid and fast tab-bar for VIM
- 24 Jul 2014 1% 慢请求优化
- 31 Jan 2014 Some useful resources
- 31 Jan 2014 jobq.py -- Queue processing engine