本文主要总结下ansible里task调用的方法有哪些和它们的主要区别html
随着要管理的服务不断增多,咱们又没将task放到roles里,会发现playbook文件愈来愈大,内容也愈来愈多,管理起来也很复杂。app
这时咱们能够将这些task分解到不少文件中,经过include_tasks和import_tasks方法进行task之间的调用,说直白点这两个方法做用就是链接不一样文件里的task。ide
在本篇文章里,假如task_A include task_B,那么咱们说task_A是父task,task_B是子task。ui
可能有点懵,举例说明spa
下面两个例子是test.yml里的task调用test2.yml,不一样之处是一个使用import_tasks另外一个使用include_tasks 3d
import_tasks:在执行tasks以前,ansible解释器会先加载test.yml里的变量同时再加载test2.yml里的变量,那么ansible_os_family变量会有一个覆盖现象产生,最终的参数应为“BlackHat”,因此当test.yml里执行when语句时,ansible_os_family被断定为“BlackHat”,when的判断结果为false,也就不会调用test2.yml了htm
执行结果以下,test2.yml里的task都被skip了:blog
include_tasks:ansible会在彻底执行完test.yml里的task后才会加载test2.yml里的变量,因此当执行when语句时,ansible_os_family的参数应为“RedHat”,此时when语句判断结果是true,也就是test2.yml里的tasks会被执行。ip
将第一张图test.yaml里的import_tasks换成include_tasks,执行结果以下:it
咱们发现自test2.yml里的task被执行了,而且在test2.yml里ansible_os_family的参数变为了“BlackHat”。
这就是include_tasts和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
欢迎你们关注个人公众号: