Ansible:从自定义模块中访问主机/组变量

时间:2015-03-13 06:24:52

标签: python ansible ansible-playbook

有没有办法可以从custom written module内访问主机/组变量?我想避免将所有必需的变量作为模块参数传递。

我的模块是用Python编写的,我使用样板文件。我检查了几乎所有可用的变量,但它们没有存储在任何地方:

def main():
    pprint(dir())
    pprint(globals())
    pprint(locals())
    for name in vars().keys():
        print(name)

现在我唯一的希望是通过未记录的模块utils以某种方式访问​​它们。

我想这是不可能的,因为模块在目标机器上运行,并且事实/主机/组变量可能不会与模块一起传输......

编辑:现在找到了module utils,看起来并不乐观。

2 个答案:

答案 0 :(得分:5)

  

有没有办法可以从自定义中访问主机/组变量   书面模块?

不是内置的。

你必须自己以某种方式传递它们:

  • 模块参数。
  • 序列化到本地文件系统(使用pickleyaml.dump()json或...)并发送文件。
  • 您可以提出的任何其他创新想法。

不幸的是,您不能直接发送整个host / groupvar文件,因为您必须实现未定义的ansible的变量范围/优先级解析算法(它不是{ {3}}定义这样的小事:P)。

答案 1 :(得分:1)

我认为你的思想在这里几乎击不了头:

  

我想这是不可能的,因为模块在目标机器上运行,并且事实/主机/组变量可能不会与模块一起传输......

然而,话虽如此,如果你真的需要这个,那么可能会有一种稍微混乱的方式。从Ansible 1.8开始,您可以设置fact caching,它使用redis在播放游戏之间缓存事实。由于redis非常易于使用且具有clients for most popular programming languages,因此您可以让您的模块在redis服务器上查询您需要的任何事实。它并不是最干净的方式,但它可能会起作用。