将上一篇文章中的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"
}
以后调用只需要改主机组和对应的模块即可!!!
网友评论