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調用。