问题描述
希望开发一套可在Docker容器中运行的可重用playbook集合。他不想在多个容器中共享重复的代码,也不想让容器运行多个playbook。他想要开发这样一个方案:有一个 playbooks/doit.yml
文件和一个 .ansible/collections/playbooks/x/y/playbooks/thing-to-do.yml
playbook,他可以将后者导入到前者中。然而,目前的文档都没有解释如何实现这一点。
解决方案
以下解决方案基于提供的问答数据及已有的知识。如有版本差异,请查阅相关文档以确保正确操作。
使用import_playbook
模块导入playbook
最近在ansible的开发分支中合并了一个新功能,允许使用import_playbook
模块来导入playbook。你可以按照以下步骤来实现:
- 确保你的ansible版本支持这个功能。最好的方式是升级到最新的版本。
- 使用
import_playbook
模块来导入你想要运行的playbook。例如:
“`yaml - import_playbook: your_collection.playbooks.thing-to-do
``
your_collection
其中是你的集合名称,
playbooks.thing-to-do`是你想要导入的playbook的路径。
注意事项
请注意,根据文档提供的信息,playbook的文件名只能包含字母、数字和下划线。如果你想要在集合中导入playbook,确保文件名符合这个规范。
示例
以下是如何使用import_playbook
模块导入playbook的示例:
- name: Run playbook from collection
hosts: localhost
tasks:
- import_playbook: your_collection.playbooks.thing-to-do
在上面的示例中,我们使用import_playbook
模块来导入集合中的playbook,然后在任务中调用它。
其他注意事项
如果你在试验过程中遇到问题,可以查看ansible文档中的这个部分,它可能会提供更多有关如何在集合中运行playbook的信息。
总之,通过使用import_playbook
模块,你可以将一个playbook从集合中导入并在任务中运行它,从而实现你想要的功能。
注意:以上解决方案基于已有知识及提供的问答数据,如果遇到版本差异或操作不成功,请参考官方文档或其他可靠资源,以确保正确操作。