Python API¶
Topics
本章將展示幾種有趣的Ansible API呼叫方式.你可以使用Ansible的Python API來管理節點,可以通過擴充套件Ansible來響應大量的Python事件,你可以寫各種的外掛,並且,你可以通過外掛來調取外部資料來源.本文主要向讀者簡單介紹一下 Runner 和 Playbook 的API.
如果你想使用除Python的其他方法呼叫Ansible,使用其非同步回撥事件,或者訪問控制,日誌管理,可以訪問 Ansible Tower,它提供了非常豐富的 REST API.
此外,Ansible本身也是基於他本身的API來實現的,所以你將擁有足夠的許可權來進行二次封裝.本章將討論Python API的使用.
Python API¶
Ansible的Python API 功能十分強大,它造就了ansible CLI和ansible-playbook.
以下是一個簡單呼叫的例子:
import ansible.runner
runner = ansible.runner.Runner(
module_name='ping',
module_args='',
pattern='web*',
forks=10
)
datastructure = runner.run()
該方法將返回每個host主機是否可以被ping通.返回類型詳情請參閱 模組相關.:
{
"dark" : {
"web1.example.com" : "failure message"
},
"contacted" : {
"web2.example.com" : 1
}
}
每個模型均可以返回任意JSON格式資料,所以Ansible可以作為一個框架被封裝在各種應用程式和指令碼之中.
更具體的例子¶
以下的指令碼將打印出所有機器的執行時間和系統負載資訊:
#!/usr/bin/python
import ansible.runner
import sys
# 構造ansible runner 並且開啟10個執行緒向遠端主機執行uptime命令
results = ansible.runner.Runner(
pattern='*', forks=10,
module_name='command', module_args='/usr/bin/uptime',
).run()
if results is None:
print "No hosts found"
sys.exit(1)
print "UP ***********"
for (hostname, result) in results['contacted'].items():
if not 'failed' in result:
print "%s >>> %s" % (hostname, result['stdout'])
print "FAILED *******"
for (hostname, result) in results['contacted'].items():
if 'failed' in result:
print "%s >>> %s" % (hostname, result['msg'])
print "DOWN *********"
for (hostname, result) in results['dark'].items():
print "%s >>> %s" % (hostname, result)
高階的開發人員可能會去閱讀ansible的源碼,但使用 Runner() API (使用它能提供的選項)可以增強命令列執行 ansible
和 ansible-playbook
的功能.
See also
- 開發動態的Inventory資料來源
- Developing dynamic inventory integrations
- Developing Modules
- How to develop modules
- Developing Plugins
- How to develop plugins
- Development Mailing List
- Mailing list for development topics
- irc.freenode.net
- #ansible IRC chat channel