色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

如何使用Ansible2的API做python開發?

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

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

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