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

有没有办法通过自定义书写模块访问主机/组变量? 我想避免将所有必需的变量作为模块参数传递。

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

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

现在我唯一的希望就是它们可以通过未公开的模块应用来访问。

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

编辑:现在找到模块实用程序,它看起来没有前途。


我认为你在这里用你的想法几乎击倒了你的头脑:

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

然而,话虽如此,如果你真的需要这样做,那么可能会有一点点混乱的做法。 从Ansible 1.8开始,您可以设置事实缓存,它使用redis来缓存游戏之间的事实。 由于redis非常易于使用,并且拥有大多数常用编程语言的客户端,因此您可以让您的模块在redis服务器上查询您需要的任何事实。 这不完全是最干净的方式,但它可能工作。


有没有办法通过自定义书写模块访问主机/组变量?

不是内置的。

你将不得不以某种方式通过他们:

  • 模块参数。
  • 序列化到本地文件系统(使用pickleyaml.dump()json或...)并发送文件。
  • 任何其他创新想法,你可以想出。
  • 不幸的是,你不能直接发送完整的host / groupvar文件,因为你必须实现变量范围/优先级解析算法,这个算法是不确定的(这不是禅定哲学中可以定义这种小东西的哲学: P)。

    链接地址: http://www.djcxy.com/p/84095.html

    上一篇: Ansible: Access host/group vars from within custom module

    下一篇: Spark streaming DStream RDD to get file name