• 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

      

    欢迎大家关注我的公众号:

  • 相关阅读:
    动态规划算法
    MapReduce学习笔记(4)
    MapReduce学习笔记(3)
    MapReduce学习笔记(2)
    Intellij IDEA output 中文乱码
    Spring实例化bean的三种方式
    Spring框架捕获所有URL的请求的处理方案
    异常解决:Mapped Statements collection does not contain value for …
    Java包 package 的命名规范, 命名规则
    拦截器 Filter : js、css、jpg、png等静态资源不被拦截解决方案
  • 原文地址:https://www.cnblogs.com/mauricewei/p/10054041.html
Copyright © 2020-2023  润新知