我写了一本剧本和一堆模块。
现在我想在我的下一个剧本中重复使用相同的模块来完成不同的项目。
我真的想将这些模块推送到公共git存储库,然后以某种方式告诉ansible使用git存储库中的模块。
(有点像npm package.json引用github)
我似乎无法找到有关如何执行此操作的任何文档。
目前,我正在使用一种解决方法,我告诉人们npm安装存储库,然后定义ANSIBLE_LIBRARY变量。
如何告诉playbook从github存储库或其他一些远程位置加载模块?
答案 0 :(得分:4)
实际上,模块可以在很长一段时间内嵌套在角色中。从Ansible 2开始,大多数插件都可以实现这一点。
modules& plugins需要存储在角色内部与playbook级别相同。模块进入library
,插件进入*_plugins
(action_plugins
,callback_plugins
,filter_plugins
等等。
要使模块/插件可用,角色必须应用于剧本(或作为另一个角色的依赖项添加)
只有我知道的异常是可变插件,这完全有道理。因为在读取清单时会执行变量插件,这在插入角色之前就会执行。
vars_plugins
仍然可以在角色中分发,但是path needs to be added in the ansible.cfg
。幸运的是,您还可以在路径中使用通配符:
vars_plugins = roles/*/vars_plugins
不,所有这些都没有以任何方式记录。 :)
最后,要分配角色,您可以使用Ansible Galaxy:
ansible-galaxy install foo
直接使用git没有错。 Ansible Galaxy实际上只是一个安装git存储库的工具。但由于Galaxy是Ansible标准,我建议至少提供Galaxy兼容格式。如何安装与项目角色分开的Galaxy角色是一个很好的(最好的)练习here。
以下是动作插件的示例:https://galaxy.ansible.com/udondan/ssh-reconnect/
答案 1 :(得分:0)
目前没有解决方案。也许你可以添加一个剧本来下载模块到你的项目,以避免npm,但这甚至不是那么好。
我的自定义模块位于我的剧本旁边的目录中。该目录在我的全局ansible.cfg文件中定义:
library = /usr/share/ansible
这里唯一的方法是我总是在所有的playbbok上使用相同版本的模块。