运维日常

将ansibnle官方模板定义成函数

2019-11-15  本文已影响0人  大白菜的猪猪

将上一篇文章中的ansible官方文档模块定义成函数形式,并实现调用

官方文档解析


源代码


import json

import shutil

from collectionsimport namedtuple

from ansible.parsing.dataloaderimport DataLoader

from ansible.vars.managerimport VariableManager

from ansible.inventory.managerimport InventoryManager

from ansible.playbook.playimport Play

from ansible.executor.task_queue_managerimport TaskQueueManager

from ansible.plugins.callbackimport CallbackBase

import ansible.constantsas C

def adhoc(sources,hosts,module,args):

Options = namedtuple('Options', ['connection','module_path','forks','become','become_method','become_user','check','diff'])

options = Options(connection='local',module_path=['/to/mymodules'],forks=10,become=None,become_method=None,become_user=None,check=False,diff=False)

loader = DataLoader()

passwords =dict(vault_pass='secret')

inventory = InventoryManager(loader=loader,sources=['myansible/hosts'])

variable_manager = VariableManager(loader=loader,inventory=inventory)

play_source =dict(

name ="Ansible Play",

#在哪些主机上执行任务

            hosts ='webservers',

#是否收集主机信息

            gather_facts ='no',

tasks = [

dict(action=dict(module='shell',args='ls'),register='shell_out'),

dict(action=dict(module='debug',args=dict(msg='{{shell_out.stdout}}')))

]

)

play = Play().load(play_source,variable_manager=variable_manager,loader=loader)

tqm =None

    try:

tqm = TaskQueueManager(

inventory=inventory,

variable_manager=variable_manager,

loader=loader,

options=options,

passwords=passwords,

)

result = tqm.run(play)

finally:

if tqmis not None:

tqm.cleanup()

shutil.rmtree(C.DEFAULT_LOCAL_TMP,True)

if __name__ =='__main__':

adhoc(sources=['myansible/hosts'],hosts='webservers',module='shell',args='id root')


函数调用结果


python3 adhoc2.py

PLAY [Ansible Play] ************************************************************

TASK [shell] *******************************************************************

changed: [node6]

changed: [node5]

TASK [debug] *******************************************************************

ok: [node5] => {

    "msg": "adhoc2.py\nadhoc.py\nmyansible\nyuanzu.py"

}

ok: [node6] => {

    "msg": "adhoc2.py\nadhoc.py\nmyansible\nyuanzu.py"

}


将hosts改为dbservers

更改点:

hosts = 'dbservers',


if __name__ == '__main__':

    adhoc(sources=['myansible/hosts'],hosts='dbservers',module='shell', args='id root')


python3 adhoc2.py

PLAY [Ansible Play] ************************************************************

TASK [shell] *******************************************************************

changed: [node4]

TASK [debug] *******************************************************************

ok: [node4] => {

    "msg": "adhoc2.py\nadhoc.py\nmyansible\nyuanzu.py"

}


以后调用只需要改主机组和对应的模块即可!!!

上一篇 下一篇

猜你喜欢

热点阅读