2016-01-21 55 views
3

我有一本剧本和一堆我写的模块。使用从git仓库的可靠模块?

现在我想在我的下一个剧本中为不同的项目重复使用相同的模块。

我真的想将这些模块推送到公共git存储库,然后以某种方式告诉可以使用git存储库中的模块。

(有点像故宫的package.json引用github上)

我似乎无法找到如何做到这一点的任何文档。

现在,我正在使用一种解决方法,告诉人们npm安装存储库,然后定义ANSIBLE_LIBRARY变量。

如何告诉playbook从github存储库或其他远程位置加载模块?

+0

这是一个非常好的问题,我认为这是Ansible银河只允许角色的共享,而不是提供一种方式来共享模块可怕的限制。 – udondan

+0

与此同时,我认为我们的模块可以嵌套在角色中,因为Ansible 2甚至可以使用插件。 – udondan

回答

0

目前没有解决方案。也许你可以添加一个手册来下载模块到你的项目中以避免npm,但那不是那么好。

我有我的自定义模块在我的剧本旁边的目录中。此目录将在我的全球ansible.cfg文件中定义:

library = /usr/share/ansible 

这里唯一的drawbag是我永诺对所有playbboks模块的版本相同。

+0

其实这是可能的。这只是没有记录。看到我的答案。低于上述。 :) – udondan

1

实际上,模块可以嵌套在角色中相当长的时间。由于Ansible 2,即使大部分插件都可以使用。

需要存储在角色内的modules & plugins的文件夹与playbook级别相同。模块进入library,插件进入*_pluginsaction_pluginscallback_pluginsfilter_plugins等)

为了使模块/插件,则可用的角色已被应用到PlayBook(或添加其他角色依赖)

只有我所知道的例外是可变插件,这是完全合理的。由于在读取库存时会执行可变插件,这是在解释角色之前发生的。

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/