有没有办法可以从custom written module内访问主机/组变量?我想避免将所有必需的变量作为模块参数传递。
我的模块是用Python编写的,我使用样板文件。我检查了几乎所有可用的变量,但它们没有存储在任何地方:
def main():
pprint(dir())
pprint(globals())
pprint(locals())
for name in vars().keys():
print(name)
现在我唯一的希望是通过未记录的模块utils以某种方式访问它们。
我想这是不可能的,因为模块在目标机器上运行,并且事实/主机/组变量可能不会与模块一起传输......
编辑:现在找到了module utils,看起来并不乐观。
答案 0 :(得分:5)
有没有办法可以从自定义中访问主机/组变量 书面模块?
不是内置的。
你必须自己以某种方式传递它们:
pickle
或yaml.dump()
或json
或...)并发送文件。不幸的是,您不能直接发送整个host / groupvar文件,因为您必须实现未定义的ansible的变量范围/优先级解析算法(它不是{ {3}}定义这样的小事:P)。
答案 1 :(得分:1)
我认为你的思想在这里几乎击不了头:
我想这是不可能的,因为模块在目标机器上运行,并且事实/主机/组变量可能不会与模块一起传输......
然而,话虽如此,如果你真的需要这个,那么可能会有一种稍微混乱的方式。从Ansible 1.8开始,您可以设置fact caching,它使用redis在播放游戏之间缓存事实。由于redis非常易于使用且具有clients for most popular programming languages,因此您可以让您的模块在redis服务器上查询您需要的任何事实。它并不是最干净的方式,但它可能会起作用。