Ansible 小手册系列 二十三(动态和静态包含)

Ansible有两种可重用内容的操作模式:动态和静态。
在Ansible 2.0阶段使用static来设置操作模式,Ansible 2.4则引入了include和import的概念。

如果您使用import*包含Task(import_playbookimport_tasks等),它将是静态的。
如果您使用include*包含Task(include_tasksinclude_role等),它将是动态的。

使用include包含Task(用于task文件和Playbook级包括)仍然可用,但现在被认为已被弃用。

静态和动态之间的差异


Ansible预处理Playbook解析期间的所有静态导入,而动态包含是在运行期间遇到该任务时处理的。

当涉及Ansible task选项,如tags和when:

对于静态导入,父任务选项将被复制到import中包含的所有子任务。
对于动态包含,任务选项仅在评估时应用于动态任务,不会被复制到子任务。

优缺点


使用include*语句的主要优点是循环。当循环与include*一起使用时,包含的任务或角色将为循环中的每个项目执行一次。

import*语句相比,使用include*有一些限制:

  • 仅存在于动态包含内的标签不会显示在-list-tags输出中。
  • 仅存在于动态包含内的任务不会显示在-list-tasks输出中。
  • 您不能使用notify来触发来自动态包含内部的处理程序名称。
  • 您不能使用--start-at-task开始执行动态包含内的任务。

与动态相比,使用import*也可能有一些限制:

  • 如上所述,循环不能用于导入。
  • 当使用目标文件或角色名称的变量时,不能使用来自库存源(主机/组变量等)的变量。

总而言之,没有使用with的包含,就使用import,使用了with,那就用include。

推荐阅读更多精彩内容

  • 包含 使用include模块来包含foo文件 include 还允许传递变量 动态包含 循环引用3次 还可以使用动...
    lework阅读 6,091评论 2 6
  • ansible-playbook playbook简介 playbook是ansible用于配置,部署,和管理被控...
    bdslinux阅读 9,827评论 1 12
  • 1)安装2)常用模块3)inventory4)playbook(role\tag\template)5) yaml...
    秦记阅读 3,514评论 2 5
  • 在项目中有很多地方用到ansible。最初使用ansible只是为了方便代码部署和模板配置,毕竟手动去30+台机器...
    __七把刀__阅读 10,316评论 6 80
  • 一.ansible (1) ansible: ansible是一款新出现的自动化运维系统,基于python开发并集...
    楠人帮阅读 1,707评论 0 8
  • “素胚勾勒出青花笔锋浓转淡瓶身描绘的牡丹一如你初妆冉冉檀香透过窗心事我了然宣纸上走笔至此搁一半釉色渲染仕女图韵味被...
    枯叶草迷图阅读 267评论 1 6
  • 图-文/追梦人 小食堂得确很小,却很神奇。 说它有多小呢? 小的只能放得下一张桌子。 说它有多神奇呢? 神奇到你见...
    追梦CEO阅读 152评论 0 2
  • 你知道,一切迷失了方向的岁月最终用尽了力气换来半生回忆,一切摇摇欲坠的青春都已经尘埃落定。 忘不掉的是什么,谁也不...
    韩世伊扬阅读 2,036评论 5 8
  • 日子渐行渐远,不知什么时候,心麻木了,思念的滋味越来越淡,有些感觉也已消失殆尽。 也许是岁月的洗练消磨了那些回忆,...
    暖暖的依恋阅读 191评论 0 4
  • 随意的把小乖抱在怀里,拱了拱它毛绒绒的小肚子,它也不恼,只是哼哼唧唧的低声吠着。仙女见状,只好叹了一口气搭着我的后...
    chief风阅读 973评论 0 9