9

我正在开发一个 Ansible 模块,它生成一个 url,从我的内部工件中获取(如 get_url)该 url 处的 tarball,然后提取它。我想知道是否有办法在我的模块中包含或扩展 get_url Ansible 核心模块。我不能在多个步骤中使用它,因为正在使用的 url 是从 git 哈希生成的,并且需要多步骤搜索。

如果没有办法,我可能会复制整个 get_url 模块并在我的模块中使用它,但我想避免这种情况。

我想做类似的事情:

module_json_response = module.get_module('get_url').issue_command('url=http://myartifactory.com/my_artifact.tar.gz dest=/path/to/local/my_artifact.tar.gz');

我对 Ansible 的理解是它上传正在使用的模块并执行它,包括另一个模块不受支持或没有记录。

提前感谢您的帮助。

4

1 回答 1

9

在这里引用 Michael DeHaan 的帖子:

一般来说,Ansible 允许通过“lib/ansible/module_common.py”共享代码,以使编写功能更容易。

然而,它并不能让一个模块调用另一个模块,迄今为止,它还没有真正需要——这并不完全正确,我们曾经有这样的东西用于文件和复制,直到我们变得聪明和移动文件属性代码变成通用的:)

似乎由于 url 访问足够频繁,我们可以在模块 common 中为 url 下载创建一个通用函数——如果我们修改 get_url 代码以也使用它,这样我们就不会重复自己。

他后来跟进:

您可以通过编写动作插件来访问模板的工作方式,但它比编写简单的客户端模块更复杂。

+1 将 get_url 代码移入通用,这已经出现了几次。

于 2013-04-09T13:36:22.903 回答