Ansible 的Python API使用起來相當簡單快捷,使用API可以將某些運維操作封裝成一個帶有WEB界面的操作,免去了每次執行某個操作的時候都需要SSH運行Ansible命令。
官方給出的一個簡單示例:
import ansible.runner runner = ansible.runner.Runner( module_name='ping', module_args='', pattern='web*', forks=10 ) datastructure = runner.run()
run()方法會返回執行的結果。返回的數據是一個JSON格式的:
{ "dark" : { "web1.example.com" : "failure message" }, "contacted" : { "web2.example.com" : 1 } }
Ansible的API使用起來就這麼方便,先是導入ansible,然後直接調用相應的模塊,賦值相應的模塊參數即可。
[root@web1 ~]# cat an.py #!/usr/bin/env python import ansible.runner runner = ansible.runner.Runner( module_name='ping',#調用的模塊 module_args='',#模塊參數 pattern='webservers',#主機組,可以是正則表達式如web* forks=10 ) data = runner.run() print data [root@web1 ~]# python an.py {'dark': {}, 'contacted': {'192.168.1.65': {'invocation': {'module_name': 'ping', 'module_args': ''}, u'changed': False, u'ping': u'pong'}}}
默認使用的主機資源文件位置爲/etc/ansible/hosts,也可以指定host_list參數,來指定一個inventory文件的路徑,也可以指定一個動態的inventory腳本。dark裏面是執行失敗的主機列表,contacted是執行操作成功的主機列表。
但是並不是所有的模塊都可以通過API調用的,如template模塊,在ansible1.9或之前的版本中,就無法通過Python API調用。