如何在python中运行ansible模块

时间:2015-11-05 07:05:50

标签: python ansible ansible-playbook

这是我的代码: 我无法使用python运行ansible模块。 如何传递正在运行此命令的清单文件。我无法为我的库存运行它。 我还需要做点什么吗? 这是我的ansible命令:

ansible all -i /home/ubuntu/extra -m 'debug' -a 'var=hostvars' 

这是我的代码:

import json
import ansible.runner
import ansible.playbook
import ansible.inventory

hosts = ["10.12.11.101"]
example_inventory = ansible.inventory.Inventory(hosts)
pm = ansible.runner.Runner( module_name = 'debug', module_args = 'vars=hostvars', timeout = 5, inventory = example_inventory, subset = 'all')
out = pm.run()
print json.dumps(out, sort_keys=True, indent=4, separators=(',', ': '))

1 个答案:

答案 0 :(得分:3)

您可以将广告资源文件路径传递给ansible.runner.Runner()

要获得group-nameshost-names,您应该通过var=hostvars,而不是vars=hostvars

您的代码看起来像这样,

import json
import ansible.runner
import ansible.playbook
import ansible.inventory

example_inventory = ansible.inventory.Inventory('path/to/your/inventory')
pm = ansible.runner.Runner( module_name = 'debug', module_args = 'var=hostvars', timeout = 5, inventory = example_inventory, subset = 'all')
out = pm.run()
print json.dumps(out, sort_keys=True, indent=4, separators=(',', ': '))

和你的输出

{'contacted': {'ip-address': {'invocation': {'module_args': u'var=hostvars',
    'module_complex_args': {},
    'module_name': 'debug'},
   'var': {u'hostvars': {'group_names': ['group1', 'group2', 'group3'],
     'groups': {'group1': ['ip-address'],
      'all': ['ip-address'],
      'group2': ['ip-address'],
      'group3': ['ip-address'],
      'ungrouped': []},
     'inventory_hostname': 'ip/hostname',
     'inventory_hostname_short': 'hostname-short'}},
   'verbose_always': True}},
 'dark': {}}