Ansible和SaltStack都提供了Python直接調用的API,這方便了Pythoner對這些軟件進行二次開發和整合,此功能著實方便了不少,比起Python代碼中調用shell也略顯專業!
然而Ansible在2.0版本后重構了大部分的代碼邏輯,啟用了2.0版本之前的Runner和Playbook類,使得廣大同學之前的代碼運行錯誤.擇日不如撞日,今天中午對照官方的文檔,結合源代碼,對2.0版本之后的PythonAPI做了下探究
Adhoc
adhoc其實就是執行Ansible模塊,通過adhoc我們可以方便快捷的完成一些臨時的運維操作.
2.0之前的調用
importansible.runner
importjson
runner=ansible.runner.Runner(
module_name='ping',#模塊名
module_args='',#模塊參數
pattern='all',#目標機器的pattern
forks=10
)
datastructure=runner.run()
data=json.dumps(datastructure,indent=4)
當然這里會去加載默認的inventory
如果不想使用inventory文件或者想使用動態的inventory,則可以使用host_list參數代替
importansible.runner
importjson
runner=ansible.runner.Runner(
host_list=["10.10.0.1"],#這里如果明確指定主機需要傳遞一個列表,或者指定動態inventory腳本
module_name='ping',#模塊名
module_args='',#模塊參數
extra_vars={"ansible_ssh_user":"root","ansible_ssh_pass":"xx"},
forks=10
)
datastructure=runner.run()
data=json.dumps(datastructure,indent=4)
2.0之后的調用
importjson
fromansible.parsing.dataloaderimportDataLoader
fromansible.varsimportVariableManager
fromansible.inventoryimportInventory
fromansible.playbook.playimportPlay
fromansible.executor.task_queue_managerimportTaskQueueManager
fromansible.executor.playbook_executorimportPlaybookExecutor
loader=DataLoader()#用來加載解析yaml文件或JSON內容,并且支持vault的解密
variable_manager=VariableManager()#管理變量的類,包括主機,組,擴展等變量,之前版本是在inventory中的
inventory=Inventory(loader=loader,variable_manager=variable_manager)
variable_manager.set_inventory(inventory)#根據inventory加載對應變量
classOptions(object):
'''
這是一個公共的類,因為ad-hoc和playbook都需要一個options參數
并且所需要擁有不同的屬性,但是大部分屬性都可以返回None或False
因此用這樣的一個類來省去初始化大一堆的空值的屬性