2015-11-05 30 views
0

這裏是我的代碼: 我不能使用python運行一個可靠的模塊。 如何傳遞爲其運行此命令的庫存文件。我無法爲我的廣告資源運行它。 我需要做點別的嗎? 這裏是我的ansible命令:如何在Python中運行可靠的模塊

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=(',', ': ')) 
+0

你是什麼意思的,你是不是能夠運行它爲您的庫存?發生了什麼錯誤?你有沒有嘗試將庫存文件傳遞給'ansible.inventory.Inventory'? – frank

+0

其python導入錯誤,你是如何安裝ansible? – frank

+0

然後,將問題與您的問題一起發佈,這是在SO中提問的方式。 – frank

回答

2

可以將清單文件的路徑傳遞到ansible.runner.Runner()

而對於越來越group-nameshost-names,你應該通過var=hostvars ,而不是vars=hostvars

您的代碼將lo確定這樣的,

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': {}} 
+0

你說得對。我做錯的一件事是使用變量代替var。 – kohi

相關問題