欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何使用Ansible2的API做python開發(fā)?

錢良釵2年前14瀏覽0評論

Ansible和SaltStack都提供了Python直接調(diào)用的API,這方便了Pythoner對這些軟件進(jìn)行二次開發(fā)和整合,此功能著實(shí)方便了不少,比起Python代碼中調(diào)用shell也略顯專業(yè)!

然而Ansible在2.0版本后重構(gòu)了大部分的代碼邏輯,啟用了2.0版本之前的Runner和Playbook類,使得廣大同學(xué)之前的代碼運(yùn)行錯誤.擇日不如撞日,今天中午對照官方的文檔,結(jié)合源代碼,對2.0版本之后的PythonAPI做了下探究

Adhoc

adhoc其實(shí)就是執(zhí)行Ansible模塊,通過adhoc我們可以方便快捷的完成一些臨時的運(yùn)維操作.

2.0之前的調(diào)用

importansible.runner

importjson

runner=ansible.runner.Runner(

module_name='ping',#模塊名

module_args='',#模塊參數(shù)

pattern='all',#目標(biāo)機(jī)器的pattern

forks=10

)

datastructure=runner.run()

data=json.dumps(datastructure,indent=4)

當(dāng)然這里會去加載默認(rèn)的inventory

如果不想使用inventory文件或者想使用動態(tài)的inventory,則可以使用host_list參數(shù)代替

importansible.runner

importjson

runner=ansible.runner.Runner(

host_list=["10.10.0.1"],#這里如果明確指定主機(jī)需要傳遞一個列表,或者指定動態(tài)inventory腳本

module_name='ping',#模塊名

module_args='',#模塊參數(shù)

extra_vars={"ansible_ssh_user":"root","ansible_ssh_pass":"xx"},

forks=10

)

datastructure=runner.run()

data=json.dumps(datastructure,indent=4)

2.0之后的調(diào)用

importjson

fromansible.parsing.dataloaderimportDataLoader

fromansible.varsimportVariableManager

fromansible.inventoryimportInventory

fromansible.playbook.playimportPlay

fromansible.executor.task_queue_managerimportTaskQueueManager

fromansible.executor.playbook_executorimportPlaybookExecutor

loader=DataLoader()#用來加載解析yaml文件或JSON內(nèi)容,并且支持vault的解密

variable_manager=VariableManager()#管理變量的類,包括主機(jī),組,擴(kuò)展等變量,之前版本是在inventory中的

inventory=Inventory(loader=loader,variable_manager=variable_manager)

variable_manager.set_inventory(inventory)#根據(jù)inventory加載對應(yīng)變量

classOptions(object):

'''

這是一個公共的類,因?yàn)閍d-hoc和playbook都需要一個options參數(shù)

并且所需要擁有不同的屬性,但是大部分屬性都可以返回None或False

因此用這樣的一個類來省去初始化大一堆的空值的屬性